Workflow1111 が Gradio Workflow を使って AUTOMATIC1111 の機能を再構築

TL;DR

Workflow1111 は、73 個のノードと 11 のメディアパイプラインを使用して、AUTOMATIC1111 の stable-diffusion-webui のコア機能セットを再現する Gradio Workflow です。誰でも GPU を所有しなくても、ブラウザからテキストから画像、インペイント、アップスケーリング、動画生成など、さまざまな機能を実行できます。


Workflow1111 とは何か

Workflow1111 は、11 の異なるメディアパイプラインをつなぎ合わせる単一の gr.Workflow キャンバスです。このグラフには、4 種類のオペレータ種別(fnmodelspacedataset)の 73 個のノードが含まれます。各ノードは関数、InferenceClient を通じてアクセスされる Hugging Face モデル、別の Gradio Space、またはデータセットの行をラップしています。その結果、AUTOMATIC1111 の stable-diffusion-webui のタブや拡張機能を模倣したモジュラーでブラウザベースの UI が得られます。

"これらのパイプラインのいずれかを実行するには、Hugging Face アカウントでログインするか、アクセストークンを提供してください。ログイン後、モデル呼び出しはあなたのクォータを使用します。" – Hugging Face ブログ


コアパイプラインとその実装

テキストから画像

  • txt2img タブを再現し、ネガティブプロンプト、ステップ数、CFG、シード、幅、高さ、チェックポイント選択の制御を備えます。
  • プロンプトは、スタイルプリセットを追加し、テキストをクリーンアップする fn ノードを経由し、その後 model ノードが選択された拡散チェックポイントを Inference Providers を通じて呼び出します。
  • ポストプロセス用の fn ノードが生成パラメータを PNG メタデータに書き込み、後で取得できるようにします。

高解像度修正

  • AUTOMATIC1111 のアップスケール→精査ワークフローを 2 ノードの迂回で実装します。
  • テキストから画像パイプラインの出力が、FLUX.1-Kontext model ノードに送られ、精査指示(「細部とマイクロテクスチャを強化し、コンポジションは同一に保つ」)が与えられます。

画像から画像

  • 同じ Kontext ノードを再利用:画像をアップロードし、編集したい内容を記述すると、編集済みの結果が返されます。

LLM 生成プロンプト

  • 粗いプロンプトを Qwen3-4B model ノードに送信します。
  • 下流の fn ノードが LLM の応答を最大 40 タグまでに制限されたリストにフォーマットし、任意の拡散モデルノードに供給できます。

画像からプロンプト(インタロゲート)

  • Qwen2.5-VL-7B-Instruct を使用して入力画像のテキスト的説明を生成します。
  • 並行して、ViT-base-patch16-224 クラスファイアがラベル確率を返します。
  • 並行実行により、両方の結果が単一のモデル呼び出しとほぼ同等の時間で入手可能です。

検出からインペイントマスク

  • DETR-ResNet-50 検出器が物体(例:人間、犬、自転車、車)を識別し、バウンディングボックスを生成します。
  • 一方の枝ではボックスを画像上に描画し、他方の枝ではボックスをバイナリマスクに変換して下流のインペイントに供給します。
  • 検出はリモートで実行されますが、描画とマスク作成は Pillow/NumPy を使ってローカルで行われます。

プロンプトマトリクス

  • fn ノードが基本プロンプトに 4 つの接尾辞を展開し、4 つの並列のテキストから画像ノードを作成します。
  • 最終ノードが 4 つの結果をコンタクトシートに結合します。
  • ループ演算子は不要で、並列ノードが同時に実行されます。

アップスケーリングと背景除去

  • 2 つのアップスケーラパス:ローカルの Lanczos リサンプリング(fn ノード)と外部の AuraSR ×4 Space(space ノード)。
  • 背景除去は BRIA RMBG-2.0 Space を呼び出し、モデルをメインキャンバスから分離します。

アノテーター(ControlNet風の事前処理)

  • Canny、ラインアート、スケッチ、ラマ・ディープ、ポスタライズはすべて純粋な NumPy fn ノードとして実装されています。
  • 36 個のオペレータノードのうち 32 個が fn ノードであり、そのうち 22 個はネットワーク呼び出しなしに完全にプロセス内で実行されるため、キャンバスの大部分がオフラインでも動作し続けます。

PNG情報

  • AUTOMATIC1111 の PNG メタデータストレージを模倣:ポストプロセスノードがパラメータを PNG の parameters クラッシュに書き込み、専用パイプラインがそれらを読み戻す(プロンプト、ネガティブプロンプト、ステップ数、CFG、シード、サイズ、モデル)。

