让你的ComfyUI达到和WebUI相同的效果

阅读建议:适合使用过WebUI,并准备尝试使用ComfyUI且已经安装成功,但弄不清ComfyUI工作流的新人玩家阅读。我也是刚刚开始尝试各种玩具的新人玩家,希望大家也能分享更多自己的知识!
如果不知道怎么安装和初始化配置ComfyUI,可以先看一下这篇文章:
Stable Diffusion ComfyUI 入门感受 - 旧书的文章 - 知乎 https://zhuanlan.zhihu.com/p/620297462
前言
相信不少喜欢尝试新鲜事物的AI玩家已经用过ComfyUI这样的新工具了,与WebUI相比,ComfyUI有着更快的出图速度和更小的资源占用。但是复杂的工作流自定义能力反而非常劝退,很多在WebUI中工作正常的咒语,到了ComfyUI中就会出鬼图,很让人困惑。这有两方面原因,一是ComfyUI对关键字的权重有着不同于WebUI的理解,其二便是工作流设置存在缺漏。
本文会介绍一个简单的有Hires.Fix能力的ComfyUI工作流,让在WebUI上能跑通的咒语也能在ComfyUI上生成不错的图片 。
我需要从零开始搭建工作流吗?
不用。当你第一次使用ComfyUI时,系统已经有一个内置的工作流,大概是下图这样的:

现在可以直接复制一段WebUI上能跑的咒语上去,会有什么结果呢?
Model: Counterfeit-V2.5_pruned
咒语:
Positive:
(((masterpiece))), (((best quality))), ((ultra-detailed)), (highly detailed CG illustration), ((an extremely delicate and beautiful)),cinematic light,((1mechanical girl)),solo,full body,(machine made joints),((machanical limbs)),(blood vessels connected to tubes),(mechanical vertebra attaching to back),((mechanical cervial attaching to neck)),(sitting),expressionless,(wires and cables attaching to neck:),(wires and cables on head),(character focus),science fiction,extreme detailed,colorful,highest detailed
Negative:
(worst quality, low quality, NSFW),monochrome, zombie,overexposure, watermark,text,bad anatomy,bad hand,((extra hands)),extra fingers,too many fingers,fused fingers,bad arm,distorted arm,extra arms,fused arms,extra legs,missing leg,disembodied leg,extra nipples, detached arm, liquid hand,inverted hand,disembodied limb, oversized head,extra body,extra navel,easynegative,(hair between eyes),sketch, duplicate, ugly, huge eyes, text, logo, worst face, (bad and mutated hands), (blurry), horror, geometry, bad_prompt, (bad hands), (missing fingers), multiple limbs, bad anatomy, (interlocked fingers:), Ugly Fingers, (extra digit and hands and fingers and legs and arms:), (deformed fingers:), (long fingers:),(bad-artist-anime), bad-artist, bad hand,(extra legs:1.2),(ng_deepnegative_v1_75t),((hands on head))


如果使用默认的工作流,在加载了相同模型的情况下,两者的效果差距是非常远的。原因很简单,因为我的WebUI上面已经提前做好很多参数的配置。下面会开始讲解如何在ComfyUI中添加这些配置。
添加VAE
在ComfyUI界面的空白处的右键菜单中,点击这一项,就可以添加一个加载VAE的模块:

点击后能看见界面上多了一个模块,但目前这个模块还没与我们的工作流连接

此时,我们需要将该模块右边的红点与 VAE_DECODE 模块相连接,这个模块就被加入工作流当中了

这里我们做的工作,就相当于在WebUI中设置VAE
设置采样方式(Sampling method)
关于采样方式的介绍,可以看看这篇文章:
stable diffusion webui如何工作以及采样方法的对比 - 刘登宇的文章 - 知乎 https://zhuanlan.zhihu.com/p/612572004
这里直接使用WebUI中的 DPM++ 2M Karras 方式,在ComfyUI中需要这样设置:

如此设置之后,我们再看一下最新的效果:

如此一来,效果就和WebUI原始的效果相当了。
“如果使用Hires.fix,ComfyUI又将如何应对?”
WebUI中的Hires.fix功能,这目前还是AI绘画中比较重要的环节。


