Dify調用本地Stable Diffusion API的工作流搭建指南
核心架構
詳細步驟
-
準備Stable Diffusion API服務
- 確保本地已部署SD WebUI(如Automatic1111)
- 啟動API服務:
python launch.py --api --port 7860
- 驗證API可用性:
curl -X POST http://localhost:7860/sdapi/v1/txt2img -H 'Content-Type: application/json' -d '{"prompt":"test"}'
-
在Dify中創建應用
- 新建工作流類型應用
- 添加「HTTP請求」節點
- 配置節點參數:
{"url": "http://localhost:7860/sdapi/v1/txt2img","method": "POST","headers": {"Content-Type": "application/json"},"body": {"prompt": "{{input}}","steps": 20,"width": 512,"height": 512} }
-
數據處理配置
- 添加「變量提取」節點處理API響應:
import base64def process(data):image_b64 = data['images'][0]return {"image": f"data:image/png;base64,{image_b64}","info": data['info']}
- 添加「變量提取」節點處理API響應:
-
輸出節點配置
- 設置返回數據結構:
{"image_url": "{{image}}","generation_info": "{{info}}" }
- 設置返回數據結構:
完整工作流示例
# Dify工作流偽代碼
def main(input_text):# 構造SD API請求payload = {"prompt": input_text,"negative_prompt": "ugly, blurry","cfg_scale": 7}# 調用本地APIresponse = requests.post("http://localhost:7860/sdapi/v1/txt2img",json=payload)# 解析響應result = response.json()image_data = result['images'][0]# 返回結果return {"image": f"data:image/png;base64,{image_data}","parameters": result['parameters']}
關鍵注意事項
-
網絡配置
- 確保Dify服務與SD API在同一網絡域
- 若跨域訪問需配置CORS:
export COMMANDLINE_ARGS="--api --cors-allow-origins=*"
-
安全加固
- 添加請求頻率限制(建議使用Dify的速率限制中間件)
- 在SD API端設置身份驗證:
# webui.py修改 app.add_middleware(AuthMiddleware, token="YOUR_SECRET")
-
性能優化
- 啟用SD的
--xformers
加速 - 設置Dify超時參數:
# dify配置 request_timeout: 300 # 單位秒
- 啟用SD的
調試技巧
-
使用Postman測試API端點:
POST http://localhost:7860/sdapi/v1/options Body: {"sd_model_checkpoint": "v2-1_768-ema-pruned.safetensors"}
-
查看SD日志定位問題:
tail -f ~/stable-diffusion-webui/logs/api.log
-
Dify調試模式啟用:
- 工作流編輯頁開啟「調試輸出」
- 查看每個節點的輸入/輸出數據
提示:首次運行時建議使用簡單提示詞(如"a red apple")測試基礎功能,逐步增加復雜度。當處理1024×10241024\times10241024×1024以上分辨率時,需調整顯存設置:
--medvram-sdxl