前言

如果你用過 Stable Diffusion 的 WebUI(AUTOMATIC1111 或 Forge),你大概已經體驗到 AI 繪圖的魅力。但當你想要做更複雜的事情——比如多階段的圖像處理管線、ControlNet + IP-Adapter 的組合、或是自動化的批次生成——WebUI 的單一介面就開始顯得捉襟見肘。

這就是 ComfyUI 登場的時候。ComfyUI 用節點式介面(node-based interface)來組合 AI 繪圖的各個步驟,每個步驟是一個節點,節點之間用線連接。這跟 Blender 的著色器編輯器、Unreal Engine 的 Blueprint、或是音樂製作中的模組化合成器是同樣的概念。

我花了大約一個週末從零學習 ComfyUI,到建立自己的自訂工作流程。這篇文章分享我的學習過程和實作筆記。

安裝

系統需求

  • GPU:NVIDIA 顯卡(RTX 2060 以上推薦,6GB VRAM 最低,8GB+ 較舒適)
  • RAM:16GB 以上
  • 硬碟:SSD 推薦,模型檔案很大(每個 2-7GB)
  • Python:3.10 或 3.11

macOS 使用者:ComfyUI 也支援 Apple Silicon(M1/M2/M3),使用 MPS 後端。效能比 NVIDIA GPU 差一些,但可以用。

安裝步驟

方法一:直接 clone(推薦)

# 1. clone 倉庫
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI

# 2. 建立虛擬環境 python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows

# 3. 安裝依賴 pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121 pip install -r requirements.txt

# 4. 下載模型 # 把 Stable Diffusion 模型(.safetensors)放到 models/checkpoints/ # 例如下載 SDXL 或 SD 1.5 的模型

# 5. 啟動 python main.py # 預設開在 http://127.0.0.1:8188

方法二:使用 ComfyUI Manager(更方便管理擴充)

安裝好基本的 ComfyUI 後:

cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

重新啟動 ComfyUI,介面上會多出一個 “Manager” 按鈕,可以直接在 UI 中安裝和管理自訂節點。

模型檔案的放置位置

ComfyUI/
├── models/
│   ├── checkpoints/     ← 主模型(SD 1.5, SDXL 等)
│   ├── loras/           ← LoRA 模型
│   ├── vae/             ← VAE 模型
│   ├── controlnet/      ← ControlNet 模型
│   ├── clip/            ← CLIP 模型
│   ├── upscale_models/  ← 超解析模型
│   └── embeddings/      ← Textual Inversion 嵌入

基本節點介紹

核心節點

ComfyUI 的節點代表 Stable Diffusion 管線中的各個步驟。以下是最基本的幾個:

1. Load Checkpoint

  • 載入 SD 模型
  • 輸出:MODEL(模型)、CLIP(文字編碼器)、VAE(影像編碼/解碼器)

2. CLIP Text Encode (Prompt)

  • 將文字 prompt 轉換為模型能理解的向量
  • 輸入:CLIP、text(你的 prompt)
  • 輸出:CONDITIONING

3. KSampler

  • 核心的取樣器,執行擴散過程
  • 輸入:MODEL、正面 CONDITIONING、負面 CONDITIONING、LATENT
  • 參數:steps(步數)、cfg(引導強度)、sampler_name(取樣演算法)、scheduler、denoise(去噪強度)
  • 輸出:LATENT

4. Empty Latent Image

  • 建立一個空白的潛空間圖像(起點)
  • 參數:width、height、batch_size
  • 輸出:LATENT

5. VAE Decode

  • 將潛空間圖像解碼為可見的像素圖像
  • 輸入:LATENT、VAE
  • 輸出:IMAGE

6. Save Image / Preview Image

  • 儲存或預覽最終圖像

最基本的工作流程

Load Checkpoint → CLIP Text Encode (正面) →┐
                → CLIP Text Encode (負面) →├→ KSampler → VAE Decode → Save Image
                                           │
Empty Latent Image ────────────────────────┘

這就是一個完整的 txt2img(文字到圖像)管線。在 ComfyUI 的畫布上,你把這些節點拖出來,用滑鼠拉線連接對應的輸入和輸出。

連線的顏色意義

