在 Hugging Face Spaces 上使用 Gradio 執行 ComfyUI 工作流程
Hugging Face 推出了一種方法,將複雜的 ComfyUI 工作流程轉換為獨立的 Gradio 應用程式,讓它們能夠在 Hugging Face Spaces 上使用無伺服器的 ZeroGPU 基礎設施免費部署與執行。
將 ComfyUI 工作流程匯出為 Python
若要在沒有節點式 UI 的情況下執行 ComfyUI 工作流程,必須先將工作流程匯出為純 Python 腳本。這可透過 Peyton DeNiro 所開發的 ComfyUI-to-Python-Extension 完成。
匯出流程:
- 透過 ComfyUI 中的 Custom Nodes Manager 安裝
ComfyUI to Python Extension。 - 進入 UI 設定,停用新選單,並選取「Save as Script」。
- 此過程會產生一個 Python 腳本,代表工作流程的後端邏輯。
建立 Gradio 介面
工作流程匯出為 Python 後,即可建立 Gradio 應用程式,以協調腳本並提供使用者友善的介面。
UI 實作
開發者可以使用 gr.Blocks() 定義想要向最終使用者公開的輸入。例如,在 Flux[dev] Redux + Flux[dev] Depth 工作流程中,常見的公開參數包括:
- 文本提示
- 結構與風格圖像
- 深度與風格強度滑桿
整合邏輯
為了讓 UI 可運作,將 Python 腳本中匯出的 main() 函式轉換為生成函式(例如 generate_image)。匯出腳本內的硬編碼值會被來自 Gradio 輸入的變數取代,且最終的圖像輸出節點會被修改為回傳已儲存的圖像路徑。
部署至 Hugging Face Spaces
部署至 Hugging Face Spaces 需要特定的最佳化,以避免上傳龐大的模型檔案,並利用無伺服器的 GPU 加速。
模型管理
不直接上傳模型,而是使用 huggingface_hub 函式庫的 hf_hub_download 函式,以程式方式將本機 ComfyUI 模型路徑對應到 Hugging Face Hub 上的相應版本。這確保模型僅在 Space 啟動時下載一次。
ZeroGPU 最佳化
為了啟用免費推論,生成函式必須以 @spaces.GPU 裝飾。為了在 ZeroGPU 上優化效能,並避免每次執行時都從磁碟重新載入模型到 GPU,模型宣告應從裝飾函式移至全域 Python 環境。預先載入則透過 ComfyUI 的 model_management.load_models_gpu 函式處理。
部署步驟
- Requirements: 將
custom_nodes資料夾中的所有需求合併至根目錄的單一requirements.txt檔案。 - Space Configuration: 建立新 Space,並將硬體設定為 ZeroGPU(此功能供 PRO 訂閱者使用,或可透過申請授權使用於 ComfyUI 後端)。
- File Upload: 上傳所有 ComfyUI 資料夾檔案,
models資料夾除外。 - Authentication: 對於受限模型(例如 FLUX),在 Space 設定中新增名為
HF_TOKEN的機密,以存放 Hugging Face 令牌。
未來自動化
Hugging Face 計畫於 2025 年初自動化並簡化「workflow-to-app」流程,減少手動編碼與設定的需求。