comfyUI实用工作流教程7期——Reactor、Pulid、EcomID换脸插件全面对比|FLUX换脸
一、Reactor换脸插件
1、安装Reactor插件
在comfyUI的管理器中选择ReActor Nodes for comfyUI进行安装。

同时需要把脸部模型、脸部检测模型和修复模型,按照下图中的位置对应放置好。

一般重启一下comfyUI就没有问题了。
2、启用时出现报错的解决办法
Reactor插件:
https://github.com/Gourieff/comfyui-reactor-node
在Reactor官方github页面也可以找到对应的处理办法。

绝大多数情况是因为没有安装insightface package部件,

eg:在秋叶整合包中,进入安装目录的Python文件夹

在上方导航栏输入cmd回车,

进入comfyUI中以Python文件夹为路径的命令提示符窗口。

然后把下面的安装命令复制运行一下,Python.exe -m pip install -u pip,这条是升级pip部件的命令。

python.exe -m pip install insightface-0.7.3-cp312-cp312-win_amd64.wd1,这条是安装pip部件的命令。

注意:根据Reactor官网来搞哈
3、Reactor换脸工作流详解
右键——新建节点——其他节点A~Z——Reactor换脸

添加Reactor换脸节点出来。

Reactor插件最大的优点就是使用非常简单方便。
把希望替换的脸部图片连接到源图像

被替换的图片连接到目标图像

然后右边添加个预览节点就可以了

生成后,源图像(下图)的脸部替换掉目标图像(上图)的脸部。

置换模型:选择换脸模型

检测模型:检测脸部区域所使用的模型

一般情况下我们上传的图片尽量要求上传正脸清晰的图片。这样不但利于脸部的识别,也会让生成的效果更好一些。

四种不同脸部检测模型的对比:

只要脸部能够正确的识别出来,它们之间的区别是非常小的,一般我们保持默认的类型即可。
现在看看换脸后的效果,可以看到脸部细节还是有比较明显的锯齿状出现的。

原因就是现在我们没有开启脸部修复。

这里可以选择用codeformer还是用gfpgan1.3或者1.4的修复方式。
而GPEN 1024/2048 恢复模型,也是一个用于面部修复的模型,各个模型之间的差异不大。

eg:这里选择使用codeformer模型,换脸后的图片就变得非常清晰了。

修复模型之间的对比:
注意发丝和眼睫毛的细节差别。
codeformer的效果(左):

gfpgan1.4的效果(左):

gfpgan1.3的效果(中):

对比之下gfpgan1.3比gfpgan1.4的效果更柔和自然一些,而1.4则锐度更高些。
面部修复可见性:换脸的强度
一般保持1,不需要改变。

当我们的脸部修复模型选择的是codeformer后,还可以单独设置codeformer的权重值。
codeformer权重
默认0.5是一个比较折中的数值

codeformer权重0.1和权重1的对比:
权重0.1时,换脸后的效果就没有那么像了。

权重1时,换脸的相似度增加了,但也会出现一些锯齿瑕疵过拟合的情况。

检测目标性别:男/女

面部索引值:当我们要替换多人脸部时设置。
目标面部索引
源目标索引

eg:假如源图像(下图马斯克)的脸部替换掉目标图像左边第一个人物(上图吴孟达)的脸部。
那么这里目标图像左边第一个人物(上图吴孟达)的索引号就是0,而目标图像右边的人物(上图周星驰)的索引号就是1。

目标面部索引:0
源面部索引:0
那么吴孟达的头像就被马斯克的头像给替换过来了。

如果想替换周星驰的头像,就把目标面部索引改为1。

同时替换掉两个人的头像,把目标面部索引改为0,1,那么两个马斯克互相拥抱的效果就生成出来了。

而源脸部索引也可以用相同的方式进行修改。

当我们上传一张有两个人的源图像时,那么我们就可以设置他们对应的索引号。

目标面部索引:0,1
源面部索引:0,1
(源图像)左边替换(目标图像)左边的人脸,(源图像)右边替换(目标图像)右边的人脸

目标面部索引:0,1
源面部索引:1,0
(源图像)左边替换(目标图像)右边的人脸,(源图像)右边替换(目标图像)左边的人脸

面部模型
现在我们换脸的时候都是只提供一张图片,这样就有可能导致脸部信息采集不足。

可以看到有时候生成出来的效果不太好。

为了解决这个问题,我们可以事先准备多张图片,像这样有正面的、左右侧脸的图片。

我们就可以在Reactor插件里面添加Reactor创建面部模型节点出来。

现在需要把这四张图片传输进来,就在Impact节点的实用工具中添加制作图像批次节点

这样我们就可以把这四个图片整合在一起了。

然后统一传输给Reactor创建面部模型节点中,所以这个创建脸部模型节点就连接好了。

创建好面部模型节点后,还需要在节点中起一个模型名称,用以给Reactor加载面部模型节点使用(这里输入的是haer)

点击生成下,这样这4张图就会整合成一个简单的脸部模型。(需要刷新一下)

