
ComfyUI API是什么:深入探索ComfyUI的API接口與應用
近年來,Stable Diffusion 作為代表性的擴散模型,在圖像合成和修復等領域取得了巨大成功。相比傳統 GAN,擴散模型生成的圖像更具多樣性和細節。要想在生產環境中大規模應用,單純地在命令行或 Python 腳本里調用并不足以應對復雜場景。ComfyUI 通過“節點 + 可視化”的方式,讓管道搭建直觀易懂,并能靈活拆分子流程。結合 API 集成,便可實現一鍵調用、參數化、異步化等高級功能。
本文將分為以下幾個部分:
請務必準備好一臺顯存不低于 8GB 的 GPU 服務器,或使用具有 GPU 支持的云主機(如 AWS EC2 GPU 實例)。
要使用 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
,即可看到可視化節點界面。
ComfyUI 的核心理念是“節點化”。一個流水線由多個節點(Node)組成,每個節點完成獨立的運算或數據轉換。下圖示例展示了一個基礎的 Stable Diffusion 生成流程:
在 ComfyUI 界面中,依次拖拽出上述節點,按箭頭連接即可。
每個節點都提供了豐富的配置項。例如,Sampler 節點支持多種調度器(Scheduler)、步數(Steps)、種子(Seed)等參數;后處理節點可加載自定義 Python 腳本插件。
openai/clip-vit-large-patch14
權重或對應 huggingface 目錄。不同調度器在圖像質量與速度上各有特點:
調度器 | 速度 | 質量傾向 |
---|---|---|
Euler a | 快速 | 對比度更強 |
DPM++ 2M Karras | 中速 | 細節豐富 |
LMS | 最慢 | 平衡 |
可以將 OpenCV 或 Pillow 腳本封裝成插件節點,實現:
示例:使用 Pillow 自動銳化腳本
from PIL import Image, ImageFilter
def process(img):
return img.filter(ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3))
將其保存為 sharpen.py
并在節點中加載,即可在流水線末端調用。
雖然可視化界面直觀,但在批量任務或 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"]]
}
為了讓上游應用(如 Web 后端、移動端、自動化腳本)能夠靈活調用流水線,我們將借助 FastAPI 打造一個輕量級的圖像生成 API 服務。
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)
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 調用。可進一步集成到前端頁面或微服務架構。
在生產環境下,需要考慮性能與穩定性:
異步任務隊列
多實例與負載均衡
模型緩存
監控與日志
在節點中通過下拉菜單即可切換不同版本的 Stable Diffusion 模型(1.x、2.x、xl)。也可在 API 請求中指定模型路徑,動態生成:
model_path = req.model or "runwayml/stable-diffusion-v1-5"
# 在配置節點時填入 model_path
利用 PEFT 對特定風格或人物進行 LoRA 微調,在 ComfyUI 節點中加載 LoRA 權重文件即可:
.safetensors
文件ControlNet 能讓擴散模型更好地遵循條件(如邊緣、姿勢、深度圖)。在 ComfyUI 中:
這樣便可實現“線稿→上色”、“人物姿態驅動” 等多種高級用例。
通過本文,你已經掌握了從環境搭建、可視化節點設計,到腳本化調用、HTTP API 集成,再到生產級部署的完整流程。基于 ComfyUI 的穩定擴散流水線,能極大地提升開發效率和系統可維護性。期待你將其應用到更多創意場景中,釋放生成式 AI 的無限潛力!
請將本文的關鍵點收藏并分享給需要的同好,一起在 2025 年開啟 AI 圖像生成的新篇章!