ComfyUI 用不同顏色標示不同的資料類型:

  • 紫色:MODEL
  • 黃色:CLIP
  • 紅色:VAE
  • 橘色:CONDITIONING
  • 粉紅色:LATENT
  • 綠色:IMAGE

同色的輸出只能連到同色的輸入,這讓接線直覺又安全。

Workflow 設計

img2img(圖像到圖像)

在 txt2img 的基礎上修改:

  1. 把 Empty Latent Image 換成 Load Image + VAE Encode
  2. KSampler 的 denoise 值調低(0.3-0.7),數值越低越接近原圖
Load Image → VAE Encode →┐
                          ├→ KSampler → VAE Decode → Save Image
Load Checkpoint →         │
  CLIP Text Encode (正) →─┤
  CLIP Text Encode (負) →─┘

ControlNet 工作流程

ControlNet 讓你用線稿、深度圖、姿態等控制圖像生成的結構。

Load Image → 預處理器(Canny/Depth/Pose) →┐
                                          ├→ Apply ControlNet →┐
Load ControlNet Model ───────────────────┘                    │
                                                               ├→ KSampler → ...
CLIP Text Encode ─────────────────────────────────────────────┘

新增的節點:

  • Load ControlNet Model:載入 ControlNet 模型
  • Apply ControlNet:將控制條件應用到 CONDITIONING 上
  • 預處理器(如 Canny Edge、Depth Map):從圖像中提取控制信號

HiRes Fix(高解析度修復)

先生成低解析度圖像,再放大並精煉細節:

第一階段:低解析度生成
Empty Latent (512x512) → KSampler 1 → VAE Decode → Upscale (2x)

第二階段:高解析度精煉 Upscale Image → VAE Encode → KSampler 2 (denoise=0.4) → VAE Decode → Save

LoRA 工作流程

LoRA 是微調模型的輕量方法,可以為模型加入特定的風格或角色。

Load Checkpoint →┐
Load LoRA ───────┤→ (模型和 CLIP 被 LoRA 修改) → 正常的 txt2img 流程
                 │
                 ├→ Modified MODEL
                 └→ Modified CLIP

自訂節點

ComfyUI 的強大之處在於它有豐富的社群自訂節點。以下是我常用的:

ComfyUI Manager

必裝。提供節點搜尋、安裝、更新的 GUI。

WAS Node Suite

一套超過 100 個實用節點的合集,包括圖像處理、文字處理、數學運算等。

ComfyUI Impact Pack

進階的臉部偵測、修復、分割等功能。

ControlNet Auxiliary Preprocessors

各種 ControlNet 預處理器的合集(Canny、Depth、OpenPose 等)。

安裝自訂節點

使用 ComfyUI Manager 的 GUI 安裝最方便。或者手動:

cd ComfyUI/custom_nodes
git clone https://github.com/某某/某某節點.git
pip install -r 某某節點/requirements.txt  # 如果有的話
# 重新啟動 ComfyUI

批次生成

使用 Batch Size

最簡單的批次方法——在 Empty Latent Image 的 batch_size 設為 4(或更多),一次生成多張圖。

VRAM 需求會線性增加。8GB VRAM 大概能同時生成 2-4 張 512×512。

使用 Queue

ComfyUI 支援排隊。你可以:

  1. 按住 Ctrl 點擊 “Queue Prompt” 按鈕,設定要排入多少次
  2. 每次生成使用不同的 seed

這樣你可以一次排入 20 個任務,然後去喝咖啡。

API 批次生成

ComfyUI 有 API 端點,你可以用 Python 腳本批次提交任務:

import json
import urllib.request

def queue_prompt(workflow, server="127.0.0.1:8188"): """透過 API 提交一個工作流程""" data = json.dumps({"prompt": workflow}).encode('utf-8') req = urllib.request.Request( f"http://{server}/prompt", data=data, headers={'Content-Type': 'application/json'} ) response = urllib.request.urlopen(req) return json.loads(response.read())

# 讀取已儲存的工作流程 with open('my_workflow_api.json', 'r') as f: workflow = json.load(f)

