⬡ 节点流学园

🖼️ 03-核心工作流

ControlNet:把构图权从模型手里拿回来

核心controlnet姿态深度canny结构控制

一句话定义

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 专属控制模型或降级方案。

自测题

  1. 预处理器与 ControlNet 模型分别做什么?少了各自的后果?
  2. strength=1.0 与 start/end 0-0.7 的行为差异?
  3. 想让"动作一致但人物、服装、场景全换",选哪种控制类型?
  4. SDXL 工作流能用 SD1.5 的 openpose 模型吗?
参考答案
  1. 预处理器从参考图提取骨架特征图;ControlNet 模型把骨架翻译注入主干。缺预处理=喂原图,控制失效;缺模型=节点报错/无注入。
  2. 前者全程全力锁结构;后者前 70% 步锁、后 30% 放手,细节更自然、提示词表现更好。
  3. openpose(骨骼姿态)。
  4. 不能,主干维度不匹配;需 SDXL 版 openpose 控制模型。

与其他知识点的关系

延伸阅读

前置知识

CLIP 与条件编码:文字如何变成方向KSampler 全参数解剖:seed/steps/cfg/denoise

关联知识点

IPAdapter 与参考图控制:让图像自己当提示词必装自定义节点包盘点案例研究:电商商品图生产管线