Gradio を使用して Hugging Face Spaces で ComfyUI ワークフローを実行する

ComfyUI ワークフローを Python にエクスポートする

ComfyUI ワークフローをノードベースの UI なしで実行するには、まずワークフローを純粋な Python スクリプトとしてエクスポートする必要があります。これは、Peyton DeNiro が作成した ComfyUI-to-Python-Extension を使用して実現します。

エクスポート手順:

  1. ComfyUI の Custom Nodes Manager から ComfyUI to Python Extension をインストールします。
  2. UI 設定にアクセスし、新しいメニューを無効にして「Save as Script」を選択します。
  3. このプロセスにより、ワークフローのバックエンドロジックを表す 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 関数で処理されます。

デプロイ手順

  1. 要件: custom_nodes フォルダーからすべての要件を集約し、ルートの requirements.txt ファイルにまとめます。
  2. Space 設定: 新しい Space を作成し、ハードウェアを ZeroGPU に設定します(PRO サブスクライバー向け、または ComfyUI バックエンド用の助成金リクエストで利用可能)。
  3. ファイルアップロード: models フォルダーを除くすべての ComfyUI フォルダーのファイルをアップロードします。
  4. 認証: 制限付きモデル(例:FLUX)の場合、Space 設定で HF_TOKEN という名前のシークレットとして Hugging Face トークンを追加します。

将来の自動化

Hugging Face は 2025 年初頭に「workflow-to-app」プロセスを自動化・簡素化する予定で、手動でのコーディングや設定の必要性を減らします。

Sources