你生成一张人像,缩略图看着没问题,放大一看眼睛微妙地不对:一只比另一只高几个像素、两个虹膜方向不太一致、或者一只瞳孔明显更大。原因很直接:在 SDXL 默认 1024x1024 的半身像里,眼睛区域在 latent 空间里只有大约 50x30 像素,模型已经没有分辨率预算去把对称的五官锁死了。
最快的修法(对大多数人有效):在基础图出完之后跑两遍 ADetailer / FaceDetailer——第一遍用 face_yolov8n.pt、denoise 设 0.4,把整张脸在全分辨率下重建一次;第二遍只针对眼睛(用 mediapipe_face_mesh_eyes_only 或 Civitai 上的眼睛检测模型),并把 Mask merge mode 设成 Merge,这样两只眼睛会被一起重绘、保持一致。顺序很关键:先修脸,再在干净的脸里精修眼睛。
你属于哪一类?
| 症状 | 最可能的原因 | 跳到 |
|---|---|---|
| 脸在画面里很小、整张脸都糊 | 脸的 latent 分辨率太低 | 原因 1、Step 1 |
| 只有竖图 / 9:16 才出现眼睛漂移 | 非方形长宽比 | 原因 2、Step 5 预防 |
| 每张图眼睛都错、工作流里没有脸部节点 | 完全没有脸 / 眼睛 pass | 原因 3、Step 1-2 |
| 降低 LoRA 权重后眼睛就正常 | 风格 LoRA 把五官压歪了 | 原因 4 |
| 提高步数后眼睛改善 | 采样不足 | 原因 5 |
常见原因
按命中率从高到低。
1. 脸在 latent 空间里太小
SDXL 默认 1024x1024 渲染一张半身像时,眼睛区域大约只有 50x30 像素。模型是在那个分辨率下决定眼睛位置的,根本不可能把两个瞳孔放到亚像素级精确。
如何判断:放大看脸。如果脸在画面里占比不到 30% 左右,就属于”低分辨率脸”区间,眼睛漂移几乎是必然。
2. 竖图或非方形长宽比
SDXL 的原生分辨率是 1024x1024(约 105 万像素)。当你渲染 832x1216 或 9:16 时,脸被压进一条窄窄的竖条里,更容易歪、轻微倾斜、或者左右眼高度不一。
如何判断:相同 Prompt、相同 seed,切到 1024x1024 跑一次。如果方图眼睛对齐、竖图就跑偏,那就是长宽比的锅。
3. pipeline 里没有脸 / 眼睛 pass
ComfyUI / Automatic1111 / Forge 的默认文生图工作流不会专门跑一次脸。模型输出什么就是什么。没有专门的脸部细化步骤,眼睛不对齐是常态而不是例外。
如何判断:检查工作流。ComfyUI 里看有没有 FaceDetailer 节点(来自 Impact Pack);A1111 / Forge 里看 Prompt 下方的 ADetailer 面板有没有勾上。两个都没有,你就没有兜底。
4. 风格 LoRA 把五官比例压歪了
强风格 LoRA(尤其是动漫-写实混合或绘画风的 LoRA 在 1.0 及以上权重下)经常会扭曲五官比例。风格盖在基础解剖结构上,把眼睛位置带偏。
如何判断:相同 seed,把 LoRA 权重从 1.0 降到 0.6 重生成。如果眼睛自己修正了,就是 LoRA 过力。
5. 步数太少或采样器选得不对
Euler a、DPM++ 2M Karras 这类采样器一般要 25-35 步才能把精细解剖跑完。如果你用 turbo / lightning 采样器只跑 15 步,模型还没把五官细化完就停了。
如何判断:同 seed 把步数从 20 提到 35。如果眼睛改善,就是采样不够。
最短修复路径
Step 1:加一遍 face-detailer pass
A1111 / Forge 里展开 ADetailer 面板并勾上(这个扩展由 Bing-su 开发,没有的话去 Extensions 装一下);ComfyUI 里挂一个 ComfyUI-Impact-Pack 的 FaceDetailer 节点。第一个标签 / 第一遍参数:
ADetailer model: face_yolov8n.pt
Detection confidence: 0.3
Inpaint denoising: 0.4 (0.35-0.45 区间;默认 0.5 可能改掉人物身份)
Mask blur: 4
Inpaint width/height: 1024 (不是基础渲染尺寸)
Sampler steps: 20-25,采样器和基础一致
detailer 会先裁出脸、放大、在全分辨率下只重绘脸、再合成回去。眼睛区域这下拿到了完整的 latent 预算。在 ComfyUI 里,如果重绘的脸贴不回原图,调一下 bbox_crop_factor(试试 1.5)和 bbox_dilation,让蒙版更贴合检测到的区域。
Step 2:再加一遍只针对眼睛的 pass
整脸 pass 能修掉大部分情况,但顽固的瞳孔 / 虹膜不一致需要单独处理眼睛。ADetailer 里切到 2nd 标签加一个眼睛检测器;ComfyUI 里再串一个 FaceDetailer(或 DetailerForEach),用眼睛分割模型。
第二遍模型: mediapipe_face_mesh_eyes_only (ADetailer 自带)
或 Civitai 上的眼睛模型(如 "Eye Detailer/Segmentation"、
"Eyeful")来获得更紧的蒙版
Confidence: 0.35
Mask merge mode: Merge <-- 关键:把两只眼睛当成一个蒙版一起重绘
Inpaint denoising: 0.35-0.45
ADetailer 提示词: matching pupils, symmetric eyes, both eyes same size, sharp iris detail
Mask merge mode = Merge(在 ADetailer 的 Mask preprocessing 里)是保证两只眼睛一致的关键——不开它的话,每只眼睛会被独立重绘,可能又各走各的。这一遍只修眼睛的 pass,是针对”双眼不对齐”这个具体症状最高杠杆的一步。
Step 3:face-restore 兜底(CodeFormer / GFPGAN)
如果你加不了 detailer pass(比如只有 Extras / 放大流程),退一步用 face-restore 模型。注意权重方向——绝大多数人会搞反:
A1111 "CodeFormer weight (fidelity)" 滑块:
0 = 修复效果最强(最锐,但可能改掉身份、抹平皮肤)
1 = 效果最弱(最接近原图)
推荐:0.5-0.7 (越接近 1 越能保住质感 / 身份)
GFPGAN visibility: 0.5-0.8
注意:这就是命令行版 CodeFormer --fidelity_weight 参数里的同一个 w 值——w=0 是质量最高(修复最强,可能改掉身份)、w=1 是保真度最高(最接近原图)。A1111 直接把滑块值原样传给 CodeFormer,所以值越高,修得越温和、越忠实于原图。这俩模型是在对齐过的人脸数据集上训的,能修正眼睛对称和瞳孔大小,但修复时会顺带平滑皮肤——所以别把效果拉满。
Step 4:自动修不好时手动局部重绘
两遍都救不回来的图:
- 把图扔进 Automatic1111 / Forge 的 img2img → Inpaint
- 只蒙住眼睛区域,Mask blur 设 8
- Denoising strength 设 0.45
- Inpaint area 选 “Only masked”,Only masked padding 设 32
- Prompt 改成
symmetric eyes, matching pupils, both eyes same size, looking at camera, sharp iris detail - 一次生成 4 张挑最干净的一张
Step 5:生成时就预防
正向 Prompt 里加:
symmetric face, both eyes aligned, matching pupils, perfect eye anatomy, sharp iris detail, eye contact
负向 Prompt 里加:
asymmetric eyes, mismatched pupils, lazy eye, cross-eyed, heterochromia, different iris color, droopy eyelid
这些提示词本身解决不了分辨率问题,但能让模型在 detailer 兜底前先选个更好的默认。
如何确认修好了
- 用 100%(全分辨率)打开图,别看图库缩略图。
- 重点检查三件事:眼睛高度(脑补一条水平线,两个内眼角应该都落在线上)、瞳孔大小(比直径)、虹膜 / 视线方向(两眼应朝同一方向)。
- 把图左右翻转。你已经看习惯、不再注意的不对称,在镜像副本上会重新跳出来——镜像后还是对的,才是真对称。
预防建议
- 每张人像默认就启用 face-detailer / ADetailer,存进默认工作流或 preset,永远别裸出图。
- 近景人像再常备一遍只修眼睛、Mask merge mode = Merge 的 pass。
- 竖图先在 1024x1024 出图再纵向扩图,不要直接走 832x1216。
- CodeFormer 效果保持适中(A1111 权重
0.5-0.7),永远不要把皮肤纹理抹掉。 - 风格 LoRA 权重上限压在
0.7-0.8,给基础解剖结构留空间。
常见问题
为什么只有近景人像眼睛会坏,全身图反而看着没事? 全身图把整张脸——连同两只眼睛——塞进很小一块 latent 空间,模型根本没尝试去画精细的眼睛细节,你也就没注意到。近景给了眼睛足够像素,错误才变得显眼。两者都能靠 face / 眼睛 detailer pass 改善,只是近景把毛病放大了。
ADetailer 的修脸 pass 跑了,眼睛还是不对,怎么办?
这正是要加第二遍、只修眼睛的 pass 的时候(Step 2)。用 mediapipe_face_mesh_eyes_only 或 Civitai 的眼睛检测模型,把 Mask merge mode 设成 Merge,再加一个针对眼睛的 ADetailer 提示词。把两只眼睛当一个合并蒙版重绘,才能阻止它们又各走各的。
眼睛 pass 的 denoising 设多少?
保持在 0.35-0.45 区间。FaceDetailer 默认的 0.5 做通用清理没问题,但可能改掉人物身份;更低的 denoise 能修结构(眼睛不对齐、瞳孔大小错)同时保住你生成的那张脸。
光靠 “Restore faces”(CodeFormer/GFPGAN)能修好吗?
经常能修一部分,但它会平滑皮肤、可能让整张图变软。A1111 里 CodeFormer 权重滑块和直觉相反:0 是效果最强、1 是最温和,所以用 0.5-0.7 才能保住质感。针对性的 ADetailer / 局部重绘眼睛 pass 更干净,因为它只动眼睛。
这是 ComfyUI 独有还是 A1111 独有的问题?
都不是——这是基础扩散模型的分辨率限制,所以 ComfyUI、Automatic1111、Forge 和大多数 SDXL/SD 流程里都会出现。修法(专门的脸 pass 加眼睛 pass)在它们里都有:ComfyUI 用 FaceDetailer,A1111/Forge 用 ADetailer。
相关阅读
- AI 图片手指数量错误怎么解
- AI 图片姿势僵硬不自然怎么修
- AI 图片对称构图被打破怎么救
- AI 图片人物肤色不自然:6 类原因 + 6 步修复路径
- AI 图片皮肤过于光滑像塑料:4 步还原真实质感
- AI 图片细节不足怎么救回锐度
- 保持 AI 图片角色一致性
外部参考:ADetailer (Bing-su) on GitHub、ComfyUI-Impact-Pack、CodeFormer。