> ## Documentation Index
> Fetch the complete documentation index at: https://dripart-chore-mintlify-theme-mint.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Comfy Router クイックスタート

> Comfy Router に対して、PythonとTypeScriptで、ゼロから約5分で生成済み画像まで到達する手順を説明します。

<div className="router-quickstart-marker" />

Comfy Router を使うと、1つの Comfy APIキーで `https://api.comfy.org` を通じてパートナーモデルを呼び出せます。モデルの入力を `POST /v2/models/{provider}/{model}` に送信し、完了した結果を待ちます。この例では `bfl/flux-2-pro` で画像を生成します。

<Steps>
  <Step title="APIキーを作成する">
    [Comfy ワークスペース](https://platform.comfy.org/profile/api-keys?onboarding=router)でキーを作成します。Bash 互換のターミナルで、次を設定します：

    ```bash theme={null}
    export COMFY_API_KEY="comfyui-..."
    ```

    APIキーはサーバー上またはローカル環境に保管してください。これらの例はターミナルまたはサーバー向けであり、ブラウザの JavaScript 向けではありません。

    また、ワークスペースに入金されている必要があります。Comfy Router は呼び出しごとにクレジットを消費するため、クレジット残高のないワークスペースは、最初の実呼び出しで `error_type: insufficient_credits` とともに `402` で拒否されます。このチェックはリクエストボディが検証される前に実行されるため、入金のないアカウントは、それ以外の点では不正なリクエストであっても `402` を受け取ります。したがって、そもそも問題ではなかったリクエストボディをデバッグするのではなく、まずワークスペースに入金してください。例を実行する前に、[ワークスペースの請求](https://platform.comfy.org)でクレジットを追加してください。
  </Step>

  <Step title="このリクエスト用のキーを保存する">
    この画像に対して、この値を一度だけ生成します。同じリクエストを再試行する場合は、それを再利用してください。

    ```bash theme={null}
    export COMFY_REQUEST_KEY="$(uuidgen)"
    ```

    `uuidgen` が利用できない場合は、別の UUID ジェネレーターを使用してください。新しい画像を開始するときは、新しいキーを使用します。
  </Step>

  <Step title="画像を生成する">
    言語を選択して例を実行します。画像生成には数分かかることがあります。

    <CodeGroup>
      ```bash cURL theme={null}
      curl --max-time 660 \
        https://api.comfy.org/v2/models/bfl/flux-2-pro \
        -H "X-API-Key: $COMFY_API_KEY" \
        -H "Idempotency-Key: $COMFY_REQUEST_KEY" \
        -H "Content-Type: application/json" \
        -d '{"prompt": "a red teapot on a windowsill, morning light"}'
      ```

      ```python Python theme={null}
      # Python 3.10+
      # インストール: python -m pip install "comfy-sdk>=0.3.0"
      # quickstart.py として保存し、次を実行: python quickstart.py

      import os

      from comfy_sdk import Comfy

      # Comfy は環境から COMFY_API_KEY を読み取ります。
      with Comfy() as client:
          result = client.models.run(
              "bfl/flux-2-pro",
              {"prompt": "a red teapot on a windowsill, morning light"},
              idempotency_key=os.environ["COMFY_REQUEST_KEY"],
              timeout=660.0,
          )

      print("image:", result["result"]["sample"])
      ```

      ```typescript TypeScript theme={null}
      // Node.js 22+
      // インストール: npm install "@comfyorg/sdk@>=0.4.0" --save-dev tsx
      // quickstart.mts として保存し、次を実行: npx tsx quickstart.mts

      import { comfy } from "@comfyorg/sdk";

      // Comfy は環境から COMFY_API_KEY を読み取ります。
      type FluxResult = { result: { sample: string } };
      const idempotencyKey = process.env.COMFY_REQUEST_KEY;
      if (!idempotencyKey) throw new Error("Set COMFY_REQUEST_KEY first.");

      const result = await comfy.models.run<FluxResult>(
        "bfl/flux-2-pro",
        { prompt: "a red teapot on a windowsill, morning light" },
        { idempotencyKey, timeoutMs: 660_000 },
      );
      // 一部のモデルは JSON ではなく、生成されたファイル自体を返します。
      if (result.kind !== "json") throw new Error("expected a JSON result");

      console.log("image:", result.data.result.sample);
      ```

      ```swift Swift theme={null}
      // Swift 5.9+（macOS 14+、iOS 17+）。このスニペットはコマンドラインプログラムです。
      // iOS アプリ内にキーを同梱しないでください。バイナリから抽出可能です。
      // アプリでは、独自のバックエンドを呼び出し、キーはそこに保管してください。
      // インストール: .package(url: "https://github.com/Comfy-Org/comfy-swift-sdk.git", from: "0.5.0") を追加
      // ターゲットに ComfySwiftSDK を追加し、これを Sources/.../main.swift に置いて、次を実行: swift run

      import ComfySwiftSDK
      import Foundation

      let env = ProcessInfo.processInfo.environment

      guard let apiKey = env["COMFY_API_KEY"], !apiKey.isEmpty else {
          fatalError("Set COMFY_API_KEY first.")
      }
      guard let requestKey = env["COMFY_REQUEST_KEY"], !requestKey.isEmpty else {
          fatalError("Set COMFY_REQUEST_KEY first.")
      }

      let client = ComfyCloudClient(apiKey: apiKey)

      let result = try await client.models.run(
          "bfl/flux-2-pro",
          input: ["prompt": "a red teapot on a windowsill, morning light"],
          idempotencyKey: requestKey,
          timeout: 660  // 秒
      )

      // 一部のモデルは JSON ではなく、生成されたファイル自体を返します。
      guard let sample = result.output["result"]["sample"].stringValue else {
          fatalError("expected a JSON result carrying result.sample")
      }

      print("image:", sample)
      ```
    </CodeGroup>

    3つの例はすべて `COMFY_API_KEY` からキーを取得します。Python と TypeScript の
    クライアントは環境から自動的に読み取り、Swift の例は読み取って
    `ComfyCloudClient(apiKey:)` に渡します。
  </Step>

  <Step title="結果を読み取って保存する">
    このモデルでは、画像URL はレスポンスボディの `result.sample` にあります。省略したレスポンスは次のようになります。以下の URL は例示用です：

    ```json theme={null}
    {
      "status": "Ready",
      "result": { "sample": "https://example.com/generated-image.jpeg" }
    }
    ```

    返された URL を開くか、ダウンロードします：

    ```bash theme={null}
    curl --fail --location "PASTE_IMAGE_URL_HERE" --output teapot.jpg
    ```

    速やかにダウンロードしてください。Router は BFL のアセットを Comfy のストレージに再ホストできますが、URL は期限切れになり、リプレイしても更新されません。再ホストが失敗すると、より短命なプロバイダー URL が残ることがあります。詳しくは[結果アセット](/ja/development/comfy-router/reference#結果アセット)を参照してください。
  </Step>
</Steps>

## 待機の代わりにキューを使用する

`run` は画像の準備ができるまで接続を保持します。`request_id` をすぐに受け取り、このプロセスまたは別のプロセスから後で結果を収集するには、代わりに `submit` を呼び出してください（ステップ 3 でインストールする SDK のバージョンには含まれています）。または、同じボディを HTTP で `POST /v2/models/{provider}/{model}/requests` に送信します。ステップ 2 と同様に `Idempotency-Key` を一緒に送信してください。接続が切断された後に再試行された送信は、再びキューに入れて二重に課金される代わりに、元のリクエストを返します。SDK は `submit` 呼び出しごとに 1 つを生成します。すべてのモデルページには、同期スニペットの横に **Queue and collect later** タブがあり、[キュー配信](/ja/development/comfy-router/queue)でステータス、キャンセル、収集について説明しています。

キュー配信は、キーの背後にあるワークスペースにスコープされます。これは [あなたの Comfy ワークスペース](https://platform.comfy.org/profile/api-keys?onboarding=router)で作成されたキーが持つスコープです。

## モデルを選択する

[Comfy Router で利用可能なモデルをブラウズ](/ja/development/comfy-router/models)して、その入力を確認し、この例のモデル ID を置き換えてください。
