一句话定义
ControlNet 是挂在扩散模型上的结构控制器:从参考图提取边缘/深度/姿态等"骨架",在去噪过程中持续注入,让生成结果严格遵循你给的构图——提示词决定"画什么",ControlNet 决定"怎么摆"。
为什么重要
提示词对构图的描述力极其有限("a person standing"出千种站姿);ControlNet 把布局控制权交给一张参考图,这是商品图复刻、姿态复用、线稿上色的根基,也是商业管线(案例研究:电商商品图生产管线)的顶梁柱。
前置知识
CLIP 与条件编码:文字如何变成方向(条件注入机制)。
核心概念
常用控制类型 → 提取什么:
| 类型 | 控制内容 | 典型用途 |
|---|---|---|
| canny / lineart / scribble | 轮廓边缘 | 线稿上色、轮廓复刻 |
| depth | 空间前后 | 场景重构、透视保持 |
| openpose | 人体骨骼姿态 | 姿态复用、动作库 |
| soft edge / mlsd | 软边缘 / 直线段 | 建筑结构 |
| tile | 低频结构 | 大图细化、放大修正(高清放大(Upscaling):两条路线与取舍) |
节点链(SD 系):
Load Image ─▶ 预处理器(如 Canny/DepthAnything/OpenPose) ─▶ Apply ControlNet(正/负条件, strength, start/end)
▲ ControlNet Loader(从 models/controlnet/)- 预处理器是"从原图提取骨架"的算法(canny 算边缘、depth 估深度);大多来自 custom node 包
comfyui_controlnet_aux(必装自定义节点包盘点)。ControlNet 模型才是被注入的网络——预处理图(白底黑线的骨架)≠ 模型。 - Apply ControlNet (Advanced):strength 0-2(常用 0.6-1.0)、start/end percent(如 0-0.7:只在前期锁结构,后期放手出细节)。
- 版本匹配:SD1.5 与 SDXL 的 ControlNet 不通用;Flux 有专属的 Fill/Canny/Depth 控制模型(Flux 架构与工作流:cfg=1 的新物种)。
原理与机制
ControlNet = 冻结的 UNet 副本 + 可训练"零卷积"旁路:参考图特征经旁路注入主 UNet 各层残差,训练初期注入为零(不破坏底模),训练后逐步学会"把结构信号翻译给主干"。使用侧理解:它是一个强力的条件流,与提示词条件并列起作用,所以 strength 过高会压制提示词的自由度。
直观类比
给画师一张描图纸():Canny=只给轮廓线,Depth=给了一张近大远小的等高图,OpenPose=给了火柴人动作示范。strength 是描纸的透明度:1.0 照着描,0.6 参考着画,0 只当没给。
实例与案例
- 姿态库复用:收集满意的 openpose 骨架图,新角色一律喂同骨架 → 批量出"同一动作不同人"的系列图。
- 商品图背景重构(案例研究:电商商品图生产管线):depth 控制保透视 + 重绘背景(局部重绘(Inpainting):只改该改的地方),商品位置纹丝不动。
- 线稿上色:scribble/lineart + 风格提示词,strength 0.8-1.0。
- 多 ControlNet 叠加:两个 Apply 节点 concat(如 pose 定动作 + depth 定空间),各 0.6 左右,避免互相顶死。
常见误区
- 把原图直接当控制图喂给 canny 模型:必须先过预处理器提取骨架;原图喂进去等于没控制(或效果紊乱)。
- strength 拉满 2.0:画面被骨架"焊死",提示词失效、颜色溢出;从 0.7 起步。
- 版本不匹配:SDXL 工作流挂 SD1.5 的 controlnet 模型 → 报错或垃圾输出;先看模型页标注。
- 忘装预处理 custom node:Load Image 直接连 Apply,骨架没提取;红灯缺节点时按 ComfyUI Manager:生态的包管理器 补装。
- flx 混淆:Flux 工作流套 SD 系 ControlNet(结构不兼容);用 Flux 专属控制模型或降级方案。
自测题
- 预处理器与 ControlNet 模型分别做什么?少了各自的后果?
- strength=1.0 与 start/end 0-0.7 的行为差异?
- 想让"动作一致但人物、服装、场景全换",选哪种控制类型?
- SDXL 工作流能用 SD1.5 的 openpose 模型吗?
参考答案
- 预处理器从参考图提取骨架特征图;ControlNet 模型把骨架翻译注入主干。缺预处理=喂原图,控制失效;缺模型=节点报错/无注入。
- 前者全程全力锁结构;后者前 70% 步锁、后 30% 放手,细节更自然、提示词表现更好。
- openpose(骨骼姿态)。
- 不能,主干维度不匹配;需 SDXL 版 openpose 控制模型。
与其他知识点的关系
- IPAdapter 与参考图控制:让图像自己当提示词 是"另一张控制图"(参考整体观感而非骨架)。
- 必装自定义节点包盘点 的 comfyui_controlnet_aux 提供全部预处理器。
- 案例研究:电商商品图生产管线 的商品图管线是本页的最大应用场景。
延伸阅读
- ControlNet 原论文:arxiv.org/abs/2302.05543
- 预处理器全家桶:Fannovel16/comfyui_controlnet_aux
前置知识
CLIP 与条件编码:文字如何变成方向KSampler 全参数解剖:seed/steps/cfg/denoise