前言:

ComfyUI-Advanced-ControlNet库包含大量时间插值控制方法,及从时间维度和latent层的维度对图像的生成过程进行控制,主要概念就是__时间步长关键帧__和__潜在关键帧__两个概念。当您学会使用该库,你可以在图片或视频生成过程中加入自己的控制方法,比如在扩散的前50使用权重0.1,在扩散的后50使用0.9的权重,也可以在latent维度,对单个潜空间进行时间步长设置,本文将对节点进行逐个讲解,并且会以尽量详细的过程和配图,尽量通俗易懂的语言进行书写。

__Comfy-Advanced-ControlNet(二): __https://articles.zsxq.com/controlNet/2.html

目录:

先行:安装方法

一、Apply Advanced ControlNet节点

二、Timestep Keyframe节点

三、Latent Keyframe节点

四、Latent Keyframe Group节点

五、Latent Keyframe Interpolation节点

六、ControlNet Custom Weights/ControlNet Soft Weights节点

七、T2IAdapter Soft Weights/T2IAdapter Custom Weights 节点

"转绘"示例工作流:

安装方法:

在ComfyUI主目录里面输入CMD回车。image

在弹出的CMD命令行输入git clone xxx,即可开始下载。image

github项目地址:https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet.git

*****特别重要*****

时间步长关键帧:将时间进行分割,设置为你满意的时间尺度,比如0-1s,分割成0-0.1,0.1-0.5,0.5-1。

潜在关键帧: 假如我们Latent的batch设置为10,则每一个latent称为一个关键帧。

模型权重:指模型中的参数,用于调整模型的行为和输出。在控制网络中,权重通常用于调整模型对不同输入特征的关注程度。

控制强度:指定某种影响或调整的程度或强度。在控制网络中,“strength” 可能用于调整某些参数或控制某些操作的强度或影响程度。

注意:在计算机领域,索引或者编号,默认为从0开始。

一、Apply Advanced ControlNet节点

节点功能:该结点应用ControlNet,并且接收蒙版信息,以及时间分布信息,并且设置有相应的覆盖策略。image

输入:

positive -> 正向提示词的条件信息

negative -> 反向提示词的条件信息

control_net -> 传入ControlNet模型,适配的模型自动转为Advanced版 **大部分都适配**

image -> 出入预处理图片,比如深度图,线稿等

mask_optional -> 传入蒙版信息

timestep_kf -> 传入时间步长关键帧信息

latent_kf_override -> 传入潜在关键帧信息

weights_override -> 权重覆盖,如果这里有参数传入,则会覆盖传入的强度信息

model_optional -> 传入大模型

注意:如下图所示虽然在时间步长关键帧(红色节点)中我们设置了,控制权重一直为1,即代表严格按照深度图进行扩散,但是因为weights_override我们设置为0.1,所以对传入的权重进行覆盖,最终生成的图像并不符合深度图信息。

image

注意:如下图所示在下方紫色方框中设置潜空间图像的控制强度为1,则应该产生与深度图接近的图像,但是在latent_kf_override参数出,我们传入图像的控制强度为0.1,所以进行了权重覆盖,最终出图与深度图信息没有关系。image

参数:

strength -> 设置模型的控制强度 **未有参数传入时,起作用**

start_percent -> 设置控制信息开始百分比 **未有参数传入时,起作用**

end_percent -> 设置控制信息结束百分比 **未有参数传入时,起作用**

输出:

positive -> 混合控制信息后输出的条件信息

negative -> 混合控制信息后输出的条件信息

model_opt -> 混合控制信息后输出的模型信息

二、Timestep Keyframe节点

节点功能:该结点用来汇总时间表,以及提供潜在关键帧设置策略的输入点,将这些信息汇聚为时间步长信息。image

输入:

prev_timestep_kf -> 时间步长信息,通过start_percent控制 **多个该节点可以串联**

cn_weights -> 权重时间表,代表ControlNet的作用权重 **如果有传入有效值,会覆盖stength的值**

latent_keyframe -> 代表潜空间的某一个或某一组 **可传入单个控制信息,或整组控制信息**

mask_optional -> 代表蒙版信息

注意:如下图所示通过串联两个(或者多个)该节点,即完成时间表的创建,通过strat_percent参数用来控制作用域(即起作用的时间范围)。image

参数:

start_percent -> 设置该时间步长关键帧起作用的开始时间。

strength -> 设置在该时间步长关键帧起作用时的控制强度 **先前有传入,此值会一起计算强度**

null_latent_kf_strength -> 未提供索引的潜在关键帧的控制强度

inherit_missing -> 如果某时间段未设置强度,可选择是否继承该时间段的控制强度

guarantee_usage -> 确保无分配时间步长就近选取控制强度

注意:如下图所示,左边时间步长关键帧设置start_percent=0,strength=0.5,右边时间步长关键帧设置start_percent=0.5,strength=1,即表示在0到0.5的时间内,我们使用0.5的控制权重,在0.5到1的时间内,我们使用1的控制权重

image

输出:

TIMESTEP_KF -> 输出已经设置的时间步长信息

注意:start_percent的取值范围为0-1,strength的取值范围0-10,但是strength设置值过大会导致生成的图像毁坏,如下图所示:image

注意:当strngth我们设置为1的时候,控制强度就基本等于100%了,所以不需要过大的值(大家自行选择),下面两幅图分别代表在时间0-0.8设置strngth=0.1 0.8-1设置strngth=1.0和在时间0-0.8设置strngth=1 0.8-0.1设置strngth=1.0,可以看出时间域长的占据主导图片生成的过程。image

image

三、Latent Keyframe节点

节点功能:该节点用来指定对应的潜空间图像去使用指定的控制强度。image

输入:

