ComfyScript简介
ComfyScript是一个为ComfyUI提供Python前端和库的开源项目。ComfyUI是一个强大的AI图像生成工具,而ComfyScript则进一步增强了它的功能和灵活性。通过ComfyScript,用户可以更方便地使用Python代码来控制和扩展ComfyUI的功能。
ComfyScript主要有以下几个用途:
- 将ComfyUI的工作流转换为可读性更强的Python脚本
- 直接运行脚本生成图像
- 将ComfyUI作为函数库使用
- 使用脚本生成ComfyUI工作流
- 提取工作流中的信息
- 在不使用Web UI的情况下转换工作流格式
ComfyScript的主要功能
工作流转换器
ComfyScript的转换器可以将ComfyUI的工作流转换为Python脚本。这使得用户可以更方便地查看、比较和重用工作流中的不同部分。例如,一个简单的ComfyUI工作流可以被转换为如下的Python脚本:
model, clip, vae = CheckpointLoaderSimple('v1-5-pruned-emaonly.ckpt')
conditioning = CLIPTextEncode('beautiful scenery nature glass bottle landscape, , purple galaxy bottle,', clip)
conditioning2 = CLIPTextEncode('text, watermark', clip)
latent = EmptyLatentImage(512, 512, 1)
latent = KSampler(model, 156680208700286, 20, 8, 'euler', 'normal', conditioning, conditioning2, latent, 1)
image = VAEDecode(latent, vae)
SaveImage(image, 'ComfyUI')
这种脚本形式不仅更易于理解和修改,还可以用于训练大型语言模型生成工作流,这比仅仅让模型生成一些硬编码的参数更加强大。
运行时环境
ComfyScript提供了一个运行时环境,使用户可以直接运行转换后的Python脚本来生成图像。这比使用Web UI更灵活,因为用户可以将Python代码与ComfyUI的节点混合使用,例如进行循环、调用库函数,以及更容易地封装自定义节点。
使用ComfyScript的运行时环境,用户可以像这样运行脚本:
from comfy_script.runtime import *
load()
from comfy_script.runtime.nodes import *
with Workflow():
model, clip, vae = CheckpointLoaderSimple('v1-5-pruned-emaonly.ckpt')
conditioning = CLIPTextEncode('beautiful scenery nature glass bottle landscape, , purple galaxy bottle,', clip)
conditioning2 = CLIPTextEncode('text, watermark', clip)
latent = EmptyLatentImage(512, 512, 1)
latent = KSampler(model, 156680208700286, 20, 8, 'euler', 'normal', conditioning, conditioning2, latent, 1)
image = VAEDecode(latent, vae)
SaveImage(image, 'ComfyUI')
运行时环境还提供了一些额外的功能,如类型提示、异步执行和队列管理等。
函数库
ComfyScript允许将ComfyUI的节点作为函数来使用。这使得用户可以在其他项目中重用这些节点,进行机器学习研究,调试自定义节点,以及优化缓存以更快地运行工作流。
工作流生成
用户可以使用ComfyScript生成ComfyUI的工作流,然后在Web UI或其他地方使用这些工作流。这种方法允许用户使用循环等Python特性来生成大型复杂的工作流,这在手动创建时可能非常耗时或不切实际。
ComfyScript的安装
ComfyScript可以通过多种方式安装:
-
与ComfyUI一起安装:
cd ComfyUI/custom_nodes git clone https://github.com/Chaoses-Ib/ComfyScript.git cd ComfyScript python -m pip install -e ".[default]"
-
使用ComfyUI包安装:
python -m pip install -U "comfy-script[default]"
ComfyScript的使用示例
绘图示例
以下是一个使用ComfyScript生成多张图像的示例:
with Workflow():
seed = 0
pos = 'sky, 1girl, smile'
neg = 'embedding:easynegative'
model, clip, vae = CheckpointLoaderSimple(Checkpoints.AOM3A1B_orangemixs)
model2, clip2, vae2 = CheckpointLoaderSimple(Checkpoints.CounterfeitV25_25)
model2 = TomePatchModel(model2, 0.5)
for color in 'red', 'green', 'blue':
latent = EmptyLatentImage(440, 640)
latent = KSampler(model, seed, steps=15, cfg=6, sampler_name='uni_pc',
positive=CLIPTextEncode(f'{color}, {pos}', clip), negative=CLIPTextEncode(neg, clip),
latent_image=latent)
SaveImage(VAEDecode(latent, vae2), f'{seed} {color}')
latent = LatentUpscaleBy(latent, scale_by=2)
latent = KSampler(model2, seed, steps=15, cfg=6, sampler_name='uni_pc',
positive=CLIPTextEncode(f'{color}, {pos}', clip2), negative=CLIPTextEncode(neg, clip2),
latent_image=latent, denoise=0.6)
SaveImage(VAEDecode(latent, vae2), f'{seed} {color} hires')
这个示例展示了如何使用不同的颜色和模型生成多张图像,并进行放大处理。
自动队列示例
ComfyScript还支持自动队列功能,可以在队列为空时自动添加新的工作流。以下是一个使用Photoshop与ComfyUI集成的示例:
def f(wf):
seed = 0
pos = '1girl, angry, middle finger'
neg = 'embedding:easynegative'
model, clip, vae = CheckpointLoaderSimple(Checkpoints.CounterfeitV25_25)
image, width, height = PhotoshopToComfyUI(wait_for_photoshop_changes=True)
latent = VAEEncode(image, vae)
latent = LatentUpscaleBy(latent, scale_by=1.5)
latent = KSampler(model, seed, steps=15, cfg=6, sampler_name='uni_pc',
positive=CLIPTextEncode(pos, clip), negative=CLIPTextEncode(neg, clip),
latent_image=latent, denoise=0.8)
PreviewImage(VAEDecode(latent, vae))
queue.when_empty(f)
这个示例展示了如何在Photoshop中的图像发生变化时自动进行img2img处理。
结论
ComfyScript为ComfyUI用户提供了一个强大的工具,使他们能够更灵活地使用和扩展ComfyUI的功能。通过将复杂的工作流转换为可读性强的Python脚本,ComfyScript不仅提高了工作流的可理解性和可重用性,还为高级用户提供了更多的自定义和集成选项。无论是对于偶尔使用的爱好者还是需要深度集成的专业用户,ComfyScript都提供了宝贵的功能扩展。随着项目的不断发展,我们可以期待看到更多创新的使用案例和功能增强。