ComfyUI入门(二):如何打造自己的工作流,让AI生图/修图更高效?

这是ComfyUI入门系列第二篇,如果你对ComfyUI还是完全零基础,建议先看上一篇:把工作流拆开揉碎了,带你入门ComfyUI

本来上篇结尾是说,我们这次要来聊Flux Kontext图片编辑。

但是,豆包最近新出了个「超能创意2.0」。我真的觉得它在图片编辑能力上,大部分场景都不输Kontext,甚至创意上尤有过之。如果是要拿来就用,快速处理70%的问题,说实话,我更建议大家去试试豆包。

放张图演示一下豆包的效果:

跟Kontext一样都是局部重绘,不会改变在prompt中要求固定不变部分,而且门槛更低,还免费。有了它之后,我个人觉得Flux Kontext这个模型本身,反而没那么重要了。

所以,本文的内容,虽然我依旧准备写Kontext,但会侧重在通过Kontext工作流的搭建来演示怎么样把一个特定能力的模型用舒服,最好能在ComfyUI工作流设计思路上给大家一些启发。希望你对本文也能带有这样的预期,如果你需要一份关于Flux Kontext本身能力与使用方法的全面介绍和评测,可能就还需要再补充阅读一些其他文章了。

其实不止是豆包,黑森林工作室也提供了可以聊天对话式使用Flux Kontext的Playground(https://playground.bfl.ai/)。

写到这儿,我觉得我不得不先回答一个问题才能继续写下去了:为什么要用ComfyUI?直接在网页使用看起来也挺好,为什么还得学ComfyUI呢?

这背后其实跟另一件近来被广泛提及的问题是一件事儿:

ChatBot(聊天机器人)还是Agent(智能体)?

放在今天的语境,也可以被写作:

ChatBot(聊天机器人)还是WorkFlow(工作流)?

ChatBot的使用门槛更低,但它能够完成的总是单次的操作。

可我们在大多数真实的应用场景中要完成的,往往都是一套操作。而受限于过程中的交互需求、大模型的上下文窗口等等,AI在对话这种沟通形式中很难一次性完成一整套操作。

这就造成了,如果我们要使用ChatBot完成复杂任务,必须经过繁琐的多轮对话,可控性和效率都不高。

WorkFlow则解决了这个问题。

它本身就是一套操作,并且其中可以结合大模型的能力进行智能化判断。

举例来说,

我经常会使用飞书多维表格的AI字段捷径功能,例如这样一个表格:

不要认为只有用连线把节点连起来的才算工作流。

实际上很多用多维表格搭建出的模版,本质上也是工作流。甚至你每天早晨到公司冲杯咖啡,打开电脑,整理昨天的事项和安排今天的工作,它也是工作流。

上面的这个表格实现的功能是向不同背景的外国朋友针对性推荐在中国城市游玩的方案,任意的朋友背景和目标城市都可以随时切换。

你可以想象一下,如果这些可变选项频繁变化且量足够大,在ChatBot中实现是有多复杂。

我现在展开一下最后一个字段捷径的配置,prompt是这样写的:

你觉得它像什么呢?

把它放进ComfyUI中想象,朋友的家乡、年龄、性别、爱好等等信息节点,它们有的是初始节点(例如性别),有的是二级节点(有什么好玩的),都各自拉出一条连接线,连接到了最终生成推荐结果的这个节点的输入端点。

多维表格和ComfyUI,只是两种不同的工作流展现形式。

再看下面这个表格,这也是之前发过的,海报仿图模板:

是不是很像上一篇ComfyUI文章中我们创建的图片反推再生成的工作流?

图片

其实本质逻辑是一样,但表格模板的工作流中,更多环节存在LLM介入,所以更加智能。

这也是我想跟大家分享的让AI生图/改图工作流更高效的小技巧之一:

适当引入LLM(大语言模型)。

我们结合着Flux Kontext来说吧,毕竟本来是要讲Kontext。

最新版的ComfyUI真的比从前方便太多。

直接点击右上角「工作流」选择「浏览模板」,就可以一键导入ComfyUI官方内置的各种工作流模板。

在这里,本地运行的dev版本工作流和调用线上API的版本工作流都有提供。分别在「Flux」和「图像API」选项卡下。

API毕竟是付费服务,模型规模也更大一些。而且本地fp16的满血模型对我只有24G显存的4090来说还是有些吃力,我使用的是Comfy提供的fp8量化版本。所以,在一些细节效果上,难免API要比本地运行表现好。

但是, 本地模型它好在不吃网络也不花钱。

在鱼与熊掌各有各好的情况下,我一般的处理方案就是全都要。

所以,我搭建自己的工作流的第一步,就是把他们拼装起来,我想用哪个用哪个。

在ComfyUI中拼装工作流的操作也非常简单。

只需要按住ctrl,选中要复制的节点,ctrl+c复制,再粘贴进目标工作流窗口中即可。

就这样,我就把API工作流粘贴进了本地工作流的窗口中。

我们来依次拆解一下这两个工作流。

首先是相对复杂的本地工作流。

不用看默认Step123的编组,我们先按我画的三个颜色的选框来看。

先看左下角蓝色框内的部分,一共四个节点:

先是两个加载图像(来自输出)。当前其中一个是忽略状态,代表只有一张图片被加载。

然后Image Stitch这个节点的功能是把两张图片拼在一起,因为Flux Kontext虽然可以做多图的参考,但其实只能接收单张图片的输入,所以要提前把多张图片拼起来,这个我稍后演示一下;如果像现在图示状态一样,只有一张图片上传,则这个拼图节点输出的还是一张图。

最后FluxKontextImageScale这个节点,是对图片进行了缩放处理,可以看到原图尺寸是22082944,经过它处理以后的预览图像尺寸变成了8801184,这个尺寸比较适合本地模型处理。

这个加载图像(来自输出)不太方便,只能选择之前生成的图片作为输入,需要稍微改造一下。我们把它们换成两个普通的「加载图像」,这样就可以任意选择图片上传了。

右键点击第二个图片上传节点,在弹出菜单中点击「(取消)忽略节点」,就能够启用它。

我们上传一个红色的帽子,这时候在预览界面就能看到Image Stitch节点的工作效果了,它把这两张图拼接成了一张。direction参数是right,所以image2(帽子)被拼接在了人物右边。

看完了上传图片的蓝框部分,再来看红框和黄框。

这两个框选加起来的工作流你应该很熟悉了,就是上一篇写到的本地Flux生图工作流。只是加载的生图模型换成了Kontext模型,并且把正向提示词单独拿了出来。

切到API生图的工作流,这个工作流更加简单。

左边部分是上传原图,右边部分是生成新图。

这个工作流的Kontext API是由Comfy中转提供,速度比直连黑森林工作室的API要快,充值和消费都是通过Comfy来进行,直接点开右上角头像就能找到充值入口。

但是Comfy的Kontext节点不提供可控内容审查尺度功能,所以有时候一些抽象或者NSFW的图片修改请求会被直接拒绝。

所以一般常用的Kontext API还有另一个版本,也就是黑森林官方的版本,是支持使用手动设定审查尺度的节点的。我们把它也一块加进这个all in one工作流中。

需要安装一个「Flux Kontext Creator for ComfyUI」节点,具体操作方法可看上一篇。

然后按照GitHub上README文件的配置说明配置好config.ini文件和密钥。具体操作我就不演示了。

https://github.com/ShmuelRonen/FluxKontextCreator

至于获取API密钥和进行充值都需要进入到我们前面提到过的黑森林官方网站(https://dashboard.bfl.ai/),默认注册会送200个积分免费体验。

Flux Kontext Creator for ComfyUI节点的使用方法跟Comfy的KontextAPI节点基本相同,接法也一样,只是多出了手动选择pro和max节点和手动设置审查强度的参数。

右键「添加组」,可以像上图一样用不同颜色的背景框把实现同功能的节点整理到一起。

现在我们是要把本地、Comfy API、BFL API这三条生图路径放进一个工作流中,原图加载和prompt模块可以让三者共用。

于是我们可以上传图像的输出端点跟全部三者的输入图像端点相连;然后添加一个输入字符串节点,分别接入到三者的提示词文本框,这样只需要在输入字符串节点填写prompt,三条子工作流都能使用。

可以在空白处添加一个「忽略多框」节点。

通过这个节点可以快捷控制功能框的启用状态。

于是,这样一个简单的all in one工作流就完成了。

接下来让我们进一步细化它,让它更「好用」一些。

首先是提示词。

ComfyUI内置的工作流模板中其实有贴心地提供一份提示词技巧注释在旁边供使用者学习参考。

但学习成本嘛,还是稍高。并且Kontext只支持英文,让英文不好的同学压力很大。

那要怎么做呢?

对这种问题,通常我的解法就是:接入LLM。

多模态生成模型的结果所见即所得,更容易被理解,也更好落地,但要说真正的智能,还得是大语言模型。LLM的训练和推理成本都更高,不是没有道理的。使用大模型越多,越能感受这一点。

我们可以直接搭建一个「提示词生成器」。

把前面的「提示词技巧」作为系统prompt输入给LLM:

你是一个「Flux Kontext提示词生成大师」,擅长根据用户描述的需求,生成符合Flux Kontext Prompt Techniques的提示词。

然后,只需要上传图片,使用最没有技巧的描述把要表达的需求说清楚就好。

例如,我输入需求「给她换一条蓝色的裙子」。

不用考虑什么变化什么不变,措辞应该是she还是the women,LLM会按规范帮你处理好一切。

整个工作流执行完毕,她就被换上了一条蓝裙子。

再进一步,如果原图比较复杂,单纯的需求描述无法让LLM理解应该变化什么保留什么以及如何措辞。

我们也可以把上一篇提到的反推模块加进来,使用「合并字符串」节点跟原prompt合并到一起,把图片中有什么也告诉LLM,然后让它更精准地生成提示词。

再举例来说,API节点有一个不太好的地方,只能选择固定几个图片比例进行生成。

但是我们上传的原图,有可能是横图,也有可能是竖图,每次调整就很不方便。

怎样做成自动调节图片比例呢?也可以使用LLM来完成。

首先我们可以使用图像尺寸节点读取图像的尺寸,然后输出宽比高,例如上图的输出即是2208:2994。

然后可以直接使用LLM判断:

请判断我给你的图片比例更接近下面哪一比例,然后直接输出(且只输出)这个比例

输出最接近的尺寸比例。

然后把这个比例接入到API节点的比例参数即可。

注意,参数类型一致才能相连,这里有一个小技巧确认参数类型:

从对应参数的节点拉出一条连线新建节点,这时候就可以看到参数类型的提示。例如下图,这个比例的参数类型是:Combo(组合框)。

所以,我们要在刚才的字符串和比例参数中间添加一个格式转换节点:字符串到Combo。

这样,就能实现自动比例变换了。

我们找一个新case来跑一遍。

比如说我想让下面这个房间的家具和装修都不变,改得更有少女感一些。

现在我只需要输入图片处理需求:

保持原有装修和家具,把这个房间布置成可爱女孩子的房间。

LLM自动帮我丰富了女孩子房间的物品内容,并要求保留现有的装修和家具:

然后,又自动识别出原图的比例更接近3:4的竖图,让API生图自动按照3:4的比例输出。

这是最终本地模型+API生成的两张图片:

举一反三,图像尺寸获取,我们也可以用在刚才的多图参考上。

本地Kontext模型的输入输出图片是同比例。而多图的处理方式是先合并成一张图再输出,所以输出的图片比例就是拼接后的图片比例。

如果两张输入图都带背景,其实一般会进行融合,但像上面案例这样其中一个舞台是白底图,那大概率结果就是这样,依旧带着一张白底图输出:

为了便于直出,我们就可以在这里做一个多图裁剪的功能块。

同样是利用图像尺寸节点,甚至都不需要介入LLM,直接根据原图和生成图片的分辨率,使用四则运算表达式计算出裁剪位置,进行裁剪。

效果即如下图:

已经5000字了,篇幅有限,能在文章中展开的也只是冰山一角。

不过如果你是从上一篇看到这里的ComfyUI新手,相信你对Flux Kontext和ComfyUI工作流的搭建应该也有了一些思路。

后续根据实际的使用需求,还可以在工作流加入图片放大、人物面部优化等等不同功能的节点和模块。甚至还可以通过SD PPP插件,直接把ComfyUI工作流接入到Photoshop,合并入你日常工作中的图片处理工作流。

这些就留给你自己去探索了。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注