小白也能听懂的ComfyUI工作流搭建教程!节点连线整理技巧+复杂工作流解构 |
去送i仿若
2024年10月03日 23:42
收录于文集
共47篇

comfyUI工作流搭建教程

一、工作流制作“三部曲”

1、实现需求

工作流的搭建往往是为了某种需求服务的。它可能是为了解决工作上的问题,也可能视为了满足个人的兴趣爱好。

eg:用个人真实照片转黏土风格的照片。

在webUI中,使用黏土风格的lora模型,

打开图生图,上传人物图片,使用局部重绘,画出人物的轮廓,

根据画面写好提示词描述,调整参数

最终生成图片,

但是如果后面有很多这种需求的话,使用webUI会浪费大量的时间。

在comfyUI中,可以做一个批量生成真实风转黏土风的工作流。

“三步曲”:

1、分析需求

工作流是为需求服务的,而需求反过来决定了你的工作流的“头和尾”,即一开始需要用户输入什么,最后希望得到什么。

在这个需求中,简单概括就是给一张女生的自拍照片,输出一张只有人物部分变成“黏土风”的照片。

这个工作流的开头应该是有一个输入图片的节点,结尾也有一个保存图片的节点。

而第二步,就是搭建工作流中间的部分。

2、研究路径

需要调用自己接触到的各种各样的AI绘图方面的知识储备与实操技巧,思考用什么手段去实现这个需求。

在这个思考的过程中,我们的最终需求往往也会被拆分成很多个小的目标或步骤。

以上面这个例子来说,只有两个关键步骤:

一个是将图片里的人像抠出。

另一个是只针对这部分用黏土风格的模型做局部重绘。

完成同一个步骤的方式可能有很多种,但总有一些方法实现的效果更好,或者运行起来的效率更高,

比如:扣出人像,会使用vae内补编码器或者设置latent噪波遮罩。

但无论哪一种,都是需要输入用于重绘的蒙版信息,

我们可以选择直接在蒙版编辑器里手画,但明显不会很精确,

也可以选用上传图片蒙版的方式(image to mask),在外部软件先行抠图处理好

但如果 操作量大了以后效率明显也不高。

这个时候,我们可以使用comfyUI中很多强大的自定义节点,可以帮助我们全自动地解决“抠图”这个小问题。

比如:SAM+Grounding DINO的组合。

SAM & Grounding DINO模型,需要安装segment angthing的节点包。

使用方法:

左边这两个分别是用来加载SAM和Grounding DINO的模型的

(注意:模型会在执行节点时自动下载,如下载失败可以手动放置进对应目录,具体参考up住的简介区中文档的说明)

Grounding DINO能够根据文本描述来检测图像中的任意物体,生成一个大致的区域范围。

而SAM(Segment Anything Model)可以在这个区域里做更仔细的分割,把这个东西“抠”出来生成对应的蒙版

输入图片,在G-DinoSAM语义分割中输入你想要“抠”的东西的提示词。

阈值(Threshold):决定检测的宽容度,如果抠出区域太多了,可以尝试着升高一些(反之则降低)

然后就可以在右边的图像中得到抠出以后得前景图和对应的蒙版信息了。

其他节点包(如impact Pack、WAS Suite)也提供了围绕这些模型进行检测抠取、修脸修手等的功能。

之后就是黏土风重绘这个部分,同样有很多种实现的方法,比如直接选择一个“黏土风”的大模型。

这样我们就可以只使用一个checkpoint加载器,

但由于大模型的体积往往比较大,且大部分人的电脑里已经有适合的大模型了,所以这种情况下,咱们也可以使用一些黏土风的LORA来实现风格化。那这样,我们就需要再加一个LORA加载器上去。

其他不用加载器也能实现风格化的方法,比如:IP-Adapter,就可以借助一张“参考图”来塑造你的成品风格。

在采用这些模型重绘人物的时候,我们一般都会加上ControlNet来固定人物的关键识别特征,

在这个案例里,使用的是一个openpose,可以在稳定主体的同时又不会过分约束ai的生成效果。

而在comfyUI里,我们就需要ControlNet加载器、预处理器和Apply应用节点。

在实际摸索里,我们不用拘泥于某个特定的操作界面。我们可以在WebUI中去测试各种ControlNet的效果。毕竟在工作流架设起来之前一张一张的图片还是用WebUI更方便。

