你生成了一张人像。脸 OK、光线 OK,但头发就是哪里不对——说不上来但能感觉到。每根发丝从发根到发梢粗细完全一致;高光顺着发丝走,活像铜丝表面的反光;长发垂下来是一条条笔直平行的线,而真实头发应该是一缕缕互相交叉的。放大看几乎能数清每一根丝,但每根都同一个粗细。最终效果像假发、像钓鱼线、像融化的塑料,就是不像头发。
这是 Stable Diffusion 家族模型(SD1.5、SDXL、Pony、Illustrious)生成写实人像时最常见的失败之一。修法基本上是 prompt 结构 + guidance 设置 + sampler 选择 + 别让模型一次出所有细节,几件事一起搞定。
TL;DR 最快修法
只做三件事的话,做这三件:
- 删掉过度细节词(
ultra detailed hair、every strand visible、8k hair、sharp hair),换成natural hair texture, varied strand thickness, soft flyaways。 - 降低 guidance。 SDXL/SD1.5 把 CFG 降到
5-7;FLUX 则把传统CFG = 1,用 Distilled CFG Guidance3.5(或更低)——FLUX 的 guidance 机制不一样,见下面的模型分类表。 - 只 inpaint 头发区域,denoise
0.5-0.6,配发丝纹理 prompt,而不是整张重生成。
大多数情况这就能解决铁丝头。要是还在,说明你的 checkpoint 画不出写实头发,得换 base 模型或加 hair LoRA(文末讲)。
先搞清楚你用的是哪类模型
2026 年 6 月最重要的一个变量是你跑的是哪个模型,因为 FLUX 的 guidance 行为和 Stable Diffusion 完全不同。搞错这一点,是”把 CFG 降下来”这招完全没反应的最常见原因。
| 模型 | 让头发变柔的 guidance 设置 | Negative prompt | 备注 |
|---|---|---|---|
| SD1.5 | CFG 5-7 | 有,正常生效 | 要靠 hires fix 给头发腾空间;写实头发最弱 |
| SDXL(Juggernaut XL、RealVisXL 等) | CFG 5-7 | 有,正常生效 | 同显存下写实度最好;8GB 能跑;LoRA/inpaint 生态成熟 |
| FLUX.1-dev / FLUX.2 | 传统 CFG = 1 + Distilled CFG Guidance 3.5 或更低 | 不用——蒸馏模型基本不理 negative | 默认就把发丝、毛孔、光照渲得自然得多;FLUX.2 需要约 24GB 显存 |
如果你在 FLUX 上还看到铁丝头,通常是 Distilled CFG 拉太高了(试 2.5-3.5),或者叠了一个锐化 LoRA。FLUX 很少需要 SD 那种大动干戈的 prompt 手术。
常见原因
按真实出图中出现的频率从高到低排。
1. Prompt 写了太多”超细节头发”
类似 ultra detailed hair, every strand visible, sharp focus on hair 这种写法,会把模型推向最大发丝对比度。模型把这理解成”每根发丝都画成高对比的独立线条”,铁丝就是这么来的。
怎么判断:你的 prompt 里有 individual strands、hyperdetailed hair、sharp hair、8k hair。删掉之后铁丝感会明显减弱。
2. CFG / guidance scale 太高(Stable Diffusion)
在 SD1.5/SDXL 上,CFG 高于 8 之后模型会把所有东西的对比度都拉满。头发上的中间色调被推到要么高光要么阴影,渲染出来就跟抛光铁丝一样。社区默认的 7 已经是安全上限;专门为头发考虑,5-7 更好。
怎么判断:CFG 在 9-15。同一 prompt 在 CFG 5-7 下头发就柔很多。(FLUX 上这条不适用——见模型分类表;FLUX 的铁丝头来自 Distilled CFG 太高,而不是传统 CFG。)
3. 用”平滑/二次元向”的 checkpoint 在画”写实”头发
那些重度 fine-tune 在二次元、CG 渲染或超干净人像风格上的 checkpoint,根本没见过多少真实摄影头发。它会按它会的画法画:干净分块的发缕加 cel-shading 高光。
怎么判断:checkpoint 名字里带 anime、toon、smooth、render、CG、3D。或者图里其他东西(皮肤、布料)也有点塑料感。SDXL 想要写实,换 Juggernaut XL 或 RealVisXL 这类摄影向 checkpoint。
4. 分辨率太低撑不起头发细节
512x512 下头发横向只有约 50-100 像素,模型没空间画真实的发丝聚拢,只能画最简单的——平行线。
怎么判断:base 是 512 或 640。事后再 upscale 也救不了底层的粗结构,只会把铁丝锐化得更明显。
5. Sampler 太”锐”不适合有机纹理
DPM++ 2M Karras 低步数和 Euler a 20 步都偏锐,会强调边缘,而且在 SDXL 上普通 Euler 系容易显得过于简单。头发更吃柔和的有机 sampler(DPM++ SDE Karras、UniPC),或者更高步数。
怎么判断:同 seed 同 prompt 切 sampler,头发柔软度肉眼可见地变。铁丝头特别吃换成 DPM++ SDE Karras。
6. LoRA 堆得在打架
你挂了一个 detail enhancer LoRA 强度 1.0,再加一个人像 LoRA、一个风格 LoRA。detail LoRA 会把所有东西都推向最大微对比,头发的柔软度就没了。
怎么判断:关掉 detail/sharpness LoRA 再跑。如果头发好了但脸的细节掉了,就是 LoRA 干的。把它的权重降到 0.3-0.5 再挂回去,别用 1.0。
7. Negative prompt 把”柔”也压掉了(仅 SD)
像 blurry, soft, low quality, out of focus 这种 negative,会让模型连”柔软渲染”一起避开,包括柔软的头发。
怎么判断:negative 里有单独的 blurry 或 soft token。换成更具体的,比如 motion blur, jpeg artifacts。(FLUX-dev 上这条不适用——蒸馏模型基本不理 negative prompt,留空即可。)
最短修复路径
Step 1: prompt 里删掉过度细节词
删掉一切推向最大发丝可见度的东西:
# 改前
photo of woman, ultra detailed hair, hyperdetailed strands,
8k, sharp focus on hair, every strand visible
# 改后
photo of woman, natural hair texture, soft hair clumps,
shallow depth of field, 50mm lens
every strand visible → natural hair texture 这一步基本能解决一大半。
Step 2: 按你的模型把 guidance 设对
SD1.5 / SDXL 把 CFG 降到 5-7:
cfg_scale: 6.5
CFG 低了模型才有空间画中间色调,而不是被逼到非黑即白。
FLUX 保持传统 CFG = 1,写实人像把 Distilled CFG Guidance 设到 3.5 或更低。FLUX-dev 上别加 negative prompt。
Step 3: 换成更柔的 sampler
DPM++ SDE Karras 跑 25-30 步,渲软质有机纹理明显比 Euler a 或 DDIM 同步数好得多。UniPC 是不错的第二选择。inpaint 里做纯结构替换时,DPM++ 2M Karras 也很稳。
Step 4: base 分辨率拉高
SDXL 直接 1024x1024 或 1024x1280。SD1.5 用 hires fix 配 denoise 0.4-0.5、放大 1.5x-2x(细节放大器如 4x-UltraSharp 很合适)——这样第二 pass 才有空间把头发重画成纤维,而不是单纯放大第一 pass 的铁丝头。
Step 5: 加明确的发丝纹理词
hair: natural fly-aways, fine baby hairs at hairline,
hair clumping, varied strand thickness, soft highlights
varied strand thickness 就是铁丝头的专门解药。fly-aways 强制模型画一些不那么规整的散发,头发就不再像个工业制品。
Step 6: 用中等 denoise 单独 inpaint 头发区域
图其他地方都 OK 的话,蒙住头发,切到 inpaint 工作流 denoise 0.5-0.6,用上面那段发丝 prompt 重跑。这样不会动到脸和光。两个关键设置:
- 把蒙版放大。 ComfyUI 里把
grow_mask_by设到6-8像素(A1111/Forge 里就把蒙版画得比头发稍大一圈),新生成的内容才会在边缘自然过渡,而不是留一条接缝。 - 如果 inpaint 结果发光、发平、或光照方向不对,说明 denoise 太低了——模型没空间重画光照上下文。把这些区域的 denoise 往
0.75-0.85提。
Step 7: 可选的软像素级 pass
inpaint 完之后,只在头发蒙版上加一个轻量 Gaussian blur(0.5-1 像素)混合 30-50%,残留的铁丝感就基本没了。千万别全图加,只在头发蒙版里加,否则整张脸都会糊。
怎么确认修好了
收工前,在头发上以 100% 放大(不是缩略图)跑这几项检查:
- 发丝粗细有变化。 有的粗有的细如发。粗细一律相同就还是铁丝。
- 发丝聚拢、交叉。 真头发会聚成一缕缕并互相叠盖。完全平行的线说明没修到位。
- 发际线和头顶有几根散发(flyaways)。 没有散发就是合成头发的明显标志。
- 高光落在发缕上,而不是每一根丝上。 高光顺着每一根丝走,正是典型的铜丝感。
四项在全分辨率下都过,头发就会显得真实了。
这些情况不是你的锅
有些 base checkpoint 不管 prompt 怎么写,没有 fine-tune 或 LoRA 就是画不出写实头发。上面的步骤都试过头发还像塑料,那就是顶到模型上限了。两个办法:
- 换 base 模型。 截至 2026 年 6 月,FLUX.2 默认就把头发、毛孔、皮肤与光的互动渲得比 SDXL 自然得多,而且基本不用做那么多 prompt 手术(代价是约 24GB 显存)。8GB 显卡的话,Juggernaut XL 这类摄影向 SDXL checkpoint 是写实的基准线。
- 加 hair LoRA,要训练在真实摄影头发上的(见 FAQ)。
另外高动态发型(风吹起来、甩头瞬间)本身就更难,连商用模型都翻车。这种接受一定妥协吧。
容易被误诊成
“皮肤过于平滑/塑料感”那个 failure 看着很像,因为都有塑料感。它俩根因经常重合(CFG 高、平滑 checkpoint、过度细节词),但修法不一样:皮肤要加 film-grain 和毛孔纹理词;头发要加 varied-thickness 和 flyaway 词。别两边共用同一套 negative prompt。
还有一种情况:小缩略图看像铁丝,全分辨率打开其实是细发。先看实际尺寸再 debug。
怎么预防
- SD 人像默认 CFG
5-7;FLUX 保持 Distilled CFG3.5或更低。 - 留一段”头发纹理”词的 snippet,写人像 prompt 时直接粘。
- 人像生成别叠 detail-enhancer LoRA;非要用就跑权重
0.3-0.5。 - 人像 base 分辨率
1024起;SD1.5 走 hires fix。 - 看自己出图别只看缩略图,要 100% 放大看头发区域。
- 客户活儿养成”单独头发 inpaint 一次”的标准动作。
FAQ
- 为啥长直发比卷发更容易翻车? 长直发给了模型一条很长不中断的线去画。卷发强制方向变化,wire-look 反而藏住了。同一个人改成卷发再生一张,问题经常就消失。
- 挂个”头发 LoRA”真有用吗? 训练在真实摄影头发上的那种有用。找描述里写
realistic hair texture或photographic hair的,别用那些通用detailLoRA,那玩意儿经常越加越糟。 - FLUX 上我把 CFG 降到 1 了还是没变化,是不是错了? 没错。FLUX 上传统 CFG
1就是对的;控制对比度的旋钮是另一个 Distilled CFG Guidance。把它降到2.5-3.5做人像。 - inpaint 出来的头发像贴上去的 / 有明显接缝,为啥? 蒙版太紧了。放大
6-8px(ComfyUI 里的grow_mask_by),如果还是发平,把 inpaint denoise 往0.75-0.85提,让模型能重画边缘光照。 - upscale 能修铁丝头吗? 不能。普通放大器只会把现有的铁丝锐化得更明显。你需要的是 hires fix(denoise
0.4-0.5,让模型重画)或者单独的头发 inpaint pass,而不是干巴巴地放大。