同一个名字 → 永远同一个头像 · seeded 确定性随机 + SVG 分层拼装 · 8 种头像风格可复现
从 Kimi 官方 CDN(kimi-img.moonshot.cn/pub/okc-agent/)下载的原版头像,280×280 的 1-bit 像素 PNG。输入名字会确定性命中其中一款。
发型 × 眉 × 眼 × 鼻 × 嘴 × 胡子 × 眼镜 × 肤色 × 服饰 × 背景色,用 seeded PRNG 逐层抽件拼成 SVG(即截图那种 notionists 风格)。点开任意头像可查看、复制、下载 SVG。
纯黑像素 + 白底 + 浅灰细圆环,没有任何彩色填充——脸完全由黑色轮廓线和发型剪影定义(复古 Susan Kare 式肖像)。24×24 网格,能画出鼻子、胡茬、领子这类细节。
种子决定配色与图形的形状、位置、旋转,抽象但辨识度强(Boring Avatars 的思路)。
低饱和马卡龙配色与圆形像素肖像。使用名字作为种子,同一名字始终生成同一张头像,全部本地生成并可下载 SVG。
使用黑白 1-bit 人像与低饱和彩色背景的方形头像。可按性别筛选,同一名字在指定性别下会稳定命中同一款。
粗黑抖动墨线 + 白皮肤 + 粉彩圆角底,黑边卡片带倾斜与投影(拍立得感觉)。feTurbulence 置换滤镜模拟手绘抖动,全确定性生成,不包含文字。
使用本地化的 Notion Avatar 分层素材,名字确定性选择发型与五官;同一名字始终得到同一张头像,不依赖外部服务。
// 1. 确定性随机:同一个 seed → 同一条随机序列
function mulberry32(seed) {
return function () {
seed |= 0; seed = (seed + 0x6D2B79F5) | 0;
let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
};
}
// 2. 用用户 ID 做种子,逐层抽取部件
const rand = mulberry32(hash(userId));
const hair = hairs[Math.floor(rand() * hairs.length)];
const eyes = eyeStyles[Math.floor(rand() * eyeStyles.length)];
const mouth = mouths[Math.floor(rand() * mouths.length)];
// ... 肤色 / 服饰 / 背景 / 配饰同理
// 3. 按固定图层顺序拼成一个 <svg>:
// 背景圆 → 后发 → 脖子 → 衣服 → 耳朵 → 脸 → 前发 → 五官 → 配饰
// 组合数 = 各层变体数相乘,本页手绘小人约 200 万种不重复