# 批次生成,每次換不同的 seed for i in range(20): # 修改 KSampler 的 seed workflow["3"]["inputs"]["seed"] = i * 12345 # "3" 是 KSampler 的節點 ID # 可以同時修改 prompt workflow["6"]["inputs"]["text"] = f"a beautiful landscape, variation {i}"

result = queue_prompt(workflow) print(f"Queued prompt {i}: {result}")

匯出 API 格式的工作流程

在 ComfyUI 中:

  1. 設計好你的工作流程
  2. 開啟 Settings,啟用 “Enable Dev Mode Options”
  3. 點擊 “Save (API Format)” 按鈕
  4. 這會匯出一個 JSON 檔案,可以直接用 API 提交

我的常用工作流程

風格化肖像

流程:
  1. Load Image(參考照片)
  2. IP-Adapter(風格參考圖)
  3. ControlNet - OpenPose(姿態控制)
  4. KSampler(生成)
  5. Face Detailer(臉部修復)
  6. Upscale(放大到高解析度)

技巧:

  • IP-Adapter 的 weight 設在 0.4-0.6,太高會太像參考圖
  • denoise 在 0.5-0.7 之間
  • 一定要加 Face Detailer,AI 生成的臉部常有瑕疵

批次背景生成(用於遊戲或設計)

流程:
  1. CLIP Text Encode(場景描述)
  2. ControlNet - Depth(深度圖控制構圖)
  3. KSampler
  4. Color Correct(統一色調)
  5. Save with metadata

批次策略:

  • 準備 10 個不同的深度圖模板
  • 搭配 5 組不同的 prompt
  • 排列組合 = 50 張各不相同但風格統一的背景

從線稿上色

流程:
  1. Load Image(線稿)
  2. ControlNet - Lineart(保持線條)
  3. CLIP Text Encode(顏色和風格描述)
  4. KSampler (denoise=0.8-0.9)
  5. VAE Decode → Preview

技巧:

  • 線稿要乾淨,背景純白
  • prompt 中明確描述你想要的色彩方案
  • 可以用 ControlNet 的 Scribble 模式做更寬鬆的控制

效能最佳化建議

  1. 啟用 FP16:在模型載入時使用半精度浮點數,VRAM 減半
  2. 使用 –lowvram 或 –medvram:如果 VRAM 不足
python main.py --lowvram
  1. Tiling:生成大圖時啟用 tiling,將圖片分塊處理
  2. VAE Tiling:VAE decode 大圖時也可以分塊
  3. 模型快取:ComfyUI 會自動快取已載入的模型,切換工作流程時不需要重新載入

常見問題

Q: 節點連線出現紅色叉叉?
A: 資料類型不匹配。確認輸出和輸入的顏色(類型)一致。

Q: 生成結果全黑或全灰?
A: 通常是 VAE 的問題。嘗試在 Load Checkpoint 之外單獨載入一個 VAE(如 vae-ft-mse-840000)。

Q: 記憶體不足(OOM)?
A: 降低解析度、減少 batch size、使用 –lowvram 參數啟動、或關閉其他佔用 GPU 的程式。

Q: 自訂節點安裝後找不到?
A: 重新啟動 ComfyUI。如果還是沒有,檢查 console 的錯誤訊息,可能是缺少 Python 依賴。

小結

ComfyUI 的學習曲線比 WebUI 陡一些,但一旦上手,它給你的靈活性和控制力是 WebUI 無法比擬的。尤其是當你需要建立可重複使用的複雜管線時,節點式介面的優勢就非常明顯。

我建議的學習路線是:

  1. 先用內建的範例工作流程(Load Default)理解基本節點
  2. 然後嘗試自己從零建立一個 txt2img 流程
  3. 加入 ControlNet
  4. 學習使用 API 做批次生成
  5. 探索社群的自訂節點

整個過程可能需要一到兩個週末,但投資絕對值得。

延伸閱讀:

  • ComfyUI 官方 GitHub(github.com/comfyanonymous/ComfyUI)— 文件和範例
  • ComfyUI Examples(comfyanonymous.github.io/ComfyUI_examples/)— 官方工作流程範例
  • r/comfyui — Reddit 社群,很活躍
  • Civitai.com — 模型和工作流程分享平台
  • YouTube 頻道 “Olivio Sarikas” — ComfyUI 教學影片