前言:

ComfyUI Impact 是一个庞大的模块节点库,内置许多非常实用且强大的功能节点 ,例如检测器、细节强化器、预览桥、通配符、Hook、图片发送器、图片接收器等等。通过这些节点的组合运用,我们可以实现的工作有很多,例如__自动人脸检测和优化修复、区域增强、局部重绘、控制人群、发型设计、更换模特服饰__等。在ComfyUI的进阶之路上,ComfyUI Impact是每个人不可绕过的一条大河,所以本篇文章将带领大家理解并学会使用这些节点。

__Comfy Impact插件(一): __https://articles.zsxq.com/impact/1.html

__Comfy Impact插件(二): __https://articles.zsxq.com/impact/2.html

__Comfy Impact插件(四): __https://articles.zsxq.com/imapct/4.html

目录:

先行:安装方式

一、NoiselnjectionDetailerHookProvider节点

二、DenoiseSchedulerDetailerHookProvider节点

三、UnsamplerDetailerHookProvider节点

四、Switch (Any) / Inversed Switch(Any)节点

五、DetailerHookCombine节点

六、MaskDetailer (pipe)节点

示例工作流

安装方法:

方法一:通过ComfyUI Manager安装(推荐)

打开Manager界面

imageimage

方法二:使用git clone命令安装

在ComfyUI/custom_nodes目录下输入cmd按回车进入电脑终端

image

__在终端输入下面这行代码开始下载 git clone __https://github.com/ltdrdata/ComfyUI-Impact-Pack.git

image

一、NoiselnjectionDetailerHookProvider节点

节点功能:可以方便地将噪声注入到图像样本中,并允许用户动态调整噪声的强度,从而在图像处理过程中实现更灵活的噪声控制。

image

参数:

schedule_for_cycle -> 控制注入开始的时机,from_start表示从第一个循环开始注入噪声,skip_start表示跳过第一个循环的噪声注入 **这里的循环是指重复应用impact包中的Detailer类型节点。与分割 Detailer的主要区别在于,它是在潜在空间进行的,无需经过VAE编码和解码**

source -> 噪声的来源,可选GPU和CPU

seed -> 生成噪声的随机数种子

control_after_generate -> 控制随机数种子的变更方式

start_strength -> 初始的噪声注入量

end_strength -> 结束时的噪声注入量

注意:随着噪声注入的进行,噪声的强度从start_strength逐渐增加或减小到end_strength。这样可以实现噪声强度随时间或步骤的平滑过渡。

输出:

DETAILER_HOOK -> 经过噪声注入处理后的样本数据

注意:NoiselnjectionDetailerHookProvider节点使用时需要安装ComfyUI_Noise,因为该节点内部使用了BNK_InjectionBoise。当系统提示以下类似的界面时(可能根据浏览器的不同而不一样),点击确定自动安装并重启ComfyUI即可。

image

下面给出一个工作流来帮助理解这个节点的作用和功能:

image

二、DenoiseSchedulerDetailerHookProvider节点

节点功能:根据扩散进度调整模型的去噪水平,使其逐渐接近预先设定的去噪值。

image

参数:

schedule_for_cycle -> 控制注入开始的时机

target_denoise -> 目标去噪值,即希望模型在扩散过程中逐渐达到的去噪值

输出:

DETAILER_HOOK -> 经过处理后的样本数据

注意:当循环次数等于1时,该节点将不起作用!

下面给出一张图,展示使用该节点的使用方式:

image

三、UnsamplerDetailerHookProvider节点

节点功能:在循环过程中逆转潜在空间中的采样过程,通过输入提示词进行还原操作(Unsampler)移除特定元素。

image

输入:

model -> 输入大模型

positive -> 正向提示词

negative -> 反向提示词

注意:这里的正反向提示词是输入需要移除的元素,比如我想要突出“干净”这个元素,那我就应该在正向提示词里输入“脏”这类的提示词,反向提示词原理类似。

参数:

steps -> 总步数

start_end_at_step -> 开始的步数即从总步数的第几步开始采样还原

end_end_at_step -> 结束的步数即从总步数的第几步结束采用还原

cfg -> 提示词引导系数,即提示词对结果产生影响的大小 **过高会产生负面影响**

sampler_name -> 选择采样器

scheduler -> 选择调度器

normalize -> 是否进行标准化处理 **确保不同特征的值在相似的范围内,有助于加速收敛过程,这个属于深度学习的知识范畴,没有学过这方面的知识可以不去深究**

schedule_for_cycle -> 控制采样还原操作的开始时机

注意:选择采样器时,选择ddpm、dpmpp_2m_sde、dpmpp_2m_sde_gpu、dpmpp_3m_sde、dpmpp_3m_sde_gpu、uni_pc这些采样器时会出黑图,而且使用ddim采样器时会报错。推荐使用节点默认的采样器即可,当然这些都是我的个人使用经验,仅供参考,大家也可以自己尝试一下不同的采样器是什么结果。

输出:

DETAILER_HOOK -> 经过处理后的样本数据

下面给出一张图,展示使用该节点的使用方式:

image

四、Switch (Any) / Inversed Switch(Any)节点

节点功能:这两个都是转换节点,Switch (Any)节点可接受任意数量的输入并产生一个输出。它的类型在与任意节点连接时确定,连接输入会增加可用的连接插槽。Inversed Switch(Any)节点则相反,它只接受一个输入,并输出多个输入中的一个。

imageimage

输入:

input1 -> 输入数据

注意:这个两个节点可以转换任意类型的数据,数据类型通过连接输入的第一根线确定。

