局部重绘

局部重绘适用于那些对整个画面还比较满意,只是想修改部分区域的情况。
在WebUI中通常选择用涂抹重绘区域的方式来让AI知道要重绘哪里,这个被涂抹的区域会被AI识别为黑白区域,白色的部分也就是所谓的重绘蒙版“遮罩”。
一般来说白色的区域是需要被重绘,而黑色的区域则是要保持不变的。当然有一定能力的小伙伴也可以直接上传一张黑白图来直接告诉AI哪里是需要重绘的。
https://image-host.parnna.site/file/024a5a90ae57c4bb49d32-d624fecfbe5f8fe47c.jpg
https://image-host.parnna.site/file/8e944ce55d6dd11b76d1a-6aaf03a3b6768c203c.jpg

在ComfyUI中也能做到同样的操作

让我们先连一个起手式:
https://image-host.parnna.site/file/d773eb33d455604564f2f-3b18d2d3d6a7bb2717.jpg
接下来,绘制一个Inpainting工作流:
第一步:加一个加载图像节点(这个没什么问题吧):
https://image-host.parnna.site/file/377b4e957f5df86264477-ab6bbc03c4e6e4f0b5.jpg
第二步:加一个VAE内补编码器(VAEEncoderForInpaint)
https://image-host.parnna.site/file/fdf8ab3da1f6ac8fc57ff-1ab934a63e085436cb.jpg
估计很多人第二步就懵了(~ ̄▽ ̄)~,解释一下这么做的原因:
这种重绘方式是将重绘区域给转变成了完全的“空白的潜空间”,然后在此的基础上重新加噪去噪生成,因此VAE要重新只对遮罩区域编码。
也正是因为如此,利用Inpainting编码器来重绘的这一工作流更适合对画面进行比较大且彻底的修改。
https://image-host.parnna.site/file/c1872c4bf238452e0758f-cf8181c8f773f9314a.jpg
需要注意的是KSampler里的重绘幅度(Denoise)决定了重绘力度的大小,大于等于0.8,以保证重绘区域加噪去噪程度足够大,否则就变成了纯色快填充。
https://image-host.parnna.site/file/01b49bffb400b481b6cca-01d6dcb3c48d9bcf87.jpg
这样的重绘是在蒙版区域上覆盖进行重绘,原图里的东西是什么和新生成的内容没有任何关系,生成内容由提示词决定。

改进的局部重绘

如果要使画面变动变小的话也有办法,只需要在原本的这一工作流上进行改动。
删除掉原本的VAE Encode(for inpainting),然后在列表里找到一个叫做Set Latent Noise Mask(设置latent噪波遮罩)的节点,然后再加载一个VAE Encode(要普通没任何后缀的)。
https://image-host.parnna.site/file/6b85aab6ad941a270fcf2-7888d47b56cf8ac5bb.jpg
Load Checkpoint的VAE连接VAE Encode的vae
https://image-host.parnna.site/file/1cb102c786ba46530bc95-f4f258dc6939729678.jpg
Load Image的IMAGE链接VAE Encode的pixels
https://image-host.parnna.site/file/6ed101ed80ce94988e2ca-cd6755ac092489fd16.jpg
Load Image的MASK链接Set Latent Noise Mask的mask
https://image-host.parnna.site/file/5daef32c1b08fd8353303-d538cd15e67c7c7e48.jpg
VAE Encode的LATENT链接Set Latent Noise Mask的Latent
https://image-host.parnna.site/file/1722f04ff25bee909ac50-8e4416fe038533f3f9.jpg
Set Latent Noise Mask的LATENT连接KSampler的latent
https://image-host.parnna.site/file/d22bb601c6343e68710ac-b41fc019d2c08e98a5.jpg
在0.5-0.6这样相对中等的重绘幅度下实现更贴近原图的重绘,并且在0.2-0.3这样比较低的重绘幅度下也不会破坏生成区域。
而之所以可以做到这样得益于Set Latent Noise Mask,这个节点是将指定区域原图像素信息转为潜空间数据以后再做重新采样。
简单来说是将重绘区域扣下来画完后再贴回去。
https://image-host.parnna.site/file/866c30b91259188e5e523-82d4821db02a9c7f77.jpg
https://image-host.parnna.site/file/9b40ab2dc2acb5f68c123-4cb0c4a2a820592e31.jpg

summary

部分参考素材来源:
https://comfyanonymous.github.io/ComfyUI_examples/inpaint/
原视频教程:
https://www.bilibili.com/video/BV1pZ421b7t7/?share_source=copy_web&vd_source=1b61d6a99447441993d794b126bc790f