一、前言

近年來,Stable Diffusion 作為代表性的擴散模型,在圖像合成和修復等領域取得了巨大成功。相比傳統 GAN,擴散模型生成的圖像更具多樣性和細節。要想在生產環境中大規模應用,單純地在命令行或 Python 腳本里調用并不足以應對復雜場景。ComfyUI 通過“節點 + 可視化”的方式,讓管道搭建直觀易懂,并能靈活拆分子流程。結合 API 集成,便可實現一鍵調用、參數化、異步化等高級功能。

本文將分為以下幾個部分:

  1. ComfyUI 環境搭建
  2. 拖拽式節點化設計 Stable Diffusion 流水線
  3. 核心節點詳解與參數優化
  4. Python 腳本與命令行模式
  5. 基于 FastAPI 的 HTTP REST API 集成
  6. 部署方案與高并發異步
  7. 進階:多模型切換、LoRA 微調、ControlNet 接入
  8. 總結與最佳實踐

請務必準備好一臺顯存不低于 8GB 的 GPU 服務器,或使用具有 GPU 支持的云主機(如 AWS EC2 GPU 實例)。

二、ComfyUI 環境搭建

要使用 ComfyUI,首先需要準備 Python 3.10+ 環境,并安裝必要依賴。

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

# 創建虛擬環境
python3 -m venv venv
source venv/bin/activate  # Windows 下使用 venv\Scripts\activate

# 安裝依賴
pip install --upgrade pip
pip install -r requirements.txt

其中 requirements.txt 中包含了對 torch(支持 CUDA)、diffusers 等核心庫的依賴。

# 安裝 PyTorch(示例為 CUDA 11.7)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu117

提示: 若要使用最新的 Stable Diffusion 2.x 模型,請在安裝時指定對應 diffusers 版本,并下載官方權重。

啟動 ComfyUI 服務:

python main.py --listen --port 8188

啟動后在瀏覽器訪問 http://localhost:8188,即可看到可視化節點界面。


三、拖拽式節點化設計 Stable Diffusion 流水線

ComfyUI 的核心理念是“節點化”。一個流水線由多個節點(Node)組成,每個節點完成獨立的運算或數據轉換。下圖示例展示了一個基礎的 Stable Diffusion 生成流程:

  1. 文本編碼節點(CLIP Text Encoder):將用戶輸入的 Prompt 轉換為文本特征向量。
  2. 采樣器節點(Euler, LMS, DPM++ 等):根據模型與文本特征進行擴散采樣,輸出潛變量(Latent)。
  3. 解碼器節點(VAE Decode):將潛變量解碼回像素空間,產生最終圖像。
  4. 后處理節點(Color Correction、Sharpen 等):可選節點,用于調整色彩、銳度等。

在 ComfyUI 界面中,依次拖拽出上述節點,按箭頭連接即可。

每個節點都提供了豐富的配置項。例如,Sampler 節點支持多種調度器(Scheduler)、步數(Steps)、種子(Seed)等參數;后處理節點可加載自定義 Python 腳本插件。


四、核心節點詳解與參數優化

4.1 文本編碼:CLIP Text Encoder

4.2 采樣器:Euler a、DPM++、LMS

不同調度器在圖像質量與速度上各有特點:

調度器 速度 質量傾向
Euler a 快速 對比度更強
DPM++ 2M Karras 中速 細節豐富
LMS 最慢 平衡

4.3 VAE 解碼

4.4 后處理插件

可以將 OpenCVPillow 腳本封裝成插件節點,實現:

示例:使用 Pillow 自動銳化腳本

from PIL import Image, ImageFilter

def process(img):
    return img.filter(ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3))

將其保存為 sharpen.py 并在節點中加載,即可在流水線末端調用。


五、Python 腳本與命令行模式

雖然可視化界面直觀,但在批量任務或 CI/CD 場景下,腳本化調用更為高效。ComfyUI 同時支持命令行模式(CLI):

python main.py --silent --config pipeline.json --output ./results

其中 pipeline.json 為導出的節點配置文件,可提前在 UI 中完成設計并導出。

示例 pipeline.json 結構:

{
  "nodes": [
    { "id": "clip", "type": "CLIPTextEncode", "params": { "prompt": "一只藍色的火烈鳥" } },
    { "id": "sampler", "type": "EulerSampler", "params": { "steps": 30, "cfg_scale": 12 } },
    { "id": "decode", "type": "VaeDecode", "params": {} }
  ],
  "edges": [["clip", "sampler"], ["sampler", "decode"]]
}

