跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

ComfyUI:AI绘画与图像生成的高效工作流与效率提升指南

目录 **简介:从WebUI到ComfyUI的范式转移** **ComfyUI 基础架构与安装** **节点式逻辑解析:核心工作流** **利用 ComfyUI 提升 Stable Diffusion 效率的策略** **高级工作流实战:ControlNet 与 IP-Adapter** **自动化与后端集成:Python API 调用** **Prompt 工程与动态提示词** **总结与展望*…

岁月神偷发布于 2026/4/6更新于 2026/10/1754K 浏览
ComfyUI:AI绘画与图像生成的高效工作流与效率提升指南

目录

  1. 简介:从WebUI到ComfyUI的范式转移
  2. ComfyUI 基础架构与安装
  3. 节点式逻辑解析:核心工作流
  4. 利用 ComfyUI 提升 Stable Diffusion 效率的策略
  5. 高级工作流实战:ControlNet 与 IP-Adapter
  6. 自动化与后端集成:Python API 调用
  7. Prompt 工程与动态提示词
  8. 总结与展望

1. 简介:从WebUI到ComfyUI的范式转移

在 AI 绘画的领域,Stable Diffusion (SD) 无疑是目前的基石。然而,随着模型体积的增大(如 SDXL, Flux)以及工作流复杂度的提升,传统的基于网页的界面(如 Automatic1111 WebUI)开始显露出局限性:页面刷新导致的卡顿、缺乏复杂的逻辑分支能力、难以进行批量自动化处理等。

ComfyUI 应运而生。它是一个基于节点的图形用户界面(GUI),它的核心理念是将 AI 绘画的每一个步骤(加载模型、输入提示词、采样、VAE解码、保存图片)拆解为独立的'节点',并通过连线的方式定义数据流向。

为什么选择 ComfyUI?
  • 极致的效率:ComfyUI 采用异步排队机制,且复用显存极其高效,在相同硬件下生成速度通常优于 WebUI。
  • 逻辑可视化:复杂的工作流(如图生图、ControlNet 多重控制)一目了然,便于调试。
  • 可复用性与模块化:你可以将常用的节点组合保存,一键加载,或者将其封装为 API 供后端程序调用。
  • 生态丰富:拥有庞大的社区支持,插件覆盖从 3D 生成到 视频制作的各个领域。

2. ComfyUI 基础架构与安装

2.1 安装指南

ComfyUI 的安装相对简单,推荐使用便携版本。

# 1. 克隆仓库 git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI # 2. 创建 Python 虚拟环境 (推荐) python -m venv venv # Windows 激活 venv\Scripts\activate # Linux/Mac 激活 source venv/bin/activate # 3. 安装依赖 pip install -r requirements.txt # 4. 下载主模型 (如 SDXL Base 1.0) # 将模型放入: checkpoints/sd_xl_base_1.0.safetensors # 5. 启动 python main.py --listen --port 8188 
2.2 界面概览

ComfyUI 的界面主要由三个区域组成:

  1. 节点库(左侧):按类别(Loaders, Sampling, Latent, Image 等)列出的所有可用节点。
  2. 画布(中间):拖拽节点、连接线的区域。
  3. 队列/历史(右侧):查看正在生成的任务、历史记录和生成的图片预览。

3. 节点式逻辑解析:核心工作流

要理解 ComfyUI,首先要理解最基础的'文生图'工作流。

3.1 基础文生图流程图
graph TD A -->   --> C  --> D  --> E C --> E D --> E E --> F F -->  F --> H style  :,stroke:,stroke-width: style E fill:,stroke:,stroke-width: style G fill:,stroke:,stroke-width: 
[Load Checkpoint<br>加载大模型]
B
[CLIP Text Encode<br>正向提示词]
A
[CLIP Text Encode<br>反向提示词]
A
[Empty Latent Image<br>设置分辨率与批次]
B
[KSampler<br>采样器核心]
[VAE Decode<br>潜空间解码]
G
[Save Image<br>保存图像]
[Preview Image<br>预览图像]
A
fill
#f9f
#333
2px
#bbf
#333
2px
#bfb
#333
2px

文章配图