正常情况下我们需要接一张图片进来,但由于我们已经训练了一个简单的4张脸部的模型,所以就不要加载一张图片作为源图像了。

加载Reactor加载脸部模型节点

在节点面部模型中就可以看到刚刚我们训练的haer这个模型了。选中它,就相当与把4张脸部给到Reactor来作为参考了。

生成后,马老师的头像就换成了吉伦哈尔了。

面部增强


这个节点的参数与Reactor面部修复节点相似。只是会多出来修复模型的不同插值方式。

可见性与Reactor面部修复节点中面部修复可见性一样。
restore_with_main_after:换脸前修复/换脸后修复

换脸前修复的效果:

换脸后修复的效果:

开启后,换脸的画面会柔和些,
关闭后,换脸的画面会锐利些。
二、FLUX Pulid
1、FLUX pulid插件安装
在comfyUI管理器中搜索Pulid进行安装,这两个pulid插件都需要进行安装。

接着把pulid模型、insightface模型和CLIP模型放置到对应的位置即可。

2、使用FLUX pulid工作流
这个工作流其实就是传统的FLUX工作流

这边是模型的加载(红色节点是Dualcliploader(GGUF)节点)

正向提示词的输入

采样器的参数设置

下面是文生图和图生图的接入模块

而中间就是FLUX pulid换脸模块了(实际上就是在FLUX工作流里面加载一个pulid模块)

这个Apply pulid flux节点可以在pulid节点栏里面把它加载出来。

首先Model模型接口就和flux模型相连接

Apply pulid flux节点的模型要么跟UNET加载器中的模型相连接,要么跟unet loader(GGUF)节点中的模型相连接(GGUF节点是个flux优化模型,降低显存消耗)

接着加载一个pulid专用的模型(load pulid flux Model节点)

然后是CLIP模型(load Eva clip(pulid flux)节点)

然后是insightface的加载(load insightface(pulid flux)节点)

然后提供一个图片,这样工作流就连接好了。

FLUX模型和GGUF模型的切换方式:
配置差:用GGUF模型
配置好:用FLUX Dev模型

在FLUX Dev模块框里,UNET加载器模型连接给FLUX模块中的基础调度器模型和FLUX pulid换脸模块中的Apply pulid FLUX模型。

然后把双clip加载器中clip传输给提示词接口就行,这样就完成了FLUX Dev模型的加载。

而GGUF模型的加载,则是把GGUF模型加载给基础调度器和pulid FLUX模型中。GGUF的clip就传输给提示词,这样就完成了GGUF模型的加载。

生成后,那么斯嘉丽的脸部就会替换图生图模块的图片了。

在采样器中,如果是图生图工作流,需要把降噪值改为0.5~0.6之间,降噪就相当与重绘幅度。

生成后,得益于FLUX生图的优势,现在生成出来的画面清晰度是要比Reactor要更加高清的。

Apply pulid FLUX节点参数讲解:
weight权重:越高换脸后越像参考图
start_at:pulid换脸开始时间
end_at:pulid换脸结束时间

fusion:换脸过程中的算法选择,需要配合算法权重值设置才会生效。

fusion_weight_max:算法权重最大值
fusion_weight_min:算法权重最小值

train_step:换脸步数

需要注意的是加大这个数值不会增加渲染时间,这里是6000步和9000步的效果对比:
随着步数的增加,换脸的相似度也越高,但用时都是一样的,所以这个数值可以适当增肌一些。

use_gray:灰度优化,会在人物轮廓边缘位置有轻微的优化作用。

如果我们想要完全发挥FLUX的优势,就需要使用文生图模块,直接把文生图模块传输到Latent替换掉图生图即可。

eg:即便现在上传的是一张黑白且像素非常低的图片。

这时候我们输入提示词:一位60岁的老人,沉浸在人工智能模型之中,T恤上印着“PuLID Flux”

这时候采样出来的是灰色的图片,原因就是文生图的时候需要把降噪值改回1.

生成后,可以看到使用文生图来换脸,通过Flux模型优秀的文本理解能力,生成出来的效果还是挺好的。爱因斯坦的脸部、场景和文字都有很好的表现。

三、EcomID指定角度和更改年龄工作流
1、EcomID模型讲解
EcomID是由Alibaba联合阿里妈妈出品的换脸模型。

它结合了PuLID和instantID的优点,能够更好的还原人物的脸部情况。最重要的一点就是能够手动控制生成人物的脸部方向。

在EcomID介绍页面中可以看到EcomID和PuLID的换脸对比效果:

可以看到EcomID在instantID的作用下会更忠诚于我们上传的图片。不过由于要搭配EcomID使用,这就意味着EcomID不能使用Flux模型了,只能使用SDXL大模型。

2、EcomID插件安装
EcomID目前还没进入comfyUI的节点库,所以需要点击URL来进行安装。

EcomID:
https://github.com/alimama-creative/SDXL_EcomID_ComfyUI
把EcomID的Github地址粘贴到这里