参数:

select -> 可选择的输入参数 **最小值为1,最大值为999999**

sel_mode -> 确定select参数的时刻,select_on_prompt表示在队列提示时确定,select_on_execution表示在工作流执行时确定

注意:在使用select_on_prompt时,select只能与队列提示中确定的部件或原始节点一起使用。

输出:

selected_value -> 根据选定的输入参数确定的输入参数值

selected_label -> 根据选定的输入参数确定的标签 **如果找不到标签,则使用参数名作为标签**

selected_index -> 选择的索引,即传入的 select 参数的值

output1 -> 根据选择的输入参数输出转换后的值

注意:当Switch (Any)节点和Inversed Switch(Any)节点选择转换为原始节点数据时,一定要谨慎,因为选择范围没有受到适当的约束,可能会导致意外的行为。

下面给出使用用例:

image

image

五、DetailerHookCombine节点

节点功能:将两种Detailer_Hook类型的数据整合在一起并输出,该节点的功能较为简单。

image

输入:

hook1 -> 需要整合的第一个Detailer_Hook数据

hook2 -> 需要整合的第二个Detailer_Hook数据

输出:

DETAILER_HOOK -> 整合后的Detailer_Hook数据

注意:这里整合是将这两个Detailer_Hook数据各自实现的功能合并起来一起实现,而不是生成一个具有新功能的Detailer_Hook数据。

六、MaskDetailer (pipe)节点

节点功能:这是一个在输入图像上进行局部重绘的节点,重绘区域将被控制在蒙板区域内。

image

输入:

image -> 输入图像

mask -> 蒙板区域

basic_pipe -> basic管道,包含了model、clip、vae、positive、negative等信息

refiner_basic_pipe_opt -> refiner模型的basic管道,包含了refiner的model、clip、vae、positive、negative等信息

detailer_hook -> 细节调整参数

参数:

guide_size -> 参考尺寸 **小于的目标图像被放大以匹配,而大于的图像将被跳过,因为它们不需要细节处理**

guide_size_for -> 设置guide_size基于什么 **当设置为bbox时,它使用检测器检测到的bbox的边界框作为参考;当设置为crop_region时,它使用基于检测到的bbox所识别的裁剪区域作为参考**

max_size -> 最大尺寸 **将目标图像的最长边限制为小于max_size的安全措施,它解决了bbox可能变得过大的问题,特别是如果它有细长的形状**

mask_mode ->

seed -> 内置KSampler的种子

control_after_generate -> 蒙板模式,用于指示在细节增强过程中是仅对掩膜内部进行处理还是对整个图像进行处理。

steps -> 去噪步数(也可以理解成生成图片的步数)

cfg -> 提示词引导系数,即提示词对结果产生影响的大小 **过高会产生负面影响**

sampler_name -> 选择采样器

scheduler -> 选择调度器

denoise -> 去噪幅度 **值越大对图片产生的影响和变化越大**

feather -> 羽化的大小

crop_factor -> 裁剪因子,用于裁剪图像

drop_size -> 降低尺寸,用于控制细节增强过程中的图像降低尺寸的大小

refiner_ratio -> 使用SDXL时,设置要refiner模型的功能在总进程中所占的比例。

batch_size -> 设置潜空间数量

cycle -> 采样的迭代次数 **当与Detailer_hook一起使用时,此选项允许添加间歇性噪声,也可用于逐渐减小去噪大小,最初建立基本结构,然后对其进行细化。

inpaint_model -> 修补模型,用于控制是否启用图像修补模型

noise_mask_feather -> 噪声蒙板羽化,用于控制噪声蒙板的羽化程度

注意:noise_mask_feather不能保证图像更自然,同时它可能会在边缘产生伪影,大家按需设置!

输出:

image -> 重绘后的图像

cropped_refined -> 使用refiner模型后的裁剪后的图像

ropped_enhanced_alpha -> 经过裁剪处理后重绘图像的Alpha通道

basic_pipe -> basic管道,包含了model、clip、vae、positive、negative等信息 **当多个MaskDetailer (pipe)节点连续使用时方便节点的连接**

refiner_basic_pipe_opt -> refiner模型的basic管道,包含了refiner的model、clip、vae、positive、negative等信息 **当多个MaskDetailer (pipe)节点连续使用时方便节点的连接**

示例工作流:

学习完以上节点,您就可以搭建一个简易的“局部修复”工作流了

image

该工作流囊括了这篇文章学习的所有节点,将该工作流学习一遍,会对上面所学的节点有一个更深层次的理解。该工作流实现了钢铁侠胸甲的细节增强。主要思路就是加载图片,并在图片中画上胸甲的蒙板,将图片和蒙板一并输入到MaskDetailer (pipe)节点中进行胸甲的重绘,同时加入了一系列控制噪声的Detailer Hook节点来进行重绘时噪声的精细把控,实现更好的出图效果。图中三张结果图,第一张为加载的原图,第二张为仅使用MaskDetailer (pipe)节点的图,第三张为加入控制噪声的Detailer Hook节点的图,可以看到,从左到右图片的质量是递增的,所以在我们进行局部修复是,加入控制噪声的Detailer Hook节点可以增强出图质量。上述的三张图的原图如下(从左到右):

image

image

image

__Comfy Impact插件(一): __https://articles.zsxq.com/impact/1.html

__Comfy Impact插件(二): __https://articles.zsxq.com/impact/2.html

__Comfy Impact插件(四): __https://articles.zsxq.com/imapct/4.html