3.2 节点详解
1. Load Checkpoint (加载检查点)

这是一切的开始。它负责加载 .safetensors 或 .ckpt 格式的模型文件。

  • 输出:MODEL (模型信息), CLIP (文本编码器), VAE (变分自编码器)。
2. CLIP Text Encode (文本编码)

需要两个节点:

  • 正向:描述你想要的画面,例如 'masterpiece, best quality, 1girl, cyberpunk style'。
  • 反向:描述你不想要的内容,例如 'low quality, bad anatomy, blurry'。
3. Empty Latent Image (空潜空间图像)

定义画布的大小和生成的数量。

  • Width/Height: 图像分辨率。
  • Batch Size: 一次生成多少张(这是效率的关键)。
4. KSampler (采样器)

这是 AI 绘画的大脑,负责去噪过程。

  • Seed (种子):决定随机性。-1 为随机。
  • Steps (步数):通常 20-30 步足够,过高会降低效率。
  • CFG (引导系数):提示词的遵循力度,通常 7.0 左右。
  • Sampler Name: 推荐 DPM++ 2M Karras 或 Euler a。
  • Scheduler (调度器): 推荐 Karras 或 Simple。
5. VAE Decode (解码)

将 KSampler 输出的'潜空间数据'(计算机理解的压缩信息)转换为人类可看的'像素数据'。

6. Save Image (保存)

将最终图像写入磁盘。

4. 利用 ComfyUI 提升 Stable Diffusion 的效率

ComfyUI 不仅仅是一个界面,它是一个优化引擎。以下是几种显著的效率提升策略。

4.1 批处理与显存优化

在 Automatic1111 中,批量生成往往会导致显存溢出(OOM)或速度急剧下降。ComfyUI 通过节点间的精准调度,优化了显存占用。

策略:调整 Batch Size 与 迭代次数

  • 不要将 Batch Size 设置得过高(如 > 8),这会瞬间填满显存。
  • 技巧:保持 Batch Size = 1 或 2,但在工作流外层使用循环控制,或者简单地多次点击'Queue Prompt'。ComfyUI 能够在上一个图生成的瞬间显存回收并开始下一个,维持高 GPU 占用率而非高显存占用率。
4.2 使用 Tiled VAE 与 Tiled Diffusion (分块处理)

当生成高分辨率图像(如 4k+)或使用大模型(SDXL)时,显存往往是瓶颈。

表格:不同 VAE 处理方式的显存占用对比

处理方式显存占用 (预估 SDXL 1024x1024)速度画质损失适用场景
标准 VAE12GB+快无显卡充裕时
Tiled VAE6GB - 8GB中几乎无显卡紧张、超大分辨率
Tiled Diffusion4GB - 6GB慢极低4k/8k 壁纸生成

ComfyUI 实现代码逻辑 (JSON片段演示):
在使用 Tiled VAE 节点时,只需将标准 VAE Decode 替换为 Tiled VAE Decode 节点,并设置 tile_size 为 512 或 1024。

// 示例:将标准 VAE 替换为 Tiled VAE 的节点配置逻辑 { "class_type": "VAEDecode", // 原始节点 "inputs": { "samples": ["KSampler", 0], "vae": ["LoadCheckpoint", 2] } } // 变为: { "class_type": "Tiled VAE Decode", // 高效节点 "inputs": { "samples": ["KSampler", 0], "vae": ["LoadCheckpoint", 2], "tile_size": 512 // 关键参数:分块大小 } } 
4.3 工作流链式处理

ComfyUI 允许你构建一条生产线,无需人工干预即可完成'生成 -> 放大 -> 润色 -> 保存'。

Mermaid 流程图:自动化链式处理

graph LR subgraph Phase1_Generation [第一阶段: 基础生成] G1[Generate 512x512] --> G2[VAE Decode] end subgraph Phase2_Upscale [第二阶段: 智能放大] G2 --> U1[Image Upscale] U1 --> U2[Detail Fix Pass] end subgraph Phase3_Output [第三阶段: 输出] U2 --> S1[Save High Res] U2 --> S2[Preview] end style Phase1_Generation fill:#e1f5fe,stroke:#01579b style Phase2_Upscale fill:#fff9c4,stroke:#fbc02d style Phase3_Output fill:#e8f5e9,stroke:#2e7d32 

