前言
如果你用過 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 的基礎上修改:
- 把 Empty Latent Image 換成 Load Image + VAE Encode
- 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 支援排隊。你可以:
- 按住 Ctrl 點擊 “Queue Prompt” 按鈕,設定要排入多少次
- 每次生成使用不同的 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 中:
- 設計好你的工作流程
- 開啟 Settings,啟用 “Enable Dev Mode Options”
- 點擊 “Save (API Format)” 按鈕
- 這會匯出一個 JSON 檔案,可以直接用 API 提交
我的常用工作流程
風格化肖像
流程:
- Load Image(參考照片)
- IP-Adapter(風格參考圖)
- ControlNet - OpenPose(姿態控制)
- KSampler(生成)
- Face Detailer(臉部修復)
- Upscale(放大到高解析度)
技巧:
- IP-Adapter 的 weight 設在 0.4-0.6,太高會太像參考圖
- denoise 在 0.5-0.7 之間
- 一定要加 Face Detailer,AI 生成的臉部常有瑕疵
批次背景生成(用於遊戲或設計)
流程:
- CLIP Text Encode(場景描述)
- ControlNet - Depth(深度圖控制構圖)
- KSampler
- Color Correct(統一色調)
- Save with metadata
批次策略:
- 準備 10 個不同的深度圖模板
- 搭配 5 組不同的 prompt
- 排列組合 = 50 張各不相同但風格統一的背景
從線稿上色
流程:
- Load Image(線稿)
- ControlNet - Lineart(保持線條)
- CLIP Text Encode(顏色和風格描述)
- KSampler (denoise=0.8-0.9)
- VAE Decode → Preview
技巧:
- 線稿要乾淨,背景純白
- prompt 中明確描述你想要的色彩方案
- 可以用 ControlNet 的 Scribble 模式做更寬鬆的控制
效能最佳化建議
- 啟用 FP16:在模型載入時使用半精度浮點數,VRAM 減半
- 使用 –lowvram 或 –medvram:如果 VRAM 不足
python main.py --lowvram
- Tiling:生成大圖時啟用 tiling,將圖片分塊處理
- VAE Tiling:VAE decode 大圖時也可以分塊
- 模型快取: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 無法比擬的。尤其是當你需要建立可重複使用的複雜管線時,節點式介面的優勢就非常明顯。
我建議的學習路線是:
- 先用內建的範例工作流程(Load Default)理解基本節點
- 然後嘗試自己從零建立一個 txt2img 流程
- 加入 ControlNet
- 學習使用 API 做批次生成
- 探索社群的自訂節點
整個過程可能需要一到兩個週末,但投資絕對值得。
延伸閱讀:
- ComfyUI 官方 GitHub(github.com/comfyanonymous/ComfyUI)— 文件和範例
- ComfyUI Examples(comfyanonymous.github.io/ComfyUI_examples/)— 官方工作流程範例
- r/comfyui — Reddit 社群,很活躍
- Civitai.com — 模型和工作流程分享平台
- YouTube 頻道 “Olivio Sarikas” — ComfyUI 教學影片