安装的时候报错用这个备用地址安装
https://github.com/adityacaturputra/SDXL_EcomID_ComfyUI
如果出现错误,先关闭comfyUI,

在秋叶启动器的版本管理里面,点击安装新扩展,在最下方不要用EcomID的官方Github地址,把EcomID的备用地址粘贴过来,点击安装即可。

进入comfyUI后,在EcomID里面加载应用EcomID节点出来

同时加载应用EcomID高级节点出来对比下

高级EcomID节点会多出一个ipadapter和ControlNet的单独控制权重。


EcomID节点要部署的模型:
EcomID同样要调用PuLID节点,所以这些模型都是一样的,但要额外多放置一个PuLID专用的SDXL模型到指定的位置。

同时还要放置ipadapter模型和ControlNet模型。

3、EcomID节点详解(高级EcomID应用节点)
第一个instantid_ipa接口连接instantID模型加载器节点,加载ipadapter_instantid的模型。

第二个PuLID接口连接PuLID模型加载器节点,加载专门的SDXL PuLID模型。

第三个clip接口选择EcomID的clip加载器,

这些都是调用刚刚介绍的PuLID的加载器,所以都是通用的。

insightface接口也是可以调用PuLID的加载器,

但最好是按照规范,加载EcomID的insightface节点出来。

然后ControlNet接口就连接传统的ControlNet加载器。


这里选择EcomID专用的ControlNet模型。

图像接口就是上传一张脸部图片进来。

紧接着就是大模型、正向提示词和负面提示词

这个Image_kps接口同样是加载一张图片进来,但是这个图像是用来控制人脸的方向的。

4、EcomID工作流讲解(指定角度)

最上面这一部分就是EcomID换脸的工作流

中间和下面的部分就是文生图或者图生图工作流了。

在图生图的基础上
这张图片就是最终生成的底图。

EcomID可以上传两个图片进来,第一张是我们要换脸的图片,第二张是我们控制生成脸部方向的参考图片。

eg:现在我们先用斯嘉丽的图片来替换掉安妮海瑟薇的头像。

生成后,斯嘉丽的脸部就展现出来了,但完全没有应用在底图上。

原因就是我们的降噪值,也就是重绘幅度没有降下来。这里改为0.6。

生成后,原图就呈现出来了。但现在生成出来的画面人脸角度有些不自然,造成这个原因是因为EcomID节点会应用ControlNet的功能。

尽可能的还原上传图片的样貌轮廓和角度,这边上传的图片是仰视的,而我们的原图是平视的,所以就会有脸部角度不太融合的情况。这时候就需要调整EcomID的节点参数。

在EcomID节点中,ipadapter权重是控制生成画面的相似度;
而cn权重就是ControlNet的权重,这个数值越大,那么生成出来的画面就会越忠于上传图片的轮廓和角度。

所以我们只需要保持住ipadapter的数值,确保换脸的相似度,然后适当降低ControlNet的权重,这里改为0.5,这样就可以让生成出来的画面由更多的自由度,从而得到更加真实自然的效果。

这里还有个噪波值(noise),增加噪波值,就会让画面生成出更多额外的细节。这里改为1后,现在人物面部就会多出一些额外的皮肤纹理了。但增加了这个数值后,还原的样貌也会相对没那么像了。

在文生图的基础上
我们可以和之前Flux PuLID工作流那样输入对应的提示词给人物生成背景了。

eg:在学校里面,生成后,但由于降噪值没改回来,采样画面是灰色的。

把降噪值改回1,生成后,那么保留斯嘉丽样貌的徐晓场景图就生成出来了。可以看到,使用SDXL模型的EcomID生成的背景明显是没有Flux PuLID工作流好的。

但EcomID有个优势,它可以控制人物面部生成的方向。开启面部控制方向的图片。

例如这里上传一张侧脸的图片作为角度参考图。

生成后,那么现在就不再是生成正脸效果了,而是仿照爱因斯坦的侧脸角度来生成学校场景。

并且还原的样貌依然和斯嘉丽非常相似,这就是EcomID应用了instantid的优势所在了,所以对于要生成多种角度,并要求人物保持一致性的项目来说,EcomID换脸工作流是更适合的。

5、EcomID工作流讲解(更改年龄)
此外,EcomID还能再保证人物面部的基础上,还能改变人物的年龄。(在文生图模式下)

eg:在提示词中输入60岁的女孩儿,生成后,人物的身体皮肤是有点老化了,但人脸和60岁还是有很大的出入。原因就是当我们要改变人物年龄样貌的时候,很明显它会和原始样貌有较大的变化,所以这里的ipadapter权重也就是人物相似度权重就不能设置那么高了。

适当降低些,例如改成0.4

生成后,那么年老的斯嘉丽样貌就生成出来了。

eg:10岁的女孩

eg:ipadapter_weight:0.3

四、总结

要方便快捷,用Reactor
想要给人物融合到一些有趣的场景中去,用PuLID
想要尽可能的还原人物样貌,有人物多角度制作需求,用EcomID