ComfyUI基本原理与源码解析
ComfyUI基本原理与源码解析
1. 简介
ComfyUI 是一个基于 Stable Diffusion 的 Node-based(基于节点流)的可视化界面,它允许用户通过模块化的方式构建、调整和执行 AI 生成流程。相较于传统的文本输入式 Stable Diffusion 界面,ComfyUI 采用了 节点图(Graph-based UI),使得整个 AI 生成流程更加透明、灵活,并便于调试和优化。
2. 核心原理
ComfyUI 采用了 计算图(Computational Graph) 的思想,将 Stable Diffusion 生成流程 拆解为多个可复用的计算节点,如 图像输入、文本提示(Prompt)、采样方法、噪声处理、模型加载 等。整个执行逻辑基于 有向无环图(DAG, Directed Acyclic Graph),即数据在图中流动,每个节点执行特定任务,并将结果传递给下游节点。这种架构使得 ComfyUI 更具模块化、可视化、可编程 的特点,极大增强了 AI 生成的灵活性和可控性。
2.1 计算图与数据流
在 ComfyUI 中,所有任务都是 节点(Node),每个节点代表一个独立的计算单元,可以执行如 图像处理、模型推理、数据转换 等任务。这些节点通过 数据流(Data Flow) 进行连接,从而形成一个计算图(Graph)。当计算开始时,ComfyUI 会沿着计算图的方向,依次执行各个节点的计算任务,并将结果传递到下游节点,最终输出所需的生成内容。
在计算图的设计中,ComfyUI 具备以下特点:
- 无状态(Stateless):大多数节点是无状态的,仅依赖输入数据计算输出,而不存储额外的状态信息。
- 懒加载执行(Lazy Execution):只有当某个节点的输出被请求时,相关计算才会执行,从而减少不必要的计算开销。
- 动态图优化(Dynamic Graph Execution):不同于固定的推理流程,ComfyUI 允许用户 随时调整计算图结构,改变输入、替换模型,甚至插入新的计算步骤,而无需重新加载整个流程。
2.2 主要组件
ComfyUI 的计算图由 不同类型的节点 组成,每个节点负责特定的任务,整体上可以分为 输入节点、处理节点和输出节点:
输入节点(Input Nodes):
这些节点用于提供 计算所需的初始数据,包括:文本提示(Prompt):输入的文本描述,用于引导 AI 生成图像。
初始噪声(Latent Noise):Stable Diffusion 需要从噪声开始逐步生成图像,初始噪声节点用于提供随机或特定分布的噪声。
图像输入(Image Input):允许用户提供一张已有图像,进行 图生图(img2img) 或其他基于参考图的操作(如 ControlNet)。
模型加载(Model Loader):选择特定的 Stable Diffusion 模型、LORA(低秩适配)、VAE(变分自编码器)等组件。
处理节点(Processing Nodes):
这些节点执行 Stable Diffusion 相关的 计算任务,包括:CLIP 文字编码器:将文本提示转换为 潜在空间(Latent Space) 的嵌入表示,使模型能够理解文字描述。
采样器(Sampler):控制去噪过程的方式,如 Euler, DPM++ 2M Karras, UniPC, Heun 等不同的采样算法。
ControlNet:提供额外的 控制信号(如深度图、姿势关键点等),引导 Stable Diffusion 生成更符合用户需求的图像。
LORA 调节:用于 微调模型的特定风格或特征,增强模型的泛化能力。
输出节点(Output Nodes):
这些节点负责 存储或展示最终的生成结果,包括:图像输出(Image Output):最终生成的图片,可供用户保存或进一步处理。
中间结果可视化:可以在计算过程中,查看潜在空间的变化或采样器的中间输出,帮助用户更直观理解 AI 生成流程。
2.3 计算流程解析
ComfyUI 的计算流程通常包含以下步骤:
- 用户创建计算图(Graph),选择合适的输入节点(文本、图像、噪声)并连接处理节点(采样器、ControlNet、VAE)。
- 加载所需的模型(Model Loader),如 Stable Diffusion 权重、LORA、VAE。
- 输入文本提示(Prompt)并进行编码,CLIP 文字编码器将文本转换为嵌入向量。
- 从初始噪声开始进行去噪计算,Diffusion 采样器根据提示信息不断调整噪声,使其逐步收敛成有意义的图像。
- VAE 进行解码,将生成的潜在空间数据转换为可视化的 RGB 图像。
- 最终输出图像,用户可以保存或进一步处理生成内容。
ComfyUI的设计使得 ComfyUI 能够灵活地组合不同的 Diffusion 模型、LORA(低秩适配)、ControlNet、VAE(变分自编码器)等组件,实现更加多样化的 AI 生成能力。
3. 源码下载与运行
ComfyUI 的源码可以在 GitHub 上找到:GitHub - comfyanonymous/ComfyUI: The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.
代码详细的下载和运行步骤如下:
下载代码并安装依赖
# 克隆仓库
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
# 安装依赖
pip install -r requirements.txt
如果本地CPU运行,修改基础依赖环境为CPU
找到model_management.py修改默认配置为CPU:
下载基础的模型,放入默认模型路径中
ComfyUI的模型都在这里:https://huggingface.co/Comfy-Org
ComfyUI代码中默认存放模型的路径如下:
如果已经cd进入ComfyUI路径,下载基本的样例模型下载可以参考如下方式:
下载checkpoint模型:
wget -c https://huggingface.co/Comfy-Org/stable-diffusion-v1-5-archive/resolve/main/v1-5-pruned-emaonly-fp16.safetensors -P ./models/checkpoints/
下载vae模型:
wget -c https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors -P ./models/vae/
模型下载后可以在路径中查看到模型文件:
运行main.py,查看工作流页面
ComfyUI的主入口函数在main.py中:
使用命令运行即可:
python main.py
运行后,可以看到如下信息,即表示运行成功:
在浏览器中访问 ComfyUI 的可视化界面地址——
,可以看到如下界面:
4 整体结构和核心逻辑
ComfyUI代码项目整体的架构如下所示:
~/ComfyUI
├── api_server # web服务端代码定义
├── app # 页面的业务功能定义,包括配置、用户和前端管理、模型管理
├── comfy # ComfyUI工作流执行的核心流程
├──