文章配图

这种流程消除了人工保存图片、手动放入放大图、再手动输入提示词的繁琐过程。你只需点击一次'生成',ComfyUI 就会像流水线一样源源不断地输出成品图。

5. 高级工作流实战:ControlNet 与 IP-Adapter

为了提升生成质量的可控性,我们需要引入外部控制信号。

5.1 ControlNet:精准构图

ControlNet 允许你使用边缘检测、深度图、姿态骨架等来约束图像生成。

实战场景:为线稿上色
假设你有一张黑白线稿,希望 AI 为其上色。

Prompt 示例:

Positive: masterpiece, best quality, vibrant colors, anime style, clean lines Negative: monochrome, grayscale, blurry, low quality 

工作流步骤:

  1. Load Image: 加载线稿图。
  2. ControlNet Apply: 加载 ControlNet 模型(如 control_v11p_sd15_scribble)。
  3. 连接: 将 Load Image 连接到 ControlNet 的 image 输入端;将 ControlNet 的 output 连接到 KSampler 的 positive 或 negative 输入端(在 ComfyUI 中,ControlNet 通常作为一个辅助模型插入到 KSampler 之前)。

ComfyUI 关键节点逻辑:

graph LR Img[Load Image] --> CN[ControlNet Apply] Lora[Load Checkpoint] --> CN CN --> KS[KSampler] Txt[CLIP Encode] --> KS KS --> VAE[VAE Decode] VAE --> Save[Save Image] style CN fill:#ffcccb,stroke:#ff0000 

文章配图

5.2 IP-Adapter:图像提示词

IP-Adapter 是一个革命性的节点,它允许你使用一张或多张图片作为'风格参考',而不需要复杂的 Prompt 描述。

优势:

  • 极大减少了 Prompt 调试时间。
  • 能够精准复制特定角色或画风。

代码/配置示例:
你需要安装 ComfyUI_IPAdapter_plus 插件。

# 伪代码逻辑演示:IP-Adapter 的数据流向 # Load Image -> IPAdapter (Model + Image) -> Apply KSampler # 节点配置参数示意 ipadapter_params = { "weight": 0.8, # 参考权重,0-1,越高越像参考图 "start": 0.0, # 开始介入的时间步 "end": 1.0, # 结束介入的时间步 "fold_net": False # 是否使用更轻量的网络 } 

6. 自动化与后端集成:Python API 调用

这是 ComfyUI 相比其他 SD 界面最大的优势:API First。ComfyUI 自带一个本地服务器,允许你通过 JSON 或 WebSocket 发送工作流并获取图片。这使得将 AI 生成功能集成到游戏、App 或自动化脚本中变得极其简单。

6.1 启动 API 服务
python main.py --listen 
6.2 Python 脚本调用示例

以下是一个完整的 Python 脚本,用于连接 ComfyUI,发送一个简单的文生图任务,并保存结果。