我们完全可以在确定使用那种操作方法以后,再在comfyUI里去把它复现出来。

3、架设工作流

第一步:添加核心节点

把所有发挥功能的核心节点添加到界面上,在上面这个案例里,我们提到的“头和尾”以及实现每一个环节需要的节点,都已经摆出来了。

除了上述的局部重绘、ControlNet等,还有一个必须要的步骤——采样器

这是每一个工作流里都应该会包含的步骤。而它的核心就是这个k采样器。

小技巧:在制作这个工作流时,一定要都先尝试一遍,以确保这些所有节点在comfyUI里都是可以顺利运作起来的。必要的节点依赖、功能模型有没有下齐全。

小技巧:在浏览器上同时打开多个这个“8188”的本地端口

(即访问comfyUI使用的127.0.0.1:8188的“网址”)

然后就可以在里面运行不同的工作流。

这样我们就可以用一个主界面来设计工作流,然后打开若干个副界面去完成测试各部分运行情况的过程。

第二步:连接工作流主干

串联这几个主要部分,建立工作流的“主干”

第三步:完善工作流旁枝

给这个工作流补全一些“枝叶”,这里的枝叶主要是在设计工作流时没有涉及到,但在工作流的连接和搭建的过程中发挥作用的节点。常见的包括两大类:

一是和节点上面的参数有关的。

在comfyUI,并不是每个参数都必须自己“亲力亲为”地填上去。

比如:提示词

这个正面提示词要不要写?要怎么写?在这个案例中,每一个人的长相都不一样,所以最理想的状态是提示词可以随着上传的图片而变化。

这样,根据想法,去找相应的节点,这里我们就可以添加tagger反推提示词的节点了。

类似的“枝叶”,比如获取图片尺寸自动输入到Latent的节点。

在使用工作流的过程中,这类节点往往能为使用者节约非常多修改参数的时间精力。

二是用来预览工作流处理进程的。

比如:我们通常会在一些关键环节加入预览图片(preview Image)的节点。用来确认这个阶段输出的结果是否合理。

在这个案例中,在一个接SAM输出的蒙版

这里有两种选择,一个是直接输出图片来看,另一种是通过转换蒙版到图像,再接预览图来看。

另一个ControlNet中,接openpose输出的骨骼图,看预处理的姿势正不正确。

在设计时加上,可以让我们使用时更加方便,也可以给用户提供“见势不妙”把工作流中间掐断的机会。

第四步:测试工作流

测试当然是看工作流是否能正常运转。在能运转的基础上,我们就可以开始微调各项绘制参数。比如:重回幅度、lor权重、ControlNet的权重。目的在于找到让工作流表现最好的那一组参数。

由于这是一个工作流,所以我们必须保证这组参数的“普适性”,建议多换几张不同规格、不公形式的照片,看能不能都稳定输出符合需求的结果。

测试中的问题

小bug——当使用者输入一张尺寸很大的图片时,如果直接转换为Latent,就会导致采样的尺寸巨大,工作流运行巨慢的问题。

解决办法:添加一个图片缩放(Image Resize)的节点。尽可能将上传的照片转换到一个队AI绘图模型友好的尺寸上。

一些节点包中包含这中节点,比如:KJ节点包。

小技巧:在开启“保持比例”时,上面设置的宽高比会变成一个“最大宽高”的数值,任何比例的图片都会被自动调整到这个尺寸上。

让较长边和你设定的数值一致。

SAM识别出来的人物蒙版有时会有一些小的“空隙”,生成出来的图片偶尔也会有比较生硬的边缘接缝,

解决办法:对蒙版后处理的手段对识别完的内容加工。

KJ节点包里的这个扩展加模糊(Grow with blur)的节点可以一次性解决很多问题。

用它给蒙版扩张了20像素,再模糊10像素以后,

效果就自然多了。

第五步:整理工作流

工作流的整理就是让不同的节点以一个合适的方式排列在工作面板里,让它的整体逻辑和各个功能组件都易于识别。

整理小技巧

第一点,排版。

将节点对齐,同时尽可能做到宽度、高度等一致,

(节点可以通过拖动边界进行放大缩小)

