目录

ComfyUI ControlNet 教程:用线稿、姿势和深度控制构图

只靠提示词很难精确控制“人物摆什么姿势”“建筑物的透视”和“画面的构图”。ControlNet 让你提供一张参考图,并从中提取结构信息(线条、姿势、深度),让生成的图片按照这个结构来绘制。

常见的控制类型

类型从参考图提取适用场景
Canny边缘线条保留轮廓和细节,例如产品、建筑
Lineart线稿给线稿上色,将其变成完整插画
OpenPose人体骨架(姿势、手、脸)指定人物姿势
Depth深度(远近)保留空间结构和透视
Scribble简单涂鸦用随手画的草图控制构图
Tile图片本身的细节放大时保持一致并增加细节

需要准备

  1. ControlNet 模型:放到 models/controlnet/。模型必须与基础模型版本对应(SD 1.5、SDXL、Flux 各有不同的 ControlNet)。现在也有“Union”类型的模型,一个文件支持多种控制类型。
  2. 预处理器(Preprocessor):把参考照片转换成 ControlNet 需要的图像(例如把照片转换成线条或骨架)。Canny 有内置节点;其他类型通常需要安装 comfyui_controlnet_aux 自定义节点(见自定义节点与 Manager)。

创建工作流(以 Canny 为例)

[Load Image] ─▶ [Canny] ─IMAGE────────────────┐
                                              ▼
[CLIP Text Encode 正向] ─CONDITIONING─▶ [Apply ControlNet] ─positive─▶ [KSampler]
[CLIP Text Encode 负向] ─CONDITIONING─▶                    ─negative─▶
[Load ControlNet Model] ─CONTROL_NET──▶
                         vae ─────────▶

步骤:

  1. 从文生图工作流开始。
  2. 添加 Load Image,加载参考图。
  3. 添加 Canny 节点并连接参考图。运行一次,用 Preview Image 确认提取出的线条。
运行后 Preview Image 显示的结果
点击 Run 运行后,结果会直接显示在 Preview Image / Save Image 节点上(此例为 Canny 边缘检测)
  1. 添加 Load ControlNet Model,选择 Canny 模型。
  2. 添加 Apply ControlNet:
    • positive、negative 分别连接两个 CLIP Text Encode 的输出
    • control_net 连接 Load ControlNet Model
    • image 连接 Canny 的输出
    • vae 连接模型的 VAE(部分 ControlNet 需要)
  3. 将 Apply ControlNet 输出的 positive、negative 连接到 KSampler。
  4. 将 Empty Latent Image 的尺寸设置为与参考图相同比例。
ComfyUI ControlNet Canny 工作流
ControlNet(Canny):参考图经过 Detect Edges (Canny) 提取线条,Apply ControlNet 修改正向和负向提示词后,再连接到 KSampler

参数

参数说明建议
strength控制强度0.5~1.0。过高会让画面僵硬、细节不自然
start_percent从生成过程的哪个阶段开始控制0
end_percent在哪个阶段停止控制0.6~1.0

技巧:将 end_percent 设为 0.5~0.7,前半段由 ControlNet 决定构图,后半段让模型自由发挥细节,结果通常会更自然。

OpenPose:控制人物姿势

  1. 使用 DWPose Estimator 或 OpenPose Pose 预处理器(来自 controlnet_aux),从人物照片中提取骨架。
  2. 用 Preview Image 确认骨架正确。
  3. 连接 OpenPose ControlNet 模型。

生成的人物会摆出与照片相同的姿势,但长相、服装和场景由提示词决定。

Depth:保留空间结构

使用 Depth Anything 等预处理器生成深度图。适用于:

  • 将室内照片重新设计成不同的装修风格
  • 保留建筑或场景的透视,同时改变季节、时间和画风

组合多个 ControlNet

将多个 Apply ControlNet 串联:第一个的 positive / negative 输出连接到第二个的输入。例如,用 OpenPose 控制姿势,用 Depth 控制场景。适当降低每个节点的强度,避免相互冲突。

常见问题

情况原因
报错或完全没有效果ControlNet 模型与基础模型版本不匹配(例如将 SD 1.5 的 ControlNet 用于 SDXL)
画面僵硬,出现线条痕迹strength 太高,或 end_percent 太晚
人物变形参考图和输出图的比例不同,或骨架提取错误
找不到预处理器节点尚未安装 comfyui_controlnet_aux

更新于 2026年10月12日