Comfyui工作流配置分析--借助流程处理图片的想法
搞了相机之后,某日兴冲冲到冒着大雾跑到街上,一个江苏小镇上的复古老街,有个很才学的名字“秀才巷”。40mm的镜头有点社恐,忽忽忙按完快门之后,发现画面里面的元素有点多,然后想着怎么剪裁会有更好的意境,想着想着,冒出了一个想法,AI帮我出点剪裁的意见呗。
裁剪建议:
- 左侧植物遮挡部分:裁剪掉左边的植物(大约从左侧占照片宽度的15%-20%位置开始)。
- 目的:去除前景干扰,使观者的注意力更加集中在巷子和远处的人物上。
- 保留右侧传统建筑和红灯笼:右侧的红灯笼是一个重要的文化符号,裁剪时应确保保留整个灯笼部分,但可以稍微裁剪掉一些右侧的空白墙面(大约占照片宽度的5%-10%)。
- 目的:突出传统建筑的细节,增加文化气息和故事感。
- 上方的电线与天空:电线在照片顶部占据了一部分空间,可以裁剪掉上方天空的一部分(大约从上方占照片高度的10%-15%位置开始)。
- 目的:减少空白区域,让视线更集中在地面巷道和人物上,增强纵深感。
- 下方不需要的地面:可以稍微裁剪掉下方的石板路,保留大约75%的地面。
- 目的:减少过多的前景,同时依然保持人物小径的引导效果
给我回馈的建议倒是不错,只是让我从PS里面去拉15%-20%,想要精确的话,好象还需要我在PS里面细致的干活,本着能少干一点就少干一点的想法,想到了ComfyUI的工作流。之前stable diffusion webUI倒是用得熟练的,ComfyUI的git拉下来之后还没有怎么跑过,那开始熟悉吧!
ComfyUI就不详细介绍了,基于Stable Diffusion开源项目开发的一个图像生成界面工具。和Automatic1111师出同宗。
复杂的工作流看起来很头大啊,然后详细了解之后,其实也就是一个一个简单的堆叠起来的。
图片生成中的基本概念
文本输入节点(CLIP Text Encoder)
将文本提示词转换成CLIP嵌入向量,用于指导图像生成。通俗点就是你需要生成的图片的描述文字。
当然这个有正向和反向的区分,正向就是最终生成的图片需要出现的词,反正就是最终生成的图片不要出现的词。
正向:1 girl.就会生成一个女孩
反向:black hair.就不会生成黑色头发
大模型加载器(Checkpoint Loader)
用于加载Stable Diffusion模型文件,训练的不同的模型可以生成不同类型的图片。
采样器(Sampler)
图片生成的核心,你把它想象成图片生成的反应堆好了。根据模型、提示词和其他设置参数生成图像。
空Latent节点
提供一个初始的潜在空间数据。图片的宽、高,一次生成多少张啊,这些设置。
VAE解码器节点
将采样器生成的潜在空间数据解码成可见的图像。
预览图像
生成出来的图片你得看吧,这时候就需要一个展示图片的节点。
到这里,生成一张最简单的图片的工作流所需的节点就凑齐了,那要怎么关联呢。
节点关联
我们把上面的所提到的节点围绕着采样器建立关联就行了。
每个节点的一个属性只有一个入口,每个节点的一个属性可以连接多个。
按这图我们正常理解一下:
- 采样器生成图片需要大模型提供数据风格。
- 需要正向提示词告诉我需要生成什么
- 需要负面提示词告诉我不要生成什么
- 需要给我设置宽高和张数
生成完了之后,再解码去显示。
基于上面的原理,我们拉一个最简单的工作流试一下。
当然前提工作,你的ComfyUI里面大模型下载好了,然后服务也跑起来了。
每个节点都有输入输出属性名字,和对应的颜色,把上一个节点的输出属性,连接到另一个同名字或同颜色的输入属性就行。
按这种方法正经跑一个!
在图片之后的处理
ComfyUI对比Automatic1111的优势之一就是可以用工作流处理,比如我在图片生成之后,想做一些处理或者N个处理都可以。
VAE解码之后的图像输出,我们可以把这个图像连接到预览,连接到保存,连接到图像的二次处理,比如模糊图像。
操作方法:
添加相应的节点,然后把VAE解码的图片分别连接到对就的处理节点上,这样我们的图片生成完之后,就会相应的保存到磁盘,和模糊图片处理。
在图片处理之前(controlNet)
同刚刚图片生成之后的处理,我们一样可以在图片生成之前,做很多流程上相应的处理,比如我们用得比较多的controlNet,根据一张图片的线条、人物动作等等,然后基于这个处理过的图片进行指定内容的生成。
我们可以把这个想象成,在图片生成之前做了一步预处理。
controlNet需要正面和负面的条件,那我们就把正面和负面的条件从controlNet里面,穿过一下再出去。
VAE也是一样,我们把VAE再拉一个到ControlNet节点。
还有一个ControlNet和图像两个,ControlNet没有,那我们就添加一个ControlNet控制器加载的节点,(确保你对应的文件下载了)。这里用canny线条举例。
图片就是controlNet对应的canny处理后的图片,那我们就需要添加一个图片加载器,对加载后的图片进行 canny预算理,把处理后的图片预览一下,以确保处理得是不是对的,然后再把预处理过的canny图片连接到ControlNet节点的图像上。这样就流程就又闭合了。
最后
这里面如果需要对节点再增加调整,我们只要把对应的节点进行调整就行了,比如把条件合并,把图片无损放大,不生成图片直接进行图片剪裁处理,都是只要对对应的节点进行配置就行了。
所以看起来很复杂的流程,都是在最简单的流程上面,对单个或多个节点一点一点的扩展。