type
Page
status
Invisible
date
Jan 26, 2025
slug
summary
tags
国美
艺术
教程
category
知识分享
icon
password
URL
1. ControlNet 原理
来源: https://www.comflowy.com/advanced/controlnet
在使用 Stable Diffusion 时,你可能希望控制图像的构造,但通过提示词调整可能无法获得很好的效果。本章将教你几种使用 ControlNet 控制图像构造的常用方法。
原理介绍
本质上,我在高级教程中教授的所有方法都是图像到图像的方法。它们都通过图像向模型提供不同的信息,从而使模型生成我们想要的图像。ControlNet 根据图像的结构信息来控制模型生成的图像。这种结构信息可以是草图、图像的掩码,甚至是图像的边缘信息。所有这些信息都可以通过 ControlNet 来控制模型生成图像。你可以根据需要选择不同的 ControlNet 来控制模型生成的图像。
通常情况下,为了帮助你更好地理解如何使用 ControlNet,我们将首先直观地介绍 ControlNet 的原理:

从上图可以看出,当我们使用 ControlNet 时,首先将文本提示和图像输入到 ControlNet 模型中。然后,ControlNet 模型生成一个潜在图像。该潜在图像将作为条件(Conditioning)和初始提示输入到 Stable Diffusion 模型中,从而影响模型生成的图像。
涂鸦线稿控制:Scribble ControlNet
通过原理的介绍,你应该能够推断出如何在 ComfyUI 中使用 ControlNet。我们可以尝试构建一个简单的 ControlNet 工作流程——通过简单的草图进行控制。效果大致如下:

借助 ControlNet,模型的图像输出将根据你绘制的草图构建图像。如你所见,左边的草图是一个非常粗糙的卡通角色,而右边生成的图像与左边草图的基本构图和角色特征(两个大耳朵)相匹配。
好的,现在你对 Scribble ControlNet 有了印象,让我们看看如何共同构建这个工作流程。你可以先尝试自己构建。这样可以加深你的印象。
姿态骨骼控制:Pose ControlNet
一旦你能构建一个 ControlNet 工作流程,就可以根据需求自由切换不同的模型。
前面的例子使用了草图作为输入,这次我们尝试输入人物的姿态。这样做的好处是可以控制模型生成的人物姿态。例如:

但是,请注意,我们不能像前面的例子那样直接将图像输入到 ControlNet 模型中,而是需要先将图像转换为姿态,然后再输入到 ControlNet 模型中。当然,你也可以使用其他工具制作骨架图,然后直接输入到 ControlNet 模型中。

因此,整个工作流程的构建与前面的工作流程相同,只是在 Load ControlNet Model 节点中,我们需要加载 ControlNet Openpose 模型,并加载骨架图:

深度图控制:Depth ControlNet
ControlNet 的第三种用法是通过深度图控制生成的图像。这种方法的优势在于可以通过深度图控制生成图像的景深。例如:
这个工作流程也与前面的类似。你可以直接导入深度图,或者使用插件生成深度图,然后输入到 ControlNet 模型中。例如:

这比姿态有更多的景深信息。例如,我导入的图像是两个人打架,一个站在另一个前面。如果仅使用姿态绘制,相对难以绘制这种前后关系的图像。
如果你想在姿态工作流程中使用插件生成深度图,方法也很简单。只需将上述工作流程中的 DWPose Estimation 节点替换为 Zoe-Depth Map 节点即可。
此外,还有一种方法。你也可以使用一些3D 工具生成角色姿态或深度图。例如,Posemy.art(opens in a new tab) 就是这样的产品。你可以在左上角选择想要的角色姿态(标记为1),然后通过拖动鼠标调整角色的姿态,最后点击导出按钮(标记为2)导出深度图(标记为3),然后将其导入 ComfyUI:

边缘线稿控制:Canny ControlNet 工作流程
ControlNet 的第四种用法是通过 Canny 边缘图控制模型生成的图像。这种方法的优势在于可以通过 Canny 边缘图控制模型生成图像的边缘。例如:

工作流程的设置与前面的类似,只需将 ControlNet 模型替换为 Canny 模型即可。

2.实践 Controlnet(以边缘控制为例)
来源: https://comfyui-wiki.com/en/tutorial/advanced/how-to-use-canny-controlnet-with-sd1.5
SD1.5 Canny ControlNet 简介

