ControlNet教程:在 ComfyUI 中使用 ControlNet 来进行精确的图像控制生成
在 AI 图像生成过程中,要精确控制图像生成并不是一键容易的事情,通常需要通过许多次的图像生成才可能生成满意的图像,但随着 ControlNet 的出现,这个问题得到了很好的解决。
ControlNet 提供了十几种控制网络模型,使得我们可以进一步开始控制图像的风格、细节、人物姿势、画面结构等等,这些限定条件让 AI 图像生成变得更加可控,在绘图过程中也可以同时使用多个 ControlNet 模型,以达到更好的效果。
你可以理解为 ContorlNet 是一个翻译的助手,把我们的参考图翻译成 AI 可以理解的指令,然后传递给 AI 模型,让 AI 模型生成符合我们要求的图像。
比如在这张图片中,通过输入一个人物的图片,通过预处理器提取出人物的控制条件后,然后通过 ControlNet 模型的应用,生成了动作一致的人物图片。
本篇教程将会涉及:
- ControlNet 的基础介绍
- ComfyUI 中 ControlNet 的工作流程
- ControlNet 的相关资源
- 在 ComfyUI 中一个典型的 ControlNet 工作流的组成
然后我们会在 ComfyUI-Wiki 的其它 ControlNet 相关文章中具体说明具体单独的 ControlNet 模型如何使用及相关示例。
ControlNet 的简单介绍
ControlNet 是一种基于扩散模型(如 Stable Diffusion)的条件控制生成模型,最早由张吕敏(Lvmin Zhang)与 Maneesh Agrawala 等人于 2023 年提出。该模型通过引入多模态输入条件(如边缘检测图、深度图、姿势关键点等),显著提升了图像生成的可控性和细节还原能力。
下面是 ControlNet 相关的一些链接
- 作者主页:lllyasviel
- ControlNet 1.0:ControlNet
- ControlNet-v1-1-nightly:ControlNet-v1-1-nightly
- Hugging Face:ControlNet-v1-1
- 论文:ControlNext-to-Image Diffusion Models
ControlNet 的常见控制类型
随着这几年 ControlNet 的发展以及社区的贡献,目前 ControlNet 已经支持了十几种控制类型,下面是一些常见的控制类型,每种类型都有其适合的场景
1. 线条控制类
- Canny:通过边缘检测生成精细线稿,适合精准模仿原图结构。
- MLSD:仅检测直线,适用于建筑、室内设计等场景。
- Lineart:新一代线稿识别,比Canny更精细,支持动漫线条提取。
- SoftEdge:软边缘检测,优先识别大轮廓线,适合非精准模仿的场景。
- Scribble/Sketch:涂鸦控制,支持粗略轮廓识别或手动绘制草图生成图像。
2. 深度与结构类
- Depth:通过亮度区分前后景深度关系,白色区域靠前,黑色区域靠后。
- NormalMap:法线贴图,控制物体表面凹凸质感(如窗户凹陷效果)。
- OpenPose:骨骼姿势识别,可自动检测或手动编辑人体姿态。
3. 语义与分割类
- Segmentation:语义分割,通过颜色对应物品类别生成图像(如蓝色代表天空)。
- Inpaint/局部重绘:局部修改图像,保持与原图风格一致。
4. 风格与色彩类
- Shuffle:随机洗牌,打乱参考图语义元素生成多样性画面。
- Recolor:黑白图片重新上色,支持自动或提示词定义颜色。
- IP-Adapter:风格/人脸模仿,保持生成图像的一致性。
5. 功能扩展类
- InstructP2P:通过文本指令修改图片(如让房子“着火”)。
- Instant_ID:AI换脸,保持人脸一致性并支持多图融合。
- Tile/Blur:模糊图片高清化与细节增强。
不兼容OpenPose面部/手部专用处理器及部分语义分割预处理。
ComfyUI 中 ControlNet 的工作流程
在 ComfyUI 中,ControlNet 作为一种条件控制器,通常会涉及以下几个步骤的处理,当然由于目前ComfyUI 的 ControlNet 模型版本很多,所以具体的流程可能会有所不同,这里我们以目前 ControlNet V1.1 版本模型为例进行说明,具体工作流我们在后续的相关教程中继续补充
- 图片预处理
我们需要上传参考图,ControlNet 的预处理器会提取图中的关键特征(比如轮廓、线条、姿态)。例如本文开头的人物图片输入变成了 Openpose 的控制条件。
- 条件注入
ControlNet 将提取的特征转化为“条件信号”,传递给采样器(如 K 采样器)。这些信号会告诉 AI:“生成图片时,要尽量符合参考图的线条/姿势/结构”
- 采样器生成图像
采样器(如 K 采样器)在去噪生成图片的过程中,会参考 ControlNet 提供的条件信号,最终输出既符合文字描述、又与参考图特征匹配的图片。
ControlNet 工作流
不使用预处理器的 ControlNet 工作流
本部分将介绍一个典型的 SD1.5 ControlNet 工作流,不依赖任何第三方插件
1. 模型文件准备
为了使用这个工作流,请确保你已经安装以下内容
- 请前往下载 Dreamshaper 8 并保存在
ComfyUI/models/checkpoints/
目录 - 请前往下载 control_v11p_sd15_openpose.pth 并保存在
ComfyUI/models/controlnet/
目录
在 ComfyUI 中,不同版本的绘图模型对应的 ControlNet 模型并不通用,比如 SD1.5 的模型就无法使用 Flux 的 ControlNet 模型,反之亦然。所以我建议你在保存模型时,在对应的目录下新建一个文件夹用来标识模型版本,这样在选择模型时可以更加方便,比如:
ComfyUI/models/checkpoints/sd1.5
ComfyUI/models/controlnet/sd1.5
2. 工作流及相关素材
请点击下面的按钮下载对应的工作流,然后拖入 ComfyUI 界面或者使用菜单栏 Workflows
-> Open(Ctrl+O)
进行加载
下面这张图片将作为参考图,请下载保存
3. 工作流运行
参照图片中的序号,依次完成对应操作以完成一个这个 ControlNet 工作流
- 请确保在
Load Checkpoint
节点里已经加载了 SD1.5 的模型 - 请确保在
Load ControlNet Model
节点ontrol_v11p_sd15_openpose.pth
模型可以被识别并加载 - 在
Load Image
节点中加载上文提供的参考图 - 完成以上操作后点击
Queue
按钮,或者使用快捷键Ctrl(cmd) + Enter(回车)
来进行图片生成
试着调整Apply ControlNet节点的中的不同参数,进行生成,查看不同强度(Strength)和不同的起始比例(start_percent)和结束比例(end_percent)对生成结果的影响
4. 工作流讲解
在上面的流程中,我们把对应的工作流和我们的文生图工作流进行对比
你会发现最主要的差异就是在原本的文生图中,我们将对应的条件输入了 Apply ControlNet
节点通过这个节点我们增加了对应的控制条件,然后再将对应的输出条件输入到了KSampler
节点的条件输入
你可以看到对应的人物很好地生成了,另外在 SD1.5 模型中常见的人物肢体错误的情况在这个工作流中也没有出现。
在完成以上操作后你可以尝试修改一下Empty Latent Image
节点的尺寸,比如设置成512x512
,然后再次生成来观察生成的画面和参考图的差异
你应该可以看到最后生成的图像只使用了参考图的中心区域,另外不同类型的参考图也需要使用不同类型的 ControlNet 模型,比如 Openpose 就需要使用 control_v11p_sd15_openpose.pth 模型,而 Canny图就需要使用 control_v11p_sd15_canny.pth 模型。
在以上的工作流中,我们可能会有一个问题,我们使用的参考图(Openpose)并不是那么常见,那么我们是否可以采用其他的一些常见的参考图来生成对应的图片呢?这时候我们就需要用到预处理器,让我们接着在下一部分继续使用预处理器的工作流。
使用预处理器的 ControlNet 工作流
什么是预处理器呢?
比如在下面的图中,我们使用了 ComfyUI 的 Canny 预处理器,它把对应的图像的轮廓边缘特征提取出来了。
这就是预处理器的作用,它把我们提供的参考图(例如照片、线稿、涂鸦等)转换为一种 结构化的特征图,以便 ControlNet 模型能够理解并引导生成结果。
常见的预处理器有很多种比如:
- 线稿预处理器(如 canny、lineart):提取图像边缘轮廓,生成黑白线稿。
- 深度图预处理器(如 depth_midas):计算图像中物体的远近层次,生成灰度深度图。
- 姿势预处理器(如 openpose):识别人体骨骼关键点,生成火柴人骨架图。
但是在 ComfyUI 中,仅仅有 Canny 预处理器,所以我们需要依赖其它插件来完成图片预处理的工作,下面我们将进行对应工作流的内容。
1. 相关插件安装
本教程需要使用 ComfyUI ControlNet Auxiliary Preprocessors 插件
插件安装的教程可以参考 ComfyUI 插件安装教程
2. 模型文件准备
在这个示例中我们保持和之前的部分模型文件一致即可
- 请前往下载 Dreamshaper 8 并保存在
ComfyUI/models/checkpoints/
目录 - 请前往下载 control_v11p_sd15_openpose.pth 并保存在
ComfyUI/models/controlnet/
目录
3. 工作流及输入图片素材
下载下面的工作流文件
在运行 ComfyUI 后将工作流拖入或者使用 ComfyUI 的快捷键Ctrl+O
打开这个工作流文件
请下载下面的图片,并在 Load Image 节点中载入使用
- 在
1
Load Image 节点中载入输入图片 - 在
2
Load Checkpoint 节点中选择你安装的模型 - 在
3
Apply ControlNet 节点中选择control_v11f1p_sd15_openpose.pth
模型。 - 使用 Queue 或者快捷键
Ctrl+Enter
运行工作流进行图片生成
4. 工作流讲解
这个工作流和之前的工作流相比,其实就只是多了一部图像的预处理,我们把对应的图像输入到ComfyUI ControlNet Auxiliary Preprocessors 提供的预处理器OpenPose Pose
节点中,完成了对应的图片预处理。
那么以上就是对应的 ComfyUI 中 ControlNet 的简单介绍了,在后续的 ControlNet 相关教程中,我们将会继续介绍更多的 ControlNet 模型,并给出对应的示例。