画像から動画

  • PNG情報ノードは、Wan 2.2 I2V A14B model ノードにも入力され、画像をアニメーション化します(例:眠っているキツネが目覚める)。
  • 単一のアップロードで複数の下流パイプラインを駆動できます。

自分の GPU で実行する方法

  • 既定では、すべての model および space 呼び出しは Inference Providers や外部 Spaces を通じてリモートハードウェアを使用するため、ローカル GPU がなくてもワークフローは動作します。
  • 任意の fn ノードは、ローカルに読み込まれたモデルに交換できます。ブログでは、ZeroGPU割り当て上で MiniMax-H3 モデルを蒸留した FastVideo/fastvideo-fasth3-preview が例として挙げられています。
  • 例:バインド構文
    @spaces.GPU(duration=get_duration, size=GPU_SIZE)
    def _generate(prompt_embeds, text_token_tags, height, width, num_frames, seed):
        ...
    
    gr.Workflow(bind={"generate": _generate, "status": status}).launch()
    
  • ZeroGPU は関数呼び出しのために自動的に GPU を割り当て、その後解放します。gr.Workflow はその割り当てを認識しません。

すべての出力が自動 REST API になる

  • それぞれの出力ノードが型指定されたエンドポイント(例:/image/edited_image/generated_prompt)になります。
  • 例:クライアント呼び出し
    from gradio_client import Client
    client = Client("ysharma/Workflow1111", oauth_token="hf_...")
    image, params, hires = client.predict(
        "a red fox in a snowy pine forest", "", "Cinematic", "enhance fine detail", api_name="/image"
    )
    
  • エンドポイントは Model Context Protocol (MCP) とも互換性があり、AIアシスタント(Claude Code、Cursor など)が直接呼び出すことができます。

ComfyUI との比較

機能 Workflow1111 (Gradio) ComfyUI
ハードウェア抽象化 ノードはリモートの Inference Providers、Spaces、またはデータセットを指すことができる;ローカル GPU は必須ではない。 主にローカル GPU 実行;外部呼び出しにはカスタムスクリプトが必要。
自動 API 生成 出力ノードが手動ルーティングなしで REST エンドポイントになる。 内部的な API 生成機能なし;開発者がエンドポイントを自分で公開する必要がある。
OAuth ベースのマルチユーザーアクセス ユーザーは Hugging Face アカウントでログイン;使用量はクォータに請求される。 通常、単一ユーザー向けデスクトップアプリケーション。
ミックスモダリティグラフ 拡散、LLM、VLM、検出、動画モデルが一つのキャンバスに共存。 複数のモデルタイプをサポートするが、統合にはしばしばカスタムノードが必要。
カスタムロジック 単純な Python fn ノードにより、キャンバス上で任意のコードが実行可能。 カスタムノードには C++/Python 拡張の作成が必要。

ブログは、Gradio Workflow が ComfyUI と同等の広範囲をカバーしつつ、リモート実行と自動 API 機能を追加した、ブラウザ最適化かつゼロインストールの体験を提供すると結論づけています。


自分のワークフローで始める

  1. 最小限のワークフローを作成する
    import gradio as gr
    def your_function(text: str) -> str:
        return text.upper()
    gr.Workflow(bind=[your_function]).launch()
    
  2. bind= 引数を使って、追加の関数、モデル、または Spaces をバインドする。
  3. edges= パラメータまたはキャンバス上で対話的にノードを接続する。
  4. gradio deploy でデプロイし、Hugging Face Spaces 上に公開する。
  5. 公開された Space から Workflow1111 を複製し、ノードを削除または置き換え、新しいパイプラインで実験する。

詳細なスキーマについては、公式の Gradio Workflow ガイド を参照してください。


なぜ重要なのか

  • 複雑なマルチモデル UI スタックがローカル GPU なしで組み立てられることを示しており、クリエイターと研究者にとっての障壁を低下させます。
  • 統合された自動生成 API サーフェスを提供し、生成パイプラインをより大きなシステムや AI アシスタントに簡単に統合できるようにします。
  • ComfyUI などのデスクトップ専用ノードエディタに対する、クラウド最適化の直接的な競合として、Gradio Workflow を位置づけ、迅速なプロトタイピングとデプロイメントのエコシステムを拡大します。

*Space を複製し、パイプラインをリミックスして、X で @gradio をタグ付けしてご自身の創造物を共有してください。

Sources