【ComfyUI插件】ComfyUI Impact 插件(二)
前言:
ComfyUI Impact 是一个庞大的模块节点库,内置许多非常实用且强大的功能节点 ,例如检测器、细节强化器、预览桥、通配符、Hook、图片发送器、图片接收器等等。通过这些节点的组合运用,我们可以实现的工作有很多,例如__自动人脸检测和优化修复、区域增强、局部重绘、控制人群、发型设计、更换模特服饰__等。在ComfyUI的进阶之路上,ComfyUI Impact是每个人不可绕过的一条大河,所以本篇文章将带领大家理解并学会使用这些节点。
__Comfy Impact插件(一): __https://articles.zsxq.com/impact/1.html
__Comfy Impact插件(三): __https://articles.zsxq.com/impact/3.html
__Comfy Impact插件(四): __https://articles.zsxq.com/imapct/4.html
目录:
先行:安装方式
一、ToBasicPipe / FromBasicPipe / FromBasicPipe_V2节点
二、ToDetailerPipe / ToDetailerPipeSDXL / FromDetailerPipe / FromDetailerPipe_V2 / FromDetailer(SDXL/pipe)节点
三、Edit BasicPipe / Edit DetailerPipe / Edit DetailerPipe(SDXL) 节点
四、BasicPipe->DetailerPipe / BasicPipe->DetailerPipe(SDXL) / DetailerPipe->BasicPipe节点
五、Image Sender / Image Receiver节点
六、FaceDetailer / FaceDetailer(Pipe)节点
示例工作流
安装方法:
方法一:通过ComfyUI Manager安装(推荐)
打开Manager界面
方法二:使用git clone命令安装
在ComfyUI/custom_nodes目录下输入cmd按回车进入电脑终端
__在终端输入下面这行代码开始下载 git clone __https://github.com/ltdrdata/ComfyUI-Impact-Pack.git
**Pipe节点是Impact给我们提供的一类非常便利的节点,当我们需要反复用到model、clip、vae、提示词等等这些的时候,满屏的线会让我们眼花缭乱,而这类节点就解决了这个问题,我们只需在一开始时用To节点整合这些信息,然后通过一根线连接到需要用到这些信息的地方,用From节点解析出来,中间过程只需用一根线连接,极大的便利了工作流的搭建。本篇文章主要就是讲解Pipe节点,教会大家使用这类型的所有节点,增加工作效率**
一、ToBasicPipe / FromBasicPipe / FromBasicPipe_V2节点
节点功能:ToBasicPipe节点将构建工作流最基本的节点信息整合在一条管道(Pipe)中,FromBasicPipe节点和ToBasicPipe节点是配套使用的,它可以将ToBasicPipe节点整合的信息解析成原来的样子,FromBasicPipe_V2节点则是可以将灵活性再一次提升。举个通俗一点的例子:ToBasicPipe节点和FromBasicPipe节点类似于高铁的起始站和终点站,整合信息会从起始站走到终点站,而FromBasicPipe_V2节点是中间站,有了它整合信息就可以有不同的走向了,就形成了路网。
输入:
basic_pipe -> 包含了model、clip、vae、positive、negative这些基本信息的管道
model -> 要整合进管道的模型,可以是checkpoints模型、Lora模型、controlnet模型等等
clip -> 要整合进管道的clip模型
vae -> 要整合进管道的vae模型
positive -> 要整合进管道的正向提示词
negative -> 要整合进管道的反向提示词
输出:
basic_pipe -> 包含了model、clip、vae、positive、negative这些基本信息的管道
model -> 根据管道解析出来的模型,可以是checkpoints模型、Lora模型、controlnet模型等等
clip -> 根据管道解析出来的clip模型
vae -> 根据管道解析出来的vae模型
positive -> 根据管道解析出来的正向提示词
negative -> 根据管道解析出来的反向提示词
如下图所示,加入Pipe节点后线路变得更加整洁,线路的走向也一目了然,思路一眼就能看出来。
二、ToDetailerPipe / ToDetailerPipeSDXL / FromDetailerPipe / FromDetailerPipe_V2 / FromDetailer(SDXL/pipe)节点
节点功能:这些节点也是让线路更加整洁美观,但是整合的信息更多。
输入:
model -> 要整合进管道的模型,可以是checkpoints模型、Lora模型、controlnet模型等等
clip -> 要整合进管道的clip模型
vae -> 要整合进管道的vae模型
positive -> 要整合进管道的正向提示词
negative -> 要整合进管道的反向提示词
bbox_detector -> 要整合进管道的BBOX模型
sam_model_opt -> 要整合进管道的SAM模型
segm_detector_opt -> 要整合进管道的SEGM模型
detailer_hook -> 要整合进管道的定制的细节处理信息
文本框 -> 通配符规范,如果保持为空,此选项将被忽略
Select to add LoRA -> 选择要加载的LoRA模型
Selert to add Wildcard -> 选择要添加的通配符
refiner_model -> 要整合进管道的refiner大模型
refiner_clip -> 要整合进管道的refiner模型的clip模型
refiner_positive -> 要整合进管道的refiner模型连接的正向提升词
refiner_negative -> 要整合进管道的refiner模型连接的反向提升词
detailer_pipe -> 整合上面所有参数信息后的管道
注意:refiner_model, refiner_clip, refiner_positive, refiner_negative这些节点都是refiner模型对应的参数,ToDetailerPipeSDXL节点的一个优势就是可以将base模型和refiner模型结合起来。如下图所示:
输出:
model -> 从管道分离出的base模型,可以是checkpoints模型、Lora模型、controlnet模型等等
clip -> 从管道分离出的clip模型
vae -> 从管道分离出的vae模型
positive -> 从管道分离出的base模型的正向提示词
negative -> 从管道分离出的base模型的反向提示词
bbox_detector -> 从管道分离出的BBOX模型
sam_model_opt -> 从管道分离出的SAM模型
segm_detector_opt -> 从管道分离出的SEGM模型
detailer_hook -> 从管道分离出的定制的细节处理信息
refiner_model -> 从管道分离出的refiner模型,可以是checkpoints模型、Lora模型、controlnet模型等等
refiner_clip -> 从管道分离出的refiner模型中的clip模型
refiner_positive -> 从管道分离出的refiner模型的正向提示词
refiner_negative -> 从管道分离出的refiner模型的反向提示词
detailer_pipe -> 整合了所有参数信息的管道
Detailer类型的节点整合的管道可以分离出来连接Basic类型的节点。如下图所示:将FromDetailer(SDXL/pipe)节点中的base模型和refiner模型的model、clip、positive、nagetive等信息分别连接到两个ToBasicPipe节点中,可以单独使用某个模型的信息,后面也可以使用BasicPipe->DetailerPipe(SDXL)节点合并起来。
三、Edit BasicPipe / Edit DetailerPipe / Edit DetailerPipe(SDXL) 节点
节点功能:这些节点用于替换BasicPipe或Detailer_Pipe中的某些元素。
由于关于Pipe类型节点的所有参数在前面都全部讲过了,这里就不浪费篇幅继续说参数了,如果有不懂的参数往上翻翻都能找到。下面附一张使用图帮助理解(其他节点也是同理):
四、BasicPipe->DetailerPipe / BasicPipe->DetailerPipe(SDXL) / DetailerPipe->BasicPipe节点
__节点功能:不同管道之间数据转换的媒介。根据节点名的“->”可以很好的理解并记住它的功能,比如BasicPipe->DetailerPipe节点就是将Basic管道的信息转换成Detailer管道的信息。 __
由于关于Pipe类型节点的所有参数在前面都全部讲过了,这里也是不浪费篇幅继续说参数了,如果有不懂的参数往上翻翻都能找到。下面附上每个节点的使用图帮助理解:
五、Image Sender / Image Receiver节点
节点功能:图片发送器和图片接收器,这两者组合使用可以实现不用连线将图片传送到工作流的任意位置。
输入:
image -> 需要传输的图像
参数:
filename_prefix -> 设置图片名的前缀 **在传输过程中节点都会为所传图片起个图片名**
link_id -> 设置发送器或接收器的id **例如id为1的发送器发送的图片,只有id也为1的接收器可以收到** **只要id一样,一个发送器可以同时发送给多个接收器**
image -> 图片名
save_to_workflow -> 选择是否将图片保存到工作流中
image_data -> 当选择将图片保存到工作流中时,把图片转成文本信息储存在这 **该信息会随着工作流一起保存**
注意:通常我们使用LoadImage加载的图像无法在另外一台电脑中使用,因为这张图片是本地的,而save_to_workflow就是解决了这个问题。它将图片转成文本信息保存到工作流中,其他人下载该工作流时,其中的图片也随工作流一起被下载并可以使用。但是由于将图像转换成文本的效率很低,所以对于高分辨率的复杂图像应谨慎使用!同时上述过程会显著增加工作流的大小,建议对MASK图像等简单图像使用这个功能。
trigger_always -> 控制接收器是否一直触发
输出:
IMAGE -> 接收到的图像
MASK -> 接收到的图像MASK数据输出口
下图给出Image Sender和Image Receiver节点的使用示例,帮助大家理解:
该工作流的大致流程为,上面的采样器生成一个女孩,并通过红色的图片发送器发送给对应的红色图片接收器,然后使用Edit BasicPipe节点更改正向提示词中关于发色的描述,并在图片接收器中画上蒙板,随后下面的采样器在蒙板区域重新绘制头发,实现更改发色的目标。最右边两个图片接收器显示了前后对比的效果。
六、FaceDetailer / FaceDetailer(Pipe)节点
节点功能:专门针对脸部进行细节优化,内置一个独立的采样器,用于对脸部进行重新扩散。pipe版的FaceDetailer可以将base模型和refiner模型结合使用,做到更细节的修复。
输入:
image -> 需要重绘的原始图像
model -> 加载大模型
clip -> 加载clip模型
vae -> 加载vae模型
positive -> 导入正向提示词
negative -> 导入反向提示词
bbox_detector -> 加载BBOX模型
sam_model_opt -> 加载SAM模型
segm_detector_opt -> 加载SEGM模型
detailer_hook -> 对模型进行更加精细调整的拓展接口
detailer_pipe -> Detailer管道,在Basic管道的基础上加入了检测功能
参数:
guide_size -> 参考尺寸 **小于的目标图像被放大以匹配,而大于的图像将被跳过,因为它们不需要细节处理**
guide_size_for -> 设置guide_size基于什么 **当设置为bbox时,它使用检测器检测到的bbox作为参考;当设置为crop_region时,它使用基于检测到的bbox所识别的裁剪区域作为参考**
注意:选择BBOX时,基于crop_factor的放大图像的大小可能比guide_size大几倍。
max_size -> 最大尺寸 **将目标图像的最长边限制为小于max_size的安全措施,它解决了bbox可能变得过大的问题,特别是如果它有细长的形状**
seed -> 内置KSampler的种子
control_after_generate -> 控制种子的变更方式 **fixed为固定种子,increment为每次增加1,decrement为每次减少1,randomize为种子随机**
steps -> 去噪步数(也可以理解成生成图片的步数)
cfg -> 提示词引导系数,即提示词对结果产生影响的大小 **过高会产生负面影响**
sampler_name -> 选择采样器
scheduler -> 选择调度器
denoise -> 去噪幅度 **值越大对图片产生的影响和变化越大**
feather -> 羽化的大小
noise_mask -> 控制在修复过程中是否使用噪声掩码 **虽然在不用噪声掩码的情况下,较低的去噪值有时会产生更自然的结果,但通常建议将该参数设置为enabled**
force_inpaint -> 防止跳过基于guide_size的所有过程 **当目标是修复而不是细化时,这很有用。小于guide_size的SEGS不会通过减小去匹配guide_size;相反,它们会被修复为原来的大小**
bbox_threshold -> BBOX模型的检测阈值
bbox_dilation -> BBOX模型边界框的膨胀参数,用于扩展边界框的范围
bbox_crop_factor -> BBOX模型根据检测到的掩码区域,确定应将周围区域包含在细节修复过程中的次数 **如果此值较小,则修复可能无法正常工作,因为无法知道周围的上下文**
sam_detection_hint -> SAM模型中用来指定在分割时使用哪种类型的检测结果作为提示来帮助生成掩码
sam_dilation -> SAM模型边界框的膨胀参数,用于扩展边界框的范围
sam_threshold -> SAM模型的检测阈值
sam_bbox_expansion -> SAM模型在生成轮廓时扩展边界的大小,以确保更好地包含目标对象
sam_mask_hint_threshold -> SAM模型中,与sam_mask_hint_use_nagative参数一起使用,用于指定detection_hint的阈值,将掩码区域中的掩码值等于或高于阈值的情况解释为正提示
sam_mask_hint_use_negative -> 用于控制SAM模型是否使用负提示来辅助分割 **设置为True时,非常小的点被解释为掩码点中的负面提示,而掩码值为0的一些区域被解释为掩码区域中的负面提示**
drop_size -> 设置一个尺寸阈值,用于过滤较小目标的参数 **去除噪声或不相关的小目标,使得检测结果更加可靠和准确**
文本框 -> 输入通配符,如果为空,该选项会被忽略
refiner_ratio -> 使用SDXL时,设置要refiner模型的功能在总进程中所占的比例。
cycle -> 采样的迭代次数 **当与Detailer_hook一起使用时,此选项允许添加间歇性噪声,也可用于逐渐减小去噪大小,最初建立基本结构,然后对其进行细化。
inpaint_model -> 使用修复模型时,需要启用此选项,以确保在低于1.0的降噪值下进行正确的内补
noise_mask_feather -> 控制羽化操作是否应用于修复过程的蒙版、
注意:noise_mask_feather不能保证图像更自然,同时它可能会在边缘产生伪影,大家按需设置!
输出:
image -> 最终重绘后的图片
cropped_refined -> 经过剪裁和进一步处理的图像
cropped_enhanced_alpha -> 经过裁剪和精细化处理后的alpha通道
mask -> 重绘后图片的mask信息
detailer_pipe -> Detailer管道,在Basic管道的基础上加入了检测功能
cent_images -> 蒙版位置图
注意:在ComfyUI Impact 节点(一)中讲过cent_images这个参数,请大家谨慎吸收!!
示例工作流:
学习完以上节点,您就可以搭建一个简易的“脸部修复”工作流了
该工作流囊括了这篇文章学习的所有节点,将该工作流学习一遍,会对上面所学的节点有一个更深层次的理解。主要思路就是使用了三个FaceDetailer,然后通过添加、修改、拆分管道的信息生成每个FaceDetailer所需的输入信息,随后FaceDetailer内部的采样器根据检测模型检测的脸部蒙板以及提示词对脸部进行细节修复。上图正下方的四张图分别是原图、只使用Base模型的FaceDetailer结果图、结合使用Base模型和Refiner模型的FaceDetailer结果图、结合使用Base模型和Refiner模型并引入SEGS的FaceDetailer结果图,分别如下所示:
__Comfy Impact插件(一): __https://articles.zsxq.com/impact/1.html
__Comfy Impact插件(三): __https://articles.zsxq.com/impact/3.html
__Comfy Impact插件(四): __https://articles.zsxq.com/imapct/4.html