ComfyUI 基础工作流解析
什么是 ComfyUI 的节点?
在 ComfyUI 中,工作流是由一个个 节点(Node) 构成的。每个节点可以理解为一个函数,它完成特定的功能,并通过输入和输出与其他节点连接。如下图所示,这是一个基础工作流的示例:
基础工作流示例图
每个节点包含以下四个部分:
- 标题:表示节点的功能名称(类似函数名)。
- 左侧的点:表示节点的输入参数。
- 右侧的点:表示节点的输出结果。
- 表单:用于配置节点的参数(类似函数内部的控制逻辑)。
对于有编程基础的用户,可以将 ComfyUI 的节点类比为函数:
- 标题 对应函数名。
- 左侧的点 对应函数的输入参数。
- 右侧的点 对应函数的返回值。
- 表单 对应函数的配置逻辑。
通过连接这些节点(函数),ComfyUI 可以完成复杂的任务,比如图像生成、文本编码等。接下来,我们通过几个常见节点的具体示例,结合代码形式,帮助大家快速理解。
示例 1:Checkpoint 加载器
功能:加载一个指定的模型,并返回模型及其相关组件。
Checkpoint 加载器节点图
等效的代码逻辑如下:
def checkpoint_加载器_简易():
# ckpt_name:表单字段,用于配置加载的模型名称
return (MODEL, CLIP, VAE) # 返回 模型、CLIP 和 VAE
输入和输出:
- 输入:无输入。
-
输出:返回三个结果:
-
MODEL
:加载的模型。 -
CLIP
:文本编码器,用于处理提示词。 -
VAE
:图像编码器,用于处理潜空间图像。
-
示例 2:CLIP 文本编码
功能:对用户输入的提示词进行编码,生成一个用于条件控制的向量。
CLIP 文本编码节点图
等效的代码逻辑如下:
def CLIP_文本编码(clip) -> CONDITIONING:
# clip:输入的 CLIP 模型
# 表单字段:用户输入的文本(提示词)
return CONDITIONING # 返回处理后的提示词向量
输入和输出:
-
输入:
-
clip
:CLIP 模型组件(通常由 Checkpoint 加载器返回)。 - 用户输入的文本提示词(通过表单提供)。
-
-
输出:一个
CONDITIONING
对象,表示处理后的提示词向量。
示例 3:生成空 Latent 图像
功能:生成一个初始的潜空间图像(Latent 图像),作为后续处理的输入。
空 Latent 图像节点图
等效的代码逻辑如下:
def 空Latent图像():
# 表单字段:width(宽度)、height(高度)、batch_size(批量大小)
return LATENT # 返回一个初始的潜空间图像
输入和输出:
- 输入:无输入。
-
输出:
-
LATENT
:一个未初始化的潜空间图像。
-
示例 4:K 采样器
功能:对潜空间图像进行采样处理,生成新的潜空间图像。
K 采样器节点图
等效的代码逻辑如下:
def K采样器(model, positive, negative, latent_image):
# 表单字段:
# - seed:随机种子
# - control_after_generate:控制生成后的处理
# - steps:采样步数
# - cfg:提示词控制强度
# - sampler_name:采样器名称
# - scheduler:调度器
# - denoise:降噪强度
return LATENT # 返回处理后的潜空间图像
输入和输出:
-
输入:
-
model
:加载的模型。 -
positive
:正提示词向量(由 CLIP 文本编码返回)。 -
negative
:负提示词向量(由 CLIP 文本编码返回)。 -
latent_image
:初始的潜空间图像(由空 Latent 图像节点返回)。
-
-
输出:
-
LATENT
:采样处理后的潜空间图像。
-
示例 5:VAE 解码
功能:将潜空间图像(LATENT)解码为普通像素图像。
VAE 解码节点图
等效的代码逻辑如下:
def VAE解码(samples, vae):
# samples:采样器输出的 latent 图像
# vae:模型加载器返回的 VAE 编码器
# 功能:将 LATENT 图像转换为普通像素图像
return IMAGE # 返回解码后的图像
输入和输出:
-
输入:
-
samples
:采样器输出的潜空间图像(LATENT)。 -
vae
:模型加载器返回的 VAE 编码器。
-
-
输出:
-
IMAGE
:解码后的普通像素图像。
-
通过以上几个示例,我们可以看到 ComfyUI 的设计逻辑非常贴近编程思维,因此对于有代码基础的人来说,上手非常简单。只需理解几个核心节点的功能和输入输出关系,就可以快速搭建自己的工作流。