prev_latent_kf -> 潜在关键帧信息,通过batch_index指定 **多个该节点可以串联**

参数:

batch_index -> 表示潜空间帧索引 **计算机领域,索引从0开始**

strength -> 作用与该帧的控制强度 **如果设置索引冲突,后会和前共同计算**

如图:第0个潜空间图像,设置强度为1,在0-0.8的时间步长我们设置强度为0.1,设置null_latent_kf_strength(未指定索引的潜空间图像)为10,所以在第一个时间步长关键帧中,第0个图像的控制强度为(1与0.1共同计算结果),而第1个图像的控制强度为(10与0.1共同计算结果),所以第0个图像稍微不受深度图约束,而第二张则与深度图更加符合。image

__
如图:在0-0.8的时间步长我们设置强度为0.1,设置null_latent_kf_strength(未指定索引的潜空间图像)为10,最终生成的两张图像与深度图均不符合,所以只有当latent_keyframe有输入的时候,null_latent_kf_strength才会起作用。__image

输出:

LATENT_KF -> 输出蕴含设置信息的潜在关键帧信息

注意:如下图所示,我们初始生成了两个Latent图像,在Latent Keyframe节点,我们分别对不同的步长进行不同的索引设置,索引0的潜空间图像,在0-0.8使用strength=1的控制强度,而索引1的潜空间图像,在0-0.8使用strength=0.1的控制强度,所以最终生成的两张图像,第一张符合深度图信息,但是第二张并不符合。

image

四、Latent Keyframe Group节点

节点功能:这个节点可以批量给潜在关键帧赋予权重,以编程语言的书写习惯给出。image

输入:

prev_latent_kf -> 潜在关键帧信息 **多个该节点可以串联**

latent_optional -> 此参数可以不传入 **此参数我在代码没找到应用,所以忽略**

参数:

文本框 -> 输入格式按照 索引=权重,索引=权重来写 **注意逗号应使用英文**

print_keyframes -> 是否打印输出的信息 **在命令行会打印相关信息**

输出:

LATENT_KF -> 输出潜在关键帧信息

注意:如下图所示,我们在Latent Keyframe Group节点中,我们设置第0个潜空间图像权重为0.1在一开始就参与控制扩散,在第1个潜空间图像权重设置为1.0同样在一开始就参与扩散,最终我们生成两张图像,其中第一张图像与深度图几乎无关,第二张按照深度图进行扩散生成。

image

注意:如下图所示,当我们把print_keyframes设置为true的时候,我们可以在命令行看到输出的潜在关键帧信息和其对应的强度信息。image

五、Latent Keyframe Interpolation节点

节点功能:该节点用来选择潜在关键帧的顺序索引,并且赋予可选的渐变效果。image

输入:

prev_latent_kf -> 潜在关键帧信息 **多个该节点可以串联**

参数:

batch index from -> 索引的开始值 **包含在内**

batch index to excl -> 索引的结束值 **不包含在内**

strength from -> 控制强度的起始值

strength to -> 控制强度的最终值

interpolation -> 渐变效果 **提供了4中渐变效果**

print_keyframes -> 是否打印输出的信息 **在命令行会打印相关信息**

注意:如下图所示,给出四种渐变效果linear、ease-in、ease-out、ease-in-out,他们分别代表匀速变化,渐进,减速,渐进-减速四种状态。

image

输出:

LATENT_KF -> 输出潜在关键帧信息

注意:如下图所示,我们设置索引为[0,1),那么我们就等于只选择第0个潜在关键帧,渐变方式为匀速渐变,控制强度从1降低到0,最终可以看到第一张图像按照深度图信息进行扩散,但是第二张图像并没有按照深度图进行扩散。image

六、ControlNet Custom Weights/ControlNet Soft Weights节点

节点功能:这两个节点用来批量设置强度信息。

注意:这两个节点的区别就是Custom需要自行设置参数,Soft是默认给出了一个参数列表

image

输入:

weight_xx -> 设置强度信息

flip_weights -> 表示是否对权重进行翻转

输出:

CN_WEIGHTS -> 输出设置的强度信息

TK_SHORTCUT -> 输出时间步数关键帧

注意:这个权重真的是很玄学的东西,这13个权重的值以我的理解来看是去代替掉网络中的部分参数,但是具体的替代方式我并没有找到,其次就是这些权重不针对专门的Latent帧去做控制,我做了很多对比实验,但是得不出合理的结果,实验我放在下面了,大家可以自行推测:

1):参数全为0image

2):参数全为1image

3):参数前面1,后面为0image

4):参数前面0,后面为1

image

七、T2IAdapter Soft Weights/T2IAdapter Custom Weights 节点

节点功能:该节点用来设置控制强度。image

输入:

weight_xx -> 代表权重信息

参数:

flip_weights -> 是否要将强度进行反转

输出:

CN_WEIGHTS -> 输出设置的强度信息

TK_SHORTCUT -> 输出时间步数关键帧

注意:当我们使用T2IAdapter节点的时候,必须使用对应的ControlNet模型,个人感觉T2I-Adapter模型的效果要比传统的ControlNet好一点,下图所示结果为赋予不同强度变化的情况下得到的图像。

image

模型下载链接:https://huggingface.co/TencentARC/T2I-Adapter/tree/main/models

"转绘"示例工作流:

学习完以上节点,您就可以搭建"转绘"示例工作流了image

这里使用SD1.5的大模型,使用ControlNet Soft Weights节点去分散赋予不同时间步长不同的控制强度,在保证大体深度信息不变的情况下,又给与模型一定的自我创造能力,最终完成对图像的转绘工作:image

image

孜孜不倦,方能登峰造极。坚持不懈,乃是成功关键。

__Comfy-Advanced-ControlNet(二): __https://articles.zsxq.com/controlNet/2.html