主题
ControlNet
定位
ControlNet 使用参考图为扩散过程增加结构条件,使结果遵循指定的边缘、姿势、深度或构图。
模型文件通常放在:
bash
ComfyUI/models/controlnet/工作流
典型流程包含参考图、预处理器、ControlNet 模型和条件应用:
md
Load Image
↓
预处理器(Canny / OpenPose / Depth)
↓
Apply ControlNet ← Load ControlNet
↓
正向与负向 CONDITIONING
↓
KSampler预处理器将普通图片转换为控制图,ControlNet 模型负责解释该控制图。两者必须匹配。
| 目标 | 预处理结果 | 对应模型 |
|---|---|---|
| 保留轮廓 | Canny 边缘图 | Canny ControlNet |
| 保留人物姿势 | OpenPose 骨架图 | OpenPose ControlNet |
| 保留空间层次 | Depth 深度图 | Depth ControlNet |
| 按线稿生成 | Scribble / Lineart | 对应的 Scribble / Lineart ControlNet |
核心节点不一定包含所有预处理器,部分流程需要安装 ControlNet Aux 等自定义节点。
Apply ControlNet
| 参数 | 作用 |
|---|---|
positive | 正向提示条件 |
negative | 负向提示条件 |
control_net | ControlNet 模型 |
image | 预处理后的控制图 |
strength | 控制条件的影响强度 |
start_percent | 在扩散进度的何处开始控制 |
end_percent | 在扩散进度的何处结束控制 |
常见初始参数为 strength 约 0.6~0.9、start_percent = 0、end_percent 约 0.7,实际取值取决于模型和控制目标。
- 结果过于僵硬:降低
strength,或提前结束控制。 - 结果忽略参考图:先检查模型是否匹配,再适度提高强度。
- 细节或脸部异常:让 ControlNet 更早结束,给采样后期更多自由。
多个 ControlNet
多个 ControlNet 可以链式应用,例如同时约束姿势和深度。每增加一个控制条件都会提高显存占用,并可能与其他条件发生冲突。
组合前应分别测试:
- 单独使用时控制图是否正确。
- 模型是否与基础模型家族兼容。
- 每个控制条件的强度和起止区间。
排查
- 检查参考图预处理结果是否正确。
- 检查预处理器和 ControlNet 类型是否匹配。
- 检查 ControlNet 与基础模型家族是否兼容。
- 检查
Apply ControlNet输出是否接入 KSampler 使用的条件。 - 检查节点是否被 Bypass / Mute。
- 检查
strength、start_percent、end_percent。