Canny ControlNet 是最常用的 ControlNet 模型之一。它使用 Canny 边缘检测算法从图像中提取边缘信息,然后利用这些边缘信息引导 AI 图像生成。
本教程重点介绍如何将 Canny ControlNet 模型与 SD1.5结合使用。
Canny ControlNet 的关键特性
- 结构保留:有效保留原始图像的基本结构和轮廓
- 高灵活性:通过边缘检测参数调整控制引导强度
- 广泛应用:适用于素描、线稿、建筑设计等各种场景
- 稳定结果:相比其他 ControlNet 模型提供更稳定和可预测的引导
本教程的准备工作
1. 安装所需模型
首先,你需要安装以下模型:
ㅤ | ㅤ | ㅤ |
模型类型 | 模型文件 | 下载链接 |
SD1.5基础模型 | dreamshaper_8. Safetensors (可以使用其他已有的SD 1.5模型替代) | |
Canny ControlNet 模型 | control_v11p_sd15_canny. Pth | |
VAE 模型(可选) | vae-ft-mse-840000-ema-pruned. Safetensors(可以直接使用基础模型的 vae) |
2. 模型文件放置
请按照以下结构放置模型文件:
3. 下载 SD1.5 Canny ControlNet 工作流程文件**
SD1.5 Canny ControlNet 工作流程
👇右键点击下方链接并选择“另存为”下载工作流程文件并导入到你的 ComfyUI 中。
通过网盘分享的文件:L2-controlnet基础示例.json
链接: https://pan.baidu.com/s/1_e5tQDf4bvwmwk7C_e8Fmg?pwd=akv3 提取码: akv3
你可以使用这张蘑菇图片作为例子。

可以参考PDF 内的示例(参数和输出)。
- 正面提示:Architectural visualization of exterior view futuristic half translucent biological pavilion on sunset, 8K, HD
- 负面提示:low quality, blur
工作流程概述
关键节点说明
- LoadImage:用于加载输入图像
- Canny:执行边缘检测,有两个重要参数:
- Low_threshold:较低阈值,控制边缘检测灵敏度
- High_threshold:较高阈值,控制边缘连续性
- ControlNetLoader:加载 ControlNet 模型
- ControlNetApplyAdvanced:控制如何应用 ControlNet,参数包括:
- Strength:控制强度
- Start_percent:影响开始时间
- End_percent:影响结束时间
使用步骤
- 导入工作流程
- 从本教程下载工作流程文件
- 在 ComfyUI 中点击“加载”,或将下载的 JSON 文件拖放到 ComfyUI 中
- 准备输入图像
- 准备一张你想处理的图像
- 使用 Load Image 节点加载图像
- 调整 Canny 参数
- 推荐 low_threshold 范围:0.2-0.5
- 推荐 high_threshold 范围:0.5-0.8
- 使用 PreviewImage 节点预览边缘检测结果
- 设置生成参数
- 在 KSampler 节点中:
- Steps:推荐20-30
- Cfg:推荐7-8
- Sampler_name:推荐“dpmpp_2m”
- Scheduler:推荐“karras”
- 调整 ControlNet 强度
- Strength:1.0表示完全遵循边缘信息
- 根据需要降低 strength 值以减弱控制
提示与建议
- 边缘检测参数调整
- 如果边缘过多:增加阈值
- 如果边缘过少:减少阈值
- 先通过 Preview Image 节点预览效果
- 提示词编写
- 正面提示应详细描述所需的风格和细节
- 负面提示应包含要避免的元素
- 提示应与原始图像内容相关
- 常见问题解决方案
- 如果生成的图像过于模糊:增加 cfg 值
- 如果边缘跟随不足:增加 strength 值
- 如果缺乏细节:增加 steps 值
实际案例
以下是一些常见用例及其参数设置:
- 线稿上色
- Low_threshold:0.2
- High_threshold:0.5
- Strength:1.0
- Steps:25
- 结构重绘
- Low_threshold:0.4
- High_threshold:0.7
- Strength:0.8
- Steps:30
相关资源
3.同时使用多个 Controlnet
你可以同时使用多个 Controlnet 以实现更好的控制。你可能需要先安装此扩展。

然后你可以尝试以下工作流程,只需堆叠不同的 Controlnet 模型即可。
通过网盘分享的文件:L2-多重controlnet-2.json
链接: https://pan.baidu.com/s/1z5Nd1UuSbd-G9h_kaISwQQ?pwd=fjrn 提取码: fjrn