六、基于 FastAPI 的 HTTP REST API 集成

為了讓上游應用(如 Web 后端、移動端、自動化腳本)能夠靈活調用流水線,我們將借助 FastAPI 打造一個輕量級的圖像生成 API 服務。

6.1 安裝與初始化

pip install fastapi uvicorn requests

在項目根目錄創建 api_server.py

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import requests
import uuid, os

app = FastAPI()

class GenRequest(BaseModel):
    prompt: str
    steps: int = 30
    width: int = 512
    height: int = 512
    seed: int = None

@app.post("/generate")
async def generate(req: GenRequest):
    # 調用 ComfyUI 本地 CLI
    config = {
        "nodes":[
            {"id":"clip","type":"CLIPTextEncode","params":{"prompt":req.prompt}},
            {"id":"sampler","type":"EulerSampler","params":{"steps":req.steps,"cfg_scale":7.5,"seed":req.seed}},
            {"id":"decode","type":"VaeDecode","params":{}}
        ],
        "edges":[["clip","sampler"],["sampler","decode"]]
    }
    tmp_config = f"/tmp/{uuid.uuid4()}.json"
    with open(tmp_config,"w") as f: f.write(json.dumps(config))
    out_dir = f"./outputs/{uuid.uuid4()}"
    os.makedirs(out_dir,exist_ok=True)

    # 執行 CLI 命令
    cmd = f"python main.py --silent --config {tmp_config} --output {out_dir}"
    ret = os.system(cmd)
    if ret != 0:
        raise HTTPException(status_code=500, detail="Generation failed")

    # 返回第一張圖 URL
    img_files = os.listdir(out_dir)
    if not img_files:
        raise HTTPException(status_code=500, detail="No output images")
    img_path = os.path.join(out_dir, img_files[0])
    return {"url": f"/static/{os.path.basename(img_path)}"}

# Static 文件掛載
from fastapi.staticfiles import StaticFiles
app.mount("/static", StaticFiles(directory="outputs"), name="static")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run("api_server:app", host="0.0.0.0", port=9000, reload=True)

6.2 調用示例

curl -X POST "http://localhost:9000/generate" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"賽博朋克風格的城市夜景","steps":40}'

響應:

{"url":"/static/123e4567-e89b-12d3-a456-426614174000.png"}

至此,我們實現了基于 ComfyUI 流水線的 HTTP API 調用。可進一步集成到前端頁面或微服務架構。


七、部署方案與高并發異步

在生產環境下,需要考慮性能與穩定性:

  1. 異步任務隊列

  2. 多實例與負載均衡

  3. 模型緩存

  4. 監控與日志


八、進階:多模型切換、LoRA 微調、ControlNet 接入

8.1 多模型切換

在節點中通過下拉菜單即可切換不同版本的 Stable Diffusion 模型(1.x、2.x、xl)。也可在 API 請求中指定模型路徑,動態生成:

model_path = req.model or "runwayml/stable-diffusion-v1-5"
# 在配置節點時填入 model_path

8.2 LoRA 微調

利用 PEFT 對特定風格或人物進行 LoRA 微調,在 ComfyUI 節點中加載 LoRA 權重文件即可:

  1. 使用 PEFT 腳本生成 .safetensors 文件
  2. 在 ComfyUI 的 “LoRA Load” 節點中指定路徑
  3. 調整 “LoRA Scale” 節點參數控制風格強度

8.3 ControlNet 接入

ControlNet 能讓擴散模型更好地遵循條件(如邊緣、姿勢、深度圖)。在 ComfyUI 中:

  1. 添加 “ControlNet” 節點,并選擇對應模塊(Canny、Pose、Depth)
  2. 將輸入圖像接入 ControlNet
  3. 再與原有 Sampler 節點并聯

這樣便可實現“線稿→上色”、“人物姿態驅動” 等多種高級用例。


九、總結與最佳實踐

通過本文,你已經掌握了從環境搭建、可視化節點設計,到腳本化調用、HTTP API 集成,再到生產級部署的完整流程。基于 ComfyUI 的穩定擴散流水線,能極大地提升開發效率和系統可維護性。期待你將其應用到更多創意場景中,釋放生成式 AI 的無限潛力!


請將本文的關鍵點收藏并分享給需要的同好,一起在 2025 年開啟 AI 圖像生成的新篇章!

上一篇:

Kimi Chat API入門指南:從注冊到實現智能對話

下一篇:

DeepSeek+ima:打造高效個人知識庫,提升學習與工作效率
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費