import json import random import urllib.request import websocket # pip install websocket-client import uuid # ComfyUI 服务地址 server_address = "127.0.0.1:8188" client_id = str(uuid.uuid4()) def queue_prompt(prompt): p = {"prompt": prompt, "client_id": client_id} data = json.dumps(p).encode('utf-8') req = urllib.request.Request(f"http://{server_address}/prompt" , data=data) return json.loads(urllib.request.urlopen(req).read()) def get_history(prompt_id): with urllib.request.urlopen(f"http://{server_address}/history/{prompt_id}") as response: return json.loads(response.read()) def get_image(filename, subfolder, folder_type): data = {"filename": filename, "subfolder": subfolder, "type": folder_type} url_values = urllib.parse.urlencode(data) with urllib.request.urlopen(f"http://{server_address}/view?{url_values}") as response: return response.read() # 这是一个简单的文生图 Prompt (JSON 格式) # 该 JSON 可以通过 ComfyUI 界面点击 "Save (API Format)" 按钮直接获取" { "3": { "inputs": { "seed": 0, "steps": 20, "cfg": 8, "sampler_name": "euler", "scheduler": "normal", "denoise": 1, "model": ["4", 0], "positive": ["6", 0], "negative": ["7", 0], "latent_image": ["5", 0] }, "class_type": "KSampler" }, "4": { "inputs": { "ckpt_name": "v1-5-pruned-emaonly.safetensors" }, "class_type": "CheckpointLoaderSimple" }, "5": { "inputs": { "width": 512, "height": 512, "batch_size": 1 }, "class_type": "EmptyLatentImage" }, "6": { "inputs": { "text": "cyberpunk city, neon lights, rain, masterpiece, best quality", "clip": ["4", 1] }, "class_type": "CLIPTextEncode" }, "7": { "inputs": { "text": "bad quality, blurry", "clip": ["4", 1] }, "class_type": "CLIPTextEncode" }, "8": { "inputs": { "samples": ["3", 0], "vae": ["4", 2] }, "class_type": "VAEDecode" }, "9": { "inputs": { "filename_prefix": "ComfyUI_API_Output", "images": ["8", 0] }, "class_type": "SaveImage" } } """ # 执行任务 prompt = json.loads(prompt_text) prompt_id = queue_prompt(prompt)["prompt_id"] print(f"Task queued. ID: {prompt_id}") # 轮询检查进度 (实际项目中推荐使用 WebSocket 监听) # 这里简化处理 import time time.sleep(10) # 等待生成完成,具体时间取决于硬件 # 获取图片历史并保存 # 注意:实际生产环境需要更复杂的逻辑来监听 WebSocket 的 execution_success 消息 history = get_history(prompt_id) for node_id in history[prompt_id]['outputs']: if 'images' in history[prompt_id]['outputs'][node_id]: for image_data in history[prompt_id]['outputs'][node_id]['images']: image = get_image(image_data['filename'], image_data['subfolder'], image_data['type']) with open(f"output_{image_data['filename']}", 'wb') as f: f.write(image) print(f"Image saved: output_{image_data['filename']}") 

7. Prompt 工程与动态提示词

ComfyUI 在处理 Prompt 时比简单的文本框更灵活。

7.1 使用 Text 节点组合

不要在一个节点里写完所有东西。利用字符串连接节点动态构建 Prompt。

  • String Literal: 'masterpiece, best quality'
  • Text Concatenate: 将上述常量与用户输入的变量合并。
  • Wildcard Manager (插件): 随机从文本文件中读取关键词(如随机选择天气、随机选择颜色)。
7.2 Prompt 示例库
风格化写实
Positive: (photorealistic:1.4), raw photo, 8k uhd, dslr, soft lighting, high quality, film grain, (hyperrealistic:1.2), 1girl, fashion portrait, looking at viewer Negative: (cartoon, anime, 3d render, illustration:1.3), painting, drawing, blur, lowres 
动漫风格
Positive: (anime style:1.2), vibrant colors, cel shading, makoto shinkai style, clouds, lens flare, 1girl, school uniform, standing in street Negative: (realistic:1.4), photograph, 3d, dark skin, messy lines 
3D 渲染风格
Positive: (3d render:1.3), unreal engine 5, octane render, cinema 4d, clay material, smooth texture, soft studio lighting, cute character, blind box style Negative: sketch, drawing, pencil, texture noise, low poly 
7.3 效率提示:动态 Prompt

在批量生成时,你可能希望保持构图不变,但改变画面主体。
方法:在 ComfyUI 中使用 Primitive Node 或者 Impact Pack 中的 Wildcard Choose 节点。
效果:无需停止生成,只需修改一个节点的值,后续生成的批次就会应用新的 Prompt。

8. 总结与展望

ComfyUI 代表了 AI 绘画工具的成熟化方向——从玩具变为生产力工具。

核心优势回顾
  1. 流线型工作:通过节点连接,消除了重复操作。
  2. 极高的资源利用率:Tiled 技术和精准的内存管理让 8GB 显卡也能跑 4K 大图。
  3. 强大的扩展性:无论是接入 ControlNet 还是使用 Python API,ComfyUI 都提供了底层的控制权。
