问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ComfyUI基本原理与源码解析

创作时间:
作者:
@小白创作中心

ComfyUI基本原理与源码解析

引用
CSDN
1.
https://blog.csdn.net/weixin_43837507/article/details/145988481

1. 简介

ComfyUI 是一个基于 Stable DiffusionNode-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 的计算流程通常包含以下步骤:

  1. 用户创建计算图(Graph),选择合适的输入节点(文本、图像、噪声)并连接处理节点(采样器、ControlNet、VAE)。
  2. 加载所需的模型(Model Loader),如 Stable Diffusion 权重、LORA、VAE。
  3. 输入文本提示(Prompt)并进行编码,CLIP 文字编码器将文本转换为嵌入向量。
  4. 从初始噪声开始进行去噪计算,Diffusion 采样器根据提示信息不断调整噪声,使其逐步收敛成有意义的图像。
  5. VAE 进行解码,将生成的潜在空间数据转换为可视化的 RGB 图像。
  6. 最终输出图像,用户可以保存或进一步处理生成内容。

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 的可视化界面地址——

http://127.0.0.1:8188/

,可以看到如下界面:

4 整体结构和核心逻辑

ComfyUI代码项目整体的架构如下所示:

~/ComfyUI
├── api_server  # web服务端代码定义
├── app   # 页面的业务功能定义,包括配置、用户和前端管理、模型管理
├── comfy # ComfyUI工作流执行的核心流程
├──  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号