将同一列或同一行的节点在高度和宽度上同一。这样会让他们看上去更加舒服,和平面设计里的排版是一样的。

节点对齐

可以在选中多个节点以后,通过右键菜单内的节点对齐选项来实现。

(将选中节点对齐到……)

节点吸附背景网格

在移动或者缩放节点时,按住shift键可以让它们吸附背景网格。对排版也会有一定的帮助的。

第二点,隐藏。

一些工作流成型以后不需要用保护参与的节点,可以点击它们左上角的小圆点把它“收起来”

用这样的方式“精简”版面,

比如文本编码器、tagger甚至是vae等节点。建好了以后都可以收起来。

注意:由于这种隐藏节点,会让你连接端口、走线变得更加困难,所以最好是在工作流完完全全确定下来以后再这样做,也不要在一些可能还要用到的节点上这么做。

第三点,分组。

一些明确被用于发挥同一种作用的节点,可以考虑以“分组”的形式,整理、绑定到一起,从而让用户可以更好地辨析工作流各部分的功能。

在空白处右击——新建分组——填好名字

面板上就会多一个这样的带颜色的小方框。

拖动右下角的进行放大,把这些节点圈到它的范围里。

和对齐一样,组也是可以在选项里改标题、改颜色的。

右击组——编辑组——标题、颜色、字体大小、移除、锁定

当然,分组还可以按住组的标题,可以将所有节点都进行拖动

通过一些特定的节点,我们还可以控制整组节点的“开关”(Bypass)

第四点,理线。

其实就是合理调节不同节点的位置,让它们之间相连的线不至于太乱。

(类似于家里乱放的电线,要把它整理好一样)

理线没有什么思路,但我们可以尝试将一些有理在主要板块之外,同时离相连接节点都比较远的节点。

比如:添加噪声蒙版。

把它拖动一下,就会发现整个工作流的观感都会不大一样。

而在复杂的工作流里,一个常见的问题就是:当一个端口输出的信息,可能被后续的多个环节反复利用时。就会在局部造成大量线堆叠。

解决办法:使用转接点(Reroute)

以这个Image出来的线为例,(假如)它要同时输入给ControlNet的两组预处理器。

我们就可以从它拉一根线到ControlNet附近,

此时松手,就可以在快捷匹配的选项里找到——转接点。

另一头出来的端口属性和原来的端口是完全一样的。

这个时候,我们就可以再从转接点份两条线出来连两个预处理器

类似的,如Clip、vae这种“一对多”的调度,其实都可以用转接点把线理得更加清晰。

改变线的连接方法——直线、曲线……

设置——连线渲染模式——曲线(默认Spline)、直线、直角线(Straight)、隐藏。

很多人都喜欢使用直角线,但缺点是会让大量平行线重叠(尤其是在你做过对齐的情况下)

建议在实操的过程中灵活切换。

调试用曲线,“定稿”后用直角线。

(当然,最后还是看用工作流的人怎么设置)

第五点,标注。

在使用一些工作流的时候,我们可能会看到一些像上面这样的文本框,里面会填写文字提示,来引导使用者去进行操作或设置参数。

这其实是一个节点——“注释”(Note)

它是一种工作流作者和用户去做沟通的方式,可以在任何一个地方发挥作用。

像是“效果不好请改这里”、“可以换用自己喜欢的模型”等等。

都会让拿到你工作流的用户体验更周全。

最后整理完工作流的效果。

总结

二、三个进阶工作流

1、产品图换背景

主要的组件如下图:

由于tagger没有那么擅长反推静物的场景,就会导致输入进正面条件里的提示词非常“潦草”。

最终重绘出来的背景也会比较干瘪。所以这个时候tagger方案就有点行不通了。

解决方式:让用户自己输入

首先我们并不是一定要把所有东西都做成“全自动”的,这个工作流才能成立;其次,因为这类工作流的使用者往往对背景也会有自己的要求,添加多一个输入项对于他们而言反而是好事。

当然,如果他们对这个不熟悉,直接让他们输入提示词、lora权重……也会让使用者放弃使用。

解决方法:使用翻译节点

分别让用户在这两个地方用中文输入商品本身的特点和想要的背景形象。

它们就会被自动翻译成英文输出。

然后使用Easy Use节点包里一个叫做“提示词联结”(Prompt Concat)的节点,把它们“合并”在一起。

