你把同一段人物描述(28-year-old woman with shoulder-length dark hair, brown eyes, small nose, light freckles)翻来覆去写了十种版本,跑了十次——出来十个不同的女人,没一个是同一个人。同样 Prompt、同样模型,每次脸都不一样。
最快的修法: 光靠文字描述不出”独一无二的某个人”。先挑一张你满意的图当参考,然后通过工具的身份功能把它喂给每一次生成(Midjourney --oref、ChatGPT/gpt-image-2 上传图、Gemini Nano Banana Pro,或 ComfyUI 里的 IP-Adapter FaceID),再固定 seed。光这一步就能解决绝大多数情况。如果一个角色要贯穿整个项目反复出现,那就训一个 LoRA。
先判断你属于哪种情况
| 症状 | 最可能的原因 | 跳到 |
|---|---|---|
| 纯文字 Prompt,没附任何参考图 | 描述带宽太低 | 原因 1 + Step 1-2 |
| 附了参考图但脸还是漂 | seed 随机,或参考权重太低 | 原因 2 + Step 3 |
| 昨天还稳,今天就崩了 | 工具悄悄换了默认模型/版本 | 原因 3 |
| 脸”接近”但从来不完全一样 | 描述写的是品类,不是识别点 | 原因 4 + Step 4 |
| 角色在项目里要出现 30 次以上 | 需要 LoRA / embedding,不是逐张手调 | 原因 5 + Step 5 |
常见原因
按命中率从高到低。
1. 纯文字描述带宽太低
30 字描述对应几十亿张可能的脸。模型挑一张大致符合的,其他特征(下颌形、眼距、嘴宽、耳朵位置)按 seed 随机。
如何判断: Prompt 里只有文字,没有参考图、LoRA、--oref 或 IP-Adapter——身份必漂。
2. 每次 seed 不同
不锁 seed,每次都从不同噪声开始;即使 Prompt 一样,不同噪声画出不同脸。Seed 是单一最大变量。
如何判断: 工具 UI 里 seed 是 random、-1 或 auto。
3. 模型 / 版本 / sampler 变了
从 SDXL 换到 Flux,或从 DPM++ 2M Karras 换到 Euler a,同 seed 同 Prompt 也会出不同脸。多数跨会话的身份漂都能追溯到工具悄悄升级了默认值。这一点眼下尤其要命:Midjourney 在 2026 年 6 月 11 日把 V8.1 设为默认模型,所以你存下来的 V6/V7 --cref 工作流现在行为会变。ChatGPT 在 2026 年 5 月 12 日下线了 DALL-E 3,换成 gpt-image-2(ChatGPT Images 2.0),所以老的 DALL-E 角色技巧也不再适用。
如何判断: 同 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 张该角色的图就够。
如何判断: 你在做漫画 / 系列 / 绘本,角色要跨多图保持一致。
最短修复路径
按效用从高到低。前两步就能解决大多数场景。
Step 1:先定一张”角色基准图”
跑或挑一张你满意的角色图,作为后续所有生成的锚——也就是”角色设定图(model sheet)”。
基准图要点:
- 正面 / 三分之一侧脸、中性表情、半身
- 背景越素越好(让脸的特征主导身份信号)
- 独特识别点要清晰(疤、发型、饰品)
- 分辨率 1024x1024 以上
Step 2:把基准图喂给每一次生成
各平台机制不同,以下截至 2026 年 6 月有效:
# Midjourney(V7 / V8.1,自 2026-06-11 起为默认)
"a [character] sitting on a bench, [scene] --oref [基准图 URL] --ow 100"
# --ow(omni weight,参考权重)范围 0-1000,默认 100;100-300 = 非常接近。
# Omni Reference 跑在 V7 上;若 V8.1 不认 --oref,在改进版 V8 训练完成前
# 先强制 --v 7 --oref。旧的 --cref/--cw 现在只属于 V6。
# ChatGPT / gpt-image-2(DALL-E 3 已于 2026-05-12 下线)
- 在对话里上传基准图,然后 Prompt 写 "use this exact character"。
- 打开 Thinking 模式(Plus/Pro/Business)可一次出最多 8 张,
整组人物保持一致。
# Google Gemini(Nano Banana Pro / Gemini 3 Pro Image)
- 附上基准图,再写新场景。一个流程里可保持最多 5 个人物的相似度,
并融合最多 14 张参考图。
# Stable Diffusion / SDXL / Flux(ComfyUI 或 Forge)
- 锁身份最强:IP-Adapter FaceID-V2、InstantID 或 PuLID(都基于 InsightFace
人脸 embedding)。InstantID 最准但最吃资源。
- 普通 IP-Adapter Plus Face 适合软影响;权重 0.8-1.0 强锁身份,调低则软。
Step 3:会话内锁 seed
同一会话里给角色出多张姿势时:
- Midjourney: 每个 Prompt 都加
--seed 12345 - SDXL / Flux UI: seed 设成固定整数,别留
-1 - ComfyUI: 固定 KSampler 的 seed,把 control_after_generate 设为
fixed(而不是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_ss / SimpleTuner)
1. 跑 15-30 张该角色图(不同姿势、表情、服饰)
2. 给每张写 caption,含一个罕见的独有触发词,如 "sks_alice"
3. 训练:1500-3000 步,learning rate 1e-4,batch 1(SDXL/Flux)
4. 推理时加载 LoRA,Prompt 里加上触发词
不想本地搭环境?Civitai、Replicate、Astria 都有托管的一键 LoRA 训练。要预留按算力计费的成本;价格随时在变,跑大批量前先确认当前费率。
Step 6:在同一个 ChatGPT/Gemini 会话里复用角色
想快速做分镜、又不想训 LoRA:在 ChatGPT(gpt-image-2)里先生成一张角色,后续轮次在同一个对话里说”same character, new scene”。Gemini 的 Nano Banana Pro 在这方面更稳、能同时处理更多角色。记忆是有限的,所以身份在单个对话里保持得最好,换新对话就难说了。
如何确认已经修好
- 让角色在不同姿势或场景下各出一张(不是同一 Prompt 重 roll),共三张。
- 裁到脸部,把三张并排放。
- 对照固定识别点:痣的位置一样吗?鼻梁的小起伏一样吗?耳洞数量一样吗?三张里有两张在每个识别点上都对得上,说明设置锁住了。如果只有一张对得上,就调高参考权重(
--ow、IP-Adapter weight),或按 Step 4 多加识别点。
预防建议
- 任何角色项目都先生成并存一张基准图。
- 给每个角色建一份”规格文件”:模型、版本、sampler、seed、参考图 URL、触发词(如有 LoRA)、识别点清单。
- 项目里同一角色超过 30 张图,前期投入训 LoRA 划算。
- 所有生成图按角色分文件夹归档,永远有备份参考。
- 工具每次更新后都复查一下默认模型(见原因 3);版本悄悄跳变是”我啥都没改它就崩了”最常见的原因。
常见问题
为什么 Prompt 一模一样,脸还会变?
随机 seed(-1 / auto)让每次都从不同噪声开始,脸就会变。先固定 seed(Step 3)。如果跨会话还在漂,多半是工具自动升级了默认模型或版本(原因 3)。
2026 年 DALL-E 还能做角色一致性吗? DALL-E 3 已于 2026 年 5 月 12 日下线。ChatGPT 现在用的是 gpt-image-2(ChatGPT Images 2.0),它在这方面更强:上传参考图、打开 Thinking 模式,一次 Prompt 就能出最多 8 张一致的图。
Midjourney 的 --cref 为什么不灵了?
--cref 是 V6 时代的角色参数。现在的方法是 Omni Reference:--oref [URL] --ow [0-1000]。它跑在 V7 上;若 V8.1 不认,就在改进版 V8 训练完成前先强制 --v 7 --oref。
参考图 vs LoRA,该用哪个?
参考图(--oref、IP-Adapter FaceID、gpt-image-2 上传)即开即用,适合少量几张。LoRA 需要 15-30 张训练图加一次训练,但能在成百上千张生成里给出最强、最可复现的身份。零散需求用参考图,生产用 LoRA。
单个反复出现的人物,哪个工具最准? 本地控制:ComfyUI 里的 InstantID 或 PuLID(都基于 InsightFace)能达到很高的人脸准确度。零搭建:截至 2026 年 6 月,Gemini Nano Banana Pro 和带参考图上传的 gpt-image-2 是最强的托管选项。