メインコンテンツへスキップ

ルート

サーバーは一連の get および post メソッドを定義しており、これらは server.py 内の @routes を検索することで確認できます。Web クライアントでワークフローを送信すると、それは /prompt エンドポイントに POST され、プロンプトの検証を行って実行キューに追加します。検証に成功すれば prompt_idnumber(キュー内の位置)を返し、失敗すれば errornode_errors を返します。プロンプトキューは execution.py で定義されており、そこでは PromptExecutor クラスも定義されています。

組み込みルート

server.py は以下のルートを定義します:

コア API ルート

パスget/post/ws目的
/getComfy Web ページを読み込み
/wswebsocketサーバーとのリアルタイム通信のための WebSocket エンドポイント
/embeddingsget利用可能な埋め込みモデル名のリストを取得
/extensionsgetWEB_DIRECTORY を登録している拡張機能のリストを取得
/featuresgetサーバーの機能と能力を取得
/modelsget利用可能なモデルタイプのリストを取得
/models/{folder}get特定のフォルダ内のモデルを取得
/workflow_templatesgetカスタムノードモジュールと関連するテンプレートワークフローのマップを取得
/upload/imagepost画像をアップロード
/upload/maskpostマスクをアップロード
/viewget画像を表示。多くのオプションがあります。server.py@routes.get("/view") を参照
/view_metadata/getモデルのメタデータを取得
/system_statsgetシステム情報(Python バージョン、デバイス、VRAM など)を取得
/promptget現在のキュー状態と実行情報を取得
/promptpostプロンプトをキューに送信
/object_infogetすべてのノードタイプの詳細を取得
/object_info/{node_class}get1 つのノードタイプの詳細を取得
/historygetキュー履歴を取得
/history/{prompt_id}get特定のプロンプトのキュー履歴を取得
/historypost履歴をクリアまたは履歴アイテムを削除
/queueget実行キューの現在の状態を取得
/queuepostキュー操作を管理(保留中/実行中をクリア)
/interruptpost現在のワークフロー実行を停止
/freepost指定されたモデルをアンロードしてメモリを解放
/userdataget指定されたディレクトリ内のユーザーデータファイルをリスト
/v2/userdatagetファイルとディレクトリを構造化された形式でリストする拡張バージョン
/userdata/{file}get特定のユーザーデータファイルを取得
/userdata/{file}postユーザーデータファイルをアップロードまたは更新
/userdata/{file}delete特定のユーザーデータファイルを削除
/userdata/{file}/move/{dest}postユーザーデータファイルを移動または名前変更
/usersgetユーザー情報を取得
/userspost新しいユーザーを作成(マルチユーザーモードのみ)

WebSocket 通信

/ws エンドポイントは、クライアントとサーバー間のリアルタイム双方向通信を提供します。これは以下のために使用されます:
  • 実行進捗の更新を受信
  • ノード実行状態をリアルタイムで取得
  • エラーメッセージとデバッグ情報を受信
  • キュー状態が変更された際のライブ更新
WebSocket 接続は、以下のような不同类型的な JSON メッセージを送信します:
  • status - 全体のシステム状態更新
  • execution_start - プロンプト実行開始時
  • execution_cached - キャッシュされた結果が使用された場合
  • executing - ノード実行中の更新
  • progress - 長時間実行される操作の進捗更新
  • executed - ノードの実行完了時

カスタムルート

実行中にクライアントからサーバーへメッセージを送信したい場合は、サーバーにカスタムルートを追加する必要があります。 複雑な場合は aiohttp フレームワークドキュメント を詳しく調べる必要がありますが、ほとんどの場合は以下のように処理できます:
from server import PromptServer
from aiohttp import web
routes = PromptServer.instance.routes
@routes.post('/my_new_path')
async def my_function(request):
    the_data = await request.post()
    # the_data now holds a dictionary of the values sent
    MyClass.handle_my_message(the_data)
    return web.json_response({})
何をしているか完全に理解していない限り、クラス内で my_function を定義しようとしないでください。 @routes.post デコレータは多くの処理を行います!代わりに、上記のように関数を定義し、その後クラスメソッドを呼び出してください。
何も変更しない場合は、@routes.get を定義することもできます。
クライアントは、以下のようなコードで FormData オブジェクトを送信することでこの新しいルートを使用できます。 これにより、上記コードの the_data には message および node_id キーが含まれることになります:
import { api } from "../../scripts/api.js";
function send_message(node_id, message) {
    const body = new FormData();
    body.append('message',message);
    body.append('node_id', node_id);
    api.fetchApi("/my_new_path", { method: "POST", body, });
}