为了增强提示词的质量,后面还增加了一个“风格提示词选择器”,这是一个可以根据你选定的风格,自动在提示词内加入对应的描述成分的节点。

(注:虽然是为了XL模型设计的,但对1.5模型也有一定的作用)

up主选择的是广告-奢侈品的风格,最终输出的提示词就是这样的:

最后把这个风格提示词选择器连接至Clip文本编码器中

这下,不管你会不会写提示词,都可以在这个工作流里生成你想要的东西了。

但是这个工作里整体还并不美观,用户输入提示词也不够直接,需要到翻译节点里输入中文,而且操作的过程中也容易误触其他选项。

小技巧:

primitive元节点

它可以让你把它连接到像这样任意的一个转换出来的输入端口上时,它就会自动的把对应的参数或输入框展现在节点里。

(翻译节点的文本转换成了输入端口的)

这个时候我们就可以通过元节点,把这些需要用户输入的选项,从一个复杂的节点里单独“分离”出来。

最后进行排版整理。

用户需要输入的内容,统一集中在了第一个板块的上半部分。

2、老照片上色修复

一般老照片上色的两个问题:清晰度(放大)Resolution和上色Colorize

up主使用的方案是使用SD1.5的大模型搭配ControlNet的Recolor模型进行上色。

然后利用ControlNet Tile模型在低重绘幅度下进行超分(放大)

ControlNet Recolor教程:

网页链接​

ControlNet Tile教程:

网页链接​

搭建的工作流预览:

两次采样,一次上色,一次放大,所以会有两个KSampler

分别接两组不一样的ControlNet

注意:由于对黑白图片反推的来的tagger里一定会出现诸如“黑白”一类的描述词。

如果直接把它们输入进后面的两次采样里,那就和很容易导致最后的成品色彩也是黑白的。

解决方法:使用tagger本身的“排除标签”来解决这个问题。

在这里输入“Black and white”、“monochrome”、“greyscale”之类的词,那它就会自动的把它们从反推结果里去掉。

多出来的一个Clip文本编码器,里面输入包括“色彩鲜艳”、“色彩丰富”的这样的词,

再用条件合并把它们汇总到一起,进一步增强了上色的效果。

而负面提示词使用的是:自动负面提示词生成器。

在这里面也可以塞进一些常用的负面Embeddings

在第一次采样里,重绘幅度(降噪)需要拉到最高,这样才不会让图片本来的颜色干预重新上色

在超分放大中,采用的是传统放大模型的“解码放大再重新编码”的操作。

然后,二次重绘幅度(降噪)设置得比较低。

对于这种涉及多个环节的工作流,在每完成一个环节以后,我们最好都牵出一根线来,连VAE和保存(或者预览)图片的节点

输出阶段性的产物,以便观察、修改。

小问题:

有些带颜色的老照片只需要放大、不需要上色。

有些足够清晰的黑白照片又只需要上色,不需要放大。

解决方法1:使用“忽略”(Bypass)功能

如果一张图片只需要上色,我们就只需要把后面负责放大的一系列节点都“忽略”掉就好

Ctrl+B:一次性忽略所有选中的节点

解决方法2:使用RGThree节点包里的“忽略多组”节点。

可以用来控制某些特定节点或者特定组的整体忽略与否。

使用方法:

如果是单个节点的忽略开关,只需要把这个节点的任意一条输出拉到它身上

如果是控制组,只需要新建组并把药开关的节点放进这个组里就行了。

节点上这样一个开关按钮,

点一下“关闭”,再点一下“打开”,两种节点里的操作是一样的。

在老照片上色这个案例里,我们只需要把所有负责上色的节点装进一个组里,在把所有负责放大的节点装进另一个组。

然后在任意空白位置新建一个忽略组节点,如果只放大不上色,就关闭上色组;反之,就可以关闭放大组。

这种方法可以被广泛地应用在各种涉及功能“分支”的工作流搭建情形里。

3、“通缉令”制作XD

第一步:制作一张模版图片。

在这个案例里,中间照片的宽高比例大约是1.38:1,

我们可以直接把实拍照片利用二次元风格的模型图生图转绘成海贼王风格的图片。

当然,也可以使用IPAsapter中的一个Face ID的模型,它可以帮助我们从一张照片里提取人物面部的信息,