学习建议
  • 从简单开始:先跑通最基础的文生图。
  • 善用 Manager:安装 ComfyUI-Manager 插件,它是你扩展功能的入口。
  • 参考社区:ComfyUI 的社区(如 Civitai, Reddit, GitHub)分享了海量的 .json 工作流文件。下载并分析这些文件是学习的最快途径。

目录

  1. 目录
  2. 1\. 简介:从WebUI到ComfyUI的范式转移
  3. 为什么选择 ComfyUI?
  4. 2\. ComfyUI 基础架构与安装
  5. 2.1 安装指南
  6. 1. 克隆仓库 git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI # 2. 创建 Python 虚拟环境 (推荐) python -m venv venv # Windows 激活 venv\Scripts\activate # Linux/Mac 激活 source venv/bin/activate # 3. 安装依赖 pip install -r requirements.txt # 4. 下载主模型 (如 SDXL Base 1.0) # 将模型放入: checkpoints/sdxlbase_1.0.safetensors # 5. 启动 python main.py --listen --port 8188
  7. 2.2 界面概览
  8. 3\. 节点式逻辑解析:核心工作流
  9. 3.1 基础文生图流程图
  10. 3.2 节点详解
  11. 1\. Load Checkpoint (加载检查点)
  12. 2\. CLIP Text Encode (文本编码)
  13. 3\. Empty Latent Image (空潜空间图像)
  14. 4\. KSampler (采样器)
  15. 5\. VAE Decode (解码)
  16. 6\. Save Image (保存)
  17. 4\. 利用 ComfyUI 提升 Stable Diffusion 的效率
  18. 4.1 批处理与显存优化
  19. 4.2 使用 Tiled VAE 与 Tiled Diffusion (分块处理)
  20. 4.3 工作流链式处理
  21. 5\. 高级工作流实战:ControlNet 与 IP-Adapter
  22. 5.1 ControlNet:精准构图
  23. 5.2 IP-Adapter:图像提示词
  24. 伪代码逻辑演示:IP-Adapter 的数据流向 # Load Image -> IPAdapter (Model + Image) -> Apply KSampler # 节点配置参数示意 ipadapterparams = { "weight": 0.8, # 参考权重,0-1,越高越像参考图 "start": 0.0, # 开始介入的时间步 "end": 1.0, # 结束介入的时间步 "foldnet": False # 是否使用更轻量的网络 }
  25. 6\. 自动化与后端集成:Python API 调用
  26. 6.1 启动 API 服务
  27. 6.2 Python 脚本调用示例
  28. 7\. Prompt 工程与动态提示词
  29. 7.1 使用 Text 节点组合
  30. 7.2 Prompt 示例库
  31. 风格化写实
  32. 动漫风格
  33. 3D 渲染风格
  34. 7.3 效率提示:动态 Prompt
  35. 8\. 总结与展望
  36. 核心优势回顾
  37. 学习建议

更多推荐文章

查看全部
  • 基于 SSM Web 的教师业绩管理系统设计与实现
  • Meta-Llama-3-8B-Instruct 部署常见问题与解决方案
  • Django Web 框架实战:从零构建产品管理系统
  • AIGC 时代 C++ 吞吐量优化技巧与性能提升实践
  • 大模型工程师的招聘现状与学习建议
  • 腾讯混元 7B 开源:256K 上下文与数学推理升级
  • PCL 点云处理算法与函数汇总
  • 网络安全入门学习指南:分支、路线与方法
  • 2025 年 AI 转型进展洞察:全面解析与未来展望
  • PyCharm Copilot 插件中 Claude 模型不可用问题排查
  • 基于Python的高性能JSON结构化编辑器架构详解
  • 无人机“黑飞”正式入法:2026 年 1 月 1 日起违规飞行将面临拘留
  • Java 中 Double 类型精度丢失原理与示例
  • Java 常见集合框架核心解析与选型指南
  • Buzz 离线语音转文字工具安装与使用(支持 Whisper 模型)
  • Python Literal 类型注解详解
  • PostgreSQL 结合 cpolar 实现无公网 IP 远程访问
  • FPGA 基础与架构面试题详解(一)
  • GitHub 推送报错?用 SSH 密钥替代密码认证方案
  • Linux 下 Java JNI 调用 .so 文件的方法

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online