Gradio を使用して Hugging Face Spaces で ComfyUI ワークフローを実行する
ComfyUI ワークフローを Python にエクスポートする
ComfyUI ワークフローをノードベースの UI なしで実行するには、まずワークフローを純粋な 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 関数で処理されます。
デプロイ手順
- 要件:
custom_nodesフォルダーからすべての要件を集約し、ルートのrequirements.txtファイルにまとめます。 - Space 設定: 新しい Space を作成し、ハードウェアを ZeroGPU に設定します(PRO サブスクライバー向け、または ComfyUI バックエンド用の助成金リクエストで利用可能)。
- ファイルアップロード:
modelsフォルダーを除くすべての ComfyUI フォルダーのファイルをアップロードします。 - 認証: 制限付きモデル(例:FLUX)の場合、Space 設定で
HF_TOKENという名前のシークレットとして Hugging Face トークンを追加します。
将来の自動化
Hugging Face は 2025 年初頭に「workflow-to-app」プロセスを自動化・簡素化する予定で、手動でのコーディングや設定の必要性を減らします。