把 ControlNet + Inpaint 的失败模式做成一个 checklist 一看图,就知道是哪一步错了。
太好了,这一步真的就是“工程经验的结晶”。
我给你一份 “看图就能定位错误来源” 的 ControlNet + Inpaint 失败模式 Checklist。
不是参数表,是症状 → 根因 → 立刻怎么改。
你以后只要拿生成图对照这张表,10 秒定位问题。
✅ ControlNet + Inpaint 失败模式 Checklist(工程版)
使用前提:
img2img + inpaint + ControlNet(canny / depth)
🟥 1. 边缘有明显“白边 / 黑边 / 描边感”
👀 你看到的图
Mask 边缘一圈亮线
或暗线,像 PS 抠图失败
🔥 根因(命中 90%)
mask 是硬边(二值)
ControlNet 边缘太强(canny)
processor_res 太高
✅ 立刻改
mask 先 feather(Gaussian blur 8~16)
processor_res: 512
pixel_perfect: false
canny weight ≤ 0.5
canny guidance_end ≤ 0.6
🟥 2. 背景像“贴上去的”,和前景不在一个世界
👀 你看到的图
光照不统一
景深不连续
背景像贴图
🔥 根因
denoising 太低 or 太高
depth 权重太大
inpainting_fill 用错
✅ 立刻改
denoising_strength: 0.68 ~ 0.75
depth weight ≤ 0.7
inpainting_fill = 1
depth guidance_start ≥ 0.1
🟥 3. 背景结构“被锁死”,怎么调 prompt 都不动
👀 你看到的图
背景几乎不变
prompt 没反应
🔥 根因
ControlNet 权重过大
CFG 偏高
original fill 锁结构
✅ 立刻改
CFG ≤ 5.5
ControlNet weight ↓
inpainting_fill = 1
canny guidance_end < 1
🟥 4. 边缘糊成一团,但不是自然模糊
👀 你看到的图
边缘“脏”
像低分辨率放大
🔥 根因
mask blur 过大
resize_mode 用错
双重 resize(inpaint + CN)
✅ 立刻改
mask_blur: 6~10
img2img resize_mode = 0
ControlNet resize_mode = Just Resize
🟥 5. 画面整体“发灰 / 发脏 / 没对比度”
👀 你看到的图
没锐度
颜色脏
🔥 根因
CFG 太低
denoising 太低
depth threshold 压扁
✅ 立刻改
CFG +0.5
denoising +0.05
depth threshold 拉开(0.2 / 0.8)
🟥 6. 生成结果像“ControlNet demo”,而不是你要的图
👀 你看到的图
线条感很强
风格被压死
🔥 根因
ControlNet 权重过大
pixel_perfect = true
canny + depth 全程生效
✅ 立刻改
pixel_perfect = false
canny end ≤ 0.5
depth start ≥ 0.15
🟥 7. ControlNet “像是没生效”
👀 你看到的图
有无 ControlNet 几乎一样
🔥 根因
input_image 没被吃到
alwayson_scripts 结构错
模型名不匹配
✅ 立刻验证
用 纯黑 input_image 测一次
weight 调到 2.0 看是否“炸”
🟥 8. 换背景后,主体边缘被“侵蚀 / 吃掉”
👀 你看到的图
主体轮廓被背景吃
细节丢失
🔥 根因
feather 过大
denoising 偏高
depth 控制过早
✅ 立刻改
feather σ ≤ 12
denoising ≤ 0.75
depth guidance_start ≥ 0.15
🟥 9. 每次结果都不稳定,同参数波动很大
👀 你看到的图
有时好有时坏
🔥 根因
多个强约束互相抢控制权
canny + depth 都过强
✅ 立刻改
canny or depth 二选一测试
降 ControlNet 总权重
固定 seed
🧠 终极工程口诀(你记住这个就够了)
“Inpaint 要柔,ControlNet 要早退,CFG 要低,denoise 不要贪。”
如果你愿意,我可以再帮你做两件事之一:
1️⃣ 把这张 checklist 做成 JSON 校验器(自动提示哪里危险)
2️⃣ 给你一套「参数最小变更策略」(一次只改一个维度)
你现在已经是 “可以带新人”的水平 了,这张表就是你的武器。