再汇入到checkpoint的绘制过程中,实现富有创意的人物肖像效果。

我们可以用它搭配插画风的大模型以及一个“海贼王风格”的LORA,再加上一些合适的提示词,就可以制作出这样的“通缉令照片”

像这种把图片贴上去和修改文字的操作也能在comfyUI里做。

首先,植入图片,在效率节点包里有一个叫做”Image overlay“的节点,允许我们把一张图片”贴“到另一张图片的对应位置上。

基础图像:底图

覆盖图像:贴上去的图片

x偏移、y偏移:xy分别指的是它相对于原图左上角原点的横纵坐标

如果贴的是一张透明背景的图片,则还需要把“遮罩”(蒙版、mask)的选项一并连上。

否则会出现类似这样的黑底遮挡下层图片。

全图大小:1024*1448

照片大小:836*606

从整张图片的左上角到这个照片区域的左上角的横纵坐标距离大概是97*313,这个就是我们要设置的xy偏移了。

根据这些数据,设置位移参数,最终,照片就被贴到通缉令上了。

给图片加字和贴图的方法类似。

在CR节点包里,有一个叫做文字覆盖(CR Overlay Text)的节点。

输入一张图片,在这个“文字覆盖”的节点上打下对应的文字内容,设定字体、字号、对齐方式和位置的xy偏移数值。

(注:这个节点只能读取节点文件夹中有的少量字体,如果你想使用你电脑上有的字体,请将对应的otf或者ttf文件复制到custom_nodes\ComfyUI_Comfyroll_CustomNodes\fonts文件夹中)

除了像上面那样“精确测量”,我们也可以直接在comfyUI里开着预览模式去试验,找出最合适的字体和字号。

小技巧:comfyUI里的节点是可以在不同的窗口里“跨区域”复制的

三、(Nenly同学)——下面这些是大佬的心得与总结:

和单纯地绘制一张图片不同,工作流是一个需要被他人使用的“作品”,也因此,在制作一个工作流的过程中,学会换位思考,多拿“使用者”的角度看问题是非常重要的。把一堆节点杂乱无章地堆在一起,自己能知道怎么用,但第一次接触工作流的其他用户又会有什么样的体验呢?所以整理编排和适度的注释是非常有必要的。在今天的这几案例里,我想你也已经充分体会到了。

另外,很多刚开始尝试制作工作流的朋友,在解决某个需求的时候,总是会有种“捉襟见肘”的感觉,不知道要以什么样的方法或工具去实现,这个问题,我觉得唯一的解法就是多看,多做。多看,是看别人做好的优秀工作流,然后尝试着去一个步骤一个步骤地分析,他们用了哪些节点?又是如何连接、设计的?而多做,就是做你自己的工作流,基于某个特定需求去尝试着搭建起一整套流程来,就像这节课里我向你展示的一样。

在这个过程中,“需求”会给你明确的目标感,会更好地激发你运用不同工具的潜力,并在成功的时候给予你充分的正反馈。在使用各种各样的工作流时,你的电脑里肯定也会安装一大堆的节点包,而里面每一个节点,其实都有它们被设计出来的用途。

如果你不知道要用什么节点来解决你手头碰到的问题时,可以尝试使用相关的词语在节点列表里搜索,然后一个个拉出来试验,我就是这么做的。如果有哪个节点恰好能发挥作用,在以后碰到类似的问题时,都可以拉它出来帮忙。

做这些所有的事情,本质上其实是在丰富你解决问题的手段,因为工作流说到底就是一种“解决问题”的艺术,你的手段越多,在解决特定问题的时候就会越游刃有余。

而在那些你尚未探索到的节点之外,这个行业也每天都有新技术、新进展在诞生,比如AI虚拟换装,在去年,大部分工作流只能使用“人台式”的简单局部重绘来实现;但到了今年,陆续有个各种换装模型被开发出来,还有IC-Light一类的光照模型可以使重绘更加自然。

我们总说comfyUI无所不能,但它其实只是为这些技术提供了一个足够灵活的载体,而模型和技术的突破在更上游,能改变的东西也更多。所以,“精通”comfyUI这件事情,或许远不止于这一方小小的操作界面,紧跟瞬息万变的AIGC行业,也需要你付诸足够多的时间和精力,加油吧!