什么是ComfyUI的Workflow
Workflow是ComfyUI的精髓。所谓Workflow工作流,在ComfyUI这里就是它的节点结构及数据流运转过程。

上图,从最左边加载模型开始,经过中间的CLIP Text Encode对关键词Prompt做处理,加入一个初始的Latent Image,然后是采样器,VAE解码,最后得到生成的图像。
通过节点的方式,除了类似webui那样去填写参数,还可以观察处理过程,这是ComfyUI设计巧妙之处。每次生成的时候,当程序运行到某个环节时,该环节对应的节点就会自动高亮。各节点按当前运行状态依次高亮,非常有利于理解生成式AI模型(Stable Diffusion)的基本原理。

如上图,当运行到采样器在工作时,采样器KSampler节点的绿色框高亮,此时正对应着命令行窗口中的生成进度。
类比webui的使用体验:
1.调好参数
2.点击生成
3.等待结果
除了观察命令行窗口能获得一些生成进度中的信息,在webui界面上,基本还是传统软件的使用思维:

Workflow的快速“复现”
1.
webui中的png info
先回忆一下webui,当想要复现一张图像的生成参数时,可以把这张图拖到png info中进行查看。
例如在C站中查看这张AI聊斋的图:
可以直接右键保存它,然后拖到webui的PNG
Info里,即可查看包含关键词在内的所有参数。
SD
webui是把这些信息存在了PNG文件的chunk里,可以简单理解:PNG文件里某个数据块,是可以存储额外的文本信息的。
现在最新的webui似乎对存放的字段做了更新,直接右键点击图片,打开“属性”,在“详细信息”的“备注”里就可以查看:
当然很多通用的图像软件都可以查看,例如XnView,在其自带的Exif Tools里就可以看:
额外知识:这些信息也可以从图片中抹去,详见去年写的这一篇:
关键词保护!如何从StableDiffusion(webui)生成图片中抹去prompt信息
2. ComfyUI中的Workflow
回到ComfyUI,每次生成的这些参数,在ComfyUI里也可以用类似的方式保存和读取。
用ComfyUI生成一张图:
同样用右键查看属性:
没有找到相关信息,没关系,这只能说明Windows资源管理器能读取的字段里没有。用XnView MP打开它:
这就能看到了,它分了两个字段,一个是Prompt,里面包含类似png info的信息:

还多了一个字段是Workflow:

太长删掉了一些。能看出来里面存放的就是那些节点信息,例如编号id、位置坐标pos等。当ComfyUI加载这些信息时,就能完美”复现“所有的节点结构,以及每个节点中的各项参数。
3. ComfyUI加载生成图片中的Workflow
webui通过png info来反查参数,那么在ComfyUI中呢,更简单了,直接把生成的图拖到网页窗口中即可。

拖进窗口放手可得:
提醒:拖进去前如果需要的话记得备份之前的Workflow。
另外,ComfyUI也可以专门保存Workflow文件,点击侧边栏中的Save和Load,进行保存与加载:

保存后得到的文件默认是workflow.json,可以用文本编辑器打开查看:

4. 把Workflow信息与工作界面截图存在一起
Workflow信息除了能单独存成json文件,或者存在生成的图片中,还能存在工作界面截图中,这样更加直观:

安装这个插件即可:ComfyUI-Custom-Scripts
https://github.com/pythongosssss/ComfyUI-Custom-Scripts
该插件有很多脚手架功能,保存Workflow Images是其中一项。

https://github.com/pythongosssss/ComfyUI-Custom-Scripts/tree/main#workflow-images
ComfyUI插件的安装方法,放在下一课中。
Workflow资源
在这个网站里有大量ComfyUI Workflow,可以直接下载,然后用本课的方法打开。https://comfyworkflows.com/

Workflow与Data Driving
多说两句,webui的png info,存的是data,是静态的,更像是web2.0时代的数据驱动。在使用webui时,关注点是生成的图片结果,以及相应的关键词与各项参数。如传统软件一样,还是相对黑盒。
而ComfyUI对Workflow的存取方式,在关注数据的基础上多了一层工作流,即除了结果,还关注内部过程。这可能用多了就会有体会,会引导你下意识的去想着如何优化或改造工作流,带来更多的灵活可能性。
另,节点式与dataflow或workflow也不是新事物,我2005年开始接触的节点式编程环境MaxMSP,从其诞生距今已经三十多年了。

图自Wiki,上古版本的MaxMSP界面
出自:https://mp.weixin.qq.com/s/geUKpopRa4W9n08SlF2wIA