仔细观察会发现,图片中的很多物体发生了变化,甚至修复了一部分手指和四肢的问题。因为 Hires.Fix 并非简单的直接放大图片,而是在一般步骤中生成的图片的基础上,添加噪点并重新绘制图片,所以能够比原图有更多的细节,而不是简单的分辨率提升。
在这里,我们可以打一个简单的比方。如果让一个人类画家直接在一个巨大的墙上作画,那有很大的可能会出现比例失调,留白过多,细节失衡的问题。因此需要提前打好草稿,约束好墙面每个部分内容,再来作画才能达到比较理想的效果。这里我们前面生成的低分辨率图像就是给AI的草稿,然后AI才能在此基础上丰富细节。
如果一开始就给AI一个大画布,那他可能会出现如下对话:
“我让你画美少女,画好了吗?”
“好了”
“哪呢?没看到啊?”
“右下角那嘎达搁着呢。你就说我画没画吧!”
了解了WebUI中Hires.Fix的工作流程,我们也就能够更好的配置ComfyUI中类似的工作流了。
现在,让我们暂时先删除 Save Image 节点,为后面的操作腾出空间。

添加预览图片节点
这个功能对最终图片的生成没有影响,但是可以更直观的看到使用 Hires.fix 前后的变化。我们通过右键菜单 “Add Node -> Image -> Preview Image” 来添加这个节点。之后将这个节点和 VAE Decode 连接。

添加放大节点
这里我们使用 Upscale Image (Using Model) 节点来放大图像。不过在此之前,我们需要加载用来放大图像的模型。通过右键菜单 “Add node -> loaders -> Load Upscale Model” 添加一个用来加载放大模型的节点。再通过右键菜单 “Add node -> Image -> Upscaleing -> Upscale Image (Using Model)” 添加另一个节点。然后再按照下图的方式,将这两个节点和之前的工作流连接起来。

这里可以尝试直接输出图片,看一看直接放大的效果,这显然不是我们想要的。


为此,我们需要参照上面介绍过的WebUI的处理流程,再重新绘制一遍画面。不过,为了降低显卡的运算压力,我们再添加一个缩放节点,让画布尺寸小一些。点击右键菜单 “Add node -> Image -> Upscaleing -> Upscale Image” 添加缩放节点,并与之前的工作流连接起来。这个节点的设置如图所示:

添加 VAE Encode 节点
现在,我们要用这张放大了图像为基础,让模型在上面重新作画。首先,需要将我们的半成品图像重新融入AI的 Laten Space。通俗点讲,就是用大记忆恢复术,让AI将前面生成的半成品图像认作是自己画了一半的草稿,这样AI就能接着继续画。通过右键菜单 “Add Node -> Laten -> VAE Encode” 添加这个节点,通过下图的方式将其连入工作流:

添加 KSample
这一步就理解成为AI准备一张新的画布,只不过画布上已经有了我们的半成品图像作为草稿了。通过右键菜单 “Add Nodd -> Sampling -> KSample” 添加这个节点。同时,我们也希望AI能够延续我们之前的咒语继续画,而不是异想天开搞逆天二创,因此我们需要再次使用咒语来对内容进行约束。

值得注意的是,这个节点中有一个 denoise 参数。这个参数代表AI对半成品的 “重绘” 程度,如果设置为 1 ,那就意味着 100% 重绘,也就是生成另外一张画,这肯定不是我们希望的。一般可以设置在0.3~0.7之间,这个凭感觉来。
重见天日
到这步就可以让AI再次创造的成品输出了。通过 “Add Node -> Laten -> VAE Decode” 添加节点,这个节点在初始流程中也出现过,可以理解成将存储在AI记忆中的图像拉取到现实空间,与之前的VAE Encode 正好相反。最后再通过 “Add Image -> Image -> Save Image” 添加输出图像节点。
这样,一个带有Hires.Fix功能的工作流就创建完成了。可以看看工作效果:


总结
经过以上的设置,这个工作流已经能够实现WebUI首页的text2img的所有功能了。这么一看,是不是感觉自己在瞎折腾了?我直接用WebUI不好嘛?
这其实也没错。要不怎么说WebUI是非常好的工具呢。ComfyUI强大的地方在于在于对流程的自定义,可以对图像的细节部分进行更高可控的重绘。但是对于普通的尝鲜爱好者来说,本文目前所做的工作,也就是帮各位降低一点显存需求而已。
各位如果看到了最后,不妨重新回去看看最开始引用的那篇文章,本文也不过是在其基础上,对其中某个章节进行拙劣的扩写罢了。不同的工具最终都是用来满足我们的需求的,没必要沉醉在对工具本身的纠结上,现在就开始行动才是最重要的。
下面是本文中用到的工作流,直接复制保存成 .json 格式,就可以直接加载在ComfyUI中了。祝各位工作愉快,生活顺利!