你把”28 岁女性,齐肩深色头发,棕色眼睛,小鼻子,淡雀斑”翻来覆去写了十种版本,跑了十次——出来十个不同的女人。同样 Prompt、同样模型,每次人脸都不一样。
光靠文字描述不出”独一无二的某个人”。符合那段描述的女性有几百万。要锁住身份,必须有视觉锚(参考图 / LoRA / 角色 embedding)加上确定性设置(固定 seed + 同模型 + 同 sampler)。
常见原因
按命中率从高到低:
1. 纯文字描述带宽太低
30 字描述对应几十亿张可能的脸。模型挑一张大致符合的,其他特征(下颌形、眼距、嘴宽、耳朵位置)按 seed 随机。
如何判断:Prompt 里只有文字,没有参考图 / LoRA / --cref / IP-Adapter——身份必漂。
2. 每次 seed 不同
不锁 seed,每次从不同噪声开始;即使 Prompt 一样,不同噪声画出不同脸。Seed 是单一最大变量。
如何判断:工具 UI 里 seed 是 “random”、“−1” 或 “auto”。
3. 模型 / 版本 / sampler 变了
从 SDXL 换到 Flux,或从 DPM++ 2M Karras 换到 Euler a,同 seed 同 Prompt 也会出不同脸。多数跨会话的身份漂都能追溯到工具悄悄升级了模型或 sampler 默认值。
如何判断:同 seed 同 Prompt 出不同脸——查工具是不是后台升级了模型或 sampler。
4. 描述全是形容词,没有识别点
brown eyes, dark hair, small nose 描述了 30% 的人类。single mole below right eye, slightly crooked front tooth, narrow chin, gold septum ring 描述了一个特定的人。识别点越独特,身份越锁。
如何判断:把描述读回去,问自己”这描述的是某一个人,还是一类人?“
5. 没用 LoRA / embedding 来支撑高频复用
如果一个角色在项目里要出现 50 次以上,手动调每张是不现实的。这时候必须练一个 LoRA 或 embedding——15-30 张该角色图就够。
如何判断:你在做漫画 / 系列 / 绘本,角色要跨多图保持一致。
最短修复路径
按效用从高到低,前两步就够解决 80% 场景。
Step 1:先生成一张”角色基准图”
跑或挑一张你满意的角色图,作为后续所有生成的锚。
基准图要点:
- 正面 / 三分之一侧脸、中性表情、半身
- 背景越素越好(让脸特征主导 embedding)
- 独特识别点要清晰(疤、发型、饰品)
- 分辨率 1024×1024 以上
Step 2:把基准图喂给每次生成
各平台的接入方式:
# Midjourney v6+
"a [character] sitting on a bench, [scene]" --cref [基准图 URL] --cw 100
# Stable Diffusion / SDXL via Forge / ComfyUI
- 加载 IP-Adapter Plus Face
- 把基准图接到 IP-Adapter
- 权重 0.8-1.0 锁身份;想软影响就调低
# Flux dev
- 用 Flux Redux 或 PuLID-Flux
- 参考强度 0.7-0.85
# DALL-E / Bing
- 不支持参考图——只能用 ChatGPT canvas 记忆,或
纯文字 + 强识别点(仅 workaround)
Step 3:会话内锁 seed
同一会话里给角色出多张姿势:
- Midjourney:每个 Prompt 都加
--seed 12345 - SDXL / Flux UI:seed 设固定整数,别留
-1 - ComfyUI:固定 KSampler 的 seed,取消 “randomize”
注意:只锁 seed 不能跨 Prompt 锁身份——但能稳定噪声,让每次改动带来的身份漂移变小。
Step 4:描述里堆识别点
差描述(太泛):
"28-year-old woman with shoulder-length dark hair, brown eyes, small nose, light freckles"
好描述(锁身份):
"28-year-old woman, asymmetric chin-length bob with hair tucked behind left ear,
sharp jawline, single small mole below right eye, narrow nose with slight bump,
warm brown eyes with green flecks, three small ear piercings on the upper left ear"
每个独特识别点把”匹配脸”的空间缩小一个数量级。三四个识别点通常足以让人一眼认出是同一个角色。
Step 5:生产级用 LoRA
如果一个角色要跨多图 / 场景 / 会话出现:
# 快速食谱(Kohya / SimpleTuner)
1. 跑 15-30 张该角色(不同姿势、表情、服饰)
2. 给每张写 caption,含独有触发词如 "sks_alice"
3. 训练 LoRA:1500-3000 步,learning rate 1e-4,batch 1
4. 推理时加载 LoRA,Prompt 里加触发词
不想本地搭环境的,用 Civitai、Replicate、Astria 的一键训练服务。
Step 6:用 ChatGPT/DALL-E 的会话内复用机制
DALL-E(ChatGPT)里先生成一张,下一轮说”用同一个角色”。模型记忆有限,但同会话里可以大致保留身份特征。
预防建议
- 任何角色项目,先生成一张基准图存档
- 给每个角色建一份”规格文件”:模型 / sampler / seed / 参考图 URL / 触发词(如有 LoRA)/ 识别点列表
- 项目里同一角色超过 30 张图,前期投入训 LoRA 划算
- 所有生成图按角色分文件夹归档,永远有备份参考