Skip to content

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_netControlNet 模型
image预处理后的控制图
strength控制条件的影响强度
start_percent在扩散进度的何处开始控制
end_percent在扩散进度的何处结束控制

常见初始参数为 strength 约 0.6~0.9、start_percent = 0、end_percent 约 0.7,实际取值取决于模型和控制目标。

  • 结果过于僵硬:降低 strength,或提前结束控制。
  • 结果忽略参考图:先检查模型是否匹配,再适度提高强度。
  • 细节或脸部异常:让 ControlNet 更早结束,给采样后期更多自由。

多个 ControlNet ​

多个 ControlNet 可以链式应用,例如同时约束姿势和深度。每增加一个控制条件都会提高显存占用,并可能与其他条件发生冲突。

组合前应分别测试:

  • 单独使用时控制图是否正确。
  • 模型是否与基础模型家族兼容。
  • 每个控制条件的强度和起止区间。

排查 ​

  1. 检查参考图预处理结果是否正确。
  2. 检查预处理器和 ControlNet 类型是否匹配。
  3. 检查 ControlNet 与基础模型家族是否兼容。
  4. 检查 Apply ControlNet 输出是否接入 KSampler 使用的条件。
  5. 检查节点是否被 Bypass / Mute。
  6. 检查 strength、start_percent、end_percent。

基于 MIT 许可发布