From fa12bb3daed4b29ee3da91a8e99ba89a2268381e Mon Sep 17 00:00:00 2001 From: lin-bot23 Date: Tue, 27 Oct 2026 11:18:10 +0800 Subject: [PATCH] i18n: sync zh/ja/ko translations with upstream/main (2026-10-27) --- ja/development/api-development/sdks.mdx | 25 +- ja/development/cloud/api-reference.mdx | 5 +- ja/development/comfy-router/limitations.mdx | 29 +- ja/development/comfy-router/models.mdx | 9 +- .../models/bria/image-edit-relight/code.mdx | 7 +- .../comfy-router/models/krea/krea-3/code.mdx | 7 +- .../models/luma_2/ray-3-2/code.mdx | 75 +-- .../models/luma_2/uni-1-max/code.mdx | 67 +-- .../comfy-router/models/luma_2/uni-1/code.mdx | 71 +-- ja/development/comfy-router/reference.mdx | 396 +++++++------- ko/development/api-development/sdks.mdx | 13 +- ko/development/cloud/api-reference.mdx | 5 +- ko/development/comfy-router/limitations.mdx | 29 +- ko/development/comfy-router/models.mdx | 9 +- .../models/bria/image-edit-relight/code.mdx | 7 +- .../comfy-router/models/krea/krea-3/code.mdx | 7 +- .../models/luma_2/ray-3-2/code.mdx | 59 +-- .../models/luma_2/uni-1-max/code.mdx | 59 +-- .../comfy-router/models/luma_2/uni-1/code.mdx | 57 ++- ko/development/comfy-router/reference.mdx | 387 +++++++------- zh/development/api-development/sdks.mdx | 19 +- zh/development/cloud/api-reference.mdx | 9 +- zh/development/comfy-router/limitations.mdx | 31 +- zh/development/comfy-router/models.mdx | 11 +- .../models/bria/image-edit-relight/code.mdx | 11 +- .../comfy-router/models/krea/krea-3/code.mdx | 7 +- .../models/luma_2/ray-3-2/code.mdx | 65 +-- .../models/luma_2/uni-1-max/code.mdx | 73 +-- .../comfy-router/models/luma_2/uni-1/code.mdx | 77 +-- zh/development/comfy-router/reference.mdx | 484 +++++++++--------- 30 files changed, 1071 insertions(+), 1039 deletions(-) diff --git a/ja/development/api-development/sdks.mdx b/ja/development/api-development/sdks.mdx index 299df75116..a76faf9783 100644 --- a/ja/development/api-development/sdks.mdx +++ b/ja/development/api-development/sdks.mdx @@ -3,13 +3,13 @@ title: "Comfy SDK:ComfyUI 向け Python・TypeScript クライアント" description: "Comfy Cloud、デプロイ環境、または自前の ComfyUI に対して Python または TypeScript から ComfyUI ワークフローを実行し、アセット、ジョブ、ライブイベント、冪等なリトライを扱います。" sidebarTitle: "SDK" icon: "code" -translationSourceHash: dbb2e0a8 +translationSourceHash: fd912955 translationFrom: development/api-development/sdks.mdx translationBlockHashes: "_intro": c92c7b51 "Install": da9a0a57 "Quickstart": 02297586 - "Choosing a base URL": 2265e6f6 + "Choosing a base URL": 0e77e81c "Retrying a submit: the idempotency key": 7c83d78f "Watching a job run": 34d74bcc "Tracing an output back to its workflow": b01886a3 @@ -21,6 +21,7 @@ translationBlockHashes: + import SdkSurfaces from "/snippets/ja/sdk/surfaces.mdx"; import SdkVersions from "/snippets/ja/sdk/versions.mdx"; @@ -110,20 +111,20 @@ await job.getOutputs("9")[0].toFile("out.png"); ## ベースURLの選択 -| 接続先 | Base URL | APIキー | +| 接続先 | ベースURL | APIキー | |---|---|---| | **Comfy Cloud** | `https://cloud.comfy.org` (デフォルト) | 必須 | | **Comfy API デプロイ** | `https://.run.comfy.app` | 必須 | -| **ご自身のComfyUI** | `http://127.0.0.1:8189` (ローカルプロキシ) | デフォルトでは不要。オプションの静的ベアラートークン | +| **ご自身のComfyUI** | `http://127.0.0.1:8189` (ローカルプロキシ) | デフォルトでは不要。任意で静的なベアラートークンを指定できます。 | -ベースURLはコンストラクタ引数ではなく、`COMFY_BASE_URL`環境変数から取得されます: +ベースURLはコンストラクタの引数ではなく、`COMFY_BASE_URL`環境変数から取得されます: ```bash export COMFY_BASE_URL="https://.run.comfy.app" # Comfy API デプロイ export COMFY_BASE_URL="http://127.0.0.1:8189" # セルフホストプロキシ ``` -この変数はクライアントが構築されるたびに読み取られ、`http(s)` URLである必要があります。未設定または空白の場合はComfy Cloudを意味します。したがって、クライアント自体はどこでも同じです: +この変数はクライアントを構築するたびに読み取られ、`http(s)` URLである必要があります。未設定または空白の場合はComfy Cloudとみなされます。そのため、クライアント自体はどこでも同じです: ```python Python @@ -136,7 +137,7 @@ const client = new Comfy({ apiKey: "comfyui-..." }); - 初期ビルドからアップグレードしますか? `Comfy("", "")`は、`COMFY_BASE_URL`を設定した`Comfy(api_key="")`になりました。`api_key`はキーワード専用引数なので、以前の位置引数での呼び出しは、URLをキーとして静かに読み取るのではなく、`TypeError`を発生させます。 + 以前のビルドからアップグレードする場合、`Comfy("", "")`は、`COMFY_BASE_URL`を設定した上で`Comfy(api_key="")`に変更されています。`api_key`はキーワード専用引数なので、以前の位置引数での呼び出しは、URLをキーとして暗黙のうちに読み取るのではなく、`TypeError`を発生させます。 ### Comfy Cloud @@ -144,20 +145,20 @@ const client = new Comfy({ apiKey: "comfyui-..." }); そのまま動作します。[APIキー](/ja/development/api-development/getting-an-api-key)を作成し、クライアントに渡します。 - APIアクセスには有料のComfy Cloudサブスクリプションが必要です。無料プランには含まれません。同時に実行できるジョブ数はプランによって異なります。[同時実行の制限](/ja/development/deploy/cloud-usage#同時実行の制限)をご覧ください。 + APIアクセスには有料のComfy Cloudサブスクリプションが必要です。無料プランには含まれません。同時に実行できるジョブ数はプランによって異なります。詳しくは[同時実行の制限](/ja/development/deploy/cloud-usage#同時実行の制限)をご覧ください。 ### Comfy API デプロイ -[開発者プラットフォーム](https://platform.comfy.org)を通じてデプロイしたワークフローには、専用のエンドポイントが割り当てられます。`COMFY_BASE_URL`をそのエンドポイントに指定し、Comfy Cloudとまったく同じようにAPIキーを使用します。このガイドのすべてが同じように機能します。ただし、[ジョブのラベルとジョブ一覧](#ジョブにラベルを付けて後で見つける)は Comfy Cloud ではまだサポートされていません。 +[開発者プラットフォーム](https://platform.comfy.org)を通じてデプロイしたワークフローには、専用のエンドポイントが割り当てられます。`COMFY_BASE_URL`をそのエンドポイントに設定し、Comfy Cloudとまったく同じようにAPIキーを使用します。このガイドの内容はすべて同じように機能します。ただし、[ジョブのラベルとジョブ一覧](#ジョブにラベルを付けて後で見つける)はComfy Cloudではまだサポートされていません。 -Comfy APIデプロイは、そのBuildに含まれるモデルとカスタムノードを使用して複数のワークフローを実行できます。各ジョブについて、`get_workflow()`は`format: "api"`を持ち、実行されたグラフを`.graph`プロパティに含むワークフローレスポンスを返します。 +Comfy API デプロイでは、そのBuildに含まれるモデルとカスタムノードを使用して複数のワークフローを実行できます。各ジョブについて、`get_workflow()`は`format: "api"`を持ち、実行されたグラフを`.graph`プロパティに含むワークフローレスポンスを返します。 ### ご自身のComfyUI -セルフホスト環境では、v2 API は ComfyUI と一緒に動作する小規模なオープンソースサービス [comfy-api-proxy](https://github.com/Comfy-Org/comfy-api-proxy) によって提供されます。インストールして実行し、`COMFY_BASE_URL="http://127.0.0.1:8189"`を設定します: +セルフホストのComfyUIでは、v2 APIは、ComfyUIと並行して動作する小規模なオープンソースサービスである[comfy-api-proxy](https://github.com/Comfy-Org/comfy-api-proxy)によって提供されます。これをインストールして実行し、`COMFY_BASE_URL="http://127.0.0.1:8189"`を設定します: ```bash pip install comfy-api-proxy @@ -165,7 +166,7 @@ comfy-api-proxy export COMFY_BASE_URL="http://127.0.0.1:8189" ``` -設定と認証については、[セルフホスト ComfyUI 用 API プロキシ](/ja/development/comfyui-server/api-proxy)を参照してください。 +設定と認証の詳細については、[セルフホストComfyUI用APIプロキシ](/ja/development/comfyui-server/api-proxy)を参照してください。 ## 送信のリトライ: 冪等キー diff --git a/ja/development/cloud/api-reference.mdx b/ja/development/cloud/api-reference.mdx index 581b1859e6..c27bfdfb4d 100644 --- a/ja/development/cloud/api-reference.mdx +++ b/ja/development/cloud/api-reference.mdx @@ -2,14 +2,14 @@ title: "Cloud API リファレンス" description: "Comfy Cloud の完全な API リファレンスとコード例" icon: "book-open" -translationSourceHash: 9dfb0617 +translationSourceHash: e15f0e0e translationFrom: development/cloud/api-reference.mdx translationBlockHashes: "_intro": 1729f5d3 "Setup": 311034bb "Object Info": 7b62a397 "Uploading Inputs": 92df17f8 - "Running Workflows": d6ddd0b4 + "Running Workflows": 2c6519c7 "Checking Job Status": d74b4922 "WebSocket for Real-Time Progress": 02c49b4a "Downloading Outputs": 5e1d63d3 @@ -19,6 +19,7 @@ translationBlockHashes: --- + import PollJobCompletion from '/snippets/ja/cloud/poll-job-completion.mdx' import WebSocketProgress from '/snippets/ja/cloud/websocket-progress.mdx' import DownloadOutputs from '/snippets/ja/cloud/download-outputs.mdx' diff --git a/ja/development/comfy-router/limitations.mdx b/ja/development/comfy-router/limitations.mdx index 08f0099f7c..863f84d38f 100644 --- a/ja/development/comfy-router/limitations.mdx +++ b/ja/development/comfy-router/limitations.mdx @@ -2,7 +2,7 @@ title: "Comfy Router の機能と制限" sidebarTitle: "機能と制限" description: "Comfy Router とパートナープロキシのどちらを選ぶか、長時間実行される呼び出しへの備え、リカバリ・レート制限・アセット保存について説明します。" -translationSourceHash: b40af72c +translationSourceHash: 5e06d8e7 translationFrom: development/comfy-router/limitations.mdx translationBlockHashes: "_intro": 6b871cf3 @@ -13,9 +13,9 @@ translationBlockHashes: "Request bodies are capped": 675b77c8 "Requests are rate limited per caller": 249d4d51 "No progress while a call runs": 75d42d8d - "Comfy charges and usage": ed49ddec - "Models without a pre-flight estimate": 7373adf0 - "Router does not cover every partner operation": 97d31362 + "Comfy charges and usage": 557836d2 + "Models without a pre-flight estimate": a7747c7b + "Router does not cover every partner operation": 786c0fb2 "Model outputs and stored assets": 06c737c1 "Next": be85b789 --- @@ -27,6 +27,7 @@ translationBlockHashes: + Router はパートナーモデルを、1回の同期 HTTP 呼び出し、または送信して後で結果を取得するキュー中のリクエストを通じて実行します。アプリケーションが完了した結果を待つことができ、あるいは後で結果を取得でき、さらにモデル自身の入力フィールドと出力フィールドを処理できる場合に使用します。 ## Router がサポートするもの @@ -104,7 +105,7 @@ Router は最終レスポンスのみを返し、ストリーミングされる カタログは価格ではなく、`billing.charges_on_policy_rejection` を含む請求に関する事実を提供します。`yes`、`no`、`unknown` を明示的に処理してください。詳細は [billing](/ja/development/comfy-router/billing#モデル課金に関する事実) を参照してください。 -実行前に価格を確認するには、`POST /v2/models/{provider}/{model}/estimate` を呼び出すか、キュー中の送信の `201` にある `estimate` オブジェクトを読み取ってください。estimate の展開中は、このルートは `error_type: not_enabled` とともに `403` を返し、送信には `estimate` が含まれません。それぞれは Comfy がその実行に対して請求するレートカードに基づいて価格が決まりますが、その金額は見積もりであり最終的な請求額ではなく、ワークスペースの使用量と請求の記録に確定した請求額が最終となります。また、価格を固定するものでもありません。独自のプロバイダーキーでの実行は、`/estimate` がその実行の金額を返したとしても Comfy からは請求されません。また、`unknown` の estimate には金額が含まれておらず、それは無料を意味するものではありません。`X-Comfy-Credits-Used` は、実行に対する事後的な丸められた数値のままですが、領収書ではありません。`exact`、`estimated`、`unknown` の読み取り方については、[実行前のコスト見積もり](/ja/development/comfy-router/reference#事前のコスト見積もり) を参照してください。実行前に価格を算出できないモデルは、[事前見積もりがないモデル](#事前見積もりのないモデル) に一覧されています。 +実行前に価格を確認するには、`POST /v2/models/{provider}/{model}/estimate` を呼び出すか、キュー中の送信の `201` にある `estimate` オブジェクトを読み取ってください。estimate の展開中は、このルートは `error_type: not_enabled` とともに `403` を返し、送信には `estimate` が含まれません。各見積もりは、Comfy がその実行の請求に使用するレートカードに基づいて価格が付けられます(ベンダーが報告するコストで請求されるモデルは、代わりにベンダーの公開価格表から見積もられます)が、その金額は見積もりであり最終的な請求額ではなく、ワークスペースの使用量と請求の記録に確定した請求額が最終となります。また、これは価格を固定するものでもありません。独自のプロバイダーキーでの実行は、`/estimate` がその実行の金額を返したとしても Comfy からは請求されません。また、`unknown` の estimate に金額が含まれていないことは、無料を意味するものではありません。`X-Comfy-Credits-Used` は、実行に対する事後的な丸められた数値のままですが、領収書ではありません。`exact`、`estimated`、`unknown` の読み取り方については、[実行前のコスト見積もり](/ja/development/comfy-router/reference#事前のコスト見積もり) を参照してください。実行前に価格を算出できないモデルは、[事前見積もりがないモデル](#事前見積もりのないモデル) に一覧されています。 ## 事前見積もりのないモデル @@ -114,9 +115,8 @@ Router は、以下のモデルへの呼び出しを実行前に確実に価格 {/* BEGIN GENERATED: models without a pre-flight estimate. Do not hand-edit; regenerate with -update-quote-coverage-docs. */} -- **bfl**: `bfl/erase-v1`, `bfl/flux-2-max`, `bfl/flux-2-pro`, `bfl/flux-3-image`, `bfl/flux-3-video`, `bfl/flux-kontext-max`, `bfl/flux-kontext-pro`, `bfl/flux-pro-1.0-expand`, `bfl/flux-pro-1.0-fill`, `bfl/flux-pro-1.1`, `bfl/flux-pro-1.1-ultra`, `bfl/video-edit-v1`, `bfl/video-upscale-v1`, `bfl/vto-v1` +- **bfl**: `bfl/erase-v1`, `bfl/video-edit-v1`, `bfl/video-upscale-v1`, `bfl/vto-v1` - **byteplus**: `byteplus/seed-audio-1.0`, `byteplus/seed-audio-1.0-multilingual` -- **elevenlabs**: `elevenlabs/eleven_sfx_v2` - **fal**: `fal/crystal-upscaler`, `fal/crystal-video-upscaler`, `fal/fal-gpt-image-2`, `fal/fal-gpt-image-2.5-flare`, `fal/fal-gpt-image-2.5-sunburst`, `fal/fal-nano-banana-2`, `fal/fal-nano-banana-pro`, `fal/fal-seedance-2.0`, `fal/fal-seedance-2.5`, `fal/flux-3-max`, `fal/patina` - **freepik**: `freepik/ai-image-upscaler-precision-v2`, `freepik/ai-skin-enhancer-creative`, `freepik/ai-skin-enhancer-faithful`, `freepik/ai-skin-enhancer-flexible` - **heygen**: `heygen/starfish` @@ -129,11 +129,9 @@ Router は、以下のモデルへの呼び出しを実行前に確実に価格 - **pika**: `pika/pika-gpt-image-2`, `pika/pika-nano-banana-2`, `pika/pika-nano-banana-pro` - **recraft**: `recraft/recraftv2`, `recraft/recraftv3`, `recraft/recraftv4`, `recraft/recraftv4_1`, `recraft/recraftv4_1_pro`, `recraft/recraftv4_1_pro_vector`, `recraft/recraftv4_1_utility`, `recraft/recraftv4_1_utility_pro`, `recraft/recraftv4_1_utility_pro_vector`, `recraft/recraftv4_1_utility_vector`, `recraft/recraftv4_1_vector`, `recraft/recraftv4_pro`, `recraft/recraftv4_styles`, `recraft/recraftv4_styles_pro`, `recraft/recraftv4_styles_pro_vector`, `recraft/recraftv4_styles_vector` - **runware**: `runware/runware-gpt-image-2`, `runware/runware-gpt-image-2.5-flare`, `runware/runware-gpt-image-2.5-sunburst`, `runware/runware-nano-banana-2`, `runware/runware-nano-banana-pro`, `runware/runware-seedance-2.0`, `runware/runware-seedance-2.5` -- **runway**: `runway/gen4_image` - **synclabs**: `synclabs/sync-3` - **veed**: `veed/clean-audio`, `veed/clean-audio-video`, `veed/fabric-1.0`, `veed/lipsync-2.0`, `veed/video-background-removal`, `veed/video-background-removal-fast`, `veed/video-background-removal-green-screen` -- **wavespeed**: `wavespeed/flashvsr`, `wavespeed/seedvr2`, `wavespeed/ultimate-image-upscaler`, `wavespeed/wavespeed-gpt-image-2`, `wavespeed/wavespeed-gpt-image-2.5-flare`, `wavespeed/wavespeed-gpt-image-2.5-sunburst` -- **xai**: `xai/grok-imagine-image`, `xai/grok-imagine-image-2.0`, `xai/grok-imagine-image-pro`, `xai/grok-imagine-image-quality`, `xai/grok-imagine-video`, `xai/grok-imagine-video-1.5`, `xai/grok-imagine-video-1.5-lite`, `xai/grok-imagine-video-1.5-preview` +- **wavespeed**: `wavespeed/wavespeed-gpt-image-2`, `wavespeed/wavespeed-gpt-image-2.5-flare`, `wavespeed/wavespeed-gpt-image-2.5-sunburst` {/* END GENERATED: models without a pre-flight estimate */} @@ -141,9 +139,14 @@ Router は、以下のモデルへの呼び出しを実行前に確実に価格 Routerはモデルを実行します。ファイルのアップロード、アカウントの読み取り、アセット管理、ストリーミング、プロバイダーのジョブ制御には、`/proxy/…` 配下のパートナープロキシルートが必要になる場合があります。これらはRouterの外部にあり、そのコントラクトには記述されていません。Router自体のサーフェスは [Comfy Router specification](/router-openapi.yaml) です。サポートはプロバイダーによって異なります。 -### Krea 3の参照画像は先にアップロードする必要があります +### Krea 3の参照画像:先にアップロードするか、公開https URLを使用する + +`krea/krea-3` の `image_urls` では、`POST /proxy/krea/assets` が返す `image_url`(`https://app-uploads.krea.ai/...` 形式のURL)は常に受け付けられます。他のリンクが受け付けられるかどうかは環境によって異なります。api.comfy.org では現在受け付けられます。 + +- **他のリンクが受け付けられる場合**、公開 `https` 画像URLであればどれでも動作します。Routerはモデルの実行前に各画像のサイズを読み取ります。ホストが公開されていない、または存在しないリンク、`408` と `429` 以外の `4xx` を返すリンク、画像でないリンクは、そのホスト名を示す `400` `invalid_input` で拒否されます。一時的なDNS、TLS、接続の失敗、タイムアウト、またはオリジンからの `408` や `429` は `502` エラーになります。実際のアップロードではない `app-uploads.krea.ai` リンクは、他の到達不能な参照と同様に `400` で拒否されます。サーバーの起動直後、どのルールが適用されるかをまだ学習していない段階では、`app-uploads.krea.ai` リンクではない公開 `https` URLが、再試行しても安全な `503` で失敗することがあります。 +- **他のリンクが受け付けられない場合**、すべてのエントリはアップロードの `image_url` である必要があります。Routerがチェックするのは、リンクが `https` URLとしてパースでき、ホストが厳密に `app-uploads.krea.ai` であること(他のホストや明示的なポートは不可)だけです。それ以外のリンクは、自分でホストしている公開 `https` URLであっても、モデルの実行前に `400` `invalid_input` で拒否されます。このチェックを通過しても実際のアップロードではないリンク(期限切れ、削除済み、入力ミス)はそのまま通ってしまい、Routerは画像のサイズを読み取れずに `400` ではなく `5xx` エラーを返します。 -`krea/krea-3` は任意の画像リンクを受け付けません。`image_urls` の各エントリは、`POST /proxy/krea/assets` が返す `image_url`(`https://app-uploads.krea.ai/...` 形式のURL)である必要があります。Routerがチェックするのは、リンクが `https` URLとしてパースでき、ホストが厳密に `app-uploads.krea.ai` であること(他のホストや明示的なポートは不可)だけです。それ以外のリンクは、自分でホストしている公開 `https` URLであっても、モデルの実行前に `400` `invalid_input` で拒否されます。このチェックを通過しても実際のアップロードではないリンク(期限切れ、削除済み、入力ミス)はそのまま通ってしまい、Routerは画像のサイズを読み取れずに `400` ではなく `5xx` エラーを返します。そのため、`image_url` は必ずアップロードが返したとおりに渡してください。 +アップロードはどの環境でも機能するため、移植性のある選択肢です。`image_url` は必ずアップロードが返したとおりに渡してください。 1. 各参照画像を `multipart/form-data` としてアップロードし、画像はフォームフィールド `file` に入れます(JPEG、PNG、WebP、最大75 MB)。認証はRouterの場合と同じく、`X-API-Key` または `Authorization: Bearer` を使用します。 @@ -153,7 +156,7 @@ Routerはモデルを実行します。ファイルのアップロード、ア -F "file=@reference.png" ``` -2. JSONレスポンスから `image_url` を読み取り、`image_urls` で渡します。 +2. JSONレスポンスから `image_url` を読み取り、`image_urls` で渡します: ```json { diff --git a/ja/development/comfy-router/models.mdx b/ja/development/comfy-router/models.mdx index 4baac8dd47..c0f716b9ed 100644 --- a/ja/development/comfy-router/models.mdx +++ b/ja/development/comfy-router/models.mdx @@ -2,11 +2,11 @@ title: "Comfy Router モデル" sidebarTitle: "すべてのモデル" description: "Comfy Router で利用できるすべてのモデルを、各モデルの入力と出力のモダリティとあわせて、プロバイダー別にまとめています。" -translationSourceHash: f12be9e4 +translationSourceHash: e62265b5 translationFrom: development/comfy-router/models.mdx translationBlockHashes: "_intro": 2584e428 - "Find by output": 380e121d + "Find by output": 9c4c92ac "Anthropic": de8acc20 "Beeble": b52ea340 "Black Forest Labs": 2934e3eb @@ -25,7 +25,7 @@ translationBlockHashes: "LTX": 32595bf9 "Luma": 37a12a19 "Luma 2": 585eb637 - "Meshy": 9292a0a8 + "Meshy": 67e26a17 "MiniMax": 87560ab7 "Moonvalley": 9e63fb77 "OpenAI": c5c4af80 @@ -44,6 +44,7 @@ translationBlockHashes: "xAI": e1706271 --- + {/* 生成済みファイル。Router カタログから `pnpm code-pages:gen` によって生成されます。 */} 以下に挙げるすべてのモデルは、同じルート `POST /v2/models/{provider}/{model}` で提供され、それぞれのモデル固有の JSON ボディを使用します。各ページには、Python、TypeScript、cURL で動作するリクエスト例を掲載しています。ディスカバリー、スキーマ、エラー、リトライ、課金については、[Comfy Router API の使用](/ja/development/comfy-router/api) を参照してください。 @@ -276,7 +277,7 @@ translationBlockHashes: - [Wan 3.0 Video](/ja/development/comfy-router/models/wan/wan3-0-video/code): `wan/wan3.0-video` - + - [Animations](/ja/development/comfy-router/models/meshy/animations/code): `meshy/animations` - [Meshy 6](/ja/development/comfy-router/models/meshy/meshy-6/code): `meshy/meshy-6` diff --git a/ja/development/comfy-router/models/bria/image-edit-relight/code.mdx b/ja/development/comfy-router/models/bria/image-edit-relight/code.mdx index eb8f4553bd..3de5490c88 100644 --- a/ja/development/comfy-router/models/bria/image-edit-relight/code.mdx +++ b/ja/development/comfy-router/models/bria/image-edit-relight/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router で Image Edit Relight を使う" description: "Comfy Router 経由で bria/image-edit-relight を呼び出します: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Image Edit Relight" -translationSourceHash: 63b5bcef +translationSourceHash: 620fcec7 translationFrom: development/comfy-router/models/bria/image-edit-relight/code.mdx translationBlockHashes: "_intro": cc88af3e "Quick start": 4329dd4b - "Schema": fb8fdff1 + "Schema": 8f45e738 "Examples": f04b0762 --- + {/* 生成済みファイル。`router-schemas/bria/image-edit-relight.json` から `pnpm code-pages:gen` によって生成されました。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -160,7 +161,7 @@ curl https://api.comfy.org/v2/models/bria/image-edit-relight/requests/$REQUEST_I 編集する画像。対応する入力タイプは、Base64 エンコードされた文字列、または公開アクセス可能な画像ファイルを指す URL です。対応フォーマットは JPEG、JPG、PNG、WEBP です。 - + ライトの方向。"front"、"side"、"bottom"、"top-down" のいずれか。 diff --git a/ja/development/comfy-router/models/krea/krea-3/code.mdx b/ja/development/comfy-router/models/krea/krea-3/code.mdx index 2c0d396cd2..23d27e3f30 100644 --- a/ja/development/comfy-router/models/krea/krea-3/code.mdx +++ b/ja/development/comfy-router/models/krea/krea-3/code.mdx @@ -2,15 +2,16 @@ title: "Comfy Router で Krea 3 を使用する" description: "Comfy Router 経由で krea/krea-3 を呼び出します。エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Krea 3" -translationSourceHash: a539ac5a +translationSourceHash: 9989319f translationFrom: development/comfy-router/models/krea/krea-3/code.mdx translationBlockHashes: "_intro": ac71b80c "Quick start": d6a4d54e - "Schema": 9c44fce0 + "Schema": ccfc3f63 "Examples": 276619d9 --- + {/* 生成済みファイル。router-schemas/krea/krea-3.json から `pnpm code-pages:gen` で生成済み。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -155,7 +156,7 @@ curl https://api.comfy.org/v2/models/krea/krea-3/requests/$REQUEST_ID \ - 入力画像の URL。最大8件。各 URL は、画像を POST /proxy/krea/assets にアップロードして返される image_url である必要があります(multipart フォームのフィールド `file`)。ホスト app-uploads.krea.ai 上の https URL ではないリンクは、自身の https URL であっても 400 で拒否され、app-uploads.krea.ai のリンクでも実際のアップロードではない場合は 5xx エラーで失敗します。テキストから画像への生成では省略します。 + 入力画像の URL。最大8件。画像を POST /proxy/krea/assets にアップロードして返される image_url は常に受け付けられます(multipart フォームのフィールド `file`)。他の公開 https URL を受け付けるかどうかは環境によって異なります。受け付けない環境では、ホスト app-uploads.krea.ai 上の https URL 以外のリンクは 400 で拒否されます。受け付ける環境では、任意の公開 https 画像 URL が受け付けられ、ホストに公開到達できないか存在しないもの、408 または 429 以外の 4xx を返すもの、画像でないものは、そのホスト名を示して 400 で拒否されます。一方、一時的な DNS、TLS、接続の失敗、タイムアウト、配信元の 408 または 429 は 502 エラーで失敗します。他の URL を受け付けない環境では、実際のアップロードではない app-uploads.krea.ai のリンクは 5xx エラーで失敗します。受け付ける環境では、そのリンクは他の到達不能な参照と同様に 400 で拒否されます。サーバーがどちらが適用されるかをまだ判別していない間は、app-uploads.krea.ai のリンクではない公開 https URL は、再試行しても安全な 503 エラーで失敗します。テキストから画像への生成では省略します。 diff --git a/ja/development/comfy-router/models/luma_2/ray-3-2/code.mdx b/ja/development/comfy-router/models/luma_2/ray-3-2/code.mdx index dcc8b66bca..8d096eaa39 100644 --- a/ja/development/comfy-router/models/luma_2/ray-3-2/code.mdx +++ b/ja/development/comfy-router/models/luma_2/ray-3-2/code.mdx @@ -2,14 +2,15 @@ title: "Ray 3.2 を Comfy Router で使用する" description: "Comfy Router 経由で luma_2/ray-3.2 を呼び出します。エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Ray 3.2" -translationSourceHash: a796913b +translationSourceHash: 86ca3c26 translationFrom: development/comfy-router/models/luma_2/ray-3-2/code.mdx translationBlockHashes: "_intro": 3348ca65 "Quick start": ad992b88 - "Schema": 50c63e36 + "Schema": 0c4fe0bc "Examples": fdb0ab6e --- + {/* 生成済みファイル。router-schemas/luma_2/ray-3.2.json から `pnpm code-pages:gen` によって生成されています。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -166,13 +167,13 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ ### 入力 - 出力のアスペクト比。ray-3.2 ビデオモデルは 9:16、3:4、1:1、4:3、16:9、21:9 のサブセットをサポートします。 + 出力アスペクト比です。ray-3.2 ビデオモデルは、9:16、3:4、1:1、4:3、16:9、21:9 のサブセットをサポートします。 指定可能な値: `3:1`, `2:1`, `21:9`, `16:9`, `3:2`, `4:3`, `1:1`, `3:4`, `2:3`, `9:16`, `1:2`, `1:3` - スタイル/コンテンツのガイダンス用の参照画像。type 'image' では最大 9 枚、type 'image_edit' では最大 8 枚です。 + スタイル/コンテンツのガイダンス用の参照画像です。タイプ 'image' では最大9枚、タイプ 'image_edit' では最大8枚です。 @@ -180,19 +181,19 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - ソースとして再利用する、以前に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 + ソースとして再利用する、以前に完了した生成の UUID です。ray-3.2 の video_edit / video_reframe で使用されます。 - MIME タイプ。data と一緒に必須です(ビデオソースの場合は url も必須。例: video_edit / video_reframe では video/mp4)。 + MIME タイプです。data と併用する場合は必須です(ビデオソースでは url とも併用する必要があります。例: video_edit / video_reframe の video/mp4)。 - 公開アクセス可能な画像またはビデオの URL + 一般に公開されている画像またはビデオの URL - 使用するモデル。画像生成には uni-1 / uni-1-max、ビデオの生成、編集、リフレーミングには ray-3.2 を使用します。 + 使用するモデルです。画像生成には uni-1 / uni-1-max、ビデオ生成、編集、リフレーミングには ray-3.2 を使用します。 @@ -206,7 +207,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 画像またはビデオへの参照。スタイル/コンテンツのガイダンス、ガイド付き生成、video-edit/video-reframe のソース、ガイドキーフレームに使用されます。generation_id、url、data のうち 1 つだけを指定してください。 + 画像またはビデオへの参照です。スタイル/コンテンツのガイダンス、ガイド付き生成、video-edit/video-reframe のソース、およびガイドキーフレームに使用されます。generation_id、url、data のいずれか 1 つだけを指定してください。 @@ -214,15 +215,15 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - ソースとして再利用する、以前に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 + ソースとして再利用する、以前に完了した生成の UUID です。ray-3.2 の video_edit / video_reframe で使用されます。 - MIME タイプ。data と一緒に必須です(ビデオソースの場合は url も必須。例: video_edit / video_reframe では video/mp4)。 + MIME タイプです。data と併用する場合は必須です(ビデオソースでは url とも併用する必要があります。例: video_edit / video_reframe の video/mp4)。 - 公開アクセス可能な画像またはビデオの URL + 一般に公開されている画像またはビデオの URL @@ -232,23 +233,23 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 実行する生成の種類。image/image_edit は uni-1 / uni-1-max モデルによって生成され、video/video_edit/video_reframe は ray-3.2 モデルによって生成されます。 + 実行する生成の種類です。image/image_edit は uni-1 / uni-1-max モデルによって生成され、video/video_edit/video_reframe は ray-3.2 モデルによって生成されます。 指定可能な値: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` - ray-3.2 のビデオ出力設定。ここでは検証と課金に影響するフィールドのみをモデル化しています。追加のフィールド(編集コントロール、source_position)は Luma にそのまま転送されます。 + ray-3.2 のビデオ出力設定です。ここでは、検証と課金に影響するフィールドのみをモデル化しています。追加のフィールド(編集コントロール、source_position)は Luma にそのまま転送されます。 - ray-3.2 の video / video_edit のクリップ再生時間。デフォルトは 5s です。HDR 生成(type video)は 5s に制限されます。 + ray-3.2 の video / video_edit のクリップの再生時間です。デフォルトは 5s です。HDR 生成(type video)は 5s に制限されています。 指定可能な値: `5s`, `10s` - 画像またはビデオへの参照。スタイル/コンテンツのガイダンス、ガイド付き生成、video-edit/video-reframe のソース、ガイドキーフレームに使用されます。generation_id、url、data のうち 1 つだけを指定してください。 + 画像またはビデオへの参照です。スタイル/コンテンツのガイダンス、ガイド付き生成、video-edit/video-reframe のソース、およびガイドキーフレームに使用されます。generation_id、url、data のいずれか 1 つだけを指定してください。 @@ -256,19 +257,19 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - ソースとして再利用する、以前に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 + ソースとして再利用する、以前に完了した生成の UUID です。ray-3.2 の video_edit / video_reframe で使用されます。 - MIME タイプ。data と一緒に必須です(ビデオソースの場合は url も必須。例: video_edit / video_reframe では video/mp4)。 + MIME タイプです。data と併用する場合は必須です(ビデオソースでは url とも併用する必要があります。例: video_edit / video_reframe の video/mp4)。 - 公開アクセス可能な画像またはビデオの URL + 一般に公開されている画像またはビデオの URL - まだ利用できません:Luma が EXR 配信を提供するまで、`exr_export=true` のリクエストは 400 で拒否されます。将来は MP4 と一緒に EXR ファイルをエクスポートします(hdr が true である必要があります)。video_reframe では拒否されます。 + 現時点では利用できません: exr_export=true のリクエストは、Luma が EXR 配信を提供するまで 400 で拒否されます。MP4 と併せて EXR ファイルをエクスポートします(hdr true が必要です)。video_reframe では拒否されます。 @@ -276,11 +277,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - `keyframes` の出力フレーム位置。同じ長さで指定します。5s では 0–120、10s では 0–240 です。そのまま転送されます。 + `keyframes` の出力フレーム位置です。同じ長さで、5s の場合は 0–120、10s の場合は 0–240 です。そのまま転送されます。 - ガイドフレーム画像(1–64)。start_frame/end_frame とは同時に使用できません。指定した再生時間で課金されます。keyframes リクエストが単一キーフレームの延長として扱われることはありません。 + ガイドフレーム画像(1–64)です。start_frame/end_frame とは同時に指定できません。リクエストされた再生時間で課金され、keyframes リクエストが単一キーフレームの延長として扱われることはありません。 @@ -288,33 +289,33 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - ソースとして再利用する、以前に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 + ソースとして再利用する、以前に完了した生成の UUID です。ray-3.2 の video_edit / video_reframe で使用されます。 - MIME タイプ。data と一緒に必須です(ビデオソースの場合は url も必須。例: video_edit / video_reframe では video/mp4)。 + MIME タイプです。data と併用する場合は必須です(ビデオソースでは url とも併用する必要があります。例: video_edit / video_reframe の video/mp4)。 - 公開アクセス可能な画像またはビデオの URL + 一般に公開されている画像またはビデオの URL - 生成されたクリップをループします。作成時のみ(type video)。 + 生成されたクリップをループします。作成時のみ(type video)です。 - ray-3.2 ビデオの出力解像度。デフォルトは 720p です。360p はドラフトティアです。HDR には 720p または 1080p が必要です。 + ray-3.2 ビデオの出力解像度です。デフォルトは 720p です。360p はドラフト用ティアです。HDR には 720p または 1080p が必要です。 指定可能な値: `360p`, `540p`, `720p`, `1080p` - 画像またはビデオへの参照。スタイル/コンテンツのガイダンス、ガイド付き生成、video-edit/video-reframe のソース、ガイドキーフレームに使用されます。generation_id、url、data のうち 1 つだけを指定してください。 + 画像またはビデオへの参照です。スタイル/コンテンツのガイダンス、ガイド付き生成、video-edit/video-reframe のソース、およびガイドキーフレームに使用されます。generation_id、url、data のいずれか 1 つだけを指定してください。 - Base64 でエンコードされた画像またはビデオデータ + Base64 エンコードされた画像またはビデオデータ @@ -322,7 +323,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - MIME タイプ。data と併用する場合は必須です(ビデオソースの場合は url とも併用します。例えば video_edit / video_reframe では video/mp4)。 + MIME タイプ。data と併せて必須です(ビデオソースの場合は url とも併用します。例: video_edit / video_reframe では video/mp4)。 @@ -330,7 +331,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - ウェブ検索グラウンディングを有効にします + Web 検索グラウンディングを有効にします `GET /v2/models/luma_2/ray-3.2/openapi.json` で Router が提供するスキーマから生成されています。これは、リクエストがプロバイダーに到達する前に Router が呼び出しを検証する際に使用するドキュメントと同じものです。 @@ -344,11 +345,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ プログラムで処理するための機械可読な失敗コード - 指定可能な値: `content_moderated`, `generation_failed`, `budget_exhausted`, `output_not_found` + 取り得る値: `content_moderated`, `generation_failed`, `budget_exhausted`, `output_not_found` - 人間が読める失敗の説明。失敗した生成時のみ設定されます。成功時は `null` です。 + 人間が読める失敗の説明。FAILED の生成時のみ設定されます。成功時は `null` です。 @@ -356,7 +357,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 使用されたモデル + 使用したモデル @@ -374,13 +375,13 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ 生成の現在の状態 - 指定可能な値: `queued`, `processing`, `completed`, `failed` + 取り得る値: `queued`, `processing`, `completed`, `failed` - 実行する生成の種類。image/image_edit は uni-1 / uni-1-max モデルによって生成され、video/video_edit/video_reframe は ray-3.2 モデルによって生成されます。 + 実行する生成の種類。image/image_edit は uni-1 / uni-1-max モデルで生成され、video/video_edit/video_reframe は ray-3.2 モデルで生成されます。 - 指定可能な値: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` + 取り得る値: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` ## 例 diff --git a/ja/development/comfy-router/models/luma_2/uni-1-max/code.mdx b/ja/development/comfy-router/models/luma_2/uni-1-max/code.mdx index 50ec416839..939688c88a 100644 --- a/ja/development/comfy-router/models/luma_2/uni-1-max/code.mdx +++ b/ja/development/comfy-router/models/luma_2/uni-1-max/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router で Uni 1 Max を使う" description: "Comfy Router 経由で luma_2/uni-1-max を呼び出します: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Uni 1 Max" -translationSourceHash: 90d7c51e +translationSourceHash: e88275ff translationFrom: development/comfy-router/models/luma_2/uni-1-max/code.mdx translationBlockHashes: "_intro": 86e0cfe7 "Quick start": dfff1d3d - "Schema": 4916d345 + "Schema": d7d29898 "Examples": f813a867 --- + {/* GENERATED FILE. Generated from router-schemas/luma_2/uni-1-max.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -155,7 +156,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ 出力のアスペクト比。ray-3.2 ビデオモデルは 9:16、3:4、1:1、4:3、16:9、21:9 のサブセットをサポートします。 - 取り得る値: `3:1`、`2:1`、`21:9`、`16:9`、`3:2`、`4:3`、`1:1`、`3:4`、`2:3`、`9:16`、`1:2`、`1:3` + 指定可能な値: `3:1`、`2:1`、`21:9`、`16:9`、`3:2`、`4:3`、`1:1`、`3:4`、`2:3`、`9:16`、`1:2`、`1:3` @@ -167,11 +168,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - ソースとして再利用する、以前に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 + ソースとして再利用する、過去に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 - MIME タイプ。data と併せて必須です(ビデオソースの場合は url とも併用します。例: video_edit / video_reframe での video/mp4)。 + MIME タイプ。data と併せて必須です(ビデオソースの場合は url とも併用します。例: video_edit / video_reframe では video/mp4)。 @@ -183,9 +184,9 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 出力画像フォーマット + 出力画像のフォーマット - 取り得る値: `png`、`jpeg` + 指定可能な値: `png`、`jpeg` @@ -193,7 +194,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 画像またはビデオへの参照。スタイルやコンテンツのガイダンス、ガイド付き生成、video-edit/video-reframe のソース、ガイドキーフレームに使用されます。generation_id、url、data のうちちょうど 1 つを指定してください。 + 画像またはビデオへの参照。スタイルやコンテンツのガイダンス、ガイド付き生成、video-edit / video-reframe のソース、ガイドキーフレームに使用されます。generation_id、url、data のいずれか 1 つだけを指定してください。 @@ -201,11 +202,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - ソースとして再利用する、以前に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 + ソースとして再利用する、過去に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 - MIME タイプ。data と併せて必須です(ビデオソースの場合は url とも併用します。例: video_edit / video_reframe での video/mp4)。 + MIME タイプ。data と併せて必須です(ビデオソースの場合は url とも併用します。例: video_edit / video_reframe では video/mp4)。 @@ -215,27 +216,27 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ スタイルプリセット - 取り得る値: `auto`、`manga` + 指定可能な値: `auto`、`manga` - 実行する生成の種類。image/image_edit は uni-1 / uni-1-max モデルによって生成され、video/video_edit/video_reframe は ray-3.2 モデルによって生成されます。 + 実行する生成の種類。image / image_edit は uni-1 / uni-1-max モデルで生成され、video / video_edit / video_reframe は ray-3.2 モデルで生成されます。 - 取り得る値: `image`、`image_edit`、`video`、`video_edit`、`video_reframe` + 指定可能な値: `image`、`image_edit`、`video`、`video_edit`、`video_reframe` - ray-3.2 のビデオ出力設定。ここでは検証と課金に影響するフィールドのみをモデル化しています。その他のフィールド(編集コントロール、source_position)は Luma にそのまま転送されます。 + ray-3.2 のビデオ出力設定。ここでは検証と課金に影響するフィールドのみをモデル化しています。その他のフィールド(編集制御、source_position)はそのまま Luma に転送されます。 - ray-3.2 の video / video_edit におけるクリップの再生時間。デフォルトは 5s です。HDR 生成(type video)は 5s に制限されています。 + ray-3.2 の video / video_edit におけるクリップの再生時間。デフォルトは 5s です。HDR 生成(type video)は 5s に制限されます。 - 取り得る値: `5s`、`10s` + 指定可能な値: `5s`、`10s` - 画像またはビデオへの参照。スタイルやコンテンツのガイダンス、ガイド付き生成、video-edit/video-reframe のソース、ガイドキーフレームに使用されます。generation_id、url、data のうちちょうど 1 つを指定してください。 + 画像またはビデオへの参照。スタイルやコンテンツのガイダンス、ガイド付き生成、video-edit / video-reframe のソース、ガイドキーフレームに使用されます。generation_id、url、data のいずれか 1 つだけを指定してください。 @@ -243,11 +244,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - ソースとして再利用する、以前に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 + ソースとして再利用する、過去に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 - MIME タイプ。data と併せて必須です(ビデオソースの場合は url とも併用します。例: video_edit / video_reframe での video/mp4)。 + MIME タイプ。data と併せて必須です(ビデオソースの場合は url とも併用します。例: video_edit / video_reframe では video/mp4)。 @@ -255,7 +256,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - MP4 と併せて EXR ファイルをエクスポートします。hdr が true である必要があります。video_reframe では拒否されます。 + まだ利用できません: exr_export=true を指定したリクエストは、Luma が EXR 配信をリリースするまで 400 で拒否されます。MP4 と併せて EXR ファイルをエクスポートします(hdr を true にする必要があります)。video_reframe では拒否されます。 @@ -263,11 +264,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - `keyframes` に対する出力フレーム位置。同じ長さである必要があります。5s では 0〜120、10s では 0〜240 です。そのまま転送されます。 + `keyframes` の出力フレーム位置。同じ長さで指定します。5s では 0〜120、10s では 0〜240 です。そのまま転送されます。 - ガイドフレーム画像(1〜64 枚)。start_frame/end_frame とは同時に使用できません。請求はリクエストした再生時間に基づきます。keyframes のリクエストが単一キーフレームの延長として扱われることはありません。 + ガイドフレーム画像(1〜64 枚)。start_frame / end_frame とは同時に使用できません。課金は指定した再生時間に基づきます。keyframes のリクエストが単一キーフレームの延長として扱われることはありません。 @@ -275,11 +276,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - ソースとして再利用する、以前に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 + ソースとして再利用する、過去に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 - MIME タイプ。data と併せて必須です(ビデオソースの場合は url とも併用します。例: video_edit / video_reframe での video/mp4)。 + MIME タイプ。data と併せて必須です(ビデオソースの場合は url とも併用します。例: video_edit / video_reframe では video/mp4)。 @@ -287,29 +288,29 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 生成されたクリップをループします。作成時のみ(type video)。 + 生成されたクリップをループします。作成時のみ指定可能です(type video)。 ray-3.2 ビデオの出力解像度。デフォルトは 720p です。360p はドラフト階層です。HDR には 720p または 1080p が必要です。 - 取り得る値: `360p`、`540p`、`720p`、`1080p` + 指定可能な値: `360p`、`540p`、`720p`、`1080p` - 画像またはビデオへの参照。スタイルやコンテンツのガイダンス、ガイド付き生成、video-edit/video-reframe のソース、ガイドキーフレームに使用されます。generation_id、url、data のうちちょうど 1 つを指定してください。 + 画像またはビデオへの参照。スタイルやコンテンツのガイダンス、ガイド付き生成、video-edit / video-reframe のソース、ガイドキーフレームに使用されます。generation_id、url、data のいずれか 1 つだけを指定してください。 - Base64 エンコードされた画像またはビデオのデータ + Base64 エンコードされた画像またはビデオデータ - ソースとして再利用する、以前に完了した生成の UUID です。ray-3.2 の video_edit / video_reframe で使用されます。 + ソースとして再利用する、以前に完了した生成の UUID。ray-3.2 の video_edit / video_reframe で使用されます。 - MIME タイプ。data と一緒に必須です(ビデオソースの場合は url と一緒にも必須です。例: video_edit / video_reframe では video/mp4)。 + MIME タイプ。data との指定が必須です(ビデオソースの場合は url との指定も必須です。例: video_edit / video_reframe における video/mp4)。 @@ -317,10 +318,10 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - Web検索のグラウンディングを有効にします + Web 検索グラウンディングを有効にします -`GET /v2/models/luma_2/uni-1-max/openapi.json` で Router が提供するスキーマから生成されています。これは、リクエストがプロバイダーに到達する前に呼び出しを検証する際に使用される同じドキュメントです。 +`GET /v2/models/luma_2/uni-1-max/openapi.json` で Router が提供するスキーマから生成されています。これは、リクエストがプロバイダーに到達する前に Router が呼び出しを検証する際に使用するドキュメントと同じものです。 ### 出力 @@ -329,7 +330,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - プログラムで処理するための機械可読な失敗コード + プログラムによる処理のための機械可読な失敗コード 指定可能な値: `content_moderated`, `generation_failed`, `budget_exhausted`, `output_not_found` diff --git a/ja/development/comfy-router/models/luma_2/uni-1/code.mdx b/ja/development/comfy-router/models/luma_2/uni-1/code.mdx index 09cb926f29..7e7b706a92 100644 --- a/ja/development/comfy-router/models/luma_2/uni-1/code.mdx +++ b/ja/development/comfy-router/models/luma_2/uni-1/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router で Uni 1 を使用する" description: "Comfy Router 経由で luma_2/uni-1 を呼び出します: エンドポイント、リクエスト形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Uni 1" -translationSourceHash: 5f33116a +translationSourceHash: 897d09ee translationFrom: development/comfy-router/models/luma_2/uni-1/code.mdx translationBlockHashes: "_intro": a9aaf4ab "Quick start": 9d667b90 - "Schema": 6ccb738a + "Schema": fe7e100f "Examples": f993c215 --- + {/* GENERATED FILE. Generated from router-schemas/luma_2/uni-1.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -153,13 +154,13 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ ### 入力 - 出力のアスペクト比。ray-3.2 のビデオモデルは 9:16、3:4、1:1、4:3、16:9、21:9 のサブセットをサポートします。 + 出力のアスペクト比。ray-3.2 のビデオモデルは、9:16、3:4、1:1、4:3、16:9、21:9 のサブセットをサポートします。 指定可能な値: `3:1`, `2:1`, `21:9`, `16:9`, `3:2`, `4:3`, `1:1`, `3:4`, `2:3`, `9:16`, `1:2`, `1:3` - スタイル/コンテンツのガイダンス用の参照画像。type が 'image' の場合は最大 9 枚、type が 'image_edit' の場合は最大 8 枚です。 + スタイル/コンテンツのガイダンス用の参照画像。type 'image' では最大 9 枚、type 'image_edit' では最大 8 枚です。 @@ -171,19 +172,19 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - MIME タイプ。data と併用する場合は必須です(ビデオソースの場合は url と併用する場合も必須。例: video_edit / video_reframe での video/mp4)。 + MIME タイプ。data と一緒に必須です(ビデオソースの場合は url とも一緒に必須です。例: video_edit / video_reframe の video/mp4)。 - 一般に公開されている画像またはビデオの URL + 公開アクセス可能な画像またはビデオの URL - 使用するモデル。画像生成には uni-1 / uni-1-max、ビデオの生成、編集、リフレーミングには ray-3.2 を使用します。 + 使用するモデル。画像生成には uni-1 / uni-1-max、ビデオ生成、編集、リフレーミングには ray-3.2 を使用します。 - 出力画像のフォーマット + 出力画像形式 指定可能な値: `png`, `jpeg` @@ -205,11 +206,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - MIME タイプ。data と併用する場合は必須です(ビデオソースの場合は url と併用する場合も必須。例: video_edit / video_reframe での video/mp4)。 + MIME タイプ。data と一緒に必須です(ビデオソースの場合は url とも一緒に必須です。例: video_edit / video_reframe の video/mp4)。 - 一般に公開されている画像またはビデオの URL + 公開アクセス可能な画像またはビデオの URL @@ -219,17 +220,17 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 実行する生成の種類。image/image_edit は uni-1 / uni-1-max モデルで生成され、video/video_edit/video_reframe は ray-3.2 モデルで生成されます。 + 実行する生成の種類。image/image_edit は uni-1 / uni-1-max モデルによって生成され、video/video_edit/video_reframe は ray-3.2 モデルによって生成されます。 指定可能な値: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` - ray-3.2 のビデオ出力設定。ここでは検証と課金に影響するフィールドのみをモデル化しています。その他のフィールド(編集コントロール、source_position)はそのまま Luma に転送されます。 + ray-3.2 のビデオ出力設定。ここでは検証と課金に影響するフィールドのみをモデル化しています。追加のフィールド(編集コントロール、source_position)はそのまま Luma に転送されます。 - ray-3.2 の video / video_edit におけるクリップの再生時間。デフォルトは 5s です。HDR 生成(type が video)は 5s に制限されています。 + ray-3.2 の video / video_edit のクリップ再生時間。デフォルトは 5s です。HDR 生成(type video)は 5s に制限されています。 指定可能な値: `5s`, `10s` @@ -247,15 +248,15 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - MIME タイプ。data と併用する場合は必須です(ビデオソースの場合は url と併用する場合も必須。例: video_edit / video_reframe での video/mp4)。 + MIME タイプ。data と一緒に必須です(ビデオソースの場合は url とも一緒に必須です。例: video_edit / video_reframe の video/mp4)。 - 一般に公開されている画像またはビデオの URL + 公開アクセス可能な画像またはビデオの URL - MP4 と併せて EXR ファイルをエクスポートします。hdr が true である必要があります。video_reframe では拒否されます。 + 利用不可: exr_export=true を含むリクエストは、Luma が EXR 配信を提供するまで 400 で拒否されます。MP4 と一緒に EXR ファイルをエクスポートします(hdr true が必要)。video_reframe では拒否されます。 @@ -263,11 +264,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - `keyframes` の出力フレーム位置。同じ長さである必要があります。5s の場合は 0–120、10s の場合は 0–240 です。そのまま転送されます。 + `keyframes` の出力フレーム位置。同じ長さで、5s の場合は 0–120、10s の場合は 0–240。そのまま転送されます。 - ガイドフレーム画像(1–64)。start_frame/end_frame とは同時に指定できません。課金は指定した再生時間に基づきます。keyframes のリクエストが単一キーフレームの延長として扱われることはありません。 + ガイドフレーム画像(1–64)。start_frame/end_frame とは同時に指定できません。リクエストされた再生時間で課金され、keyframes リクエストが単一キーフレームの延長になることはありません。 @@ -279,19 +280,19 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - MIME タイプ。data と併用する場合は必須です(ビデオソースの場合は url と併用する場合も必須。例: video_edit / video_reframe での video/mp4)。 + MIME タイプ。data と一緒に必須です(ビデオソースの場合は url とも一緒に必須です。例: video_edit / video_reframe の video/mp4)。 - 一般に公開されている画像またはビデオの URL + 公開アクセス可能な画像またはビデオの URL - 生成されたクリップをループします。作成時のみ(type が video)。 + 生成済みクリップをループします。作成時のみ(type video)。 - ray-3.2 のビデオの出力解像度。デフォルトは 720p です。360p はドラフト用のティアです。HDR には 720p または 1080p が必要です。 + ray-3.2 ビデオの出力解像度。デフォルトは 720p です。360p はドラフトティアです。HDR には 720p または 1080p が必要です。 指定可能な値: `360p`, `540p`, `720p`, `1080p` @@ -301,26 +302,26 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - Base64 エンコードされた画像またはビデオデータ + Base64エンコードされた画像またはビデオデータ - ソースとして再利用する、以前に完了した生成の UUID です。ray-3.2 の video_edit / video_reframe で使用されます。 + ソースとして再利用する、以前に完了した生成のUUID。ray-3.2のvideo_edit / video_reframeで使用されます。 - MIME タイプ。data と併せて必須です(ビデオソースでは url も必要です。例: video_edit / video_reframe における video/mp4)。 + MIMEタイプ。dataと併用する場合に必須です(ビデオソースではurlとも併用します。例: video_edit / video_reframeにおけるvideo/mp4)。 - 一般公開されている画像またはビデオの URL + 公開されている画像またはビデオのURL - Web 検索のグラウンディングを有効にします + Web検索のグラウンディングを有効にする -Router が `GET /v2/models/luma_2/uni-1/openapi.json` で提供するスキーマから生成されています。これは、リクエストがプロバイダーに到達する前に Router が呼び出しの検証に使用するドキュメントと同じものです。 +`GET /v2/models/luma_2/uni-1/openapi.json` でRouterが提供するスキーマから生成されています。これは、リクエストがプロバイダーに到達する前にRouterが呼び出しを検証する対象となるドキュメントと同じです。 ### 出力 @@ -331,15 +332,15 @@ Router が `GET /v2/models/luma_2/uni-1/openapi.json` で提供するスキー プログラムで処理するための機械可読な失敗コード - 指定可能な値: `content_moderated`、`generation_failed`、`budget_exhausted`、`output_not_found` + 取りうる値: `content_moderated`, `generation_failed`, `budget_exhausted`, `output_not_found` - 人間が読める形式の失敗の説明。FAILED の生成時のみ設定されます。成功した生成では `null` になります。 + 人間が読める形式の失敗の説明。生成が失敗(FAILED)した場合にのみ設定されます。成功した場合は `null` です。 - 生成識別子 + 生成の識別子 @@ -351,23 +352,23 @@ Router が `GET /v2/models/luma_2/uni-1/openapi.json` で提供するスキー - メディアタイプ(例: 画像) + メディア種別(例: 画像) - 署名付き URL(有効期限 1 時間) + 署名付き URL(有効期限1時間) 生成の現在の状態 - 指定可能な値: `queued`、`processing`、`completed`、`failed` + 取りうる値: `queued`, `processing`, `completed`, `failed` 実行する生成の種類。image/image_edit は uni-1 / uni-1-max モデルによって生成され、video/video_edit/video_reframe は ray-3.2 モデルによって生成されます。 - 指定可能な値: `image`、`image_edit`、`video`、`video_edit`、`video_reframe` + 取りうる値: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` ## 例 diff --git a/ja/development/comfy-router/reference.mdx b/ja/development/comfy-router/reference.mdx index f5eb2d8754..5d9e105bcc 100644 --- a/ja/development/comfy-router/reference.mdx +++ b/ja/development/comfy-router/reference.mdx @@ -2,17 +2,17 @@ title: "Comfy Router API リファレンス" description: "Comfy API 契約から生成済みの、Comfy Router のすべてのエンドポイント、パラメータ、レスポンスボディ、エラーバケット。" sidebarTitle: "API リファレンス" -translationSourceHash: 1b971d1c +translationSourceHash: b042583a translationFrom: development/comfy-router/reference.mdx translationBlockHashes: "_intro": 3f6e5d23 - "Endpoints": fbcaaf0e + "Endpoints": 2d5cf8c1 "Error buckets": 36170340 "Response headers": 403c8bf5 - "Pre-flight cost estimates": 3ecabac6 + "Pre-flight cost estimates": cc2dc53c "Result assets": 65fc939b "Per-model input and output schemas": 61c6bde8 - "Schemas": 77cfa4db + "Schemas": 29f3d282 --- @@ -27,6 +27,7 @@ translationBlockHashes: + {/* 生成済みファイル: 手動で編集しないでください。 @@ -49,7 +50,7 @@ Comfy API キーは Bearer トークンとして送信することもできま ### `GET /v2/models` -**Comfy Router が実行できるモデルを一覧表示します。** +**Comfy Router で実行できるモデルを一覧表示します。** 利用可能なモデル ID と課金情報を一覧表示します。`has_more` が true の間は `next_cursor` を使用します。 @@ -58,7 +59,7 @@ Comfy API キーは Bearer トークンとして送信することもできま 不透明なページネーションカーソル。 - Type: [`RouterPageCursor`](#routerpagecursor) -- `next_cursor` として返される不透明なカーソル、1〜512 文字 + 型: [`RouterPageCursor`](#routerpagecursor) -- `next_cursor` として返される不透明なカーソル、1–512 文字 @@ -68,19 +69,19 @@ Comfy API キーは Bearer トークンとして送信することもできま - 呼び出し元が以前の `200` から保持している `ETag`。 + 呼び出し元が以前の `200` で保持した `ETag`。 **レスポンス** - OK - モデルカタログの 1 ページ。 + OK: モデルカタログの 1 ページ分です。 - Body: [`RouterModelListResponse`](#routermodellistresponse) -- ヘッダー: `X-Comfy-Request-Id`、`ETag`、`Cache-Control` + ボディ: [`RouterModelListResponse`](#routermodellistresponse) -- ヘッダー: `X-Comfy-Request-Id`、`ETag`、`Cache-Control` - Not Modified - 呼び出し元が `If-None-Match` で送信した `ETag` 以降、ページは変更されていません。 + Not Modified: `If-None-Match` で呼び出し元が送信した `ETag` 以降、ページは変更されていません。 ヘッダー: `X-Comfy-Request-Id`、`ETag`、`Cache-Control` @@ -88,117 +89,117 @@ Comfy API キーは Bearer トークンとして送信することもできま 無効なリクエストです。エラータイプとリクエストボディを確認してください。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 認証情報が不足しているか、無効です。 + 認証情報が不足しているか無効です。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - この呼び出し元またはモデルに対して、このリクエストは許可されていません。 + この呼び出し元またはモデルに対してリクエストは許可されていません。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router は一時的に利用できません。バックオフして再試行してください。 + Router は一時的に利用できません。バックオフしながら再試行してください。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` ### `GET /v2/models/{provider}/{model}` -**正規のモデル ID でパートナーモデル1件のカタログエントリを取得します。** +**正規のモデルIDでパートナーモデルのカタログエントリを1件取得します。** -カタログ全体を一覧表示せずに、1つのモデルの詳細を読み取ります。 +カタログ全体を一覧せずに、1つのモデルの詳細を取得します。 **パラメータ** - 正規の `{provider}/{model}` モデル ID のプロバイダー部分。 + 正規の `{provider}/{model}` モデルIDのうちプロバイダー部分。 型: [`RouterProviderSegment`](#routerprovidersegment)。英数字のスラッグ(例: `anthropic`)、最大64文字 - 正規の `{provider}/{model}` モデル ID のモデル部分。 + 正規の `{provider}/{model}` モデルIDのうちモデル部分。 型: [`RouterModelSegment`](#routermodelsegment)。英数字のスラッグ(例: `claude-opus-4-6`)、最大128文字 - 呼び出し元が以前の `200` から保持している `ETag`。 + 呼び出し元が以前の `200` で受け取った `ETag`。 **レスポンス** - OK: モデルのカタログエントリ。 + OK。モデルのカタログエントリ。 - ボディ: [`RouterModelDetail`](#routermodeldetail)。ヘッダー: `X-Comfy-Request-Id`、`ETag`、`Cache-Control` + ボディ: [`RouterModelDetail`](#routermodeldetail)。ヘッダー: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` - Not Modified: 呼び出し元が `If-None-Match` で送信した `ETag` 以降、エントリは変更されていません。 + Not Modified。エントリは、呼び出し元が `If-None-Match` で送信した `ETag` 以降変更されていません。 - ヘッダー: `X-Comfy-Request-Id`、`ETag`、`Cache-Control` + ヘッダー: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` 認証情報が不足しているか無効です。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` この呼び出し元またはモデルでは、このリクエストは許可されていません。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - モデル ID が見つかりませんでした。 + モデルIDが見つかりませんでした。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router は一時的に利用できません。バックオフして再試行してください。 + Routerは一時的に利用できません。バックオフを伴って再試行してください。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` ### `POST /v2/models/{provider}/{model}` **正規のモデル ID でパートナーモデルを同期的に実行します。** -モデルを実行し、完了した結果を同じレスポンスで受け取ります。 +モデルを実行し、同じレスポンスで完了した結果を受け取ります。 **パラメータ** - 正規の `{provider}/{model}` モデル ID のプロバイダー部分。 + 正規の `{provider}/{model}` モデル ID のうちプロバイダー部分。 - 型: [`RouterProviderSegment`](#routerprovidersegment)、英数字のスラッグ(例: `anthropic`)、最大 64 文字 + 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字スラッグ(例: `anthropic`)、最大 64 文字 - 正規の `{provider}/{model}` モデル ID のモデル部分。 + 正規の `{provider}/{model}` モデル ID のうちモデル部分。 - 型: [`RouterModelSegment`](#routermodelsegment)、英数字のスラッグ(例: `claude-opus-4-6`)、最大 128 文字 + 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字スラッグ(例: `claude-opus-4-6`)、最大 128 文字 - 1 つの論理的な呼び出しの再試行を安全にする、呼び出し側が生成するキー。 + 呼び出し元が生成するキーで、1 つの論理的な呼び出しを安全に再試行できるようにします。 1〜255 文字 - このモデルを現在のデフォルトの代わりに配信する代替プロバイダーを選択します。代替プロバイダーは `fal`、`wavespeed`、`runware`、`higgsfield` で、`GET /v2/models/{provider}/{model}` は、あるモデルがそれらのどれをサポートしているかを報告します。拒否は固定の順序で判定され、先の判定は、後の判定に該当するかどうかに関係なく応答します。認識されない値(登録されたプロバイダーでさえないもの)は `400` で拒否されます。次に、ボディがマルチパート操作(編集)を選択しているリクエストでの代替プロバイダーは、`detail` が "this request's `image` selects the edit operation" で始まる `409` で拒否されますが、それはそのプロバイダーのこのモデル用のトランスレーターがその操作を提供できない場合に限られます。トランスレーターがメディアを扱えるレッグは通常どおり処理されます。次に、bring-your-own-key 認証情報が解決されたリクエストでは、代替プロバイダーはどれでも `detail` が `this request resolved a BYOK credential` で始まる `409` で拒否されます(そのレスポンスを参照)。そのプロバイダーがこのモデルを提供するかどうかは関係ありません。次に、指定されたプロバイダー自身のゲートがあり、そのプロバイダーがあなたに対して有効になっていない場合は `error_type: not_enabled` を伴う `403` で、ゲートを評価できない場合は `error_type: service_unavailable` を伴う `503` で拒否します。そしてこれら 4 つすべてを通過した後にのみ、このモデル用のレッグを持たない実在のプロバイダーが `error_type: invalid_input` を伴う `400` で拒否されます。これは認識されない値と同じ応答です。`fallback_provider` は、bring-your-own-key リクエスト、ボディがマルチパート操作を選択しているリクエスト、および `strict_mode=true` の下では、拒否されるのではなく何の効果も持ちません。 + このモデルを提供する代替プロバイダーを、現在のデフォルトの代わりに選択します。`fal`、`wavespeed`、`runware`、`higgsfield` が代替で、`GET /v2/models/{provider}/{model}` は、あるモデルがそれらのどれをサポートしているかを報告します。その拒否は固定の順序でチェックされ、先のものは後のものが該当するかどうかに関係なく応答します。認識されない値(登録されたプロバイダーではない)は `400` で拒否されます。次に、ボディがマルチパート操作(編集)を選択するリクエストにおける代替プロバイダーは、`detail` が "this request's `image` selects the edit operation" で始まる `409` で拒否されます。ただし、そのプロバイダーのこのモデル用トランスレーターがその操作を提供できない場合に限ります。トランスレーターがメディアを扱えるレッグは通常どおり処理されます。次に、bring-your-own-key 認証情報を解決したリクエストにおける任意の代替プロバイダーは、`detail` が `this request resolved a BYOK credential` で始まる `409` で拒否されます(そのレスポンスを参照)。そのプロバイダーがこのモデルを提供するかどうかは関係ありません。次に、指名されたプロバイダー自身のゲートがあり、そのプロバイダーが有効になっていない場合は `error_type: not_enabled` を伴う `403`、ゲートを評価できない場合は `error_type: service_unavailable` を伴う `503` で拒否します。そしてこれら 4 つすべてを通過した後でのみ、このモデル用のレッグを持たない実在のプロバイダーが `error_type: invalid_input` を伴う `400` で拒否されます。これは認識されない値と同じ応答です。`fallback_provider` は、bring-your-own-key リクエスト、ボディがマルチパート操作を選択するリクエスト、および `strict_mode=true` の場合には、拒否されるのではなく無効になります。 @@ -208,11 +209,11 @@ Comfy API キーは Bearer トークンとして送信することもできま - 最初の試行が Router または試行したプロバイダーに起因する理由で失敗したときに、Router がこの呼び出しをモデルの他の登録済みプロバイダーに対して再試行するかどうかを制御します。省略した場合、または `false` 以外の値はフォールバックを有効のままにします。`false` は無効にします。フォールバックが成功したレスポンスには `X-Comfy-Router-Fallback-Provider` が付与されます。bring-your-own-key 認証情報が解決されたリクエストでは、このパラメータの値に関係なくフォールバックは利用できません。試行は単に行われず、最初の失敗がそのまま返ります。これは拒否ではなく不作用であり、ここから `409` が発生することはありません。同じ理由で、ボディがマルチパート操作を選択しているリクエストおよび `strict_mode=true` の下でも同様です。それぞれが呼び出しを 1 つのプロバイダーに結び付けるため、別のプロバイダーに対して忠実に再現することはできず、フォールバックは拒否されるのではなく単にスキップされます。その `409` で拒否されるのは明示的な `model_provider` だけであり、この無条件のスキップとは異なり、そのマルチパートの `409` はトランスレーターがその操作を提供できないレッグにのみ適用されます。 + 最初の試行が Router または試行されたプロバイダーに起因する理由で失敗したとき、Router がこの呼び出しをモデルの他の登録済みプロバイダーに対して再試行するかどうかを制御します。省略した場合、または `false` 以外の値の場合はフォールバックは有効のままです。`false` で無効になります。フォールバックに成功したレスポンスには `X-Comfy-Router-Fallback-Provider` が付きます。bring-your-own-key 認証情報を解決したリクエストでは、このパラメータの値に関係なくフォールバックは利用できません。試行は単に行われず、最初の失敗がそのまま返ります。これは拒否ではなく無効であり、ここから `409` が発生することはありません。同じ理由で、ボディがマルチパート操作を選択するリクエストや `strict_mode=true` の場合も同様です。それぞれが呼び出しを 1 つのプロバイダーに結び付け、別のプロバイダーに対して忠実に再現できないため、フォールバックは拒否されるのではなく単にスキップされます。その `409` で拒否されるのは明示的な `model_provider` のみであり、この無条件のスキップとは異なり、そのマルチパート `409` はトランスレーターがその操作を提供できないレッグにのみ適用されます。 - このモデルの入力スキーマが宣言していないトップレベルのリクエストボディフィールドを、受け入れるのではなく拒否するようにオプトインします。ネストされたフィールドはチェックされず、宣言されていないフィールドを許可するスキーマを持つモデルや、作成済みスキーマを持たないモデルの場合は何も拒否されません。また、`strict_mode=true` で送信されたキュー中の送信でも拒否されません。 + このモデルの入力スキーマが宣言していないトップレベルのリクエストボディフィールドを、受け入れるのではなく拒否することを選択します。ネストされたフィールドはチェックされません。スキーマが未宣言のフィールドを許可しているモデル、またはオーサリングされたスキーマを持たないモデルでは何も拒否されません。また、`strict_mode=true` を付けて送信されたキュー中の送信でも何も拒否されません。 デフォルト: False @@ -221,14 +222,14 @@ Comfy API キーは Bearer トークンとして送信することもできま `application/json` -- [`RouterModelInput`](#routermodelinput)(必須) -パートナーモデルのネイティブ JSON 入力です。`model_provider` がない場合、リクエストはモデルのデフォルトプロバイダーでネイティブディスパッチを実行し、このボディはモデル自身のネイティブスキーマであって、変更されずに転送されます(そこでは `strict_mode` は意味を持たず、何も変わりません)。`model_provider` が代替プロバイダーを選択し、`strict_mode=false`(デフォルト)の場合、ボディは送信前にそのプロバイダーの実際のスキーマに変換されます。正確に表現できないネイティブフィールドは削除され、レスポンスの `X-Comfy-Router-Dropped-Params` ヘッダーで開示されます。暗黙に削除されることはありません。`model_provider` が代替プロバイダーを選択し、`strict_mode=true` の場合、変換は実行されません。ボディはすでにその代替プロバイダー自身の実際のスキーマである必要があり(このモデルのネイティブスキーマではありません。`strict_mode` を参照)、変更されずに転送されます。ボディ自体のフィールドも、複数の操作をサポートするモデルで Router が実行する操作を選択します。編集可能な画像モデルの場合、入力画像を含めると、テキストから画像への操作から画像から画像へ(編集)の操作に切り替わり、それは独自のレートで課金される場合があります。Seedance ビデオモデルの場合、`content[].role` が操作を選択します(最初のフレームの画像は画像から動画へ、参照画像またはクリップは参照から動画を選択します)。ネイティブディスパッチでは、Seedance の課金は役割ではなく `content` 内のメディア種別に従います。ビデオ入力が少しでもあるリクエストは動画から動画へとして課金され、そうでなければ画像があるものは画像から動画へとして、それもなければテキストから動画へとして課金されます。ただし、`draft_task` 項目からの最終レンダーは、それがレンダリングする Draft の操作として課金されます。テキストから動画へと画像から動画へで同じレートを請求するモデルもあります。`model_provider` が代替プロバイダーを選択している場合、条件付きの各操作はそのプロバイダー独自のレートで課金される場合があります。 +パートナーモデルのネイティブ JSON 入力。`model_provider` を指定しない場合、リクエストはモデルのデフォルトプロバイダーでネイティブディスパッチを実行し、このボディはモデル自身のネイティブスキーマとなって、そのまま転送されます(`strict_mode` はそこでは意味を持たず、何も変わりません)。代替プロバイダーを選択する `model_provider` と `strict_mode=false`(デフォルト)の場合、ボディは送信前にそのプロバイダーの実際のスキーマへ変換されます。正確に表現できないネイティブフィールドは破棄され、レスポンスの `X-Comfy-Router-Dropped-Params` ヘッダーで開示されます。決して暗黙に破棄されることはありません。代替プロバイダーを選択する `model_provider` と `strict_mode=true` の場合は変換は行われません。ボディはすでにその代替プロバイダー自身の実際のスキーマである必要があり(このモデルのネイティブなものではありません。`strict_mode` を参照)、そのまま転送されます。ボディ自体のフィールドは、複数の操作をサポートするモデルで Router がどの操作を実行するかも選択します。編集可能な画像モデルでは、入力画像を含めるとテキストから画像への操作から画像から画像へ(編集)の操作に切り替わり、これは独自のレートで課金される場合があります。Seedance ビデオモデルでは、`content[].role` が操作を選択します(最初のフレーム画像は画像から動画へ、参照画像またはクリップは参照から動画を選択します)。ネイティブディスパッチでは、Seedance の課金は役割ではなく `content` 内のメディア種別に従います。ビデオ入力が 1 つでもあるリクエストは動画から動画へとして課金され、そうでなければ画像が 1 つでもあるリクエストは画像から動画へ、それ以外はテキストから動画へとして課金されます。ただし、`draft_task` アイテムからの最終レンダーは、それがレンダリングする Draft の操作として課金されます。一部のモデルはテキストから動画へと画像から動画へで同じレートを課金します。代替プロバイダーを選択する `model_provider` の場合、条件付けされた各操作はそのプロバイダー独自のレートで課金される場合があります。 **レスポンス** - OK。`model_provider` を指定しない場合、または `model_provider` を指定して `strict_mode=false`(デフォルト。可能な場合はこのモデルのネイティブな契約に変換して返し、変換に失敗した場合は代替プロバイダー自身の生のレスポンスにフォールバックします。ログに記録され、暗黙に処理されることはありません)の場合、形状はこのモデル自身のネイティブな出力です。`strict_mode=true` の場合は、代替プロバイダーのレスポンスがそのまま返されます。パートナーが生成結果をバイト列として直接返すモデルでは、ボディは `application/json` ではなくパートナー自身の `Content-Type` を持つそのバイト列になります。レスポンスの `Content-Type` で分岐し、JSON ドキュメントであると仮定しないでください。 + OK。`model_provider` を指定しない場合、または `model_provider` を指定して `strict_mode=false`(デフォルト。可能な場合はこのモデル自身のネイティブな契約に変換し直し、変換に失敗した場合は代替プロバイダー自身の生のレスポンスにフォールバックする。ログに記録され、サイレントにはならない)の場合、形状はこのモデル自身のネイティブな出力です。`strict_mode=true` の場合は、代替プロバイダーのレスポンスがそのまま返されます。パートナーが生成結果をバイト列として直接返すモデルでは、ボディは `application/json` ではなくパートナー自身の `Content-Type` に従ったそのバイト列になります。レスポンスの `Content-Type` で分岐し、JSON ドキュメントであると仮定しないでください。 - Body: [`RouterModelOutput`](#routermodeloutput) または生のバイト列(`*/*`) -- Headers: `X-Comfy-Request-Id`, `X-Content-Type-Options`, `X-Comfy-Router-Fallback-Provider`, `X-Comfy-Router-Provider`, `X-Comfy-Router-Dropped-Params`, `X-Comfy-Credits-Used`, `Idempotent-Replayed`, `X-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining` + Body: [`RouterModelOutput`](#routermodeloutput) または生のバイト列 (`*/*`) -- Headers: `X-Comfy-Request-Id`, `X-Content-Type-Options`, `X-Comfy-Router-Fallback-Provider`, `X-Comfy-Router-Provider`, `X-Comfy-Router-Dropped-Params`, `X-Comfy-Credits-Used`, `Idempotent-Replayed`, `X-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining` @@ -238,19 +239,19 @@ Comfy API キーは Bearer トークンとして送信することもできま - 認証情報が不足しているか、無効です。 + 認証情報が不足しているか無効です。 Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router のリクエストレベルの失敗です。リクエストはモデルに到達しなかったか、モデル自身が報告しなかった理由で失敗しました。 + Router のリクエストレベルの失敗です。リクエストがモデルに到達しなかったか、モデル自身が報告していない理由で失敗しました。 Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - この呼び出し元またはモデルに対して、リクエストは許可されていません。 + この呼び出し元またはモデルでは、このリクエストは許可されていません。 Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` @@ -262,9 +263,9 @@ Comfy API キーは Bearer トークンとして送信することもできま - `X-Comfy-Error-Type` を確認してください。`concurrency_limit_exceeded` はオリジナルの呼び出しがまだ実行中であることを意味するため、`Retry-After` を待って同じキーを再利用します。`invalid_input` の場合は新しいキーが必要です。このルートにおける 2 つの `invalid_input` 競合はキーとはまったく無関係で、新しいキーでもどちらも解消されません。1 つは、リクエストボディがマルチパート操作(編集)を選択しているのに `model_provider` が代替プロバイダーを指定しており、そのプロバイダーのこのモデル用トランスレーターが対応できない場合で、`detail` は "this request's `image` selects the edit operation" で始まります。もう 1 つはその後チェックされるもので、リクエストがすでにパス内のプロバイダーに対する BYOK 認証情報を解決済みの場合で、`detail` は `this request resolved a BYOK credential` で始まります。`model_provider` を外すか、BYOK 認証情報なしで(マルチパートの場合は編集もなしで)リクエストを送信してください。 + `X-Comfy-Error-Type` を確認してください。`concurrency_limit_exceeded` はオリジナルの呼び出しがまだ実行中であることを示すため、`Retry-After` を待って同じキーを再利用してください。`invalid_input` の場合は新しいキーが必要です。このルートで発生する 2 つの `invalid_input` 競合はキーに関するものではなく、新しいキーでもどちらも解消されません。1 つは `model_provider` が代替プロバイダーを指定している場合で、リクエストボディが、そのプロバイダーのこのモデル向けトランスレーターでは処理できないマルチパート操作(編集)を選択しているときに拒否され、その `detail` は "this request's `image` selects the edit operation" で始まります。もう 1 つはその後にチェックされるもので、リクエストがパス内のプロバイダー向けの bring-your-own-key 認証情報をすでに解決している場合で、その `detail` は `this request resolved a BYOK credential` で始まります。`model_provider` を削除するか、BYOK 認証情報を付けずに、(マルチパートの場合は)編集も付けずにリクエストを送信してください。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(`concurrency_limit_exceeded` の場合) + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After` (when `concurrency_limit_exceeded`) @@ -274,53 +275,53 @@ Comfy API キーは Bearer トークンとして送信することもできま - リクエストの内容がモデルのスキーマに照らして拒否されました。 + リクエストの内容がモデルのスキーマに対して拒否されました。 Body: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Idempotent-Replayed` - `X-Comfy-Error-Type` を確認してください。`concurrency_limit_exceeded` は実行中の呼び出しを減らすことを意味し、`rate_limited` は許可ウィンドウを待つことを意味します。 + `X-Comfy-Error-Type` を確認してください。`concurrency_limit_exceeded` は同時実行中の呼び出しを減らすことを意味し、`rate_limited` は許可ウィンドウが経過するまで待つことを意味します。 Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining`, `X-Model-Concurrency-Limit`, `X-Model-Concurrency-Current`, `X-Model-Concurrency-Remaining` - プロバイダー自身のレスポンスを結果に変換できませんでした(`provider_error`)。 + プロバイダー自身のレスポンスを結果に変換できませんでした (`provider_error`)。 Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status` - Router は一時的に利用できません。バックオフしながらリトライしてください。 + Router は一時的に利用できません。バックオフしながら再試行してください。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(容量拒否時のみ) + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After` (容量による拒否の場合のみ) - リクエストがデッドラインを超過しました。リトライする前にエラータイプを確認してください。 + リクエストがデッドラインを超過しました。再試行する前にエラータイプを確認してください。 Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status`, `Retry-After` ### `POST /v2/models/{provider}/{model}/estimate` -**モデル呼び出しを実行する前に、実行せずに価格を見積もります。** +**実行する前に、モデル呼び出しの価格を見積もれます。実行はしません。** -このボディをこのモデルで実行した場合のコストを、米ドルで事前に見積もって返します。価格は、実行時の請求に使われるのと同じレートカードから算出されます。これは見積もりであり、最終的な請求額ではありません。実際に支払うのは、ワークスペースの使用状況および請求記録に確定した請求額です。ボディはまずモデルの入力スキーマに対して検証されます。これはデフォルトの実行(`strict_mode` なし、`reject_unknown_fields` なし)が検証するのと同じ方法です。そのため、モデルのスキーマに適合しないボディは、実行時と同じ `422` になります。プロバイダーには何も送信されず、課金も発生しません。この回答は価格の固定ではありません。`pricing_as_of` の時点で有効なレートで算出され、実行は評価時点で有効なレートで請求されます。機能のロールアウト中は、このルートは `403` を返し、`error_type: not_enabled` となります。 +このモデルでこのボディを実行した場合のコストを米ドルで事前に見積もって返します。価格は、実行時の請求に使われるのと同じレートカードから算出されます(ベンダーが報告するコストで請求されるモデルは、代わりにベンダーの公開価格表から見積もられます)。これは見積もりであり、最終的な請求額ではありません。実際に支払うのは、ワークスペースの使用状況および請求記録に確定した請求額です。ボディはまずモデルの入力スキーマに対して検証されます。デフォルトの実行(`strict_mode` なし、`reject_unknown_fields` なし)が検証するのと同じ方法で検証されるため、モデルのスキーマに適合しないボディは、実行時と同じ `422` になります。プロバイダーには何も送信されず、課金も発生しません。この応答は価格の固定ではありません。`pricing_as_of` の時点で有効な料金で見積もられ、実行はその料金が算定される時点で有効な料金で課金されます。この機能の段階的リリース中は、このルートは `error_type: not_enabled` を伴う `403` を返します。 **パラメータ** - 正規の `{provider}/{model}` モデル ID の小文字のプロバイダーセグメント。実行対象のモデルを持つパートナーです。 + 正規の `{provider}/{model}` モデル ID の小文字のプロバイダーセグメント。実行するモデルを持つパートナーです。 - 型: [`RouterProviderSegment`](#routerprovidersegment):英数字スラッグ(例: `anthropic`)、最大 64 文字 + 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字のスラッグ(例: `anthropic`)、最大 64 文字 正規の `{provider}/{model}` モデル ID の小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 - 型: [`RouterModelSegment`](#routermodelsegment):英数字スラッグ(例: `claude-opus-4-6`)、最大 128 文字 + 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字のスラッグ(例: `claude-opus-4-6`)、最大 128 文字 @@ -329,166 +330,166 @@ Comfy API キーは Bearer トークンとして送信することもできま **リクエストボディ** -`application/json`:[`RouterModelInput`](#routermodelinput)(必須) +`application/json` -- [`RouterModelInput`](#routermodelinput) (必須) -パートナーモデルのネイティブ JSON 入力で、このモデルに対して同期ルートが受け付けるボディと同一です。デフォルトの実行が検証するのと同じく、モデル自身の入力スキーマに対して検証され(このルートは `strict_mode` も `reject_unknown_fields` も受け付けません)、その独自のフィールド(出力数、入力画像が選択する操作)が、何の価格を算出するかを決めます。 +パートナーモデルのネイティブな JSON 入力で、同期ルートがこのモデルに対して受け付けるボディと同一です。デフォルトの実行が検証するのと同じ方法で、モデル自身の入力スキーマに対して検証され(このルートは `strict_mode` や `reject_unknown_fields` を受け付けません)、そのボディ自身のフィールド(出力数、入力画像が選択する操作)によって何が見積もられるかが決まります。 **レスポンス** - 見積もりです。 + 見積もり結果。 - ボディ: [`RouterCostEstimate`](#routercostestimate)、ヘッダー: `X-Comfy-Request-Id` + Body: [`RouterCostEstimate`](#routercostestimate) -- Headers: `X-Comfy-Request-Id` 無効なリクエストです。エラータイプとリクエストボディを確認してください。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 認証情報が不足しているか、無効です。 + 認証情報が不足しているか無効です。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - この呼び出し元またはモデルに対して、リクエストは許可されていません。 + この呼び出し元またはモデルに対してリクエストは許可されていません。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` モデル ID が見つかりませんでした。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` リクエストボディが大きすぎます。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 見積もりのボディがモデルのスキーマに対して拒否されたか、パスとは異なるモデルが指定されました。 - ボディ: [`RouterValidationErrorResponse`](#routervalidationerrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router は一時的に利用できません。バックオフを伴って再試行してください。 + Router は一時的に利用できません。バックオフしながら再試行してください。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(容量不足による拒否のみ) + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After` (容量不足による拒否時のみ) ### `GET /v2/models/{provider}/{model}/openapi.json` -**1つのパートナーモデルの入力スキーマと出力スキーマを OpenAPI ドキュメントとして読み取ります。** +**パートナーモデル1つの入力スキーマと出力スキーマを OpenAPI ドキュメントとして読み取ります。** 1つのモデルの入力スキーマと出力スキーマを、単体の OpenAPI ドキュメントとして読み取ります。 **パラメータ** - 正規の `{provider}/{model}` モデル ID のうちプロバイダー部分。 + 正規の `{provider}/{model}` モデル ID のプロバイダー部分。 - Type: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字のスラッグ(例: `anthropic`)、最大 64 文字 + 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字のスラッグ(例: `anthropic`)、最大64文字 - 正規の `{provider}/{model}` モデル ID のうちモデル部分。 + 正規の `{provider}/{model}` モデル ID のモデル部分。 - Type: [`RouterModelSegment`](#routermodelsegment) -- 英数字のスラッグ(例: `claude-opus-4-6`)、最大 128 文字 + 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字のスラッグ(例: `claude-opus-4-6`)、最大128文字 - 呼び出し元が以前の `200` から保持している `ETag`。 + 呼び出し元が以前の `200` で取得した `ETag`。 **レスポンス** - OK - モデルの入力スキーマと出力スキーマを、単体の OpenAPI ドキュメントとして返します。 + OK - モデルの入力スキーマと出力スキーマを、単体の OpenAPI ドキュメントとして表したもの。 - Body: [`RouterModelInputSchemaDocument`](#routermodelinputschemadocument) -- ヘッダー: `X-Comfy-Request-Id`、`ETag`、`Cache-Control` + ボディ: [`RouterModelInputSchemaDocument`](#routermodelinputschemadocument) -- ヘッダー: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` Not Modified - 呼び出し元が `If-None-Match` で送信した `ETag` 以降、ドキュメントは変更されていません。 - ヘッダー: `X-Comfy-Request-Id`、`ETag`、`Cache-Control` + ヘッダー: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` 認証情報が不足しているか無効です。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - この呼び出し元またはモデルに対して、このリクエストは許可されていません。 + この呼び出し元またはモデルに対して、リクエストは許可されていません。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` モデル ID が見つかりませんでした。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` Router がリクエストを完了できませんでした。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router は一時的に利用できません。バックオフして再試行してください。 + Router は一時的に利用できません。バックオフしながら再試行してください。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` ### `POST /v2/models/{provider}/{model}/requests` -**パートナーモデルの実行をキューに送信し、すぐに戻ります。** +**パートナーモデルの実行をキューに送信し、即座に応答を返します。** -Comfy Routerのキュー配信モードです。リクエストボディは、`POST /v2/models/{provider}/{model}` がこのモデルに対して受け付けるものと同じパートナー固有のJSON入力です(ボディの形状は1つ、モデルごとのスキーマは1つ、配信モードは2つ)。ただし、このルートは結果のために接続を保持しません。実行を受け付けてハンドル付きで `201` を返し、呼び出し元は後で以下の3つの読み取りを通じて結果を取得します。 +Comfy Router のキュー配信モードです。リクエストボディは、`POST /v2/models/{provider}/{model}` がこのモデル向けに受け付けるパートナー固有の JSON 入力と同一です。ボディの形状は1つ、モデルごとのスキーマも1つで、配信モードが2つあるという関係ですが、このルートは結果を待つ間コネクションを保持しません。実行を受け付けてハンドル付きで `201` を返し、呼び出し元は後で以下の3つの読み取り操作から結果を取得します。 **パラメータ** - 正規の `{provider}/{model}` モデルIDの小文字のプロバイダーセグメント。実行するモデルを持つパートナーです。 + 正規の `{provider}/{model}` モデル ID のうち、小文字のプロバイダーセグメント。実行するモデルを持つパートナーです。 - 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字スラッグ、例: `anthropic`、最大64文字 + 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字のスラッグ(例: `anthropic`)、最大64文字 - 正規の `{provider}/{model}` モデルIDの小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 + 正規の `{provider}/{model}` モデル ID のうち、小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 - 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字スラッグ、例: `claude-opus-4-6`、最大128文字 + 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字のスラッグ(例: `claude-opus-4-6`)、最大128文字 - 現在のデフォルトの代わりに、このモデルを提供する代替プロバイダーを選択します。 + 現在のデフォルトの代わりに、このモデルを提供する別のプロバイダーを選択します。 - `model_provider` と併用した場合にのみ意味があります。 + `model_provider` と併用した場合にのみ意味を持ちます。 デフォルト: False - 呼び出し元が生成するキーで、1つの論理的な呼び出しの再試行を安全にします。 + 呼び出し元が生成するキーで、1つの論理的な呼び出しを安全に再試行できるようにします。 - 1~255文字 + 1〜255文字 - このモデルの入力スキーマが宣言していないトップレベルのリクエストボディフィールドを、受け入れるのではなく拒否することを選択します。ネストされたフィールドはチェックされません。スキーマが未宣言のフィールドを許可しているモデル、または作成済みスキーマを持たないモデルでは何も拒否されません。また、`strict_mode=true` で送信されたキューへの送信でも何も拒否されません。 + このモデルの入力スキーマが宣言していないトップレベルのリクエストボディフィールドを受け入れるのではなく、拒否することを選択します。ネストされたフィールドはチェックされません。スキーマが未宣言のフィールドを許可しているモデル、または作成済みスキーマを持たないモデルの場合、および `strict_mode=true` で送信されたキューへの送信では、何も拒否されません。 デフォルト: False @@ -497,263 +498,262 @@ Comfy Routerのキュー配信モードです。リクエストボディは、`P `application/json` -- [`RouterModelInput`](#routermodelinput)(必須) -パートナーモデル固有のJSON入力で、同期ルートがこのモデルに対して受け付けるボディと同一です。また、実行する操作を選択し、同じ方法で課金されます。ボディ自身のフィールドが、複数の操作をサポートするモデルでRouterが実行する操作を選択します(入力画像は編集可能な画像モデルを画像から画像へに切り替え、それには独自のレートで課金される場合があります。Seedanceの最初のフレーム画像は画像から動画へを選択し、参照画像またはクリップは参照から動画を選択します)。ネイティブディスパッチでは、Seedanceリクエストはロールではなく `content` 内のメディア種別で課金されます。つまり、ビデオ入力があれば動画から動画へとして課金され、そうでなければ画像があれば画像から動画へ、それもなければテキストから動画へとして課金されます。ただし、`draft_task` アイテムからの最終レンダーは、それがレンダーするDraftの操作として課金されます。一部のモデルはテキストから動画へと画像から動画へに同じレートを課金します。`model_provider` で代替プロバイダーを選択している場合、条件付きの各操作はそのプロバイダー独自のレートで課金される場合があります。同じプロバイダー選択の契約がディスパッチ時にも適用されます。`model_provider` がない場合、または `model_provider` があり `strict_mode=false`(デフォルト)の場合、ボディはモデル固有のドキュメントであり、実行が受け付けられる前にモデル自身の入力スキーマに対して検証されます。そのため、モデルが拒否するボディはここで `422` となり、数分後に失敗するキュー中のリクエストにはなりません。非strictの代替プロバイダーのボディはさらに、ディスパッチ時にそのプロバイダーの実際のスキーマへ変換されます。`strict_mode=true` の場合、ボディはすでに代替プロバイダー自身のスキーマである必要があり、変更されずに転送されます。ネイティブスキーマの検証はスキップされます。これは同期ルートとまったく同じです(`model_provider` と `strict_mode` を参照)。 +パートナーモデル固有の JSON 入力で、同期ルートがこのモデル向けに受け付けるボディと同一です。この入力がオペレーションを選択し、課金も同じ方法で行われます。ボディ自身のフィールドが、複数のオペレーションをサポートするモデルで Router が実行するオペレーションを選択します(入力画像は編集可能な画像モデルを画像から画像へ切り替え、それには独自のレートで課金される場合があります。Seedance では最初のフレーム画像が画像から動画へを選択し、参照画像またはクリップが参照から動画を選択します)。ネイティブディスパッチでは、Seedance のリクエストはロールではなく `content` 内のメディア種別で課金されます。ビデオ入力があれば動画から動画へとして、なければ画像があれば画像から動画へとして、それもなければテキストから動画へとして課金されます。ただし `draft_task` アイテムからの最終レンダーは、それがレンダリングする Draft のオペレーションとして課金され、一部のモデルではテキストから動画へと画像から動画へが同じレートで課金されます。`model_provider` で別のプロバイダーを選択した場合、条件付きの各オペレーションはそのプロバイダー独自のレートで課金される場合があります。ディスパッチ時にも同じプロバイダー選択の契約が適用されます。`model_provider` を指定しない場合、または `model_provider` を指定して `strict_mode=false`(デフォルト)の場合、ボディはモデル固有のドキュメントであり、実行が受け付けられる前にモデル自身の入力スキーマに対して検証されます。そのため、モデルが拒否するボディはここで `422` になり、数分後に失敗するキュー中のリクエストにはなりません。非 strict の代替プロバイダーのボディは、さらにディスパッチ時にそのプロバイダーの実際のスキーマへ変換されます。`strict_mode=true` の場合、ボディはすでに代替プロバイダー自身のスキーマである必要があり、そのまま転送されます。ネイティブスキーマの検証はスキップされ、同期ルートとまったく同じです(`model_provider` と `strict_mode` を参照)。 **レスポンス** Created - 実行がキューに受け付けられました。 - ボディ: [`RouterQueueSubmitResponse`](#routerqueuesubmitresponse) -- ヘッダー: `X-Comfy-Request-Id`、`Idempotent-Replayed` + ボディ: [`RouterQueueSubmitResponse`](#routerqueuesubmitresponse) -- ヘッダー: `X-Comfy-Request-Id`, `Idempotent-Replayed` 認証情報が不足しているか無効です。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 無効なリクエストです。エラータイプとリクエストボディを確認してください。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` リクエストボディが大きすぎます。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Routerのリクエストレベルの失敗です。リクエストがモデルに到達しなかったか、モデル自体が報告しなかった理由で失敗しました。 + Router のリクエストレベルの失敗です。リクエストがモデルに到達しなかったか、モデル自身が報告しなかった理由で失敗しました。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - この呼び出し元またはモデルではリクエストが許可されていません。パートナーが生成結果を直接バイトとして返すモデルはまだキューに投入できず、`not_enabled` で拒否されます。代わりに同期ルートで実行してください。 + この呼び出し元またはモデルではリクエストが許可されていません。パートナーが生成結果をバイト列で直接返すモデルはまだキューに投入できず、`not_enabled` で拒否されます。代わりに同期ルートで実行してください。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - モデルIDが見つかりませんでした。 + モデル ID が見つかりませんでした。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - `X-Comfy-Error-Type` を確認してください: `concurrency_limit_exceeded` はオリジナルの呼び出しがまだ実行中であることを意味するため、`Retry-After` を待って同じキーを再利用してください。`invalid_input` の場合は新しいキーが必要です。このルート上の 2 つの `invalid_input` 競合はキーとはまったく関係がなく、新しいキーでもどちらも解消されません: 別のプロバイダーを指定する `model_provider` は、リクエスト本文が、そのプロバイダーのこのモデル用トランスレーターが対応できないマルチパート操作(編集)を選択している場合に拒否され、その `detail` は "this request's `image` selects the edit operation" で始まります。さらに、その後チェックされる条件として、リクエストがパス内のプロバイダーに対して BYOK 認証情報をすでに解決している場合があり、その `detail` は `this request resolved a BYOK credential` で始まります。`model_provider` を削除するか、BYOK 認証情報なしで、かつ(マルチパートの場合)編集なしでリクエストを送信してください。 + `X-Comfy-Error-Type` を確認してください。`concurrency_limit_exceeded` は元の呼び出しがまだ実行中であることを意味するため、`Retry-After` を待って同じキーを再利用してください。`invalid_input` は新しいキーが必要です。このルートでの 2 つの `invalid_input` 競合はキーとは全く関係がなく、新しいキーでもどちらも解消されません。`model_provider` で別のプロバイダーを指定すると、リクエスト本文が、このモデルに対するそのプロバイダーのトランスレーターでは処理できないマルチパート操作(編集)を選択している場合に拒否されます。その `detail` は「this request's `image` selects the edit operation」で始まります。また、その後チェックされる条件として、リクエストがパス内のプロバイダーに対して BYOK 認証情報をすでに解決している場合にも拒否され、その `detail` は `this request resolved a BYOK credential` で始まります。`model_provider` を削除するか、BYOK 認証情報なしで、かつ(マルチパートの場合)編集なしでリクエストを送信してください。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(`concurrency_limit_exceeded` の場合) + 本文: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(`concurrency_limit_exceeded` の場合) リクエストの内容はモデルのスキーマに照らして拒否されました。 - 本文: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Idempotent-Replayed` + 本文: [`RouterValidationErrorResponse`](#routervalidationerrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Idempotent-Replayed` - `X-Comfy-Error-Type` を確認してください。`queue_backlog_full` は、保持できる未完了のキュー済みリクエスト数がすでに上限に達していることを意味するため、いずれかが完了してから再送信してください。`rate_limited` は、許容量のウィンドウを待つことを意味します。 + `X-Comfy-Error-Type` を確認してください。`queue_backlog_full` は、許可されている数と同じだけ未完了のキュー中リクエストをすでに保持していることを意味するため、いずれかが完了したら再度送信してください。`rate_limited` は許可量のウィンドウを待つことを意味します。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` Router は一時的に利用できません。バックオフを伴って再試行してください。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(容量拒否の場合のみ) + 本文: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(容量拒否の場合のみ) ### `GET /v2/models/{provider}/{model}/requests/{request_id}` -**送信済みの 1 件のリクエストの結果を取得します。** +**送信した1件のリクエストの結果を収集します。** -結果取得エンドポイントです。正常に完了したリクエストに対しては、パートナーモデル自身のネイティブ出力を返します。これは、同じモデルと同じ入力に対して同期ルートの `200` が返す内容とバイト単位で同一です。つまり 2 つの配信モードは同じ結果形状を生成するため、呼び出し側は別のパーサーを用意することなく両者を切り替えられます。 +収集用のエンドポイントです。正常に完了したリクエストに対しては、パートナーモデル自身のネイティブ出力を返します。これは同じモデル・同じ入力に対して同期ルートの `200` が返す内容とバイト単位で同一であり、2つの配信モードが同じ結果形状を生成するため、呼び出し側は別のパーサーを用意することなく両者を切り替えられます。 **パラメータ** - 正規の `{provider}/{model}` モデル ID のうち小文字のプロバイダーセグメント。モデルを実行するパートナーです。 + 正規の `{provider}/{model}` モデル ID の小文字のプロバイダーセグメント。実行対象のモデルを持つパートナーです。 - 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字のスラッグ(例: `anthropic`)、最大 64 文字 + 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字スラッグ(例: `anthropic`)、最大64文字 - 正規の `{provider}/{model}` モデル ID のうち小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 + 正規の `{provider}/{model}` モデル ID の小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 - 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字のスラッグ(例: `claude-opus-4-6`)、最大 128 文字 + 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字スラッグ(例: `claude-opus-4-6`)、最大128文字 - 対象とするキュー中のリクエスト。送信時にレスポンス本文で返された `request_id` です。 + 対象とするキュー中のリクエスト。送信時にレスポンスボディで返された `request_id` です。 - 型: [`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`、uuid、最大 36 文字 + 型: [`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`、uuid、最大36文字 **レスポンス** - OK -- 結果を生成したリクエスト(正常に完了したリクエスト、または課金の記録と保存済みの結果の両方を持つターミナル状態のリクエスト)に対して保存された結果を、パートナー自身のメディアタイプでそのまま返します。同期ルートの `200` が返す場合とまったく同じであり、送信時に受け入れたのと同じプロバイダー選択の契約に従います。`model_provider` を指定しない場合、または `model_provider` と `strict_mode=false`(デフォルト。可能な場合はこのモデルのネイティブな契約に変換し、変換に失敗した場合は代替プロバイダー自身の生のレスポンスにフォールバックします。この処理はログに記録され、決して黙って行われることはありません)を指定した場合、形状はこのモデル自身のネイティブ出力です。`strict_mode=true` の場合は、代替プロバイダーのレスポンスがそのまま返されます。パートナーが生成結果をバイト列として直接返すモデルでは、本文は `application/json` ではなくパートナー自身の `Content-Type` を持つそのバイト列です。レスポンスの `Content-Type` で分岐し、JSON ドキュメントであると仮定しないでください。 + OK - 結果を生成したリクエスト(正常に完了したリクエスト、または記録された課金と保存された結果の両方を持つターミナル状態のリクエスト)に対して保存された結果を、パートナー自身のメディアタイプのまま変更せずに返します。これは同期ルートの `200` が返す内容とまったく同じであり、送信時に受け入れたものと同じプロバイダー選択の規定に従います。`model_provider` がない場合、または `model_provider` があり `strict_mode=false`(デフォルト。可能な場合はこのモデルのネイティブな規定に変換し、変換に失敗した場合は代替プロバイダー自身の生のレスポンスにフォールバックします。ログには記録され、決して無言ではありません)の場合は、形状はこのモデル自身のネイティブ出力です。`strict_mode=true` の場合は、代替プロバイダーのレスポンスをそのまま返します。パートナーが生成結果を直接バイトとして返すモデルの場合、ボディは `application/json` ではなく、パートナー自身の `Content-Type` の下でのそのバイト列です。レスポンスの `Content-Type` で分岐し、JSON ドキュメントであると仮定しないでください。 - 本文: [`RouterModelOutput`](#routermodeloutput) または生のバイト列 (`*/*`) -- ヘッダー: `X-Comfy-Request-Id`、`X-Content-Type-Options`、`X-Comfy-Credits-Used` + ボディ: [`RouterModelOutput`](#routermodeloutput) または生のバイト列 (`*/*`) -- ヘッダー: `X-Comfy-Request-Id`、`X-Content-Type-Options`、`X-Comfy-Credits-Used` - 受理済み -- リクエストはまだ完了していません。 + Accepted - リクエストはまだ完了していません。 - 本文: [`RouterQueueStatusResponse`](#routerqueuestatusresponse) -- ヘッダー: `X-Comfy-Request-Id`、`Retry-After` + ボディ: [`RouterQueueStatusResponse`](#routerqueuestatusresponse) -- ヘッダー: `X-Comfy-Request-Id`、`Retry-After` 認証情報が不足しているか無効です。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - この呼び出し元またはモデルに対して、リクエストは許可されていません。 + この呼び出し元またはモデルに対してリクエストは許可されていません。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` モデル ID が見つかりませんでした。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自身が報告しなかった理由で失敗しました。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` Router は一時的に利用できません。バックオフを伴って再試行してください。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - リクエストが操作と競合する状態にあります。エラータイプを確認してください。 + リクエストは操作と競合する状態にあります。エラータイプを確認してください。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` リクエストが期限を超過しました。再試行する前にエラータイプを確認してください。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自身が報告しなかった理由で失敗しました。 - 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` ### `PUT /v2/models/{provider}/{model}/requests/{request_id}/cancel` -**送信済みの1件のリクエストのキャンセルを要求します。** +**送信済みの1件のリクエストにキャンセルを要求します。** -まだ完了していないリクエストの停止を Comfy に要求します。これは要求であり保証ではなく、`202` はまさにそのことを示します。`CANCELLATION_REQUESTED` は要求が受け付けられたことを意味し、実行が停止したことを意味するものではありません。パートナー側で既に処理中の実行はそのまま完了する可能性があり(パートナーでの生成は、誰が結果を受け取ったかに関わらず、完了すれば課金されます)、そのため実際に何が起きたかを知る必要がある呼び出し元は、後でステータスエンドポイントを読み取ります。そこでは、有効になったキャンセルは、他のすべてのターミナルな結果と同様に `error_type` を持つ `COMPLETED` として示されます。 +Comfy に、まだ完了していないリクエストを停止するよう要求します。これは要求であり、保証ではありません。`202` はまさにそのことを示しています。`CANCELLATION_REQUESTED` は要求が受け付けられたことを意味し、実行が停止したことを意味するものではありません。パートナー側ですでに処理中の実行はそのまま完了する可能性があります。また、完了したパートナー生成は、誰が結果を取得したかに関係なく課金されます。そのため、実際に何が起きたかを知る必要がある呼び出し元は、後でステータスエンドポイントを読み取ります。そこでは、有効になったキャンセルは、他のすべてのターミナル結果と同様に `error_type` を持つ `COMPLETED` になります。 **パラメータ** - 正規の `{provider}/{model}` モデル ID の小文字のプロバイダーセグメント。実行対象のモデルを持つパートナーです。 + 正規の `{provider}/{model}` モデル ID における小文字のプロバイダーセグメント。モデルを実行するパートナーを指します。 - 型: [`RouterProviderSegment`](#routerprovidersegment):英数字のスラッグ(例: `anthropic`)、最大 64 文字 + 型: [`RouterProviderSegment`](#routerprovidersegment)。英数字のスラッグ、例: `anthropic`、最大64文字 - 正規の `{provider}/{model}` モデル ID の小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 + 正規の `{provider}/{model}` モデル ID における小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 - 型: [`RouterModelSegment`](#routermodelsegment):英数字のスラッグ(例: `claude-opus-4-6`)、最大 128 文字 + 型: [`RouterModelSegment`](#routermodelsegment)。英数字のスラッグ、例: `claude-opus-4-6`、最大128文字 - 対象となるキュー中のリクエスト。送信時にレスポンスボディで返された `request_id` です。 + 対象とするキュー中のリクエスト。送信時にレスポンス本文で返された `request_id` です。 - 型: [`RouterQueueRequestId`](#routerqueuerequestid):`pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`、uuid、最大 36 文字 + 型: [`RouterQueueRequestId`](#routerqueuerequestid)。`pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`、uuid、最大36文字 **レスポンス** - 受理済み。`CANCELLATION_REQUESTED`。 + 受理済み - `CANCELLATION_REQUESTED`。 - ボディ: [`RouterQueueCancelResponse`](#routerqueuecancelresponse)、ヘッダー: `X-Comfy-Request-Id` + 本文: [`RouterQueueCancelResponse`](#routerqueuecancelresponse)。ヘッダー: `X-Comfy-Request-Id` - 競合。`ALREADY_COMPLETED`。 + 競合 - `ALREADY_COMPLETED`。 - ボディ: [`RouterQueueCancelResponse`](#routerqueuecancelresponse)、ヘッダー: `X-Comfy-Request-Id` + 本文: [`RouterQueueCancelResponse`](#routerqueuecancelresponse)。ヘッダー: `X-Comfy-Request-Id` - 無効なリクエストです。エラータイプとリクエストボディを確認してください。 + 無効なリクエストです。エラータイプとリクエスト本文を確認してください。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` 認証情報が不足しているか無効です。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` この呼び出し元またはモデルでは、このリクエストは許可されていません。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` モデル ID が見つかりませんでした。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router は一時的に利用できません。バックオフを伴って再試行してください。 + Router は一時的に利用できません。バックオフで再試行してください。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自体が報告しなかった理由で失敗しました。 - ボディ: [`RouterErrorResponse`](#routererrorresponse)、ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse)。ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` ### `GET /v2/models/{provider}/{model}/requests/{request_id}/status` -**送信済みリクエスト1件のキュー状態を読み取ります。** +**送信済みの1件のリクエストのキューの状態を読み取ります。** -ポーリングエンドポイントです。リクエストの現在の状態を返し、結果は決して返しません。そのためクライアントは、ポーリングのたびに出力を転送することなく、長時間の生成を監視できます。結果は、この応答が `COMPLETED` を示したときに、以下の読み取りから一度だけ取得します。 +ポーリング用のエンドポイントです。リクエストの現在の状態のみを返し、結果は決して返しません。そのためクライアントは、ポーリングのたびに出力を転送することなく長い生成を監視できます。結果は、この応答が `COMPLETED` を示したときに、以下の読み取りから一度だけ取得されます。 **パラメータ** - 正規の `{provider}/{model}` モデル ID の小文字プロバイダーセグメント。実行対象のモデルを持つパートナーです。 + 正規の `{provider}/{model}` モデル ID の小文字のプロバイダーセグメント。実行対象のモデルを持つパートナーです。 - 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字スラッグ(例: `anthropic`)、最大64文字 + 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字のスラッグ(例: `anthropic`)、最大64文字 - 正規の `{provider}/{model}` モデル ID の小文字モデルセグメント。そのプロバイダー内で実行するモデルです。 + 正規の `{provider}/{model}` モデル ID の小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 - 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字スラッグ(例: `claude-opus-4-6`)、最大128文字 + 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字のスラッグ(例: `claude-opus-4-6`)、最大128文字 - 対象とするキュー中のリクエスト。送信時にレスポンスボディで返された `request_id` です。 + 対象となるキュー中のリクエスト。送信時にレスポンス本文で返された `request_id` です。 型: [`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`、uuid、最大36文字 @@ -761,45 +761,45 @@ Comfy Routerのキュー配信モードです。リクエストボディは、`P **レスポンス** - OK - リクエストの現在のキュー状態です。 + OK - リクエストの現在のキューの状態です。 - ボディ: [`RouterQueueStatusResponse`](#routerqueuestatusresponse) -- ヘッダー: `X-Comfy-Request-Id`、`Retry-After`、`X-Comfy-Estimated-Duration-Seconds`、`X-Comfy-Estimated-Duration-P90-Seconds`、`X-Comfy-Estimate-Source` + 本文: [`RouterQueueStatusResponse`](#routerqueuestatusresponse) -- ヘッダー: `X-Comfy-Request-Id`、`Retry-After`、`X-Comfy-Estimated-Duration-Seconds`、`X-Comfy-Estimated-Duration-P90-Seconds`、`X-Comfy-Estimate-Source` - 認証情報が不足しているか無効です。 + 認証情報が不足しているか、無効です。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - この呼び出し元またはモデルに対して、そのリクエストは許可されていません。 + この呼び出し元またはモデルでは、そのリクエストは許可されていません。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` モデル ID が見つかりませんでした。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自体が報告しなかった理由で失敗しました。 + Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自体が報告していない理由で失敗しました。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router が一時的に利用できません。バックオフを伴って再試行してください。 + Router は一時的に利用できません。バックオフを伴って再試行してください。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自体が報告しなかった理由で失敗しました。 + Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自体が報告していない理由で失敗しました。 - ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 本文: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` ここでの説明は簡潔です。モデルの選択、検証、再試行、課金については [Comfy Router API の使用](/ja/development/comfy-router/api) を、ヘッダーの動作については [ヘッダー](/ja/development/comfy-router/headers) を参照してください。 @@ -969,7 +969,7 @@ Router が受け付けたものの、完了できなかったリクエストに ## 事前のコスト見積もり -`POST /v2/models/{provider}/{model}/estimate` は、リクエストボディを実行せずにその価格を見積もります。また、キュー中の送信 (`POST /v2/models/{provider}/{model}/requests`) は、その `201` で `estimate` と同じ [`RouterCostEstimate`](#routercostestimate) を返します。どちらも、Comfy がその実行の請求に用いるレートカードから価格が決まります。どちらが返す数値も見積もりであり、最終的な請求額ではありません。ワークスペースの利用状況および請求記録にある確定額が最終です。自分のプロバイダーキーでの実行は Comfy から課金されません(後述)。見積もりの展開中は、このルートは `error_type: not_enabled` を伴う `403` を返し、送信レスポンスは `estimate` を省略します。カタログには依然として価格が含まれていません。 +`POST /v2/models/{provider}/{model}/estimate` は、リクエストボディを実行せずにその価格を見積もります。また、キュー中の送信 (`POST /v2/models/{provider}/{model}/requests`) は、その `201` で `estimate` と同じ [`RouterCostEstimate`](#routercostestimate) を返します。どちらも、Comfy がその実行の請求に用いるレートカードから価格が決まります。ただし、ベンダーが報告するコストで課金されるモデルは例外で、その場合はベンダーの公開価格表から `estimated` として算出されます。どちらが返す数値も見積もりであり、最終的な請求額ではありません。ワークスペースの利用状況および請求記録にある確定額が最終です。自分のプロバイダーキーでの実行は Comfy から課金されません(後述)。見積もりの展開中は、このルートは `error_type: not_enabled` を伴う `403` を返し、送信レスポンスは `estimate` を省略します。カタログには依然として価格が含まれていません。 金額を確認する前に `source` を読んでください。数値が不足していても、決して無料という意味ではありません。 @@ -997,7 +997,7 @@ Router が実行前にまだ価格を算出できないモデルは、[事前見 見積もりの限界。`200` の数値は、その実行が受け入れられることや、まさにその額が課金されることを約束するものではありません。 - `/estimate` は `strict_mode` や `reject_unknown_fields` を受け取らないため、モデルのネイティブな契約のみを検証します。`strict_mode=true` の実行が代替プロバイダー自身のスキーマで受け入れるボディも、ここでは `422` になることがあります。また、`reject_unknown_fields=true` の実行なら拒否するであろう、宣言されていないトップレベルフィールドも、ここでは価格が算出されます。 -- `pricing_as_of` は、レートカードを取得した時刻です(カードを読まなかった場合は、見積もりに応答した時刻)。これは価格の固定ではありません。実行は、評価された時点で有効なレートで課金されます。 +- `pricing_as_of` は、レートカードを取得した時刻、またはベンダーの公開価格表から取得した `estimated` の見積もりの場合はその価格表を読んだ日付です(どちらも読まれなかった場合は、見積もりに応答した時刻)。これは価格の固定ではありません。実行は、評価された時点で有効なレートで課金されます。 - `/estimate` が見積もるのは、`model_provider` が指定するレグ、またはネイティブのプロバイダーです。`fallback_provider` や `strict_mode` パラメータは受け取りません。フォールバックの再試行が別のプロバイダーに到達した同期実行は、そのプロバイダーのレートで課金され、見積もりはそのレートを示していません。実行のレスポンスにある `X-Comfy-Router-Fallback-Provider` が、それが発生したことを示します。キュー中の送信にはフォールバックがないため、その `estimate` は実行されるレグを見積もります。 - `/estimate` とキュー中の送信の `estimate` は、`model_provider` のレグにおける同じボディ、または兄弟オペレーションで実行されるボディに対して、わずかに異なるドキュメントの価格を算出することがあります。送信の `estimate` は、その実行が送るドキュメントに基づいて価格が算出されます。 - `/estimate` は常にプラットフォームの請求額を見積もります。自分のプロバイダーキーでの実行は Comfy から課金されませんが、`/estimate` はそれを検出せず、依然として数値を返します。`reason: byok` を返すのはキュー中の送信だけです。 @@ -1042,7 +1042,7 @@ Router が実行前にまだ価格を算出できないモデルは、[事前見 ### RouterCostEstimate -この呼び出しにかかる費用を、ディスパッチ前に、実行の課金に用いられるのと同じレートカードから米ドルで見積もった事前見積もりです。最終的な請求額ではありません。実際に支払うのは、ワークスペースの使用量および請求記録にある確定した請求額です。実行後に報告される `X-Comfy-Credits-Used` は事後に丸められた数値であり、領収書ではありません。`source` はその数値をどこまで信頼できるかを示します。`exact` は `amount` を持ち、`estimated` は `min_amount` と `max_amount` を持ち `amount` は持ちません。`unknown` はどちらも持たず `reason` を持ちます。`amount` が存在しないことを無料と読み取らないでください。価格の固定ではありません。`pricing_as_of` を参照してください。 +この呼び出しにかかる費用を、ディスパッチ前に、実行の課金に用いられるのと同じレートカードから米ドルで見積もった事前見積もりです(ベンダーが報告するコストで課金されるモデルの場合は、代わりにベンダーの公開価格表から推定されます)。これは最終的な請求額ではありません。実際に支払うのは、ワークスペースの使用量および請求記録にある確定した請求額です。実行後に報告される `X-Comfy-Credits-Used` は事後に丸められた数値であり、領収書ではありません。`source` はその数値をどこまで信頼できるかを示します。`exact` は `amount` を持ち、`estimated` は `min_amount` と `max_amount` を持ち `amount` は持ちません。`unknown` はどちらも持たず `reason` を持ちます。`amount` が存在しないことを無料と読み取らないでください。価格の固定ではありません。`pricing_as_of` を参照してください。 **フィールド** @@ -1055,15 +1055,15 @@ Router が実行前にまだ価格を算出できないモデルは、[事前見 - 小数文字列としてのドル額。例: "0.04"。最大 8 桁の小数で、指数表記はありません。課金対象となる 1 セント未満の価格が "0" として表示されることはありません。`source` が `exact` の場合のみ存在します。最終的な請求額ではありません。最終的なのは、ワークスペースの使用量および請求記録にある確定した請求額です。 + 小数文字列としての推定ドル額。例: "0.04"。最大 8 桁の小数で、指数表記はありません。課金対象となる 1 セント未満の価格が "0" として表示されることはありません。`source` が `exact` の場合のみ存在します。最終的な請求額ではありません。最終的なのは、ワークスペースの使用量および請求記録にある確定した請求額です。 - 小数文字列としてのドル額の下限。`source` が `estimated` の場合のみ存在します。 + 小数文字列としての推定ドル額の下限。これは見積もりであり、保証された下限ではありません。たとえば、プロバイダーがリクエストで要求したよりも少ない結果を返した場合(画像が 0 枚など)、見積もりが過去の呼び出しから学習した典型的な価格である場合、または要求量に対して価格が一定の割合で上昇しない場合には、実際の請求額がこれより低くなることがあります。`source` が `estimated` の場合のみ存在します。 - 小数文字列としてのドル額の上限。`source` が `estimated` の場合のみ存在します。 + 小数文字列としての推定ドル額の上限。これは見積もりであり、保証された上限ではありません。たとえば、プロバイダーが要求されたよりも多い結果を返した場合(要求より多くの画像など)、見積もりが過去の呼び出しから学習されたものである場合、または要求量に対して価格が一定の割合で上昇しない場合には、実際の請求額がこれより高くなることがあります。`source` が `estimated` の場合のみ存在します。 @@ -1085,13 +1085,13 @@ Router が実行前にまだ価格を算出できないモデルは、[事前見 - プラットフォームの換算($1 = 211 credits)を用いた Comfy クレジット単位の `amount`。小数第 2 位に丸められます。`exact` な見積もりで `X-Comfy-Credits-Used` が保持すると想定される値です。このヘッダーは事後に丸められた数値であり、領収書ではありません。ワークスペースの使用量および請求記録にある確定した請求額が最終的な金額です。 + プラットフォームの換算($1 = 211 クレジット)を用いた Comfy クレジット単位の `amount`。小数第 2 位に丸められます。`exact` な見積もりで `X-Comfy-Credits-Used` が保持すると想定される値です。このヘッダーは事後に丸められた数値であり、領収書ではありません。ワークスペースの使用量および請求記録にある確定した請求額が最終的な金額です。 double - この見積もりが対象とするプロバイダーのレッグ。キュー中の送信では、実行されるレッグになります。 + この見積もりが対象とするプロバイダーのレッグ。キュー中の送信では、実際に実行されるレッグになります。 @@ -1101,7 +1101,7 @@ Router が実行前にまだ価格を算出できないモデルは、[事前見 - この見積もりの価格算出に使用したレートカードを取得した日時。実行は、評価された時点で有効な料率で課金され、この瞬間の料率で課金されるわけではありません。レートカードが読まれなかった場合(`reason: pricing_unavailable`、`byok`、またはどのカードからも価格を算出できない `not_quotable` の呼び出し)は、見積もりが返された日時を示します。 + この見積もりの価格算出に使用したレートカードを取得した日時。この見積もりは価格の固定ではありません。実行は評価された時点で有効な料率で課金され、この瞬間の料率で課金されるわけではありません。ベンダーの公開価格表から取得した `estimated` の見積もり(ベンダーが報告するコストで課金されるモデル)では、代わりにその価格表を読み取った日付を示します。レートカードが読まれなかった場合(`reason: pricing_unavailable`、`byok`、またはどのカードからも価格を算出できない `not_quotable` の呼び出し)は、見積もりが返された日時を示します。 date-time @@ -1176,7 +1176,7 @@ Router が実行前にまだ価格を算出できないモデルは、[事前見 `POST /v2/models/{provider}/{model}` で使用されるモデルIDです。 -型: `string`。モデルID(例: `anthropic/claude-opus-4-6`)、最大193文字 +型: `string`、モデルID(例: `anthropic/claude-opus-4-6`)、最大193文字 ### RouterModelInput @@ -1296,7 +1296,7 @@ Router モデルカタログの 1 ページです。 ### RouterQueueCancelStatus -このルートが実際に解決したリクエストを表す2つの結果について、キャンセル要求が何を検出したかを示します。どちらも HTTP ステータスに反映されるため、クライアントはどちらで分岐してもかまいません。 +このルートが実際に解決したリクエストを表す2つの結果について、キャンセル要求が検出した内容を示します。どちらも HTTP ステータスに反映されるため、クライアントはどちらで分岐してもかまいません。 型: `string` @@ -1320,18 +1320,18 @@ Router モデルカタログの 1 ページです。 ### RouterQueueStatusFields -`RouterQueueStatusResponse` のうち URL ブロックではない半分: キュー中の 1 つのリクエストの識別情報、その現在の状態、そしてその状態がターミナルで実行が成功しなかった場合には、その理由を示す大まかな分類です。 +`RouterQueueStatusResponse` のうち URL ブロックではない半分です。キュー中の 1 つのリクエストの識別情報、現在の状態、そしてその状態がターミナルであり実行が成功しなかった場合には、その理由を示す大まかな分類を表します。 -**Fields** +**フィールド** - キュー中の Router リクエストを識別するもの。呼び出し元がポーリング、キャンセル、結果の収集に使用するハンドルです。 + キュー中の Router リクエストを識別するものです。呼び出し元がポーリング、キャンセル、結果の収集に使用するハンドルです。 型: [`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`, uuid, 最大 36 文字 - キュー中の Router リクエストの状態です。これはちょうど 3 つの値を持ち、`RouterErrorType` とは異なり閉じた `enum` です。これは、2 つのスキーマが意図的に逆方向に閉じているためです。`RouterErrorType` は失敗を分類し、その集合は拡張されることが想定されているため、認識されない分類を厳密に拒否する生成済みのクライアントは、何かが既にうまくいかなくなったまさにその時に最も大きな失敗をすることになります。こちらはライフサイクルであり、後で第 4 の状態が追加されたライフサイクルは、enum として宣言されているかどうかに関係なく、それに対して書かれたすべてのポーリングループにとって破壊的変更となります。そのため enum として宣言されており、制約はクライアントが確認できる場所に記載されています。 + キュー中の Router リクエストの状態です。これはちょうど 3 つの値を持ち、`RouterErrorType` とは異なり、閉じた `enum` です。これは、2 つのスキーマが意図的に逆方向に閉じているためです。`RouterErrorType` は失敗を分類し、その集合は拡張されることが想定されているため、認識されない分類を厳密に拒否する生成済みのクライアントは、何かが既にうまくいかなくなったまさにその時に最も大きな失敗をすることになります。こちらはライフサイクルであり、後で第 4 の状態が追加されたライフサイクルは、enum として宣言されているかどうかに関係なく、それに対して書かれたすべてのポーリングループにとって破壊的変更となります。そのため enum として宣言されており、制約はクライアントが確認できる場所に記載されています。 型: [`RouterQueueStatus`](#routerqueuestatus) @@ -1343,7 +1343,7 @@ Router モデルカタログの 1 ページです。 - 成功しなかった `COMPLETED` リクエストにのみ存在し、結果の読み取りがその失敗を返すときに `X-Comfy-Error-Type` に付けるのと同じ大まかな分類を持ちます。これは成功したターミナルリクエストと、失敗またはキャンセルされたリクエストを区別するものです。どちらにも別個のターミナルステータスはありません。また、成功時には null ではなく存在しないため、その存在の有無で分岐してください。 + 成功しなかった `COMPLETED` リクエストにのみ存在し、結果の読み取りがその失敗を返すときに `X-Comfy-Error-Type` に付けるのと同じ大まかな分類を持ちます。これは成功したターミナルリクエストと、失敗またはキャンセル済みのリクエストを区別するものです。どちらにも別個のターミナルステータスはありません。また、成功時には null ではなく存在しないため、その存在の有無で分岐してください。 型: [`RouterErrorType`](#routererrortype) @@ -1456,7 +1456,7 @@ Router モデルカタログの 1 ページです。 ### RouterValidationErrorInput -拒否された入力値です。プロバイダーがこれを含める場合に含まれます。 +拒否された入力値です。プロバイダーがこの値を含める場合に含まれます。 ### RouterValidationErrorResponse diff --git a/ko/development/api-development/sdks.mdx b/ko/development/api-development/sdks.mdx index 8beead1205..74430df0e7 100644 --- a/ko/development/api-development/sdks.mdx +++ b/ko/development/api-development/sdks.mdx @@ -3,13 +3,13 @@ title: "Comfy SDK: ComfyUI용 Python 및 TypeScript 클라이언트" description: "Python 또는 TypeScript로 Comfy Cloud, 자체 배포 또는 자체 ComfyUI를 대상으로 ComfyUI 워크플로를 실행하고, 에셋, 작업, 라이브 이벤트, 멱등 재시도를 다룹니다." sidebarTitle: "SDK" icon: "code" -translationSourceHash: dbb2e0a8 +translationSourceHash: fd912955 translationFrom: development/api-development/sdks.mdx translationBlockHashes: "_intro": c92c7b51 "Install": da9a0a57 "Quickstart": 02297586 - "Choosing a base URL": 2265e6f6 + "Choosing a base URL": 0e77e81c "Retrying a submit: the idempotency key": 7c83d78f "Watching a job run": 34d74bcc "Tracing an output back to its workflow": b01886a3 @@ -21,6 +21,7 @@ translationBlockHashes: + import SdkSurfaces from "/snippets/ko/sdk/surfaces.mdx"; import SdkVersions from "/snippets/ko/sdk/versions.mdx"; @@ -116,7 +117,7 @@ await job.getOutputs("9")[0].toFile("out.png"); | **Comfy API 배포** | `https://.run.comfy.app` | 필수 | | **자체 ComfyUI** | `http://127.0.0.1:8189` (로컬 프록시) | 기본적으로 없음. 선택적 정적 Bearer 토큰 | -기본 URL은 생성자 인자가 아닌 `COMFY_BASE_URL` 환경 변수에서 가져옵니다: +기본 URL은 생성자 인자가 아니라 `COMFY_BASE_URL` 환경 변수에서 가져옵니다: ```bash export COMFY_BASE_URL="https://.run.comfy.app" # Comfy API 배포 @@ -141,7 +142,7 @@ const client = new Comfy({ apiKey: "comfyui-..." }); ### Comfy Cloud -즉시 사용할 수 있습니다. [API 키](/ko/development/api-development/getting-an-api-key)를 생성하여 클라이언트에 전달하세요. +별도 설정 없이 바로 사용할 수 있습니다. [API 키](/ko/development/api-development/getting-an-api-key)를 생성하여 클라이언트에 전달하세요. API 액세스에는 유료 Comfy Cloud 구독이 필요합니다. 무료 티어에는 포함되지 않습니다. 동시에 실행할 수 있는 작업 수는 티어에 따라 다릅니다. [동시성 제한](/ko/development/deploy/cloud-usage#동시성-제한)을 참조하세요. @@ -157,7 +158,7 @@ Comfy API 배포는 Build에 포함된 모델과 커스텀 노드를 사용하 ### 자체 ComfyUI -자체 호스팅 ComfyUI에서는 함께 실행되는 작은 오픈소스 서비스인 [comfy-api-proxy](https://github.com/Comfy-Org/comfy-api-proxy)가 v2 API를 제공합니다. 설치하고 실행한 다음 `COMFY_BASE_URL="http://127.0.0.1:8189"`를 설정하세요: +자체 호스팅 ComfyUI에서는 ComfyUI와 함께 실행되는 작은 오픈소스 서비스인 [comfy-api-proxy](https://github.com/Comfy-Org/comfy-api-proxy)가 v2 API를 제공합니다. 설치하고 실행한 다음 `COMFY_BASE_URL="http://127.0.0.1:8189"`를 설정하세요: ```bash pip install comfy-api-proxy @@ -165,7 +166,7 @@ comfy-api-proxy export COMFY_BASE_URL="http://127.0.0.1:8189" ``` -설정과 인증은 [자체 호스팅 ComfyUI용 API 프록시](/ko/development/comfyui-server/api-proxy)를 참고하세요. +설정과 인증 세부 정보는 [자체 호스팅 ComfyUI용 API 프록시](/ko/development/comfyui-server/api-proxy)를 참고하세요. ## 제출 재시도: 멱등성 키 diff --git a/ko/development/cloud/api-reference.mdx b/ko/development/cloud/api-reference.mdx index 6fd6da2bcf..e2eb40898b 100644 --- a/ko/development/cloud/api-reference.mdx +++ b/ko/development/cloud/api-reference.mdx @@ -2,14 +2,14 @@ title: "클라우드 API 참조" description: "Comfy Cloud의 코드 예제와 함께 제공되는 완벽한 API 참조" icon: "book-open" -translationSourceHash: 9dfb0617 +translationSourceHash: e15f0e0e translationFrom: development/cloud/api-reference.mdx translationBlockHashes: "_intro": 1729f5d3 "Setup": 311034bb "Object Info": 7b62a397 "Uploading Inputs": 92df17f8 - "Running Workflows": d6ddd0b4 + "Running Workflows": 2c6519c7 "Checking Job Status": d74b4922 "WebSocket for Real-Time Progress": 02c49b4a "Downloading Outputs": 5e1d63d3 @@ -19,6 +19,7 @@ translationBlockHashes: --- + import PollJobCompletion from "/snippets/ko/cloud/poll-job-completion.mdx" import WebSocketProgress from "/snippets/ko/cloud/websocket-progress.mdx" import DownloadOutputs from "/snippets/ko/cloud/download-outputs.mdx" diff --git a/ko/development/comfy-router/limitations.mdx b/ko/development/comfy-router/limitations.mdx index c1344131f1..b90168c9a8 100644 --- a/ko/development/comfy-router/limitations.mdx +++ b/ko/development/comfy-router/limitations.mdx @@ -2,7 +2,7 @@ title: "Comfy Router 기능과 한계" sidebarTitle: "기능과 한계" description: "Comfy Router 또는 파트너 프록시 선택, 장시간 실행되는 호출 대비, 복구, 속도 제한 및 자산 저장에 대해 설명합니다." -translationSourceHash: b40af72c +translationSourceHash: 5e06d8e7 translationFrom: development/comfy-router/limitations.mdx translationBlockHashes: "_intro": 6b871cf3 @@ -13,9 +13,9 @@ translationBlockHashes: "Request bodies are capped": 675b77c8 "Requests are rate limited per caller": 249d4d51 "No progress while a call runs": 75d42d8d - "Comfy charges and usage": ed49ddec - "Models without a pre-flight estimate": 7373adf0 - "Router does not cover every partner operation": 97d31362 + "Comfy charges and usage": 557836d2 + "Models without a pre-flight estimate": a7747c7b + "Router does not cover every partner operation": 786c0fb2 "Model outputs and stored assets": 06c737c1 "Next": be85b789 --- @@ -27,6 +27,7 @@ translationBlockHashes: + Router는 파트너 모델을 하나의 동기식 HTTP 호출로 실행하거나, 제출한 뒤 나중에 수집하는 대기 중 요청을 통해 실행합니다. 애플리케이션이 완료된 결과를 기다리거나 나중에 결과를 수집할 수 있고, 모델 자체의 입력 및 출력 필드를 처리할 수 있는 경우에 사용하십시오. ## Router가 지원하는 기능 @@ -104,19 +105,18 @@ Router는 최종 응답만 반환하며, 스트리밍되는 토큰, 서버 전 카탈로그는 가격이 아니라 `billing.charges_on_policy_rejection`을 포함한 청구 관련 사실 정보를 제공합니다. `yes`, `no`, `unknown`을 명시적으로 처리하세요. 자세한 내용은 [billing](/ko/development/comfy-router/billing#모델-청구-정보)을 참조하세요. -실행 전에 가격을 확인하려면 `POST /v2/models/{provider}/{model}/estimate`를 호출하거나, 대기 중인 제출의 `201` 응답에서 `estimate` 객체를 읽으세요. 추정 기능이 단계적으로 출시되는 동안 이 경로는 `error_type: not_enabled`와 함께 `403`을 반환하고, 제출 응답에서는 `estimate`가 생략됩니다. 각 추정치는 Comfy가 해당 실행에 청구하는 요율표를 기준으로 산정되지만, 그 수치는 추정치일 뿐 최종 청구 금액이 아니며, 워크스페이스의 사용량 및 청구 기록에 정산된 금액이 최종입니다. 이는 가격 고정도 아닙니다. 자체 공급자 키로 실행한 경우에는 `/estimate`가 그 실행의 수치를 반환하더라도 Comfy가 요금을 청구하지 않으며, `unknown` 추정치에는 수치가 없는데 이는 무료라는 뜻이 아닙니다. `X-Comfy-Credits-Used`는 실행에 대한 반올림된 사후 수치일 뿐 영수증이 아닙니다. `exact`, `estimated`, `unknown`을 읽는 방법은 [실행 전 비용 추정](/ko/development/comfy-router/reference#실행-전-비용-추정)을 참조하세요. 실행 전에 가격을 산정할 수 없는 모델은 [사전 추정치가 없는 모델](#사전-견적이-없는-모델)에 나열되어 있습니다. +실행 전에 가격을 확인하려면 `POST /v2/models/{provider}/{model}/estimate`를 호출하거나, 대기 중인 제출의 `201` 응답에서 `estimate` 객체를 읽으세요. 추정 기능이 단계적으로 출시되는 동안 이 경로는 `error_type: not_enabled`와 함께 `403`을 반환하고, 제출 응답에서는 `estimate`가 생략됩니다. 각 추정치는 Comfy가 해당 실행에 청구하는 요율표를 기준으로 산정되지만(공급자가 보고한 비용으로 청구되는 모델은 대신 공급자의 공개 가격표를 기준으로 추정됩니다), 그 수치는 추정치일 뿐 최종 청구 금액이 아니며, 워크스페이스의 사용량 및 청구 기록에 정산된 금액이 최종입니다. 이는 가격 고정을 의미하지도 않습니다. 자체 공급자 키로 실행한 경우에는 `/estimate`가 그 실행의 수치를 반환하더라도 Comfy가 요금을 청구하지 않으며, `unknown` 추정치에는 수치가 없는데 이는 무료라는 뜻이 아닙니다. `X-Comfy-Credits-Used`는 실행에 대한 반올림된 사후 수치일 뿐 영수증이 아닙니다. `exact`, `estimated`, `unknown`을 읽는 방법은 [실행 전 비용 추정](/ko/development/comfy-router/reference#실행-전-비용-추정)을 참조하세요. 실행 전에 가격을 산정할 수 없는 모델은 [사전 추정치가 없는 모델](#사전-견적이-없는-모델)에 나열되어 있습니다. ## 사전 견적이 없는 모델 -Router는 아직 아래 모델에 대한 호출 비용을 실행 전에 안정적으로 산정할 수 없으므로, 이들 모델에 대해서는 `/estimate`와 대기 중인 제출의 `estimate`가 `source: unknown`으로 응답할 것으로 예상해야 합니다. 다만 특정 요청 본문에 대해서는 값을 반환할 수도 있습니다. `unknown`은 실행이 무료라는 뜻이 아니라, 값이 제시되지 않았다는 뜻입니다. [Comfy 요금 및 사용량](#comfy-요금-및-사용량) 규칙은 여전히 적용됩니다. 자체 공급자 키로 실행한 경우 Comfy에서 과금하지 않으며, `X-Comfy-Credits-Used`는 선택 사항이므로 헤더가 누락되었다면 비용이 보고되지 않았다는 뜻입니다. 여기에 나열되지 않은 모델도 특정 요청 본문에 대해 `unknown`으로 응답할 수 있으므로, 모든 견적에서 `source`를 확인하세요. +Router는 아직 아래 모델에 대한 호출 비용을 실행 전에 안정적으로 산정할 수 없으므로, 이들 모델의 `/estimate`와 대기 중인 제출의 `estimate`는 `source: unknown`으로 응답할 것으로 예상해야 합니다. 다만 일부 모델은 특정 요청 본문에 대해서는 값을 반환할 수도 있습니다. `unknown`은 실행이 무료라는 뜻이 아니라, 값이 제시되지 않았다는 뜻입니다. [Comfy 요금 및 사용량](#comfy-요금-및-사용량) 규칙은 여전히 적용됩니다. 자체 공급자 키로 실행한 경우 Comfy에서 과금하지 않으며, `X-Comfy-Credits-Used`는 선택 사항이므로 헤더가 누락되었다면 비용이 보고되지 않았다는 뜻입니다. 여기에 나열되지 않은 모델도 특정 요청 본문에 대해 `unknown`으로 응답할 수 있으므로, 모든 견적에서 `source`를 확인하세요. 이 목록은 견적 적용 범위가 늘어나면 줄어듭니다. 이 목록은 Router 자체의 가격 책정 코드에서 생성되며, 공개적으로 사용할 수 없는 모델은 나열되지 않습니다. {/* BEGIN GENERATED: models without a pre-flight estimate. Do not hand-edit; regenerate with -update-quote-coverage-docs. */} -- **bfl**: `bfl/erase-v1`, `bfl/flux-2-max`, `bfl/flux-2-pro`, `bfl/flux-3-image`, `bfl/flux-3-video`, `bfl/flux-kontext-max`, `bfl/flux-kontext-pro`, `bfl/flux-pro-1.0-expand`, `bfl/flux-pro-1.0-fill`, `bfl/flux-pro-1.1`, `bfl/flux-pro-1.1-ultra`, `bfl/video-edit-v1`, `bfl/video-upscale-v1`, `bfl/vto-v1` +- **bfl**: `bfl/erase-v1`, `bfl/video-edit-v1`, `bfl/video-upscale-v1`, `bfl/vto-v1` - **byteplus**: `byteplus/seed-audio-1.0`, `byteplus/seed-audio-1.0-multilingual` -- **elevenlabs**: `elevenlabs/eleven_sfx_v2` - **fal**: `fal/crystal-upscaler`, `fal/crystal-video-upscaler`, `fal/fal-gpt-image-2`, `fal/fal-gpt-image-2.5-flare`, `fal/fal-gpt-image-2.5-sunburst`, `fal/fal-nano-banana-2`, `fal/fal-nano-banana-pro`, `fal/fal-seedance-2.0`, `fal/fal-seedance-2.5`, `fal/flux-3-max`, `fal/patina` - **freepik**: `freepik/ai-image-upscaler-precision-v2`, `freepik/ai-skin-enhancer-creative`, `freepik/ai-skin-enhancer-faithful`, `freepik/ai-skin-enhancer-flexible` - **heygen**: `heygen/starfish` @@ -129,11 +129,9 @@ Router는 아직 아래 모델에 대한 호출 비용을 실행 전에 안정 - **pika**: `pika/pika-gpt-image-2`, `pika/pika-nano-banana-2`, `pika/pika-nano-banana-pro` - **recraft**: `recraft/recraftv2`, `recraft/recraftv3`, `recraft/recraftv4`, `recraft/recraftv4_1`, `recraft/recraftv4_1_pro`, `recraft/recraftv4_1_pro_vector`, `recraft/recraftv4_1_utility`, `recraft/recraftv4_1_utility_pro`, `recraft/recraftv4_1_utility_pro_vector`, `recraft/recraftv4_1_utility_vector`, `recraft/recraftv4_1_vector`, `recraft/recraftv4_pro`, `recraft/recraftv4_styles`, `recraft/recraftv4_styles_pro`, `recraft/recraftv4_styles_pro_vector`, `recraft/recraftv4_styles_vector` - **runware**: `runware/runware-gpt-image-2`, `runware/runware-gpt-image-2.5-flare`, `runware/runware-gpt-image-2.5-sunburst`, `runware/runware-nano-banana-2`, `runware/runware-nano-banana-pro`, `runware/runware-seedance-2.0`, `runware/runware-seedance-2.5` -- **runway**: `runway/gen4_image` - **synclabs**: `synclabs/sync-3` - **veed**: `veed/clean-audio`, `veed/clean-audio-video`, `veed/fabric-1.0`, `veed/lipsync-2.0`, `veed/video-background-removal`, `veed/video-background-removal-fast`, `veed/video-background-removal-green-screen` -- **wavespeed**: `wavespeed/flashvsr`, `wavespeed/seedvr2`, `wavespeed/ultimate-image-upscaler`, `wavespeed/wavespeed-gpt-image-2`, `wavespeed/wavespeed-gpt-image-2.5-flare`, `wavespeed/wavespeed-gpt-image-2.5-sunburst` -- **xai**: `xai/grok-imagine-image`, `xai/grok-imagine-image-2.0`, `xai/grok-imagine-image-pro`, `xai/grok-imagine-image-quality`, `xai/grok-imagine-video`, `xai/grok-imagine-video-1.5`, `xai/grok-imagine-video-1.5-lite`, `xai/grok-imagine-video-1.5-preview` +- **wavespeed**: `wavespeed/wavespeed-gpt-image-2`, `wavespeed/wavespeed-gpt-image-2.5-flare`, `wavespeed/wavespeed-gpt-image-2.5-sunburst` {/* END GENERATED: models without a pre-flight estimate */} @@ -141,9 +139,14 @@ Router는 아직 아래 모델에 대한 호출 비용을 실행 전에 안정 Router는 모델을 실행합니다. 파일 업로드, 계정 읽기, 에셋 관리, 스트리밍, 공급자 작업 제어에는 Router 외부에 있고 그 계약에서 설명되지 않는 `/proxy/…` 아래의 파트너 프록시 라우트가 필요할 수 있습니다. Router 자체의 표면은 [Comfy Router 명세](/router-openapi.yaml)입니다. 지원 여부는 공급자마다 다릅니다. -### Krea 3 참조 이미지는 먼저 업로드해야 합니다 +### Krea 3 참조 이미지: 먼저 업로드하거나 공개 https URL 사용 + +`krea/krea-3`의 `image_urls`에서 `POST /proxy/krea/assets`가 반환한 `image_url`(`https://app-uploads.krea.ai/...` URL)은 항상 허용됩니다. 다른 링크가 허용되는지는 환경에 따라 다르며, api.comfy.org에서는 현재 허용됩니다. + +- **다른 링크가 허용되는 환경**에서는 공개 `https` 이미지 URL이면 무엇이든 동작합니다. Router는 모델이 실행되기 전에 각 이미지의 크기를 읽습니다. 호스트에 공개적으로 접근할 수 없거나 존재하지 않는 링크, `408` 또는 `429`가 아닌 `4xx`로 응답하는 링크, 이미지가 아닌 링크는 해당 호스트를 명시한 `400` `invalid_input`으로 거부됩니다. 일시적인 DNS, TLS 또는 연결 실패, 타임아웃, 오리진의 `408` 또는 `429`는 `502` 오류로 실패합니다. 실제 업로드가 아닌 `app-uploads.krea.ai` 링크는 다른 접근 불가 참조와 마찬가지로 `400`으로 거부됩니다. 서버가 시작된 직후, 어떤 규칙이 적용되는지 아직 파악하지 못한 상태에서는 `app-uploads.krea.ai` 링크가 아닌 공개 `https` URL이 `503`으로 실패할 수 있으며, 이 경우 재시도해도 안전합니다. +- **다른 링크가 허용되지 않는 환경**에서는 모든 항목이 업로드의 `image_url`이어야 합니다. Router는 링크가 호스트가 정확히 `app-uploads.krea.ai`인 `https` URL로 파싱되는지만 확인합니다(다른 호스트도, 명시적 포트도 허용되지 않음). 직접 호스팅한 공개 `https` URL을 포함해 그 밖의 링크는 모델이 실행되기 전에 `400` `invalid_input`으로 거부됩니다. 이 검사를 통과했지만 실제 업로드가 아닌 링크(만료됨, 삭제됨 또는 잘못 입력됨)는 여전히 통과하며, 그러면 Router가 이미지 크기를 읽지 못해 `400`이 아닌 `5xx` 오류로 응답합니다. -`krea/krea-3`는 임의의 이미지 링크를 허용하지 않습니다. `image_urls`의 모든 항목은 `POST /proxy/krea/assets`가 반환한 `image_url`이어야 하며, 이는 `https://app-uploads.krea.ai/...` URL입니다. Router는 링크가 호스트가 정확히 `app-uploads.krea.ai`인 `https` URL로 파싱되는지만 확인합니다(다른 호스트도, 명시적 포트도 허용되지 않음). 직접 호스팅한 공개 `https` URL을 포함해 그 밖의 링크는 모델이 실행되기 전에 `400` `invalid_input`으로 거부됩니다. 이 검사를 통과했지만 실제 업로드가 아닌 링크(만료됨, 삭제됨 또는 잘못 입력됨)는 여전히 통과하며, 그러면 Router가 이미지 크기를 읽지 못해 `400`이 아닌 `5xx` 오류로 응답합니다. 따라서 항상 업로드가 반환한 그대로의 `image_url`을 전달하세요. +업로드는 모든 환경에서 동작하므로 이식 가능한 선택지입니다. 항상 업로드가 반환한 그대로의 `image_url`을 전달하세요. 1. 각 참조 이미지를 `multipart/form-data`로 업로드하고, 이미지는 폼 필드 `file`에 담습니다(JPEG, PNG 또는 WebP, 최대 75 MB). Router와 동일한 방식으로 `X-API-Key` 또는 `Authorization: Bearer`를 사용해 인증합니다. diff --git a/ko/development/comfy-router/models.mdx b/ko/development/comfy-router/models.mdx index 472b20d1f4..1470944a7a 100644 --- a/ko/development/comfy-router/models.mdx +++ b/ko/development/comfy-router/models.mdx @@ -2,11 +2,11 @@ title: "Comfy Router 모델" sidebarTitle: "모든 모델" description: "Comfy Router에서 사용할 수 있는 모든 모델을 제공자별로 정리하고, 각 모델의 입력 및 출력 모달리티를 함께 표시합니다." -translationSourceHash: f12be9e4 +translationSourceHash: e62265b5 translationFrom: development/comfy-router/models.mdx translationBlockHashes: "_intro": 2584e428 - "Find by output": 380e121d + "Find by output": 9c4c92ac "Anthropic": de8acc20 "Beeble": b52ea340 "Black Forest Labs": 2934e3eb @@ -25,7 +25,7 @@ translationBlockHashes: "LTX": 32595bf9 "Luma": 37a12a19 "Luma 2": 585eb637 - "Meshy": 9292a0a8 + "Meshy": 67e26a17 "MiniMax": 87560ab7 "Moonvalley": 9e63fb77 "OpenAI": c5c4af80 @@ -44,6 +44,7 @@ translationBlockHashes: "xAI": e1706271 --- + {/* GENERATED FILE. Generated from the Router catalog by `pnpm code-pages:gen`. */} 아래의 모든 모델은 동일한 라우트인 `POST /v2/models/{provider}/{model}`를 통해 제공되며, 각 모델 고유의 JSON 본문을 사용합니다. 각 페이지에는 Python, TypeScript, cURL로 작성된 실제 동작하는 요청 예시가 있습니다. 검색, 스키마, 오류, 재시도, 청구에 대해서는 [Comfy Router API 사용하기](/ko/development/comfy-router/api)를 참고하세요. @@ -276,7 +277,7 @@ translationBlockHashes: - [Wan 3.0 Video](/ko/development/comfy-router/models/wan/wan3-0-video/code): `wan/wan3.0-video` - + - [Animations](/ko/development/comfy-router/models/meshy/animations/code): `meshy/animations` - [Meshy 6](/ko/development/comfy-router/models/meshy/meshy-6/code): `meshy/meshy-6` diff --git a/ko/development/comfy-router/models/bria/image-edit-relight/code.mdx b/ko/development/comfy-router/models/bria/image-edit-relight/code.mdx index fdc900317c..4ebc20234c 100644 --- a/ko/development/comfy-router/models/bria/image-edit-relight/code.mdx +++ b/ko/development/comfy-router/models/bria/image-edit-relight/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router로 Image Edit Relight 사용하기" description: "Comfy Router를 통해 bria/image-edit-relight 호출하기: 엔드포인트, 요청 형태 그리고 Router가 반환하는 응답." sidebarTitle: "Image Edit Relight" -translationSourceHash: 63b5bcef +translationSourceHash: 620fcec7 translationFrom: development/comfy-router/models/bria/image-edit-relight/code.mdx translationBlockHashes: "_intro": cc88af3e "Quick start": 4329dd4b - "Schema": fb8fdff1 + "Schema": 8f45e738 "Examples": f04b0762 --- + {/* 생성된 파일입니다. `pnpm code-pages:gen`으로 router-schemas/bria/image-edit-relight.json에서 생성되었습니다. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -160,7 +161,7 @@ curl https://api.comfy.org/v2/models/bria/image-edit-relight/requests/$REQUEST_I 편집할 이미지입니다. 지원되는 입력 유형은 Base64로 인코딩된 문자열 또는 공개적으로 접근 가능한 이미지 파일을 가리키는 URL입니다. 허용 형식: JPEG, JPG, PNG, WEBP. - + 라이트 방향으로, "front", "side", "bottom", "top-down" 중 하나입니다. diff --git a/ko/development/comfy-router/models/krea/krea-3/code.mdx b/ko/development/comfy-router/models/krea/krea-3/code.mdx index b455b3e707..347c77d9aa 100644 --- a/ko/development/comfy-router/models/krea/krea-3/code.mdx +++ b/ko/development/comfy-router/models/krea/krea-3/code.mdx @@ -2,15 +2,16 @@ title: "Comfy Router로 Krea 3 사용하기" description: "Comfy Router를 통해 krea/krea-3를 호출하는 방법: 엔드포인트, 요청 형태 및 Router가 반환하는 응답입니다." sidebarTitle: "Krea 3" -translationSourceHash: a539ac5a +translationSourceHash: 9989319f translationFrom: development/comfy-router/models/krea/krea-3/code.mdx translationBlockHashes: "_intro": ac71b80c "Quick start": d6a4d54e - "Schema": 9c44fce0 + "Schema": ccfc3f63 "Examples": 276619d9 --- + {/* GENERATED FILE. Generated from router-schemas/krea/krea-3.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -155,7 +156,7 @@ curl https://api.comfy.org/v2/models/krea/krea-3/requests/$REQUEST_ID \ - 입력 이미지 URL이며 최대 8개입니다. 각 URL은 이미지를 POST /proxy/krea/assets에 업로드하여 반환된 image_url이어야 합니다(multipart form 필드 `file`). 호스트 app-uploads.krea.ai의 https URL이 아닌 링크는 자체 https URL을 포함하여 400으로 거부되며, 실제 업로드가 아닌 app-uploads.krea.ai 링크는 5xx 오류로 실패합니다. 텍스트 기반 이미지 생성 시에는 생략합니다. + 입력 이미지 URL이며 최대 8개입니다. 이미지를 POST /proxy/krea/assets에 업로드하여 반환된 image_url(multipart form 필드 `file`)은 항상 허용됩니다. 다른 공개 https URL이 허용되는지는 환경에 따라 다릅니다. 허용되지 않는 환경에서는 호스트 app-uploads.krea.ai의 https URL이 아닌 모든 링크가 400으로 거부됩니다. 허용되는 환경에서는 모든 공개 https 이미지 URL이 허용되지만, 호스트가 공개적으로 접근할 수 없거나 존재하지 않는 URL, 408 또는 429가 아닌 4xx를 반환하는 URL, 이미지가 아닌 URL은 해당 호스트를 명시하여 400으로 거부됩니다. 반면 일시적인 DNS, TLS 또는 연결 실패, 시간 초과, 또는 원본의 408이나 429는 502 오류로 실패합니다. 다른 URL이 허용되지 않는 환경에서 유효한 업로드가 아닌 app-uploads.krea.ai 링크는 5xx 오류로 실패합니다. 허용되는 환경에서는 이러한 링크가 다른 접근할 수 없는 참조와 마찬가지로 400으로 거부됩니다. 서버가 어떤 규칙이 적용되는지 아직 파악하지 못한 동안에는 app-uploads.krea.ai 링크가 아닌 공개 https URL이 재시도해도 안전한 503 오류로 실패합니다. 텍스트 기반 이미지 생성 시에는 생략합니다. diff --git a/ko/development/comfy-router/models/luma_2/ray-3-2/code.mdx b/ko/development/comfy-router/models/luma_2/ray-3-2/code.mdx index c7e96144fd..83d14ab493 100644 --- a/ko/development/comfy-router/models/luma_2/ray-3-2/code.mdx +++ b/ko/development/comfy-router/models/luma_2/ray-3-2/code.mdx @@ -2,14 +2,15 @@ title: "Comfy Router로 Ray 3.2 사용하기" description: "Comfy Router를 통해 luma_2/ray-3.2를 호출합니다: 엔드포인트, 요청 형태 및 Router가 반환하는 응답." sidebarTitle: "Ray 3.2" -translationSourceHash: a796913b +translationSourceHash: 86ca3c26 translationFrom: development/comfy-router/models/luma_2/ray-3-2/code.mdx translationBlockHashes: "_intro": 3348ca65 "Quick start": ad992b88 - "Schema": 50c63e36 + "Schema": 0c4fe0bc "Examples": fdb0ab6e --- + {/* 생성된 파일입니다. `pnpm code-pages:gen`으로 router-schemas/luma_2/ray-3.2.json에서 생성되었습니다. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -172,7 +173,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 스타일/콘텐츠 가이드를 위한 참조 이미지입니다. type이 'image'인 경우 최대 9개, 'image_edit'인 경우 최대 8개입니다. + 스타일/콘텐츠 가이드용 참조 이미지입니다. type 'image'의 경우 최대 9개, type 'image_edit'의 경우 최대 8개입니다. @@ -180,11 +181,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 타입입니다. data와 함께 필수이며, 비디오 소스의 경우 url과도 함께 필수입니다(예: video_edit / video_reframe에서 video/mp4). + MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수입니다, 예: video_edit / video_reframe의 video/mp4). @@ -192,7 +193,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 사용할 모델입니다. 이미지 생성에는 uni-1 / uni-1-max, 비디오 생성, 편집 및 리프레이밍에는 ray-3.2를 사용합니다. + 사용할 모델입니다. 이미지 생성에는 uni-1 / uni-1-max, 비디오 생성, 편집, 리프레이밍에는 ray-3.2입니다. @@ -206,7 +207,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스 및 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. + 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스, 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나만 제공하세요. @@ -214,11 +215,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 타입입니다. data와 함께 필수이며, 비디오 소스의 경우 url과도 함께 필수입니다(예: video_edit / video_reframe에서 video/mp4). + MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수입니다, 예: video_edit / video_reframe의 video/mp4). @@ -232,13 +233,13 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 수행할 생성 유형입니다. image/image_edit는 uni-1 / uni-1-max 모델에서 생성되며, video/video_edit/video_reframe은 ray-3.2 모델에서 생성됩니다. + 수행할 생성의 종류입니다. image/image_edit는 uni-1 / uni-1-max 모델이 생성하고, video/video_edit/video_reframe은 ray-3.2 모델이 생성합니다. 가능한 값: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` - ray-3.2의 비디오 출력 설정입니다. 여기에서는 검증 및 과금에 영향을 주는 필드만 모델링됩니다. 추가 필드(편집 제어, source_position)는 수정 없이 Luma로 전달됩니다. + ray-3.2의 비디오 출력 설정입니다. 여기에는 검증과 과금에 영향을 주는 필드만 모델링되어 있으며, 추가 필드(편집 컨트롤, source_position)는 수정 없이 Luma로 전달됩니다. @@ -248,7 +249,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스 및 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. + 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스, 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나만 제공하세요. @@ -256,11 +257,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 타입입니다. data와 함께 필수이며, 비디오 소스의 경우 url과도 함께 필수입니다(예: video_edit / video_reframe에서 video/mp4). + MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수입니다, 예: video_edit / video_reframe의 video/mp4). @@ -268,7 +269,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 아직 사용할 수 없습니다: Luma가 EXR 제공을 시작할 때까지 `exr_export=true` 요청은 400으로 거부됩니다. 향후 MP4와 함께 EXR 파일을 내보냅니다(hdr가 true여야 함). video_reframe에서는 거부됩니다. + 아직 사용 불가: Luma가 EXR 전송을 출시할 때까지 exr_export=true인 요청은 400으로 거부됩니다. MP4와 함께 EXR 파일을 내보냅니다(hdr true 필요). video_reframe에서는 거부됩니다. @@ -280,7 +281,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 가이드 프레임 이미지(1–64)이며 start_frame/end_frame과 상호 배타적입니다. 요청된 재생 시간을 기준으로 과금되며, keyframes 요청은 단일 키프레임 연장이 아닙니다. + 가이드 프레임 이미지(1–64)이며 start_frame/end_frame과 상호 배타적입니다. 요청한 재생 시간을 기준으로 과금되며, keyframes 요청은 단일 키프레임 연장이 아닙니다. @@ -288,11 +289,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 타입입니다. data와 함께 필수이며, 비디오 소스의 경우 url과도 함께 필수입니다(예: video_edit / video_reframe에서 video/mp4). + MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수입니다, 예: video_edit / video_reframe의 video/mp4). @@ -300,17 +301,17 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 생성된 클립을 반복합니다. 생성 시에만 가능합니다(type video). + 생성된 클립을 반복 재생합니다. 생성 전용(type video)입니다. - ray-3.2 비디오의 출력 해상도입니다. 기본값은 720p입니다. 360p는 초안 등급입니다. HDR에는 720p 또는 1080p가 필요합니다. + ray-3.2 비디오의 출력 해상도입니다. 기본값은 720p입니다. 360p는 초안 등급입니다. HDR은 720p 또는 1080p가 필요합니다. 가능한 값: `360p`, `540p`, `720p`, `1080p` - 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스 및 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. + 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스, 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나만 제공하세요. @@ -318,11 +319,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 소스로 재사용할 이전 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 유형. data와 함께 필수입니다 (비디오 소스의 경우 url과도 함께, 예: video_edit / video_reframe에서 video/mp4). + MIME 유형입니다. data와 함께 필수이며, 비디오 소스의 경우 url과도 함께 필수입니다(예: video_edit / video_reframe에서 video/mp4). @@ -333,7 +334,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ 웹 검색 그라운딩 활성화 -Router가 `GET /v2/models/luma_2/ray-3.2/openapi.json`에서 제공하는 스키마에서 생성되었으며, 이는 요청이 공급자에 도달하기 전에 호출을 검증하는 동일한 문서입니다. +Router가 `GET /v2/models/luma_2/ray-3.2/openapi.json`에서 제공하는 스키마에서 생성되었으며, 이는 요청이 공급자에 도달하기 전에 호출을 검증하는 기준이 되는 동일한 문서입니다. ### 출력 @@ -342,13 +343,13 @@ Router가 `GET /v2/models/luma_2/ray-3.2/openapi.json`에서 제공하는 스키 - 프로그래밍 방식으로 처리할 수 있는 기계 판독 가능 실패 코드 + 프로그래밍 방식으로 처리할 수 있는 기계 판독용 실패 코드 가능한 값: `content_moderated`, `generation_failed`, `budget_exhausted`, `output_not_found` - 사람이 읽을 수 있는 실패 설명으로, FAILED 상태의 생성에서만 채워집니다. 성공한 생성에서는 `null`입니다. + 사람이 읽을 수 있는 실패 설명이며, FAILED 상태의 생성에서만 채워집니다. 성공한 경우에는 `null`입니다. @@ -364,11 +365,11 @@ Router가 `GET /v2/models/luma_2/ray-3.2/openapi.json`에서 제공하는 스키 - 미디어 유형 (예: 이미지) + 미디어 유형 (예: image) - 미리 서명된 URL (1시간 후 만료) + Presigned URL (1시간 후 만료) @@ -378,7 +379,7 @@ Router가 `GET /v2/models/luma_2/ray-3.2/openapi.json`에서 제공하는 스키 - 수행할 생성의 종류입니다. image/image_edit는 uni-1 / uni-1-max 모델에서, video/video_edit/video_reframe은 ray-3.2 모델에서 생성됩니다. + 수행할 생성의 종류입니다. image/image_edit는 uni-1 / uni-1-max 모델이 생성하며, video/video_edit/video_reframe은 ray-3.2 모델이 생성합니다. 가능한 값: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` diff --git a/ko/development/comfy-router/models/luma_2/uni-1-max/code.mdx b/ko/development/comfy-router/models/luma_2/uni-1-max/code.mdx index b7ee5fd49e..ded0d60ced 100644 --- a/ko/development/comfy-router/models/luma_2/uni-1-max/code.mdx +++ b/ko/development/comfy-router/models/luma_2/uni-1-max/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router로 Uni 1 Max 사용하기" description: "Comfy Router를 통해 luma_2/uni-1-max를 호출합니다: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답을 설명합니다." sidebarTitle: "Uni 1 Max" -translationSourceHash: 90d7c51e +translationSourceHash: e88275ff translationFrom: development/comfy-router/models/luma_2/uni-1-max/code.mdx translationBlockHashes: "_intro": 86e0cfe7 "Quick start": dfff1d3d - "Schema": 4916d345 + "Schema": d7d29898 "Examples": f813a867 --- + {/* 생성된 파일. `pnpm code-pages:gen`에 의해 router-schemas/luma_2/uni-1-max.json에서 생성되었습니다. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -153,13 +154,13 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ ### 입력 - 출력 가로세로 비율. ray-3.2 비디오 모델은 9:16, 3:4, 1:1, 4:3, 16:9, 21:9 하위 집합을 지원합니다. + 출력 화면 비율입니다. ray-3.2 비디오 모델은 9:16, 3:4, 1:1, 4:3, 16:9, 21:9 하위 집합을 지원합니다. 가능한 값: `3:1`, `2:1`, `21:9`, `16:9`, `3:2`, `4:3`, `1:1`, `3:4`, `2:3`, `9:16`, `1:2`, `1:3` - 스타일/콘텐츠 가이드를 위한 참조 이미지. type 'image'인 경우 최대 9개, type 'image_edit'인 경우 최대 8개입니다. + 스타일/콘텐츠 가이드를 위한 참조 이미지입니다. type 'image'의 경우 최대 9개, type 'image_edit'의 경우 최대 8개입니다. @@ -171,7 +172,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - MIME 타입. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수이며, 예: video_edit / video_reframe에서 video/mp4). + MIME 유형입니다. data와 함께 필수입니다(비디오 소스의 경우에는 url과도 함께 필수입니다. 예: video_edit / video_reframe의 video/mp4). @@ -179,7 +180,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 사용할 모델. 이미지 생성에는 uni-1 / uni-1-max, 비디오 생성, 편집, 리프레이밍에는 ray-3.2를 사용합니다. + 사용할 모델입니다. 이미지 생성에는 uni-1 / uni-1-max를, 비디오 생성, 편집 및 리프레이밍에는 ray-3.2를 사용합니다. @@ -193,7 +194,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스, 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. + 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스 및 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. @@ -205,7 +206,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - MIME 타입. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수이며, 예: video_edit / video_reframe에서 video/mp4). + MIME 유형입니다. data와 함께 필수입니다(비디오 소스의 경우에는 url과도 함께 필수입니다. 예: video_edit / video_reframe의 video/mp4). @@ -219,23 +220,23 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 수행할 생성의 종류. image/image_edit는 uni-1 / uni-1-max 모델이 생성하고, video/video_edit/video_reframe은 ray-3.2 모델이 생성합니다. + 수행할 생성 종류입니다. image/image_edit는 uni-1 / uni-1-max 모델이 생성하며, video/video_edit/video_reframe은 ray-3.2 모델이 생성합니다. 가능한 값: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` - ray-3.2의 비디오 출력 설정입니다. 여기에는 검증과 과금에 영향을 주는 필드만 모델링되어 있으며, 추가 필드(편집 제어, source_position)는 수정 없이 Luma로 전달됩니다. + ray-3.2의 비디오 출력 설정입니다. 검증과 청구에 영향을 주는 필드만 여기에 모델링되어 있으며, 추가 필드(편집 제어, source_position)는 변경 없이 Luma로 전달됩니다. - ray-3.2 video / video_edit의 클립 재생 시간. 기본값은 5s입니다. HDR 생성(type video)은 5s로 제한됩니다. + ray-3.2 video / video_edit의 클립 재생 시간입니다. 기본값은 5s입니다. HDR 생성(type video)은 5s로 제한됩니다. 가능한 값: `5s`, `10s` - 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스, 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. + 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스 및 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. @@ -247,7 +248,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - MIME 타입. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수이며, 예: video_edit / video_reframe에서 video/mp4). + MIME 유형입니다. data와 함께 필수입니다(비디오 소스의 경우에는 url과도 함께 필수입니다. 예: video_edit / video_reframe의 video/mp4). @@ -255,7 +256,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - MP4와 함께 EXR 파일을 내보냅니다. hdr이 참이어야 합니다. video_reframe에서는 거부됩니다. + 아직 사용 불가: exr_export=true인 요청은 Luma가 EXR 전달 기능을 출시할 때까지 400으로 거부됩니다. MP4와 함께 EXR 파일을 내보낼 예정입니다(hdr true 필요). video_reframe에서는 거부됩니다. @@ -263,11 +264,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - `keyframes`에 대한 출력 프레임 위치이며 길이가 같아야 합니다. 5s의 경우 0–120, 10s의 경우 0–240입니다. 수정 없이 전달됩니다. + `keyframes`의 출력 프레임 위치이며 길이가 같습니다. 5s의 경우 0–120, 10s의 경우 0–240입니다. 변경 없이 전달됩니다. - 가이드 프레임 이미지(1–64개)로, start_frame/end_frame과 함께 사용할 수 없습니다. 요청된 재생 시간 기준으로 과금되며, keyframes 요청은 단일 키프레임 확장이 아닙니다. + 가이드 프레임 이미지(1–64)이며 start_frame/end_frame과 상호 배타적입니다. 요청된 재생 시간 기준으로 청구되며, keyframes 요청은 절대 단일 키프레임 연장이 아닙니다. @@ -279,7 +280,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - MIME 타입. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수이며, 예: video_edit / video_reframe에서 video/mp4). + MIME 유형입니다. data와 함께 필수입니다(비디오 소스의 경우에는 url과도 함께 필수입니다. 예: video_edit / video_reframe의 video/mp4). @@ -287,29 +288,29 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 생성된 클립을 반복합니다. 생성 시에만 사용 가능합니다(type video). + 생성된 클립을 반복합니다. 생성 시에만 사용 가능(type video). - ray-3.2 video의 출력 해상도. 기본값은 720p입니다. 360p는 초안 등급입니다. HDR은 720p 또는 1080p가 필요합니다. + ray-3.2 video의 출력 해상도입니다. 기본값은 720p입니다. 360p는 초안 등급입니다. HDR에는 720p 또는 1080p가 필요합니다. 가능한 값: `360p`, `540p`, `720p`, `1080p` - 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스, 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. + 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스 및 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. - Base64로 인코딩된 이미지 또는 비디오 데이터 + Base64 인코딩된 이미지 또는 비디오 데이터 - 소스로 재사용할, 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 타입입니다. data와 함께 필수이며, 비디오 소스의 경우 url과도 함께 필수입니다(예: video_edit / video_reframe에서 video/mp4). + MIME 유형입니다. data와 함께 필수이며, 비디오 소스의 경우 url과도 함께 필수입니다(예: video_edit / video_reframe의 video/mp4). @@ -317,10 +318,10 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 검색 그라운딩 활성화 + 웹 검색 그라운딩 활성화 -Router가 `GET /v2/models/luma_2/uni-1-max/openapi.json`에서 제공하는 스키마에서 생성되며, 이는 요청이 공급자에 도달하기 이전에 호출을 검증하는 데 사용하는 것과 동일한 문서입니다. +Router가 `GET /v2/models/luma_2/uni-1-max/openapi.json`에서 제공하는 스키마로부터 생성되었으며, 이는 요청이 공급자에 도달하기 전에 호출을 검증하는 동일한 문서입니다. ### 출력 @@ -329,13 +330,13 @@ Router가 `GET /v2/models/luma_2/uni-1-max/openapi.json`에서 제공하는 스 - 프로그래밍 방식으로 처리할 수 있는 기계 판독 가능한 실패 코드 + 프로그래밍 방식으로 처리할 수 있는 기계 판독용 실패 코드 가능한 값: `content_moderated`, `generation_failed`, `budget_exhausted`, `output_not_found` - 사람이 읽을 수 있는 실패 설명. FAILED 상태의 생성에서만 채워지며, 성공한 생성에서는 `null`입니다. + 사람이 읽을 수 있는 실패 설명이며, FAILED 상태의 생성에서만 채워집니다. 성공한 생성에서는 `null`입니다. @@ -355,7 +356,7 @@ Router가 `GET /v2/models/luma_2/uni-1-max/openapi.json`에서 제공하는 스 - 미리 서명된 URL (1시간 후 만료) + 서명된 URL (1시간 후 만료) @@ -365,7 +366,7 @@ Router가 `GET /v2/models/luma_2/uni-1-max/openapi.json`에서 제공하는 스 - 수행할 생성의 종류. image/image_edit는 uni-1 / uni-1-max 모델에서 생성되며, video/video_edit/video_reframe은 ray-3.2 모델에서 생성됩니다. + 수행할 생성의 종류입니다. image/image_edit는 uni-1 / uni-1-max 모델이 생성하고, video/video_edit/video_reframe은 ray-3.2 모델이 생성합니다. 가능한 값: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` diff --git a/ko/development/comfy-router/models/luma_2/uni-1/code.mdx b/ko/development/comfy-router/models/luma_2/uni-1/code.mdx index a298b97d18..d016bf8be9 100644 --- a/ko/development/comfy-router/models/luma_2/uni-1/code.mdx +++ b/ko/development/comfy-router/models/luma_2/uni-1/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router에서 Uni 1 사용하기" description: "Comfy Router를 통해 luma_2/uni-1 호출하기: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답." sidebarTitle: "Uni 1" -translationSourceHash: 5f33116a +translationSourceHash: 897d09ee translationFrom: development/comfy-router/models/luma_2/uni-1/code.mdx translationBlockHashes: "_intro": a9aaf4ab "Quick start": 9d667b90 - "Schema": 6ccb738a + "Schema": fe7e100f "Examples": f993c215 --- + {/* 생성된 파일. `pnpm code-pages:gen`에 의해 router-schemas/luma_2/uni-1.json에서 생성되었습니다. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -167,11 +168,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 소스로 재사용할 이전 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과 함께 사용, 예: video_edit / video_reframe의 video/mp4). + MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수이며, 예: video_edit / video_reframe의 video/mp4). @@ -179,7 +180,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 사용할 모델입니다. 이미지 생성에는 uni-1 / uni-1-max, 비디오 생성, 편집, 리프레이밍에는 ray-3.2입니다. + 사용할 모델입니다. 이미지 생성에는 uni-1 / uni-1-max, 비디오 생성, 편집 및 리프레이밍에는 ray-3.2를 사용합니다. @@ -193,7 +194,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스, 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. + 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스 및 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. @@ -201,11 +202,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 소스로 재사용할 이전 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과 함께 사용, 예: video_edit / video_reframe의 video/mp4). + MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수이며, 예: video_edit / video_reframe의 video/mp4). @@ -219,13 +220,13 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 수행할 생성의 종류입니다. image/image_edit는 uni-1 / uni-1-max 모델이 생성하며, video/video_edit/video_reframe은 ray-3.2 모델이 생성합니다. + 수행할 생성 유형입니다. image/image_edit는 uni-1 / uni-1-max 모델에서 생성되며, video/video_edit/video_reframe는 ray-3.2 모델에서 생성됩니다. 가능한 값: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` - ray-3.2의 비디오 출력 설정입니다. 검증과 과금에 영향을 주는 필드만 여기에서 모델링되며, 추가 필드(편집 컨트롤, source_position)는 수정 없이 Luma로 전달됩니다. + ray-3.2의 비디오 출력 설정입니다. 검증과 청구에 영향을 주는 필드만 여기에 모델링되어 있습니다. 추가 필드(편집 컨트롤, source_position)는 Luma로 그대로 전달됩니다. @@ -235,7 +236,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스, 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. + 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스 및 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. @@ -243,11 +244,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 소스로 재사용할 이전 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과 함께 사용, 예: video_edit / video_reframe의 video/mp4). + MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수이며, 예: video_edit / video_reframe의 video/mp4). @@ -255,7 +256,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - MP4와 함께 EXR 파일을 내보냅니다. hdr가 true여야 합니다. video_reframe에서는 거부됩니다. + 아직 사용 불가: exr_export=true인 요청은 Luma가 EXR 전달을 출시할 때까지 400으로 거부됩니다. MP4와 함께 EXR 파일을 내보냅니다(hdr true가 필요합니다). video_reframe에서는 거부됩니다. @@ -263,11 +264,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - `keyframes`에 대한 출력 프레임 위치이며 길이가 같습니다. 5s는 0–120, 10s는 0–240입니다. 수정 없이 전달됩니다. + `keyframes`의 출력 프레임 위치이며 길이가 같아야 합니다. 5s의 경우 0–120, 10s의 경우 0–240입니다. 그대로 전달됩니다. - 가이드 프레임 이미지(1–64)이며 start_frame/end_frame과 상호 배타적입니다. 요청된 재생 시간을 기준으로 과금되며, keyframes 요청은 단일 키프레임 연장이 아닙니다. + 가이드 프레임 이미지(1–64)이며 start_frame/end_frame과 상호 배타적입니다. 요청된 재생 시간에 따라 청구됩니다. keyframes 요청은 단일 키프레임 연장이 아닙니다. @@ -275,11 +276,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 소스로 재사용할 이전 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과 함께 사용, 예: video_edit / video_reframe의 video/mp4). + MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께 필수이며, 예: video_edit / video_reframe의 video/mp4). @@ -287,17 +288,17 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 생성된 클립을 반복 재생합니다. 생성 전용(type video)입니다. + 생성된 클립을 반복합니다. 생성 전용(type video)입니다. - ray-3.2 비디오의 출력 해상도입니다. 기본값은 720p입니다. 360p는 초안 등급입니다. HDR은 720p 또는 1080p가 필요합니다. + ray-3.2 비디오의 출력 해상도입니다. 기본값은 720p입니다. 360p는 초안 등급입니다. HDR에는 720p 또는 1080p가 필요합니다. 가능한 값: `360p`, `540p`, `720p`, `1080p` - 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스, 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. + 이미지 또는 비디오에 대한 참조입니다. 스타일/콘텐츠 가이드, 가이드 생성, video-edit/video-reframe 소스 및 가이드 키프레임에 사용됩니다. generation_id, url, data 중 정확히 하나를 제공하세요. @@ -305,11 +306,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 소스로 재사용할, 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. + 소스로 재사용할 이전에 완료된 생성의 UUID입니다. ray-3.2 video_edit / video_reframe에서 사용됩니다. - MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url과도 함께, 예: video_edit / video_reframe에서 video/mp4). + MIME 타입입니다. data와 함께 필수입니다(비디오 소스의 경우 url도 함께 필수이며, 예: video_edit / video_reframe에서 video/mp4). @@ -317,10 +318,10 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 검색 그라운딩 활성화 + 웹 검색 그라운딩을 활성화합니다. -Router가 `GET /v2/models/luma_2/uni-1/openapi.json`에서 제공하는 스키마에서 생성되었으며, 이는 요청이 공급자에 도달하기 이전에 호출을 검증하는 대상과 동일한 문서입니다. +Router가 `GET /v2/models/luma_2/uni-1/openapi.json`에서 제공하는 스키마에서 생성되었으며, 이는 요청이 공급자에 도달하기 전에 호출을 검증하는 기준이 되는 동일한 문서입니다. ### 출력 @@ -335,7 +336,7 @@ Router가 `GET /v2/models/luma_2/uni-1/openapi.json`에서 제공하는 스키 - 사람이 읽을 수 있는 실패 설명으로, FAILED 생성에서만 채워집니다. 성공한 경우 `null`입니다. + 사람이 읽을 수 있는 실패 설명이며, FAILED 상태의 생성에서만 채워집니다. 성공한 경우 `null`입니다. @@ -351,7 +352,7 @@ Router가 `GET /v2/models/luma_2/uni-1/openapi.json`에서 제공하는 스키 - 미디어 유형(예: 이미지) + 미디어 유형 (예: 이미지) @@ -365,7 +366,7 @@ Router가 `GET /v2/models/luma_2/uni-1/openapi.json`에서 제공하는 스키 - 수행할 생성 유형입니다. image/image_edit는 uni-1 / uni-1-max 모델에서 생성되며, video/video_edit/video_reframe는 ray-3.2 모델에서 생성됩니다. + 수행할 생성의 종류. image/image_edit은 uni-1 / uni-1-max 모델에서 생성되고, video/video_edit/video_reframe은 ray-3.2 모델에서 생성됩니다. 가능한 값: `image`, `image_edit`, `video`, `video_edit`, `video_reframe` diff --git a/ko/development/comfy-router/reference.mdx b/ko/development/comfy-router/reference.mdx index 0f7bb35a2d..eccbe1afcf 100644 --- a/ko/development/comfy-router/reference.mdx +++ b/ko/development/comfy-router/reference.mdx @@ -2,17 +2,17 @@ title: "Comfy Router API 레퍼런스" description: "Comfy API 계약에서 생성된 모든 Comfy Router 엔드포인트, 매개변수, 응답 본문 및 오류 버킷." sidebarTitle: "API 레퍼런스" -translationSourceHash: 1b971d1c +translationSourceHash: b042583a translationFrom: development/comfy-router/reference.mdx translationBlockHashes: "_intro": 3f6e5d23 - "Endpoints": fbcaaf0e + "Endpoints": 2d5cf8c1 "Error buckets": 36170340 "Response headers": 403c8bf5 - "Pre-flight cost estimates": 3ecabac6 + "Pre-flight cost estimates": cc2dc53c "Result assets": 65fc939b "Per-model input and output schemas": 61c6bde8 - "Schemas": 77cfa4db + "Schemas": 29f3d282 --- @@ -27,6 +27,7 @@ translationBlockHashes: + {/* 생성된 파일: 손으로 편집하지 마십시오. @@ -49,16 +50,16 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 ### `GET /v2/models` -**Comfy Router가 실행할 수 있는 모델 목록을 조회합니다.** +**Comfy Router가 실행할 수 있는 모델을 나열합니다.** -사용 가능한 모델 ID와 과금 정보를 나열합니다. `has_more`가 참인 동안 `next_cursor`를 사용하세요. +사용 가능한 모델 ID와 청구 관련 정보를 나열합니다. `has_more`가 참인 동안 `next_cursor`를 사용하세요. **파라미터** 불투명한 페이지네이션 커서입니다. - 타입: [`RouterPageCursor`](#routerpagecursor) -- `next_cursor`로 반환되는 불투명 커서, 1–512자 + 유형: [`RouterPageCursor`](#routerpagecursor). `next_cursor`로 반환되는 불투명한 커서이며, 1~512자입니다. @@ -76,7 +77,7 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 OK - 모델 카탈로그의 한 페이지입니다. - 본문: [`RouterModelListResponse`](#routermodellistresponse) -- 헤더: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` + 본문: [`RouterModelListResponse`](#routermodellistresponse). 헤더: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` @@ -88,45 +89,45 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 잘못된 요청입니다. 오류 유형과 요청 본문을 확인하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 자격 증명이 누락되었거나 유효하지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 이 호출자 또는 모델에 대해 요청이 허용되지 않습니다. + 이 호출자 또는 모델에 대해서는 요청이 허용되지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router를 일시적으로 사용할 수 없습니다. 백오프를 적용하여 재시도하세요. + Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` ### `GET /v2/models/{provider}/{model}` -**표준 모델 ID로 파트너 모델 하나의 카탈로그 항목을 조회합니다.** +**정식 모델 ID로 파트너 모델 하나의 카탈로그 항목을 조회합니다.** -전체 카탈로그를 나열하지 않고 모델 하나의 세부 정보를 조회합니다. +전체 카탈로그를 나열하지 않고 한 모델의 세부 정보를 조회합니다. **파라미터** - 표준 `{provider}/{model}` 모델 ID의 공급자 부분입니다. + 정식 `{provider}/{model}` 모델 ID의 공급자 부분입니다. - 유형: [`RouterProviderSegment`](#routerprovidersegment). 영숫자 슬러그(예: `anthropic`), 최대 64자 + 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 - 표준 `{provider}/{model}` 모델 ID의 모델 부분입니다. + 정식 `{provider}/{model}` 모델 ID의 모델 부분입니다. - 유형: [`RouterModelSegment`](#routermodelsegment). 영숫자 슬러그(예: `claude-opus-4-6`), 최대 128자 + 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 @@ -136,13 +137,13 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 **응답** - OK: 모델의 카탈로그 항목입니다. + OK - 모델의 카탈로그 항목입니다. - 본문: [`RouterModelDetail`](#routermodeldetail). 헤더: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` + 본문: [`RouterModelDetail`](#routermodeldetail) -- 헤더: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` - 수정되지 않음: 호출자가 `If-None-Match`에 보낸 `ETag` 이후 항목이 변경되지 않았습니다. + Not Modified - 호출자가 `If-None-Match`로 보낸 `ETag` 이후 항목이 변경되지 않았습니다. 헤더: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` @@ -150,169 +151,167 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 자격 증명이 누락되었거나 유효하지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 이 호출자 또는 모델에 대해서는 요청이 허용되지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 모델 ID를 찾을 수 없습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router를 일시적으로 사용할 수 없습니다. 백오프를 적용해 다시 시도하세요. + Router를 일시적으로 사용할 수 없습니다. 백오프를 적용해 재시도하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` ### `POST /v2/models/{provider}/{model}` -**표준 모델 ID로 파트너 모델을 동기적으로 실행합니다.** +**정식 모델 ID로 파트너 모델을 동기적으로 실행합니다.** -모델을 실행하고 완료된 결과를 같은 응답에서 받습니다. +모델을 실행하고 완료된 결과를 동일한 응답으로 받습니다. **파라미터** - 표준 `{provider}/{model}` 모델 ID에서 공급자 부분입니다. + 정식 `{provider}/{model}` 모델 ID의 공급자 부분입니다. - 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 + 유형: [`RouterProviderSegment`](#routerprovidersegment). 영숫자 슬러그, 예: `anthropic`, 최대 64자 - 표준 `{provider}/{model}` 모델 ID에서 모델 부분입니다. + 정식 `{provider}/{model}` 모델 ID의 모델 부분입니다. - 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 + 유형: [`RouterModelSegment`](#routermodelsegment). 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 - 하나의 논리적 호출을 안전하게 재시도할 수 있게 해 주는, 호출자가 생성한 키입니다. + 하나의 논리적 호출을 재시도해도 안전하게 만드는 호출자 생성 키입니다. 1–255자 - 이 모델을 현재 기본값 대신 다른 공급자가 서비스하도록 선택합니다. `fal`, `wavespeed`, `runware`, `higgsfield`가 대체 공급자이며, `GET /v2/models/{provider}/{model}`은 주어진 모델이 이들 중 무엇을 지원하는지 알려줍니다. 거부는 고정된 순서로 검사되며, 앞선 검사는 뒤따르는 검사에 해당하든 아니든 응답합니다. 등록된 공급자가 전혀 아닌, 인식되지 않는 값은 `400`으로 거부됩니다. 다음으로, 본문이 멀티파트 작업(편집)을 선택하는 요청에서 대체 공급자를 지정하면 `detail`이 "this request's `image` selects the edit operation"으로 시작하는 `409`로 거부되지만, 이는 해당 공급자의 이 모델에 대한 번역기가 그 작업을 처리할 수 없을 때만입니다. 미디어를 실제로 처리하는 번역기를 가진 레그는 정상적으로 진행됩니다. 다음으로, bring-your-own-key 자격 증명을 확인한 요청에서는 해당 공급자가 이 모델을 서비스하는지와 무관하게, 대체 공급자를 지정하면 `detail`이 `this request resolved a BYOK credential`로 시작하는 `409`로 거부됩니다(해당 응답 참조). 다음으로, 지정된 공급자 자체의 게이트가 검사되는데, 해당 공급자가 내게 활성화되어 있지 않으면 `error_type: not_enabled`와 함께 `403`으로, 게이트를 평가할 수 없으면 `error_type: service_unavailable`과 함께 `503`으로 거부합니다. 그리고 이 네 가지를 모두 통과한 뒤에야 이 모델에 대한 레그가 없는 실제 공급자가 `error_type: invalid_input`과 함께 `400`으로 거부되며, 이는 인식되지 않는 값과 같은 응답입니다. `fallback_provider`는 bring-your-own-key 요청에서, 본문이 멀티파트 작업을 선택하는 요청에서, 그리고 `strict_mode=true`에서 거부되지 않고 효력이 없습니다. + 이 모델을 제공할 대체 공급자를 현재 기본값 대신 선택합니다. `fal`, `wavespeed`, `runware`, `higgsfield`가 대체 공급자이며, `GET /v2/models/{provider}/{model}`는 주어진 모델이 이들 중 어떤 것을 지원하는지 보고합니다. 거부 사유는 고정된 순서로 확인되며, 앞선 사유는 뒤의 사유가 해당되는지 여부와 관계없이 응답합니다. 인식되지 않는 값(등록된 공급자가 전혀 아닌 값)은 `400`으로 거부됩니다. 그다음, 본문이 멀티파트 작업(편집)을 선택하는 요청에서 대체 공급자는 `detail`이 "this request's `image` selects the edit operation"으로 시작하는 `409`로 거부되지만, 해당 공급자의 이 모델에 대한 변환기가 그 작업을 처리할 수 없을 때만 그렇습니다. 미디어를 전달하는 변환기가 있는 레그는 정상적으로 진행됩니다. 그다음, bring-your-own-key 자격 증명을 해석한 요청에서 모든 대체 공급자는 `detail`이 `this request resolved a BYOK credential`로 시작하는 `409`로 거부됩니다(해당 응답 참조). 해당 공급자가 이 모델을 제공하는지 여부와 관계없습니다. 그다음, 명명된 공급자 자체의 게이트가 있습니다. 이 게이트는 해당 공급자가 귀하에게 활성화되지 않은 경우 `error_type: not_enabled`와 함께 `403`으로 거부하고, 게이트를 평가할 수 없는 경우 `error_type: service_unavailable`와 함께 `503`으로 거부합니다. 그리고 이 네 가지를 모두 통과한 뒤에만, 이 모델에 대한 레그가 없는 실제 공급자가 `error_type: invalid_input`와 함께 `400`으로 거부되며, 이는 인식되지 않는 값과 동일한 응답입니다. `fallback_provider`는 bring-your-own-key 요청, 본문이 멀티파트 작업을 선택하는 요청, 그리고 `strict_mode=true`인 경우에 거부되지 않고 효력이 없습니다. `model_provider`와 함께 사용할 때만 의미가 있습니다. - 기본값: 거짓 + 기본값: False - 첫 시도가 Router 또는 시도한 공급자에 기인하는 이유로 실패했을 때, Router가 이 호출을 모델의 다른 등록 공급자로 재시도할지 여부를 제어합니다. 생략하거나 `false` 이외의 값을 주면 폴백이 켜진 채로 유지되고, `false`는 폴백을 끕니다. 폴백이 성공한 응답에는 `X-Comfy-Router-Fallback-Provider`가 포함됩니다. bring-your-own-key 자격 증명을 확인한 요청에서는 이 파라미터가 무엇을 말하든 폴백을 사용할 수 없습니다. 시도 자체가 이루어지지 않고 첫 실패가 그대로 전달되며, 이는 거부가 아니라 효력이 없는 것입니다. 여기서 `409`가 발생하지는 않습니다. 같은 이유로, 본문이 멀티파트 작업을 선택하는 요청과 `strict_mode=true`에서도 마찬가지입니다. 각각은 호출을 하나의 공급자에 묶어 다른 공급자에 대해 충실히 재생할 수 없으므로, 폴백은 거부되지 않고 그냥 건너뜁니다. 그 `409`로 거부되는 것은 명시적인 `model_provider`뿐이며, 이 무조건적인 건너뜀과 달리 멀티파트 `409`는 번역기가 해당 작업을 처리할 수 없는 레그에만 적용됩니다. + 첫 시도가 Router 또는 시도한 공급자에 기인한 이유로 실패할 때 Router가 이 호출을 모델의 다른 등록된 공급자에 대해 재시도하는지 여부를 제어합니다. 생략하거나 `false` 이외의 값을 지정하면 폴백이 켜진 상태로 유지됩니다. `false`는 폴백을 끕니다. 성공적인 폴백 응답에는 `X-Comfy-Router-Fallback-Provider`가 포함됩니다. bring-your-own-key 자격 증명을 해석한 요청에서는 이 파라미터의 값과 관계없이 폴백을 사용할 수 없습니다. 시도 자체가 이루어지지 않으며 첫 실패가 변경 없이 전달됩니다. 이는 거부가 아니라 효력이 없는 것이며, 여기서 `409`가 발생하지 않습니다. 같은 이유로, 본문이 멀티파트 작업을 선택하는 요청과 `strict_mode=true`인 경우에도 마찬가지입니다. 각각은 호출을 다른 공급자에 대해 충실히 재생할 수 없는 하나의 공급자에 묶으므로, 폴백은 거부되지 않고 단순히 건너뜁니다. 명시적인 `model_provider`만 해당 `409`로 거부되며, 이 무조건적인 건너뜀과 달리 그 멀티파트 `409`는 변환기가 해당 작업을 처리할 수 없는 레그에만 적용됩니다. - 이 모델의 입력 스키마가 선언하지 않은 최상위 요청 본문 필드를 수용하는 대신 거부하도록 선택합니다. 중첩 필드는 검사하지 않으며, 스키마가 선언되지 않은 필드를 허용하거나 작성된 스키마가 없는 모델에서는, 또는 `strict_mode=true`로 보낸 대기 중 제출에서는 아무것도 거부되지 않습니다. + 이 모델의 입력 스키마가 선언하지 않은 최상위 요청 본문 필드를 수락하는 대신 거부하도록 선택합니다. 중첩 필드는 확인하지 않습니다. 또한 스키마가 선언되지 않은 필드를 허용하거나 작성된 스키마가 없는 모델의 경우, 또는 `strict_mode=true`로 보낸 대기 중 제출에서는 아무것도 거부되지 않습니다. - 기본값: 거짓 + 기본값: False **요청 본문** -`application/json` -- [`RouterModelInput`](#routermodelinput) (필수) - -파트너 모델의 기본 JSON 입력입니다. `model_provider`가 없으면 요청은 모델의 기본 공급자에서 네이티브 디스패치로 실행되며, 이 본문은 모델 자체의 네이티브 스키마이고 그대로 전달됩니다(이 경우 `strict_mode`는 의미가 없으며 아무것도 바꾸지 않습니다). `model_provider`가 대체 공급자를 선택하고 `strict_mode=false`(기본값)이면, 본문은 전송되기 전에 해당 공급자의 실제 스키마로 변환됩니다. 정확히 표현할 수 없는 네이티브 필드는 버려지고 응답의 `X-Comfy-Router-Dropped-Params` 헤더를 통해 공개되며, 결코 조용히 처리되지 않습니다. `model_provider`가 대체 공급자를 선택하고 `strict_mode=true`이면 변환이 실행되지 않습니다. 본문은 이 모델의 네이티브 스키마가 아니라 이미 해당 대체 공급자 자체의 실제 스키마여야 하며(`strict_mode` 참조), 그대로 전달됩니다. 본문의 필드 자체가 하나 이상의 작업을 지원하는 모델에서 Router가 어떤 작업을 실행할지도 선택합니다. 편집 가능한 이미지 모델의 경우 입력 이미지를 포함하면 텍스트 기반 이미지 생성에서 이미지 기반 이미지 생성(편집) 작업으로 전환되며, 이 작업은 자체 요율로 과금될 수 있습니다. Seedance 비디오 모델의 경우 `content[].role`이 작업을 선택합니다(첫 프레임 이미지는 이미지 기반 비디오 생성을, 레퍼런스 이미지나 클립은 레퍼런스 기반 비디오 생성을 선택합니다). 네이티브 디스패치에서 Seedance 과금은 역할이 아니라 `content`의 미디어 종류를 따릅니다. 비디오 입력이 하나라도 있는 요청은 비디오 기반 비디오 생성으로 과금되고, 그렇지 않고 이미지가 하나라도 있으면 이미지 기반 비디오 생성으로, 그 외에는 텍스트 기반 비디오 생성으로 과금되며, 단 `draft_task` 항목에서 나온 최종 렌더는 그것이 렌더링하는 Draft의 작업으로 과금됩니다. 일부 모델은 텍스트 기반 비디오 생성과 이미지 기반 비디오 생성에 같은 요율을 부과합니다. `model_provider`가 대체 공급자를 선택하는 경우, 조건이 적용된 각 작업은 해당 공급자 자체의 요율로 과금될 수 있습니다. +`application/json`: [`RouterModelInput`](#routermodelinput) (필수) -**응답** +파트너 모델의 네이티브 JSON 입력입니다. `model_provider`가 없으면 요청은 모델의 기본 공급자에서 네이티브 디스패치를 실행하고 이 본문은 모델 자체의 네이티브 스키마이며 변경 없이 전달됩니다(`strict_mode`는 여기서 의미가 없으며 아무것도 변경하지 않습니다). `model_provider`가 대체 공급자를 선택하고 `strict_mode=false`(기본값)인 경우, 본문은 전송되기 전에 해당 공급자의 실제 스키마로 변환됩니다. 정확히 표현할 수 없는 네이티브 필드는 삭제되고 응답의 `X-Comfy-Router-Dropped-Params` 헤더를 통해 공개되며, 절대 조용히 처리되지 않습니다. `model_provider`가 대체 공급자를 선택하고 `strict_mode=true`인 경우 변환이 실행되지 않습니다. 본문은 이미 해당 대체 공급자 자체의 실제 스키마여야 하며, 이 모델의 네이티브 스키마가 아니어야 합니다(`strict_mode` 참조). 그리고 변경 없이 전달됩니다. 본문의 필드 자체도 Router가 둘 이상을 지원하는 모델에서 어떤 작업을 실행할지 선택합니다. 편집 가능한 이미지 모델의 경우, 입력 이미지를 포함하면 텍스트 기반 이미지 생성에서 이미지 기반 이미지 생성(편집) 작업으로 전환되며, 이 작업은 자체 요금으로 과금될 수 있습니다. Seedance 비디오 모델의 경우 `content[].role`이 작업을 선택합니다(첫 프레임 이미지는 이미지 기반 비디오 생성을 선택하고, 레퍼런스 이미지 또는 클립은 레퍼런스 기반 비디오 생성을 선택합니다). 네이티브 디스패치에서 Seedance 청구는 역할이 아니라 `content`의 미디어 종류를 따릅니다. 비디오 입력이 하나라도 있는 요청은 비디오 기반 비디오 생성으로 청구되고, 그렇지 않으면 이미지가 하나라도 있는 요청은 이미지 기반 비디오 생성으로, 그도 아니면 텍스트 기반 비디오 생성으로 청구됩니다. 단, `draft_task` 항목의 최종 렌더는 렌더링하는 Draft의 작업으로 청구됩니다. 일부 모델은 텍스트 기반 비디오 생성과 이미지 기반 비디오 생성에 동일한 요금을 부과합니다. `model_provider`가 대체 공급자를 선택하는 경우, 조건이 지정된 각 작업은 해당 공급자 자체의 요금으로 과금될 수 있습니다. - - OK: `model_provider`가 없거나, `model_provider`가 있으면서 `strict_mode=false`인 경우(기본값이며, 가능하면 이 모델의 네이티브 계약으로 다시 변환하고 변환 실패 시 대체 공급자 자체의 원시 응답으로 폴백합니다. 이는 기록되며 결코 조용히 처리되지 않습니다) 형태는 이 모델 자체의 네이티브 출력입니다. `strict_mode=true`이면 대체 공급자의 응답이 변경 없이 반환됩니다. 파트너가 생성을 바이트로 직접 응답하는 모델의 경우, 본문은 `application/json`이 아니라 파트너 자체의 `Content-Type` 아래에 있는 해당 바이트입니다. 응답 `Content-Type`을 기준으로 분기하고 JSON 문서라고 가정하지 마세요. +**응답** + OK: `model_provider` 없이, 또는 `model_provider`와 `strict_mode=false`(기본값)를 사용한 경우, 가능한 경우 이 모델의 네이티브 계약으로 다시 변환되며 변환 실패 시 대체 공급자 자체의 원시 응답으로 폴백합니다(로깅되며, 결코 조용히 처리되지 않습니다). 이때 형태는 이 모델 자체의 네이티브 출력입니다. `strict_mode=true`이면 대체 공급자의 응답이 변경 없이 반환됩니다. 파트너가 생성을 바이트로 직접 응답하는 모델의 경우, 본문은 `application/json`이 아니라 파트너 자체의 `Content-Type`에 따른 해당 바이트입니다. 응답 `Content-Type`을 기준으로 분기하고 JSON 문서라고 가정하지 마세요. - 본문: [`RouterModelOutput`](#routermodeloutput) 또는 원시 바이트(`*/*`). 헤더: `X-Comfy-Request-Id`, `X-Content-Type-Options`, `X-Comfy-Router-Fallback-Provider`, `X-Comfy-Router-Provider`, `X-Comfy-Router-Dropped-Params`, `X-Comfy-Credits-Used`, `Idempotent-Replayed`, `X-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining` + 본문: [`RouterModelOutput`](#routermodeloutput) 또는 원시 바이트 (`*/*`) / 헤더: `X-Comfy-Request-Id`, `X-Content-Type-Options`, `X-Comfy-Router-Fallback-Provider`, `X-Comfy-Router-Provider`, `X-Comfy-Router-Dropped-Params`, `X-Comfy-Credits-Used`, `Idempotent-Replayed`, `X-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining` 잘못된 요청입니다. 오류 유형과 요청 본문을 확인하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status`, `X-Comfy-Upstream-Detail`, `X-Comfy-Refusal-Subject`, `Idempotent-Replayed` + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status`, `X-Comfy-Upstream-Detail`, `X-Comfy-Refusal-Subject`, `Idempotent-Replayed` 자격 증명이 누락되었거나 유효하지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` Router 요청 수준의 실패입니다. 요청이 모델에 도달하지 않았거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 이 호출자 또는 모델에는 요청이 허용되지 않습니다. + 이 호출자 또는 모델에는 이 요청이 허용되지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 모델 ID를 찾을 수 없습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - `X-Comfy-Error-Type`을 확인하세요: `concurrency_limit_exceeded`는 원본 호출이 아직 실행 중이라는 뜻이므로 `Retry-After`를 기다린 뒤 동일한 키를 재사용하세요. `invalid_input`은 새 키가 필요합니다. 이 라우트의 두 가지 `invalid_input` 충돌은 키와 전혀 관련이 없으며 새 키로도 해결되지 않습니다: `model_provider`가 대체 공급자를 지정하는 경우, 요청 본문이 해당 공급자의 이 모델용 변환기가 처리할 수 없는 멀티파트 작업(편집)을 선택하면 거부되며, `detail`은 "this request's `image` selects the edit operation"로 시작합니다. 그리고 그 이후에 검사되는 경우로, 요청이 이미 경로에 있는 공급자의 BYOK 자격 증명을 확인한 경우에는 `detail`이 `this request resolved a BYOK credential`로 시작합니다. `model_provider`를 제거하거나, BYOK 자격 증명 없이 그리고 (멀티파트의 경우) 편집 없이 요청을 보내세요. + `X-Comfy-Error-Type`을 확인하세요: `concurrency_limit_exceeded`는 원본 호출이 아직 실행 중임을 의미하므로 `Retry-After`를 기다린 뒤 동일한 키를 재사용하세요. `invalid_input`은 새 키가 필요합니다. 이 라우트의 두 가지 `invalid_input` 충돌은 키와 전혀 관련이 없으며, 새 키로도 해결되지 않습니다. `model_provider`가 대체 공급자를 지정하는 경우, 요청 본문이 해당 공급자의 이 모델용 변환기가 처리할 수 없는 멀티파트 작업(편집)을 선택하면 거부되며, 그 `detail`은 "this request's `image` selects the edit operation"로 시작합니다. 그리고 그 이후에 확인되는 것으로, 요청이 경로에 있는 공급자에 대해 이미 BYOK(Bring-Your-Own-Key) 자격 증명을 확인한 경우에도 거부되며, 그 `detail`은 `this request resolved a BYOK credential`로 시작합니다. `model_provider`를 제거하거나, BYOK 자격 증명 없이 그리고 (멀티파트의 경우) 편집 없이 요청을 보내세요. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(`concurrency_limit_exceeded`인 경우) + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After` (`concurrency_limit_exceeded`일 때) 요청 본문이 너무 큽니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 요청 콘텐츠가 모델의 스키마에 대해 거부되었습니다. + 요청의 콘텐츠가 모델의 스키마에 대해 거부되었습니다. - 본문: [`RouterValidationErrorResponse`](#routervalidationerrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Idempotent-Replayed` + 본문: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Idempotent-Replayed` - `X-Comfy-Error-Type`을 확인하세요: `concurrency_limit_exceeded`는 진행 중인 호출을 줄이라는 뜻이고, `rate_limited`는 허용량 창을 기다리라는 뜻입니다. + `X-Comfy-Error-Type`을 확인하세요: `concurrency_limit_exceeded`는 진행 중인 호출을 줄여야 함을 의미하고, `rate_limited`는 허용량 창을 기다려야 함을 의미합니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining`, `X-Model-Concurrency-Limit`, `X-Model-Concurrency-Current`, `X-Model-Concurrency-Remaining` + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining`, `X-Model-Concurrency-Limit`, `X-Model-Concurrency-Current`, `X-Model-Concurrency-Remaining` - 공급자 자체의 응답을 결과로 변환할 수 없었습니다(`provider_error`). + 공급자 자체의 응답을 결과로 변환할 수 없습니다(`provider_error`). - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status` + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status` Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(용량 거부인 경우에만) + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After` (용량 거부 시에만) 요청이 기한을 초과했습니다. 재시도하기 전에 오류 유형을 확인하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status`, `Retry-After` + 본문: [`RouterErrorResponse`](#routererrorresponse) / 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status`, `Retry-After` ### `POST /v2/models/{provider}/{model}/estimate` -**실행하지 않고, 실행 전에 모델 호출의 가격을 산정합니다.** +**모델 호출을 실행하기 전에, 실행하지 않고 가격을 산정합니다.** -이 본문을 이 모델에서 실행하는 데 드는 비용을 미국 달러로 사전 추정하여 반환하며, 실제 실행 청구에 사용되는 것과 동일한 요율표를 기준으로 가격이 책정됩니다. 이는 추정치일 뿐 최종 청구 금액이 아닙니다. 실제로 지불하는 금액은 워크스페이스의 사용량 및 청구 기록에 정산된 금액입니다. 본문은 먼저 모델의 입력 스키마에 대해 검증되며, 이는 기본 실행(`strict_mode` 없음, `reject_unknown_fields` 없음)이 검증하는 방식과 같습니다. 따라서 모델 스키마를 통과하지 못하는 본문은 실행 시와 동일하게 여기서도 `422`가 됩니다. 공급자로 아무것도 전달되지 않으며 아무것도 청구되지 않습니다. 이 응답은 가격을 고정하는 것이 아닙니다. `pricing_as_of` 시점에 적용 중인 요율로 가격이 책정되며, 실행은 요율이 적용되는 시점에 유효한 요율로 청구됩니다. 이 기능이 순차 배포되는 동안 이 경로는 `error_type: not_enabled`와 함께 `403`을 응답합니다. +이 모델에서 이 본문을 실행하는 데 드는 비용을 미국 달러로 사전 추정하여 반환하며, 실행 시 청구 기준이 되는 것과 동일한 요율표에서 가격을 산정합니다(공급자가 보고한 비용으로 청구되는 모델은 대신 공급자의 공개 가격표에서 추정합니다). 이는 추정치이며 최종 청구 금액이 아닙니다. 실제로 지불하는 금액은 워크스페이스의 사용량 및 청구 기록에 정산된 금액입니다. 본문은 먼저 모델의 입력 스키마에 대해 검증되며, 기본 실행(`strict_mode` 없음, `reject_unknown_fields` 없음)이 검증하는 방식과 같습니다. 따라서 모델 스키마를 통과하지 못하는 본문은 실행 시와 동일하게 여기서도 `422`입니다. 공급자에게 아무것도 전달되지 않으며 비용도 청구되지 않습니다. 이 응답은 가격 고정이 아닙니다. `pricing_as_of` 시점에 적용 중인 요율로 산정되며, 실행은 요율이 산정되는 시점에 유효한 요율로 청구됩니다. 기능이 순차 배포되는 동안 이 라우트는 `error_type: not_enabled`와 함께 `403`을 응답합니다. **파라미터** - 정식 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트로, 실행 대상 모델을 제공하는 파트너입니다. + 정식 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트로, 모델이 실행되는 파트너입니다. 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 @@ -324,14 +323,14 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 - 현재 기본값 대신 이 모델을 제공할 대체 공급자를 선택합니다. + 현재 기본 공급자 대신 이 모델을 제공할 대체 공급자를 선택합니다. **요청 본문** `application/json` -- [`RouterModelInput`](#routermodelinput) (필수) -파트너 모델의 네이티브 JSON 입력으로, 동기 경로가 이 모델에 대해 받아들이는 본문과 동일합니다. 기본 실행이 검증하는 방식대로 모델 자체의 입력 스키마에 대해 검증되며(이 경로는 `strict_mode`나 `reject_unknown_fields`를 받지 않습니다), 자체 필드(출력 개수, 입력 이미지가 선택하는 작업)가 무엇의 가격을 책정할지 결정합니다. +파트너 모델의 네이티브 JSON 입력으로, 이 모델에 대해 동기 라우트가 받는 본문과 동일합니다. 기본 실행이 검증하는 방식과 동일하게 모델 자체의 입력 스키마에 대해 검증되며(이 라우트는 `strict_mode`나 `reject_unknown_fields`를 받지 않습니다), 본문 자체의 필드(출력 개수, 입력 이미지가 선택하는 작업)가 가격 산정 대상을 결정합니다. **응답** @@ -354,7 +353,7 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 - 이 호출자 또는 모델에 대해 요청이 허용되지 않습니다. + 이 호출자 또는 모델에 대해 허용되지 않는 요청입니다. 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` @@ -380,43 +379,43 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After` (용량 거부 시에만) + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(용량 거부 시에만) ### `GET /v2/models/{provider}/{model}/openapi.json` **파트너 모델 하나의 입력 및 출력 스키마를 OpenAPI 문서로 읽습니다.** -모델 하나의 입력 및 출력 스키마를 독립형 OpenAPI 문서로 읽습니다. +모델 하나의 입력 및 출력 스키마를 독립된 OpenAPI 문서로 읽습니다. **파라미터** - 정규 `{provider}/{model}` 모델 ID의 공급자 부분입니다. + 정식 `{provider}/{model}` 모델 ID의 공급자 부분입니다. - 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그(예: `anthropic`), 최대 64자 + 유형: [`RouterProviderSegment`](#routerprovidersegment). 영숫자 슬러그(예: `anthropic`), 최대 64자 - 정규 `{provider}/{model}` 모델 ID의 모델 부분입니다. + 정식 `{provider}/{model}` 모델 ID의 모델 부분입니다. - 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그(예: `claude-opus-4-6`), 최대 128자 + 유형: [`RouterModelSegment`](#routermodelsegment). 영숫자 슬러그(예: `claude-opus-4-6`), 최대 128자 - 호출자가 이전 `200` 응답에서 보유한 `ETag`입니다. + 호출자가 이전 `200` 응답에서 보관한 `ETag`입니다. **응답** - OK - 모델의 입력 및 출력 스키마를 독립형 OpenAPI 문서로 제공합니다. + OK. 모델의 입력 및 출력 스키마를 독립된 OpenAPI 문서로 반환합니다. - 본문: [`RouterModelInputSchemaDocument`](#routermodelinputschemadocument) -- 헤더: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` + 본문: [`RouterModelInputSchemaDocument`](#routermodelinputschemadocument). 헤더: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` - Not Modified - 호출자가 `If-None-Match`로 보낸 `ETag` 이후 문서가 변경되지 않았습니다. + Not Modified. 호출자가 `If-None-Match`로 보낸 `ETag` 이후 문서가 변경되지 않았습니다. 헤더: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` @@ -424,139 +423,139 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 자격 증명이 누락되었거나 유효하지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 이 호출자 또는 모델에 대해서는 요청이 허용되지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 모델 ID를 찾을 수 없습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` Router가 요청을 완료할 수 없습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하십시오. + Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` ### `POST /v2/models/{provider}/{model}/requests` **파트너 모델 실행을 실행 대기열에 제출하고 즉시 반환합니다.** -Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/models/{provider}/{model}`이 이 모델에 대해 받아들이는 것과 동일한 파트너 네이티브 JSON 입력입니다. 즉, 하나의 본문 형태, 모델별 스키마 하나, 두 가지 전달 모드를 가지지만, 이 경로는 결과를 위해 연결을 유지하지 않습니다. 실행을 접수하고 핸들과 함께 `201`로 응답하며, 호출자는 아래 세 가지 조회를 통해 나중에 결과를 수집합니다. +Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/models/{provider}/{model}`이 이 모델에 대해 받아들이는 것과 동일한 파트너 네이티브 JSON 입력입니다. 하나의 본문 형태, 모델별 스키마 하나, 두 가지 전달 모드가 있습니다. 다만 이 라우트는 결과를 위해 연결을 유지하지 않습니다. 실행을 접수하고 핸들과 함께 `201`로 응답하며, 호출자는 아래 세 가지 조회를 통해 나중에 결과를 수집합니다. **파라미터** - 정규 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트로, 모델을 실행하는 파트너입니다. + 정규 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트로, 실행할 모델의 파트너입니다. - 유형: [`RouterProviderSegment`](#routerprovidersegment), 영숫자 슬러그(예: `anthropic`), 최대 64자 + 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트로, 해당 공급자 내에서 실행할 모델입니다. - 유형: [`RouterModelSegment`](#routermodelsegment), 영숫자 슬러그(예: `claude-opus-4-6`), 최대 128자 + 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 - 현재 기본값 대신 이 모델을 서비스할 대체 공급자를 선택합니다. + 이 모델을 서비스할 대체 공급자를 현재 기본값 대신 선택합니다. `model_provider`와 함께 사용할 때만 의미가 있습니다. - 기본값: 거짓 + 기본값: False 하나의 논리적 호출을 재시도해도 안전하게 만드는 호출자 생성 키입니다. - 1~255자 + 1–255자 - 이 모델의 입력 스키마에 선언되지 않은 최상위 요청 본문 필드를 허용하는 대신 거부하도록 선택합니다. 중첩 필드는 검사하지 않으며, 선언되지 않은 필드를 허용하는 스키마를 가졌거나 작성된 스키마가 없는 모델의 경우, 또는 `strict_mode=true`로 전송된 대기열 제출에서는 아무것도 거부하지 않습니다. + 이 모델의 입력 스키마가 선언하지 않은 최상위 요청 본문 필드를 허용하는 대신 거부하도록 선택합니다. 중첩 필드는 검사하지 않으며, 선언되지 않은 필드를 허용하는 스키마를 가진 모델이나 작성된 스키마가 없는 모델의 경우, 또는 `strict_mode=true`로 보낸 대기열 제출에서는 아무것도 거부되지 않습니다. - 기본값: 거짓 + 기본값: False **요청 본문** -`application/json`, [`RouterModelInput`](#routermodelinput) (필수) +`application/json` -- [`RouterModelInput`](#routermodelinput) (필수) -파트너 모델의 네이티브 JSON 입력으로, 동기 경로가 이 모델에 대해 받아들이는 본문과 동일하며, 수행할 작업을 선택하고 같은 방식으로 과금됩니다. 본문 자체의 필드가 둘 이상의 작업을 지원하는 모델에서 Router가 실행할 작업을 선택합니다(입력 이미지는 편집 가능한 이미지 모델을 이미지 기반 이미지 생성으로 전환하며, 이는 자체 요율로 과금될 수 있습니다. Seedance의 첫 프레임 이미지는 이미지 기반 비디오 생성을 선택하고, 레퍼런스 이미지나 클립은 레퍼런스 기반 비디오 생성을 선택합니다). 네이티브 디스패치에서 Seedance 요청은 역할이 아니라 `content`의 미디어 종류에 따라 과금됩니다. 비디오 입력이 있으면 비디오 기반 비디오 생성으로, 그렇지 않고 이미지가 있으면 이미지 기반 비디오 생성으로, 그 외에는 텍스트 기반 비디오 생성으로 과금됩니다. 단, `draft_task` 항목의 최종 렌더는 그것이 렌더링하는 Draft의 작업으로 과금되며, 일부 모델은 텍스트 기반 비디오 생성과 이미지 기반 비디오 생성에 같은 요율을 부과합니다. `model_provider`로 대체 공급자를 선택하면 조건화된 각 작업은 해당 공급자의 자체 요율로 과금될 수 있습니다. 동일한 공급자 선택 규약이 디스패치 시 적용됩니다. `model_provider`가 없거나, `model_provider`와 함께 `strict_mode=false`(기본값)인 경우 본문은 모델의 네이티브 문서이며 실행이 접수되기 전에 모델 자체의 입력 스키마에 대해 검증됩니다. 따라서 모델이 거부할 본문은 몇 분 후에 실패하는 대기 중 요청이 아니라 여기에서 `422`가 됩니다. 비엄격 대체 공급자 본문은 디스패치 시 해당 공급자의 실제 스키마로 추가 변환됩니다. `strict_mode=true`인 경우 본문은 이미 대체 공급자 자체의 스키마여야 하며 변경 없이 전달됩니다. 네이티브 스키마 검증은 동기 경로에서와 정확히 마찬가지로 건너뜁니다(`model_provider`와 `strict_mode` 참조). +파트너 모델의 네이티브 JSON 입력으로, 동기 라우트가 이 모델에 대해 받아들이는 본문과 동일하며, 작업을 선택하고 같은 방식으로 과금됩니다. 본문 자체의 필드가 둘 이상을 지원하는 모델에서 Router가 실행할 작업을 선택합니다(입력 이미지는 편집 가능한 이미지 모델을 이미지 기반 이미지 생성으로 전환하며, 이는 자체 요율로 과금될 수 있습니다. Seedance 첫 프레임 이미지는 이미지 기반 비디오 생성을 선택하고, 레퍼런스 이미지나 클립은 레퍼런스 기반 비디오 생성을 선택합니다). 네이티브 디스패치에서 Seedance 요청은 역할이 아니라 `content`의 미디어 종류에 따라 과금됩니다. 비디오 입력이 있으면 비디오 기반 비디오 생성으로, 그렇지 않고 이미지가 있으면 이미지 기반 비디오 생성으로, 그 외에는 텍스트 기반 비디오 생성으로 과금됩니다. 다만 `draft_task` 항목의 최종 렌더는 그것이 렌더링하는 Draft의 작업으로 과금되며, 일부 모델은 텍스트 기반 비디오 생성과 이미지 기반 비디오 생성에 동일한 요율을 부과합니다. `model_provider`로 대체 공급자를 선택하면 조건이 적용된 각 작업은 해당 공급자의 자체 요율로 과금될 수 있습니다. 동일한 공급자 선택 계약이 디스패치 시에도 적용됩니다. `model_provider`가 없거나, `model_provider`와 `strict_mode=false`(기본값)가 함께 있는 경우 본문은 모델의 네이티브 문서이며 실행이 접수되기 전에 모델 자체의 입력 스키마에 대해 검증됩니다. 따라서 모델이 거부할 본문은 몇 분 후 실패하는 대기 중 요청이 아니라 여기서 `422`가 됩니다. 비엄격 대체 공급자 본문은 디스패치 시 해당 공급자의 실제 스키마로 추가 변환됩니다. `strict_mode=true`인 경우 본문은 이미 대체 공급자 자체의 스키마여야 하며 변경 없이 전달됩니다. 네이티브 스키마 검증은 동기 라우트에서와 정확히 마찬가지로 건너뜁니다(`model_provider` 및 `strict_mode` 참조). **응답** - 생성됨, 실행이 실행 대기열에 접수되었습니다. + 생성됨 - 실행이 실행 대기열에 접수되었습니다. - 본문: [`RouterQueueSubmitResponse`](#routerqueuesubmitresponse), 헤더: `X-Comfy-Request-Id`, `Idempotent-Replayed` + 본문: [`RouterQueueSubmitResponse`](#routerqueuesubmitresponse) -- 헤더: `X-Comfy-Request-Id`, `Idempotent-Replayed` 자격 증명이 누락되었거나 유효하지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse), 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 잘못된 요청입니다. 오류 유형과 요청 본문을 확인하세요. + 유효하지 않은 요청입니다. 오류 유형과 요청 본문을 확인하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse), 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 요청 본문이 너무 큽니다. - 본문: [`RouterErrorResponse`](#routererrorresponse), 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` Router 요청 수준의 실패입니다. 요청이 모델에 도달하지 않았거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse), 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 이 호출자 또는 모델에 대해 요청이 허용되지 않습니다. 파트너가 생성을 바이트로 직접 응답하는 모델은 아직 대기열에 넣을 수 없으며 `not_enabled`로 거부됩니다. 대신 동기 경로에서 실행하세요. + 이 호출자 또는 모델에 대해 요청이 허용되지 않습니다. 파트너가 생성 결과를 바이트로 직접 응답하는 모델은 아직 실행 대기열에 넣을 수 없으며 `not_enabled`로 거부됩니다. 대신 동기 라우트에서 실행하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse), 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 모델 ID를 찾을 수 없습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse), 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` -`X-Comfy-Error-Type`을 확인합니다: `concurrency_limit_exceeded`는 원본 호출이 아직 실행 중이라는 뜻이므로 `Retry-After`만큼 기다린 뒤 동일한 키를 재사용합니다. `invalid_input`은 새 키가 필요합니다. 이 라우트에서 발생하는 두 가지 `invalid_input` 충돌은 키와 전혀 무관하며 어떤 새 키로도 해결되지 않습니다: `model_provider`가 대체 공급자를 지정하는 경우, 요청 본문이 해당 공급자의 이 모델용 변환기가 처리할 수 없는 멀티파트 작업(편집)을 선택하면 거부되며, 이때 `detail`은 "this request's `image` selects the edit operation"으로 시작합니다. 그리고 그 이후에 검사되는 조건으로, 요청이 경로에 있는 공급자에 대한 BYOK(bring-your-own-key) 자격 증명을 이미 확인한 경우에도 거부되며, 이때 `detail`은 `this request resolved a BYOK credential`로 시작합니다. `model_provider`를 제거하거나, BYOK 자격 증명 없이 그리고 (멀티파트의 경우) 편집 없이 요청을 보내세요. + `X-Comfy-Error-Type`을 확인하세요: `concurrency_limit_exceeded`는 원본 호출이 아직 실행 중이라는 뜻이므로 `Retry-After`만큼 기다린 뒤 같은 키를 재사용하세요. `invalid_input`은 새 키가 필요합니다. 이 라우트에서 발생하는 두 가지 `invalid_input` 충돌은 키와 전혀 무관하며 새 키로도 어느 쪽도 해결되지 않습니다. `model_provider`로 대체 공급자를 지정한 요청은, 요청 본문이 해당 공급자의 이 모델용 변환기가 처리할 수 없는 multipart 작업(편집)을 선택하면 거부되며 `detail`은 "this request's `image` selects the edit operation"으로 시작합니다. 그리고 그 이후에 검사되는 경우로, 요청이 경로에 있는 공급자에 대해 이미 BYOK(bring-your-own-key) 자격 증명을 확인한 경우에는 `detail`이 `this request resolved a BYOK credential`로 시작합니다. `model_provider`를 빼거나, BYOK 자격 증명 없이(multipart의 경우에는 편집 없이) 요청을 보내세요. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After` (`concurrency_limit_exceeded`일 때) + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After` (`concurrency_limit_exceeded`인 경우) - 요청 내용이 모델의 스키마에 대해 거부되었습니다. + 요청 내용이 모델의 스키마에 맞지 않아 거부되었습니다. 본문: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Idempotent-Replayed` - `X-Comfy-Error-Type`을 확인하세요. `queue_backlog_full`은 이미 허용된 만큼의 미완료 대기 요청을 보유하고 있다는 뜻이므로, 그중 하나가 완료된 뒤 다시 제출하세요. `rate_limited`는 허용량 윈도우를 기다리라는 뜻입니다. + `X-Comfy-Error-Type`을 확인하세요: `queue_backlog_full`은 허용된 만큼의 미완료 대기 중 요청을 이미 보유하고 있다는 뜻이므로 그중 하나가 끝나면 다시 제출하세요. `rate_limited`는 허용 창을 기다리라는 뜻입니다. 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` @@ -564,45 +563,45 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After` (용량 거부 시에만) + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(용량 거부 시에만) ### `GET /v2/models/{provider}/{model}/requests/{request_id}` **제출된 요청 하나의 결과를 수집합니다.** -수집 엔드포인트입니다. 성공적으로 완료된 요청에 대해 파트너 모델 자체의 네이티브 출력을 반환하며, 이는 같은 모델과 같은 입력에 대해 동기 라우트의 `200`이 담는 내용과 바이트 단위로 동일합니다. 따라서 두 전달 방식은 하나의 결과 형태를 만들어 내고, 호출자는 별도의 파서 없이 두 방식 사이를 오갈 수 있습니다. +수집 엔드포인트입니다. 성공적으로 완료된 요청에 대해서는 파트너 모델 자체의 네이티브 출력을 반환합니다. 동일한 모델과 동일한 입력에 대해 동기 라우트의 `200`이 담는 것과 바이트 단위로 동일합니다. 따라서 두 전달 방식은 하나의 결과 형태를 만들어 내며, 호출자는 두 번째 파서 없이 두 방식 사이를 오갈 수 있습니다. **파라미터** - 정규 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트입니다. 실행 대상 모델을 보유한 파트너입니다. + 정식 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트입니다. 모델이 실행되는 파트너입니다. - 타입: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 + 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 - 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트입니다. 해당 공급자 안에서 실행할 모델입니다. + 정식 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트입니다. 해당 공급자 안에서 실행할 모델입니다. - 타입: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 + 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 - 대상으로 지정할 대기 중 요청입니다. 제출이 본문에서 반환한 `request_id`입니다. + 대상으로 지정할 대기 중 요청입니다. 제출 시 본문에서 반환된 `request_id`입니다. - 타입: [`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`, uuid, 최대 36자 + 유형: [`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`, uuid, 최대 36자 **응답** - OK. 결과를 만들어 낸 요청, 즉 성공적으로 완료된 요청이거나 기록된 과금과 저장된 결과를 모두 가진 터미널 요청에 대해 저장된 결과를 파트너 자체의 미디어 타입으로 변경 없이 반환합니다. 동기 라우트의 `200`이 반환하는 것과 정확히 같으며, 제출이 수락한 것과 동일한 공급자 선택 계약을 따릅니다. `model_provider`가 없거나, `model_provider`와 함께 `strict_mode=false`(기본값, 가능한 경우 이 모델의 네이티브 계약으로 다시 변환되며, 변환에 실패하면 대체 공급자의 원시 응답으로 폴백하고 이는 기록되며 결코 조용히 넘어가지 않습니다)인 경우 형태는 이 모델 자체의 네이티브 출력입니다. `strict_mode=true`인 경우에는 대체 공급자의 응답이 변경 없이 반환됩니다. 파트너가 생성을 바이트로 직접 응답하는 모델의 경우, 본문은 `application/json`이 아니라 파트너 자체의 `Content-Type` 아래의 해당 바이트입니다. 응답의 `Content-Type`을 기준으로 분기하고 JSON 문서라고 가정하지 마세요. + OK: 결과를 생성한 요청, 즉 성공적으로 완료된 요청이나 기록된 과금과 저장된 결과를 모두 가진 터미널 요청에 대해 저장된 결과를 파트너 자체의 미디어 타입으로 변경 없이 반환합니다. 동기 라우트의 `200`이 반환하는 것과 정확히 같으며, 제출이 수용한 것과 동일한 공급자 선택 계약을 따릅니다. `model_provider` 없이, 또는 `model_provider`와 함께 `strict_mode=false`(기본값, 가능한 경우 이 모델의 네이티브 계약으로 다시 변환되며, 변환에 실패하면 대체 공급자의 원시 응답으로 폴백하는데 이는 로깅되며 결코 조용히 넘어가지 않습니다)로 요청한 경우 형태는 이 모델 자체의 네이티브 출력입니다. `strict_mode=true`인 경우에는 대체 공급자의 응답이 변경 없이 반환됩니다. 파트너가 생성을 바이트로 직접 응답하는 모델의 경우, 본문은 `application/json`이 아니라 파트너 자체의 `Content-Type` 아래에 있는 해당 바이트입니다. 응답 `Content-Type`을 기준으로 분기하고 JSON 문서라고 가정하지 마십시오. 본문: [`RouterModelOutput`](#routermodeloutput) 또는 원시 바이트 (`*/*`) -- 헤더: `X-Comfy-Request-Id`, `X-Content-Type-Options`, `X-Comfy-Credits-Used` - Accepted. 요청이 아직 완료되지 않았습니다. + 수락됨: 요청이 아직 완료되지 않았습니다. 본문: [`RouterQueueStatusResponse`](#routerqueuestatusresponse) -- 헤더: `X-Comfy-Request-Id`, `Retry-After` @@ -632,24 +631,23 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod - Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. + Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하십시오. 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 요청이 해당 작업과 충돌하는 상태에 있습니다. 오류 타입을 확인하세요. + 요청이 해당 작업과 충돌하는 상태에 있습니다. 오류 유형을 확인하십시오. 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 요청이 기한을 초과했습니다. 재시도하기 전에 오류 타입을 확인하세요. + 요청이 기한을 초과했습니다. 재시도하기 전에 오류 유형을 확인하십시오. 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router 요청 수준의 실패입니다. 요청이 모델에 도달하지 않았거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. @@ -658,102 +656,102 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod ### `PUT /v2/models/{provider}/{model}/requests/{request_id}/cancel` -**제출된 요청 하나의 취소를 요청합니다.** +**제출된 요청 하나에 대한 취소를 요청합니다.** -완료되지 않은 요청을 중지해 달라고 Comfy에 요청합니다. 이는 요청일 뿐 보장이 아니며, `202`는 바로 그 점을 말합니다. `CANCELLATION_REQUESTED`는 요청이 접수되었다는 뜻이지 실행이 중단되었다는 뜻이 아닙니다. 파트너에서 이미 진행 중인 실행은 어쨌든 완료될 수 있으며, 완료된 파트너 생성은 누군가 결과를 수집했는지와 무관하게 과금됩니다. 따라서 실제로 무슨 일이 일어났는지 알아야 하는 호출자는 나중에 상태 엔드포인트를 조회해야 하며, 이때 적용된 취소는 다른 모든 터미널 결과와 마찬가지로 `error_type`을 함께 담은 `COMPLETED`로 표시됩니다. +완료되지 않은 요청을 중지하도록 Comfy에 요청합니다. 이는 보장이 아니라 요청이며, `202`는 바로 그 점을 나타냅니다. `CANCELLATION_REQUESTED`는 요청이 접수되었다는 뜻이지 실행이 중지되었다는 뜻은 아닙니다. 이미 파트너에게 전송된 실행은 그대로 완료될 수 있으며, 완료된 파트너 생성은 누군가 결과를 수집했는지와 무관하게 과금됩니다. 따라서 실제로 어떤 일이 일어났는지 알아야 하는 호출자는 이후 상태 엔드포인트를 조회해야 하며, 여기서 실제로 적용된 취소는 다른 모든 터미널 결과와 마찬가지로 `error_type`을 포함한 `COMPLETED`로 표시됩니다. **파라미터** - 정식 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트입니다. 모델이 실행되는 파트너입니다. + 정규 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트로, 모델이 실행되는 대상 파트너입니다. - 유형: [`RouterProviderSegment`](#routerprovidersegment): 영숫자 슬러그(예: `anthropic`), 최대 64자 + 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 - 정식 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트입니다. 해당 공급자 내에서 실행할 모델입니다. + 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트로, 해당 공급자 내에서 실행할 모델입니다. - 유형: [`RouterModelSegment`](#routermodelsegment): 영숫자 슬러그(예: `claude-opus-4-6`), 최대 128자 + 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 - 처리할 대기 중 요청입니다. 제출 시 본문에서 반환된 `request_id`입니다. + 대상으로 지정할 대기 중인 요청으로, 제출 시 본문에서 반환된 `request_id`입니다. - 유형: [`RouterQueueRequestId`](#routerqueuerequestid): `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`, uuid, 최대 36자 + 유형: [`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`, uuid, 최대 36자 **응답** - 수락됨: `CANCELLATION_REQUESTED`. + 수락됨 - `CANCELLATION_REQUESTED`. - 본문: [`RouterQueueCancelResponse`](#routerqueuecancelresponse). 헤더: `X-Comfy-Request-Id` + 본문: [`RouterQueueCancelResponse`](#routerqueuecancelresponse) -- 헤더: `X-Comfy-Request-Id` - 충돌: `ALREADY_COMPLETED`. + 충돌 - `ALREADY_COMPLETED`. - 본문: [`RouterQueueCancelResponse`](#routerqueuecancelresponse). 헤더: `X-Comfy-Request-Id` + 본문: [`RouterQueueCancelResponse`](#routerqueuecancelresponse) -- 헤더: `X-Comfy-Request-Id` 잘못된 요청입니다. 오류 유형과 요청 본문을 확인하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 자격 증명이 누락되었거나 유효하지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 이 호출자 또는 모델에는 이 요청이 허용되지 않습니다. + 이 호출자 또는 모델에 대해 허용되지 않은 요청입니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 모델 ID를 찾을 수 없습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. + Router를 일시적으로 사용할 수 없습니다. 백오프를 적용해 재시도하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router 요청 수준의 실패입니다. 요청이 모델에 도달하지 않았거나 모델 자체가 보고하지 않은 이유로 실패했습니다. + Router 요청 수준의 실패로, 요청이 모델에 도달하지 못했거나 모델 자체가 보고하지 않은 이유로 실패한 경우입니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` ### `GET /v2/models/{provider}/{model}/requests/{request_id}/status` **제출된 요청 하나의 실행 대기열 상태를 조회합니다.** -폴링 엔드포인트입니다. 요청의 현재 상태만 응답하며 결과는 절대 담지 않으므로, 클라이언트는 매 폴링마다 출력을 전송받지 않고도 오래 걸리는 생성을 지켜볼 수 있습니다. 결과는 이 응답이 `COMPLETED`일 때 아래의 조회 엔드포인트에서 한 번만 수집합니다. +폴링 엔드포인트입니다. 요청의 현재 상태만 응답하고 결과는 절대 함께 반환하지 않으므로, 클라이언트는 매 폴링마다 출력을 전송받지 않고도 긴 생성 작업을 지켜볼 수 있습니다. 결과는 이 응답이 `COMPLETED`를 반환할 때 아래의 조회를 통해 한 번만 수집합니다. **파라미터** - 정규 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트로, 모델을 실행하는 파트너입니다. + 정식 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트입니다. 실행할 모델을 보유한 파트너입니다. - 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 + 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그(예: `anthropic`), 최대 64자 - 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트로, 해당 공급자 안에서 실행할 모델입니다. + 정식 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트입니다. 해당 공급자 내에서 실행할 모델입니다. - 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 + 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그(예: `claude-opus-4-6`), 최대 128자 - 대상으로 지정할 대기 중인 요청으로, 제출 시 응답 본문에서 반환된 `request_id`입니다. + 대상으로 지정할 대기 중 요청입니다. 제출 시 응답 본문에서 반환된 `request_id`입니다. 유형: [`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`, uuid, 최대 36자 @@ -763,46 +761,46 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod OK - 요청의 현재 실행 대기열 상태입니다. - 본문: [`RouterQueueStatusResponse`](#routerqueuestatusresponse). 헤더: `X-Comfy-Request-Id`, `Retry-After`, `X-Comfy-Estimated-Duration-Seconds`, `X-Comfy-Estimated-Duration-P90-Seconds`, `X-Comfy-Estimate-Source` + 본문: [`RouterQueueStatusResponse`](#routerqueuestatusresponse) -- 헤더: `X-Comfy-Request-Id`, `Retry-After`, `X-Comfy-Estimated-Duration-Seconds`, `X-Comfy-Estimated-Duration-P90-Seconds`, `X-Comfy-Estimate-Source` 자격 증명이 누락되었거나 유효하지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 이 호출자 또는 모델에 대해서는 요청이 허용되지 않습니다. + 이 호출자 또는 모델에 대해 해당 요청이 허용되지 않습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 모델 ID를 찾을 수 없습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router 요청 수준의 실패입니다. 요청이 모델에 도달하지 못했거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. + Router 요청 수준의 실패입니다. 요청이 모델에 도달하지 않았거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하십시오. + Router를 일시적으로 사용할 수 없습니다. 백오프를 적용해 재시도하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router 요청 수준의 실패입니다. 요청이 모델에 도달하지 못했거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. + Router 요청 수준의 실패입니다. 요청이 모델에 도달하지 않았거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. - 본문: [`RouterErrorResponse`](#routererrorresponse). 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` -여기의 설명은 간략합니다. 모델 선택, 검증, 재시도, 과금에 대해서는 [Comfy Router API 사용하기](/ko/development/comfy-router/api)를, 헤더 동작에 대해서는 [헤더](/ko/development/comfy-router/headers)를 참고하십시오. +여기의 설명은 간략합니다. 모델 선택, 검증, 재시도, 과금은 [Comfy Router API 사용하기](/ko/development/comfy-router/api)를, 헤더 동작은 [헤더](/ko/development/comfy-router/headers)를 참고하세요. ## 오류 버킷 @@ -969,7 +967,7 @@ Router가 요청을 접수한 뒤 완료하지 못한 경우 발생합니다. ## 실행 전 비용 추정 -`POST /v2/models/{provider}/{model}/estimate`는 본문을 실행하지 않고 가격을 산정하며, 대기 중 제출(`POST /v2/models/{provider}/{model}/requests`)은 `201` 응답에서 `estimate`와 동일한 [`RouterCostEstimate`](#routercostestimate)를 반환합니다. 둘 다 Comfy가 해당 실행에 청구하는 요율 카드를 기준으로 가격이 산정됩니다. 어느 쪽이 반환하든 모든 수치는 추정치이며 최종 청구액이 아닙니다. 워크스페이스의 사용량 및 청구 기록에 있는 확정 청구액이 최종입니다. 자체 공급자 키로 실행한 경우에는 Comfy가 청구하지 않습니다(아래 참조). 추정 기능이 점진적으로 배포되는 동안에는 이 경로가 `error_type: not_enabled`와 함께 `403`을 응답하고, 제출 응답에서는 `estimate`가 생략됩니다. 카탈로그에는 여전히 가격이 없습니다. +`POST /v2/models/{provider}/{model}/estimate`는 본문을 실행하지 않고 가격을 산정하며, 대기 중 제출(`POST /v2/models/{provider}/{model}/requests`)은 `201` 응답에서 `estimate`와 동일한 [`RouterCostEstimate`](#routercostestimate)를 반환합니다. 둘 다 Comfy가 해당 실행에 청구하는 요율 카드를 기준으로 가격이 산정되며, 단 공급자가 보고한 비용으로 청구되는 모델은 예외로, 이 경우 공급자가 공개한 가격표를 기준으로 `estimated`로 산정됩니다. 어느 쪽이 반환하든 모든 수치는 추정치이며 최종 청구액이 아닙니다. 워크스페이스의 사용량 및 청구 기록에 있는 확정 청구액이 최종입니다. 자체 공급자 키로 실행한 경우에는 Comfy가 청구하지 않습니다(아래 참조). 추정 기능이 점진적으로 배포되는 동안에는 이 경로가 `error_type: not_enabled`와 함께 `403`을 응답하고, 제출 응답에서는 `estimate`가 생략됩니다. 카탈로그에는 여전히 가격이 없습니다. 어떤 금액보다도 `source`를 먼저 확인하세요. 수치가 누락되었다고 해서 무료라는 뜻은 결코 아닙니다. @@ -997,7 +995,7 @@ Router가 실행 전에 아직 가격을 산정할 수 없는 모델은 [실행 추정의 한계. `200` 수치가 실행이 수락된다거나 정확히 그 금액이 청구된다는 약속은 아닙니다. - `/estimate`는 `strict_mode`나 `reject_unknown_fields`를 받지 않으므로 모델의 네이티브 계약만 검사합니다. `strict_mode=true` 실행이 대체 공급자 자체 스키마에서 수락하는 본문이 여기서는 `422`를 받을 수 있고, `reject_unknown_fields=true` 실행이라면 거부했을 선언되지 않은 최상위 필드도 여기서는 가격이 산정됩니다. -- `pricing_as_of`는 요율 카드를 가져온 시점입니다(카드를 읽지 않은 경우에는 추정이 응답된 시점). 이는 가격 고정이 아닙니다. 실행은 요율이 적용되는 시점에 유효한 요율로 청구됩니다. +- `pricing_as_of`는 요율 카드를 가져온 시점이며, 공급자가 공개한 가격표에서 가져온 `estimated` 견적의 경우에는 해당 가격표를 읽은 날짜입니다(둘 다 읽지 않은 경우에는 추정이 응답된 시점). 이는 가격 고정이 아닙니다. 실행은 요율이 적용되는 시점에 유효한 요율로 청구됩니다. - `/estimate`는 `model_provider`가 지정한 레그, 또는 네이티브 공급자의 가격을 제시합니다. `fallback_provider`나 `strict_mode` 매개변수는 받지 않습니다. 폴백 재시도가 다른 공급자로 넘어간 동기 실행은 그 공급자의 요율로 청구되며, 추정은 이를 제시하지 않았습니다. 실행 응답의 `X-Comfy-Router-Fallback-Provider`가 그런 일이 있었음을 알려줍니다. 대기 중 제출에는 폴백이 없으므로 그 `estimate`는 실제로 실행되는 레그의 가격을 제시합니다. - `/estimate`와 대기 중 제출의 `estimate`는 `model_provider` 레그에서 동일한 본문에 대해, 또는 형제 작업에서 실행되는 본문에 대해 약간 다른 문서의 가격을 산정할 수 있습니다. 제출의 `estimate`는 실행이 전송하는 문서를 기준으로 가격이 산정됩니다. - `/estimate`는 항상 플랫폼 요금을 제시합니다. 자체 공급자 키로 실행한 경우 Comfy는 청구하지 않지만, `/estimate`는 이를 감지하지 못하고 여전히 수치를 반환합니다. `reason: byok`를 응답하는 것은 대기 중 제출뿐입니다. @@ -1035,13 +1033,14 @@ Router가 실행 전에 아직 가격을 산정할 수 없는 모델은 [실행 ## 스키마 ### RouterChargesOnPolicyRejection -이 모델에 대해 콘텐츠 정책 거부가 청구되는지 여부입니다. 알 수 없는 값은 청구될 수 있는 것으로 간주하세요. + +이 모델에 대해 콘텐츠 정책 거부가 청구되는지 여부입니다. 알 수 없는 값은 청구될 가능성이 있는 것으로 간주하세요. 유형: `string` ### RouterCostEstimate -이 호출에 드는 비용을 디스패치 이전에, 실행 시 과금되는 것과 동일한 요율표를 기준으로 산정한 사전 견적이며 미국 달러로 표시됩니다. 최종 청구 금액은 아닙니다. 실제로 지불하는 금액은 워크스페이스의 사용량 및 청구 기록에 있는 정산 금액입니다. 실행 이후에 보고되는 `X-Comfy-Credits-Used`는 반올림된 사후 수치이며 영수증이 아닙니다. `source`는 이 숫자를 얼마나 신뢰할 수 있는지 나타냅니다: `exact`는 `amount`를 포함하고, `estimated`는 `min_amount`와 `max_amount`를 포함하며 `amount`는 없고, `unknown`은 둘 다 없이 `reason`을 포함합니다. 누락된 `amount`를 무료로 해석하지 마세요. 가격 고정이 아닙니다. `pricing_as_of`를 참고하세요. +이 호출에 드는 비용을 디스패치 이전에, 실행 시 과금되는 것과 동일한 요율표를 기준으로 산정한 사전 견적이며 미국 달러로 표시됩니다(또는 공급자가 보고하는 비용으로 청구되는 모델의 경우 공급자가 공개한 가격표를 기준으로 산정). 최종 청구 금액은 아닙니다. 실제로 지불하는 금액은 워크스페이스의 사용량 및 청구 기록에 있는 정산 금액입니다. 실행 이후에 보고되는 `X-Comfy-Credits-Used`는 반올림된 사후 수치이며 영수증이 아닙니다. `source`는 이 숫자를 얼마나 신뢰할 수 있는지 나타냅니다: `exact`는 `amount`를 포함하고, `estimated`는 `min_amount`와 `max_amount`를 포함하며 `amount`는 없고, `unknown`은 둘 다 없이 `reason`을 포함합니다. 누락된 `amount`를 무료로 해석하지 마세요. 가격 고정이 아닙니다: `pricing_as_of`를 참고하세요. **필드** @@ -1054,15 +1053,15 @@ Router가 실행 전에 아직 가격을 산정할 수 없는 모델은 [실행 - 달러를 소수점 문자열로 나타낸 값입니다. 예: "0.04". 소수점 이하 최대 8자리이며 지수 표기를 쓰지 않습니다. 청구 대상이 되는 1센트 미만 가격은 "0"으로 표시되지 않습니다. `source`가 `exact`일 때만 존재합니다. 최종 청구 금액이 아닙니다. 최종 금액은 워크스페이스의 사용량 및 청구 기록에 있는 정산 금액입니다. + 달러를 소수점 문자열로 나타낸 견적 비용입니다. 예: "0.04". 소수점 이하 최대 8자리이며 지수 표기를 쓰지 않습니다. 청구 대상이 되는 1센트 미만 가격은 "0"으로 표시되지 않습니다. `source`가 `exact`일 때만 존재합니다. 최종 청구 금액이 아닙니다. 최종 금액은 워크스페이스의 사용량 및 청구 기록에 있는 정산 금액입니다. - 달러 기준 하한값을 소수점 문자열로 나타낸 값입니다. `source`가 `estimated`일 때만 존재합니다. + 달러를 소수점 문자열로 나타낸 견적의 하한값입니다. 이는 보장된 최저 금액이 아니라 견적입니다. 예를 들어 공급자가 요청한 것보다 적게 반환하거나(이미지가 없는 경우 등), 견적이 과거 호출에서 학습한 일반적인 가격이거나, 가격이 요청 수량에 따라 꾸준히 오르지 않는 경우에는 더 적게 청구될 수 있습니다. `source`가 `estimated`일 때만 존재합니다. - 달러 기준 상한값을 소수점 문자열로 나타낸 값입니다. `source`가 `estimated`일 때만 존재합니다. + 달러를 소수점 문자열로 나타낸 견적의 상한값입니다. 이는 보장된 최고 금액이 아니라 견적입니다. 예를 들어 공급자가 요청한 것보다 많이 반환하거나(요청한 것보다 많은 이미지 등), 견적이 과거 호출에서 학습한 값이거나, 가격이 요청 수량에 따라 꾸준히 오르지 않는 경우에는 더 많이 청구될 수 있습니다. `source`가 `estimated`일 때만 존재합니다. @@ -1100,7 +1099,7 @@ Router가 실행 전에 아직 가격을 산정할 수 없는 모델은 [실행 - 이 견적을 산정할 때 사용한 요율표를 가져온 시각입니다. 이 견적은 가격 고정이 아닙니다. 실행은 이 시점이 아니라 요금이 산정되는 시점에 유효한 요율로 청구됩니다. 요율표를 읽지 않은 경우(`reason: pricing_unavailable`, `byok`, 또는 어떤 요율표로도 산정할 수 없는 `not_quotable` 호출)에는 이 값이 견적이 응답된 시각입니다. + 이 견적을 산정할 때 사용한 요율표를 가져온 시각입니다. 이 견적은 가격 고정이 아닙니다. 실행은 이 시점이 아니라 요금이 산정되는 시점에 유효한 요율로 청구됩니다. 공급자가 공개한 가격표에서 가져온 `estimated` 견적(공급자가 보고하는 비용으로 청구되는 모델)의 경우에는 대신 그 가격표를 읽은 날짜가 들어갑니다. 요율표를 읽지 않은 경우(`reason: pricing_unavailable`, `byok`, 또는 어떤 요율표로도 산정할 수 없는 `not_quotable` 호출)에는 이 값이 견적이 응답된 시각입니다. date-time @@ -1120,7 +1119,7 @@ Router가 실행 전에 아직 가격을 산정할 수 없는 모델은 [실행 - Router 실패에 대한 거칠게 분류된 기계 판독 가능 버킷으로, 호출자가 본문을 파싱하지 않고 분기할 수 있도록 `X-Comfy-Error-Type` 응답 헤더에 반영됩니다. 이 집합은 열아홉 개 값으로 닫혀 있습니다: 여섯 개의 요청 수준 버킷 `invalid_input`, `content_policy_violation`, `provider_error`, `provider_timeout`, `insufficient_credits`, `model_not_found`와 전송 수준의 `unauthorized`, `forbidden`, `concurrency_limit_exceeded`, `client_disconnected`, `internal_error`, `deadline_exceeded`, `not_enabled`, `service_unavailable`, `rate_limited`, `cancelled`, `queue_timeout`, `request_not_found`, `queue_backlog_full`입니다. 닫혀 있다는 것은 오늘 문서화된 대로의 집합을 설명하는 것이지 영원히 유지되는 한계가 아닙니다. 집합은 늘어날 것으로 예상되며, 그래서 이것은 의도적으로 `enum`이 아닌 일반 문자열입니다. 따라서 클라이언트는 위 목록을 전수 분기하여 다음 추가에서 깨지는 대신, 인식할 수 없는 값을 `internal_error`로 처리해야 합니다. + Router 실패에 대한 대략적인 기계 판독 가능 버킷으로, 호출자가 본문을 파싱하지 않고 분기할 수 있도록 `X-Comfy-Error-Type` 응답 헤더에 반영됩니다. 이 집합은 열아홉 개 값으로 닫혀 있습니다: 여섯 개의 요청 수준 버킷 `invalid_input`, `content_policy_violation`, `provider_error`, `provider_timeout`, `insufficient_credits`, `model_not_found`와 전송 수준의 `unauthorized`, `forbidden`, `concurrency_limit_exceeded`, `client_disconnected`, `internal_error`, `deadline_exceeded`, `not_enabled`, `service_unavailable`, `rate_limited`, `cancelled`, `queue_timeout`, `request_not_found`, `queue_backlog_full`입니다. 닫혀 있다는 것은 오늘 문서화된 대로의 집합을 설명하는 것이지 영원히 유지되는 한계가 아닙니다. 집합은 늘어날 것으로 예상되며, 그래서 이것은 의도적으로 `enum`이 아닌 일반 문자열입니다. 따라서 클라이언트는 위 목록을 전수 분기하여 다음 추가에서 깨지는 대신, 인식할 수 없는 값을 `internal_error`로 처리해야 합니다. 유형: [`RouterErrorType`](#routererrortype) @@ -1153,7 +1152,7 @@ Router가 실행 전에 아직 가격을 산정할 수 없는 모델은 [실행 ### RouterModelDetail -하나의 Comfy Router 모델에 대한 모델별 상세 정보입니다. 카탈로그 목록이 해당 모델에 대해 보고하는 모든 항목에 더해, 단일 모델 라우트만 제공하는 모델별 필드까지 포함합니다. +하나의 Comfy Router 모델에 대한 모델별 상세 정보입니다. 카탈로그 목록이 해당 모델에 대해 보고하는 모든 항목에 더해, 단일 모델 라우트에서만 제공되는 모델별 필드까지 포함합니다. [`RouterModelListEntry`](#routermodellistentry), [`RouterModelDetailFields`](#routermodeldetailfields)로 구성됩니다. @@ -1175,11 +1174,11 @@ Router가 실행 전에 아직 가격을 산정할 수 없는 모델은 [실행 `POST /v2/models/{provider}/{model}`에 사용되는 모델 ID입니다. -타입: `string`. 모델 ID, 예: `anthropic/claude-opus-4-6`, 최대 193자 +타입: `string`. 모델 ID(예: `anthropic/claude-opus-4-6`), 최대 193자 ### RouterModelInput -모델 입력 객체입니다. 필드와 검증 정보는 선택한 모델의 OpenAPI 문서를 참고하세요. +모델 입력 객체입니다. 필드와 검증에 대해서는 선택한 모델의 OpenAPI 문서를 참고하세요. 타입: `object` @@ -1191,18 +1190,18 @@ Router가 실행 전에 아직 가격을 산정할 수 없는 모델은 [실행 ### RouterModelListEntry -모델의 ID와 청구 정보. +모델의 ID와 청구 정보입니다. **필드** - 정식 Comfy Router 모델 ID인 `{provider}/{model}`로, `POST /v2/models/{provider}/{model}`에서 모델을 지정하는 값과 정확히 동일합니다. 따라서 호출자는 다른 곳에서 다시 도출할 필요 없이 이 값을 해당 경로에 그대로 넣을 수 있습니다. `pattern`은 `RouterProviderSegment`와 `RouterModelSegment`를 단일 `/`로 이어 붙인 것이고, `maxLength`는 두 값의 길이 합에 그 구분자를 더한 값입니다. + 정식 Comfy Router 모델 ID인 `{provider}/{model}`로, `POST /v2/models/{provider}/{model}`에서 모델을 지정하는 값과 정확히 동일합니다. 따라서 호출자는 다른 곳에서 다시 도출할 필요 없이 이 값을 해당 경로에 그대로 넣을 수 있습니다. 이 값의 `pattern`은 `RouterProviderSegment`와 `RouterModelSegment`를 단일 `/`로 이어 붙인 것이고, `maxLength`는 두 값의 길이 합에 그 구분자를 더한 값입니다. 타입: [`RouterModelId`](#routermodelid) -- 모델 ID, 예: `anthropic/claude-opus-4-6`, 최대 193자 - 정식 `{provider}/{model}` 모델 ID에서 소문자로 표기되는 `provider` 세그먼트이며, 모델을 지정하는 대상 파트너를 나타냅니다. 호출 라우트의 `provider` 경로 매개변수와 카탈로그 항목의 `provider` 필드가 모두 이 하나의 스키마를 참조하며, 이것이 나열된 ID와 허용되는 ID가 서로 어긋나지 않게 유지합니다. + 정식 `{provider}/{model}` 모델 ID에서 소문자로 표기되는 `provider` 세그먼트이며, 모델을 지정하는 대상 파트너를 나타냅니다. 호출 라우트의 `provider` 경로 매개변수와 카탈로그 항목의 `provider` 필드가 모두 이 하나의 스키마를 참조하며, 이것이 나열되는 ID와 허용되는 ID가 서로 어긋나지 않게 유지합니다. 타입: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 @@ -1230,17 +1229,17 @@ Router 모델 카탈로그의 한 페이지입니다. **필드** - 이 페이지의 모델들로, 최대 `limit`개입니다. + 이 페이지에 포함된 모델이며, 최대 `limit`개입니다. 유형: [`RouterModelListEntry`](#routermodellistentry)의 배열 - 이 페이지 뒤에 다른 페이지가 있는지 여부입니다. 이 값이 참인 동안 계속 순회하세요. 짧거나 빈 `data`로 카탈로그의 끝이라고 추측하지 마세요. + 이 페이지 뒤에 또 다른 페이지가 있는지 여부입니다. 이 값이 참인 동안 계속 순회하세요. 짧거나 빈 `data`를 보고 카탈로그의 끝이라고 추측하지 마세요. - Router 목록에 대한 불투명 커서입니다. 서버에서 생성되며 오직 왕복 전달만 됩니다. 즉, 오프셋도 아니고, 모델 ID도 아니고, 정렬되지 않으며, 카탈로그 재구축 간에 안정적이지 않으므로, 이를 파싱하거나 값을 증가시키거나 그것이 나온 순회를 넘어 보관하는 것은 모두 계약 밖입니다. 오프셋이 아니라 커서인 이유는 카탈로그가 움직이는 목록이기 때문입니다. 오프셋 순회는 순회 도중 항목이 추가되거나 제거되면 조용히 항목을 건너뛰거나 반복하며, 호출자는 그런 일이 발생했는지 알 수 없습니다. + Router 목록을 가리키는 불투명 커서입니다. 서버에서 생성되며 오직 그대로 왕복 전달될 뿐입니다. 즉, 오프셋도 아니고 모델 ID도 아니며, 정렬되지 않고, 카탈로그가 재구축되면 안정적이지도 않습니다. 따라서 이를 파싱하거나 값을 증가시키거나, 그것이 나온 순회를 넘어 보관하는 것은 모두 계약 범위 밖입니다. 오프셋이 아니라 커서를 쓰는 이유는 카탈로그가 계속 변하는 목록이기 때문입니다. 오프셋 순회는 순회 도중 항목이 추가되거나 제거되면 조용히 항목을 건너뛰거나 반복하는데, 호출자는 그런 일이 일어났는지 알 수 없습니다. 유형: [`RouterPageCursor`](#routerpagecursor), `next_cursor`로 반환되는 불투명 커서, 1–512자 @@ -1261,23 +1260,23 @@ Router 모델 카탈로그의 한 페이지입니다. `{provider}/{model}` 모델 ID에서 모델에 해당하는 부분입니다. -유형: `string` -- 영숫자 슬러그입니다(예: `claude-opus-4-6`). 최대 128자입니다. +유형: `string`. 영숫자 슬러그이며(예: `claude-opus-4-6`), 최대 128자입니다. ### RouterPageCursor -불투명한 카탈로그 커서입니다. `cursor`로 변경 없이 그대로 다시 전달하세요. +불투명한 카탈로그 커서입니다. `cursor`로 변경하지 않고 그대로 다시 전달하세요. 타입: `string` -- `next_cursor`로 반환되는 불투명 커서, 1–512자 ### RouterProviderSegment -`{provider}/{model}` 모델 ID에서 공급자 부분입니다. +`{provider}/{model}` 모델 ID의 공급자 부분입니다. 유형: `string` -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 ### RouterQueueCancelResponse -이 라우트가 처리한 요청을 설명하는 두 상태 코드인 `202`와 `409`에 대한 취소 요청의 응답입니다. 성공 envelope과 오류 envelope을 따로 두지 않고 두 상태 모두에 하나의 body 형태를 사용합니다. 두 경우 모두 취소가 발견한 내용이라는 동일한 진술을 나타내며, 상태 코드마다 다른 타입을 파싱해야 하는 클라이언트가 이런 분리에서 얻는 것은 없기 때문입니다. +이 라우트가 처리한 요청을 설명하는 두 상태 코드, 즉 `202`와 `409`에 대한 취소 요청의 응답입니다. 성공 envelope과 오류 envelope을 따로 두지 않고 두 상태 모두에 하나의 body 형태를 사용합니다. 두 경우 모두 "취소가 무엇을 발견했는가"라는 동일한 진술을 나타내며, 상태 코드마다 다른 타입을 파싱해야 하는 클라이언트가 이런 분리에서 얻는 것은 없기 때문입니다. **필드** @@ -1319,18 +1318,18 @@ Router 모델 카탈로그의 한 페이지입니다. ### RouterQueueStatusFields -`RouterQueueStatusResponse`에서 URL 블록이 아닌 나머지 절반입니다. 대기 중인 요청 하나의 식별자, 현재 상태, 그리고 그 상태가 터미널이고 실행이 성공하지 못했을 때 그 이유를 나타내는 포괄적 분류입니다. +`RouterQueueStatusResponse`에서 URL 블록이 아닌 나머지 절반입니다. 대기 중인 요청 하나의 식별 정보, 현재 상태, 그리고 그 상태가 터미널이고 실행이 성공하지 못했을 때 그 이유를 알려 주는 대략적 분류입니다. **필드** - 대기 중인 Router 요청 하나의 식별자입니다. 호출자가 폴링하고 취소하고 결과를 수집할 때 사용하는 핸들입니다. + 대기 중인 Router 요청 하나의 식별자입니다. 호출자가 폴링, 취소, 결과 수집에 사용하는 핸들입니다. 유형: [`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`, uuid, 최대 36자 - 대기 중인 Router 요청의 상태입니다. 정확히 세 개의 값을 가지며, `RouterErrorType`과 달리 이것은 닫힌 `enum`입니다. 두 스키마가 의도적으로 서로 반대 방향으로 닫혀 있기 때문입니다. `RouterErrorType`은 실패를 분류하며 그 집합은 늘어날 것으로 예상되므로, 인식할 수 없는 분류를 강하게 거부하는 생성된 클라이언트는 무언가가 이미 잘못된 바로 그 순간에 가장 심하게 실패하게 됩니다. 이 스키마는 라이프사이클이고, 나중에 네 번째 상태가 추가된 라이프사이클은 enum으로 선언되었든 아니든 그에 맞춰 작성된 모든 폴링 루프에 대한 호환성을 깨는 변경입니다. 그래서 enum으로 선언하고, 클라이언트가 볼 수 있는 위치에 제약을 명시합니다. + 대기 중인 Router 요청의 상태입니다. 정확히 세 개의 값을 가지며, `RouterErrorType`과 달리 이것은 닫힌 `enum`입니다. 두 스키마가 의도적으로 서로 반대 방향으로 닫혀 있기 때문입니다. `RouterErrorType`은 실패를 분류하며 그 집합은 늘어날 것으로 예상되므로, 인식할 수 없는 분류를 엄격하게 거부하는 생성된 클라이언트는 무언가가 이미 잘못된 바로 그 순간에 가장 심하게 실패하게 됩니다. 이 스키마는 라이프사이클이고, 나중에 네 번째 상태가 추가된 라이프사이클은 enum으로 선언되었든 아니든 그에 맞춰 작성된 모든 폴링 루프에 대한 호환성을 깨는 변경입니다. 그래서 enum으로 선언하고, 클라이언트가 볼 수 있는 위치에 제약을 명시합니다. 유형: [`RouterQueueStatus`](#routerqueuestatus) @@ -1342,7 +1341,7 @@ Router 모델 카탈로그의 한 페이지입니다. - 성공하지 못한 `COMPLETED` 요청에만 존재하며, 결과 조회가 해당 실패를 반환할 때 `X-Comfy-Error-Type`에 붙이는 것과 동일한 포괄적 분류를 담습니다. 성공한 터미널 요청과 실패했거나 취소된 요청을 구분하는 역할을 합니다(둘 모두를 위한 별도의 터미널 상태는 없습니다). 그리고 성공 시에는 null이 아니라 아예 존재하지 않으므로, 존재 여부로 분기하세요. + 성공하지 못한 `COMPLETED` 요청에만 존재하며, 결과 조회가 해당 실패를 반환할 때 `X-Comfy-Error-Type`에 붙이는 것과 동일한 대략적 분류를 담습니다. 성공한 터미널 요청과 실패했거나 취소된 요청을 구분하는 역할을 합니다. 둘 중 어느 쪽에도 별도의 터미널 상태는 없습니다. 그리고 성공 시에는 null이 아니라 아예 존재하지 않으므로, 존재 여부로 분기하세요. 유형: [`RouterErrorType`](#routererrortype) @@ -1387,9 +1386,9 @@ Router 모델 카탈로그의 한 페이지입니다. ### RouterQueueSubmitResponse -실행이 실행 대기열에 승인될 때 반환되는 핸들로, 요청의 식별자와 상태에 나머지 수명 주기를 가리키는 세 개의 URL을 결합한 것입니다. +실행이 실행 대기열에 수락될 때 반환되는 핸들로, 요청의 식별 정보와 상태를 나머지 수명 주기를 다루는 세 개의 URL과 결합한 것입니다. -[`RouterQueueUrls`](#routerqueueurls), [`RouterQueueSubmitFields`](#routerqueuesubmitfields)를 구성합니다. +[`RouterQueueUrls`](#routerqueueurls)와 [`RouterQueueSubmitFields`](#routerqueuesubmitfields)로 구성됩니다. 유형: `object` @@ -1419,7 +1418,7 @@ Router 모델 카탈로그의 한 페이지입니다. ### RouterValidationErrorContext -검증에 실패한 규칙에 대해 공급자가 제공한 세부 정보입니다. +공급자가 제공한, 실패한 검증 규칙에 대한 세부 정보입니다. 유형: `object` @@ -1455,7 +1454,7 @@ Router 모델 카탈로그의 한 페이지입니다. ### RouterValidationErrorInput -공급자가 포함하는 경우의 거부된 입력 값입니다. +공급자가 해당 값을 포함하는 경우의 거부된 입력 값입니다. ### RouterValidationErrorResponse diff --git a/zh/development/api-development/sdks.mdx b/zh/development/api-development/sdks.mdx index dffa890068..9e08479aac 100644 --- a/zh/development/api-development/sdks.mdx +++ b/zh/development/api-development/sdks.mdx @@ -3,13 +3,13 @@ title: "Comfy SDK:ComfyUI 的 Python 与 TypeScript 客户端" description: "用 Python 或 TypeScript 对 Comfy Cloud、自建部署或自有 ComfyUI 运行 ComfyUI 工作流,并处理资产、任务、实时事件和幂等重试。" sidebarTitle: "SDK" icon: "code" -translationSourceHash: dbb2e0a8 +translationSourceHash: fd912955 translationFrom: development/api-development/sdks.mdx translationBlockHashes: "_intro": c92c7b51 "Install": da9a0a57 "Quickstart": 02297586 - "Choosing a base URL": 2265e6f6 + "Choosing a base URL": 0e77e81c "Retrying a submit: the idempotency key": 7c83d78f "Watching a job run": 34d74bcc "Tracing an output back to its workflow": b01886a3 @@ -21,6 +21,7 @@ translationBlockHashes: + import SdkSurfaces from "/snippets/zh/sdk/surfaces.mdx"; import SdkVersions from "/snippets/zh/sdk/versions.mdx"; @@ -114,7 +115,7 @@ await job.getOutputs("9")[0].toFile("out.png"); |---|---|---| | **Comfy Cloud** | `https://cloud.comfy.org`(默认) | 必填 | | **Comfy API 部署** | `https://.run.comfy.app` | 必填 | -| **您自己的 ComfyUI** | `http://127.0.0.1:8189`(本地代理) | 默认无。可选静态 bearer 令牌 | +| **您自己的 ComfyUI** | `http://127.0.0.1:8189`(本地代理) | 默认无需 API 密钥。可选静态 bearer 令牌 | 基础 URL 来自 `COMFY_BASE_URL` 环境变量,而不是构造函数参数: @@ -123,7 +124,7 @@ export COMFY_BASE_URL="https://.run.comfy.app" # Comfy API 部署 export COMFY_BASE_URL="http://127.0.0.1:8189" # 自托管代理 ``` -客户端每次构造时都会读取该变量,它必须是 `http(s)` URL,未设置或为空则默认为 Comfy Cloud。因此客户端本身在所有环境下都是相同的: +每次构造客户端时都会读取该变量,它必须是 `http(s)` URL,未设置或为空则默认为 Comfy Cloud。因此,客户端本身在所有环境下都是相同的: ```python Python @@ -136,12 +137,12 @@ const client = new Comfy({ apiKey: "comfyui-..." }); - 从早期版本升级?`Comfy("", "")` 现在是在设置 `COMFY_BASE_URL` 后使用 `Comfy(api_key="")`。`api_key` 是仅限关键字参数,因此旧的位置参数调用会抛出 `TypeError`,而不会将 URL 静默当作 API 密钥读取。 + 从早期版本升级?`Comfy("", "")` 现在是在设置 `COMFY_BASE_URL` 后使用 `Comfy(api_key="")`。`api_key` 是仅限关键字参数,因此旧的位置参数调用会抛出 `TypeError`,而不是悄悄把 URL 当作 API 密钥读取。 ### Comfy Cloud -开箱即用。创建 [API 密钥](/zh/development/api-development/getting-an-api-key) 并将其传递给客户端。 +开箱即用。创建 [API 密钥](/zh/development/api-development/getting-an-api-key)并将其传递给客户端。 API 访问需要付费的 Comfy Cloud 订阅。免费层级不包含此权限。一次可以运行多少个任务取决于您的层级。请参阅[并发限制](/zh/development/deploy/cloud-usage#并发限制)。 @@ -151,9 +152,9 @@ const client = new Comfy({ apiKey: "comfyui-..." }); ### Comfy API 部署 -通过 [开发者平台](https://platform.comfy.org) 部署的工作流会有自己的端点。将 `COMFY_BASE_URL` 指向该端点并使用您的 API 密钥,与 Comfy Cloud 完全相同。本指南中的所有内容都以相同的方式工作,[任务标签和任务列表](#为任务添加标签并在之后查找)除外,Comfy Cloud 暂不支持这两项。 +通过 [开发者平台](https://platform.comfy.org) 部署的工作流会有自己的端点。将 `COMFY_BASE_URL` 指向该端点并使用您的 API 密钥,与使用 Comfy Cloud 时完全相同。本指南中的所有内容都以相同方式工作,但[任务标签和任务列表](#为任务添加标签并在之后查找)除外,Comfy Cloud 暂不支持这两项。 -Comfy API 部署可以使用其 Build 中包含的模型和自定义节点运行多个工作流。对于每个任务,`get_workflow()` 返回的工作流响应带有 `format: "api"`,并在其 `.graph` 属性中包含已执行的图。 +Comfy API 部署可以使用其 Build 中包含的模型和自定义节点运行多个工作流。对于每个任务,`get_workflow()` 返回的工作流响应带有 `format: "api"`,并在其 `.graph` 属性中包含已执行的工作流图。 ### 您自己的 ComfyUI @@ -165,7 +166,7 @@ comfy-api-proxy export COMFY_BASE_URL="http://127.0.0.1:8189" ``` -关于配置和身份验证,请参阅[自托管 ComfyUI 的 API 代理](/zh/development/comfyui-server/api-proxy)。 +有关配置和身份验证的详情,请参阅[自托管 ComfyUI 的 API 代理](/zh/development/comfyui-server/api-proxy)。 ## 重试提交:幂等键 diff --git a/zh/development/cloud/api-reference.mdx b/zh/development/cloud/api-reference.mdx index c2908985e9..a7a2469483 100644 --- a/zh/development/cloud/api-reference.mdx +++ b/zh/development/cloud/api-reference.mdx @@ -2,14 +2,14 @@ title: "Cloud API 参考" description: "Comfy Cloud 的完整 API 参考及代码示例" icon: "book-open" -translationSourceHash: 9dfb0617 +translationSourceHash: e15f0e0e translationFrom: development/cloud/api-reference.mdx translationBlockHashes: "_intro": 1729f5d3 "Setup": 311034bb "Object Info": 7b62a397 "Uploading Inputs": 92df17f8 - "Running Workflows": d6ddd0b4 + "Running Workflows": 2c6519c7 "Checking Job Status": d74b4922 "WebSocket for Real-Time Progress": 02c49b4a "Downloading Outputs": 5e1d63d3 @@ -19,6 +19,7 @@ translationBlockHashes: --- + import PollJobCompletion from '/snippets/zh/cloud/poll-job-completion.mdx' import WebSocketProgress from '/snippets/zh/cloud/websocket-progress.mdx' import DownloadOutputs from '/snippets/zh/cloud/download-outputs.mdx' @@ -343,7 +344,7 @@ print(f"Submitted job: {prompt_id}") ### 使用合作节点 -如果您的工作流包含[合作节点](/zh/tutorials/partner-nodes/overview)(调用外部 AI 服务的节点,如 Flux Pro、Ideogram 等),您必须在请求负载的 `extra_data` 字段中包含您的 [Comfy API 密钥](/zh/development/api-development/getting-an-api-key)。 +如果您的工作流包含[合作节点](/zh/tutorials/partner-nodes/overview)(即调用 Flux Pro、Ideogram 等外部 AI 服务的节点),您必须在请求负载的 `extra_data` 字段中包含您的 [Comfy API 密钥](/zh/development/api-development/getting-an-api-key)。 在浏览器中运行工作流时,ComfyUI 前端会自动将您的 API 密钥打包到 `extra_data` 中。本节仅适用于直接调用 API 的情况。 @@ -392,7 +393,7 @@ def submit_workflow_with_partner_nodes(workflow: dict, api_key: str) -> str: Args: workflow: API 格式的 ComfyUI 工作流 - api_key: 您来自 platform.comfy.org 的 API 密钥 + api_key: 您在 platform.comfy.org 上的 API 密钥 Returns: 用于跟踪任务的 prompt_id diff --git a/zh/development/comfy-router/limitations.mdx b/zh/development/comfy-router/limitations.mdx index ba749ba687..acee93f896 100644 --- a/zh/development/comfy-router/limitations.mdx +++ b/zh/development/comfy-router/limitations.mdx @@ -2,7 +2,7 @@ title: "Comfy Router 的能力与限制" sidebarTitle: "能力与限制" description: "选择 Comfy Router 还是合作伙伴代理,为长时间运行的调用做好规划,并了解恢复、速率限制与资产存储。" -translationSourceHash: b40af72c +translationSourceHash: 5e06d8e7 translationFrom: development/comfy-router/limitations.mdx translationBlockHashes: "_intro": 6b871cf3 @@ -13,9 +13,9 @@ translationBlockHashes: "Request bodies are capped": 675b77c8 "Requests are rate limited per caller": 249d4d51 "No progress while a call runs": 75d42d8d - "Comfy charges and usage": ed49ddec - "Models without a pre-flight estimate": 7373adf0 - "Router does not cover every partner operation": 97d31362 + "Comfy charges and usage": 557836d2 + "Models without a pre-flight estimate": a7747c7b + "Router does not cover every partner operation": 786c0fb2 "Model outputs and stored assets": 06c737c1 "Next": be85b789 --- @@ -27,6 +27,7 @@ translationBlockHashes: + Router 通过一次同步 HTTP 调用运行合作伙伴模型,或通过一个已排队的请求运行:你提交请求,稍后再收集结果。当你的应用能够等待一个已完成的结果,或稍后收集结果,并且能够处理模型自身的输入和输出字段时,就使用它。 ## Router 支持的功能 @@ -104,19 +105,18 @@ Router 只返回最终响应,不提供流式 token、服务器发送事件、 模型目录提供计费事实,包括 `billing.charges_on_policy_rejection`,但不提供价格。请显式处理 `yes`、`no` 和 `unknown`。参见[计费](/zh/development/comfy-router/billing#模型计费事实)。 -要在运行之前查看价格,可以调用 `POST /v2/models/{provider}/{model}/estimate`,或读取已排队提交的 `201` 响应中的 `estimate` 对象。在估算功能逐步推出的期间,该路由会返回 `403`,并附带 `error_type: not_enabled`,同时提交响应中会省略 `estimate`。两者的价格都来自 Comfy 为该次运行计费所依据的费率卡,但该数字只是估算值,并非最终收费;最终以你工作区的用量与计费记录中的结算金额为准。它也不是价格锁定。使用你自己的提供商密钥运行不会被 Comfy 计费,即使 `/estimate` 为其返回了数字;而 `unknown` 估算不包含任何数字,这并不意味着免费。`X-Comfy-Credits-Used` 仍然只是一次运行的事后四舍五入数字,而不是收据。关于如何解读 `exact`、`estimated` 和 `unknown`,参见[预检成本估算](/zh/development/comfy-router/reference#预检费用预估)。无法在运行前定价的模型列在[没有预检估算的模型](#无法预先估算的模型)中。 +要在运行之前查看价格,可以调用 `POST /v2/models/{provider}/{model}/estimate`,或读取已排队提交返回的 `201` 响应中的 `estimate` 对象。在估算功能逐步推出的期间,该路由会返回 `403`,并附带 `error_type: not_enabled`,同时提交响应中会省略 `estimate`。两者的价格都来自 Comfy 为该次运行计费所依据的费率卡(若模型按其供应商报告的成本计费,则改为依据供应商公布的价目表进行估算),但该数字只是估算值,并非最终收费;最终以你工作区的用量与计费记录中的结算金额为准。它也不是价格锁定。使用你自己的提供商密钥运行不会被 Comfy 计费,即使 `/estimate` 为其返回了数字;而 `unknown` 估算不包含任何数字,这并不意味着免费。`X-Comfy-Credits-Used` 仍然只是一次运行的事后四舍五入数字,而不是收据。关于如何解读 `exact`、`estimated` 和 `unknown`,参见[预检成本估算](/zh/development/comfy-router/reference#预检费用预估)。无法在运行前定价的模型列在[没有预检估算的模型](#无法预先估算的模型)中。 ## 无法预先估算的模型 -Router 目前还无法在运行前可靠地为对以下模型的调用定价,因此对于这些模型,`/estimate` 以及排队提交的 `estimate` 都会返回 `source: unknown`,不过其中一些模型针对特定请求体可能会返回具体数额。`unknown` 表示未给出数额,而不是说明该次运行免费。[Comfy 计费与用量](#comfy-费用与用量) 规则仍然适用:使用你自己的提供商密钥运行不会由 Comfy 计费,并且 `X-Comfy-Credits-Used` 是可选的,因此缺少该响应头意味着费用未被报告。未列在此处的模型针对特定请求体同样可能返回 `unknown`,所以请对每次估算都查看 `source`。 +对于以下模型,Router 目前还无法在运行前可靠地为一次调用定价,因此这些模型的 `/estimate` 以及排队提交的 `estimate` 都会返回 `source: unknown`,不过其中部分模型在特定请求体下也可能返回具体数额。`unknown` 表示未给出数额,并不代表该次运行免费。[Comfy 计费与用量](#comfy-费用与用量) 规则仍然适用:使用自己的提供商密钥运行不会由 Comfy 计费,并且 `X-Comfy-Credits-Used` 是可选的,因此缺少该响应头意味着费用未被报告。未列在此处的模型在特定请求体下同样可能返回 `unknown`,所以请对每次估算都查看 `source`。 -随着估算覆盖范围不断扩大,这个列表会逐渐缩短。它由 Router 自身的定价代码生成,且未公开提供的模型永远不会被列出。 +随着估算覆盖范围的扩大,这个列表会不断缩短。它由 Router 自身的定价代码生成,未公开提供的模型永远不会被列出。 {/* BEGIN GENERATED: models without a pre-flight estimate. Do not hand-edit; regenerate with -update-quote-coverage-docs. */} -- **bfl**: `bfl/erase-v1`, `bfl/flux-2-max`, `bfl/flux-2-pro`, `bfl/flux-3-image`, `bfl/flux-3-video`, `bfl/flux-kontext-max`, `bfl/flux-kontext-pro`, `bfl/flux-pro-1.0-expand`, `bfl/flux-pro-1.0-fill`, `bfl/flux-pro-1.1`, `bfl/flux-pro-1.1-ultra`, `bfl/video-edit-v1`, `bfl/video-upscale-v1`, `bfl/vto-v1` +- **bfl**: `bfl/erase-v1`, `bfl/video-edit-v1`, `bfl/video-upscale-v1`, `bfl/vto-v1` - **byteplus**: `byteplus/seed-audio-1.0`, `byteplus/seed-audio-1.0-multilingual` -- **elevenlabs**: `elevenlabs/eleven_sfx_v2` - **fal**: `fal/crystal-upscaler`, `fal/crystal-video-upscaler`, `fal/fal-gpt-image-2`, `fal/fal-gpt-image-2.5-flare`, `fal/fal-gpt-image-2.5-sunburst`, `fal/fal-nano-banana-2`, `fal/fal-nano-banana-pro`, `fal/fal-seedance-2.0`, `fal/fal-seedance-2.5`, `fal/flux-3-max`, `fal/patina` - **freepik**: `freepik/ai-image-upscaler-precision-v2`, `freepik/ai-skin-enhancer-creative`, `freepik/ai-skin-enhancer-faithful`, `freepik/ai-skin-enhancer-flexible` - **heygen**: `heygen/starfish` @@ -129,11 +129,9 @@ Router 目前还无法在运行前可靠地为对以下模型的调用定价, - **pika**: `pika/pika-gpt-image-2`, `pika/pika-nano-banana-2`, `pika/pika-nano-banana-pro` - **recraft**: `recraft/recraftv2`, `recraft/recraftv3`, `recraft/recraftv4`, `recraft/recraftv4_1`, `recraft/recraftv4_1_pro`, `recraft/recraftv4_1_pro_vector`, `recraft/recraftv4_1_utility`, `recraft/recraftv4_1_utility_pro`, `recraft/recraftv4_1_utility_pro_vector`, `recraft/recraftv4_1_utility_vector`, `recraft/recraftv4_1_vector`, `recraft/recraftv4_pro`, `recraft/recraftv4_styles`, `recraft/recraftv4_styles_pro`, `recraft/recraftv4_styles_pro_vector`, `recraft/recraftv4_styles_vector` - **runware**: `runware/runware-gpt-image-2`, `runware/runware-gpt-image-2.5-flare`, `runware/runware-gpt-image-2.5-sunburst`, `runware/runware-nano-banana-2`, `runware/runware-nano-banana-pro`, `runware/runware-seedance-2.0`, `runware/runware-seedance-2.5` -- **runway**: `runway/gen4_image` - **synclabs**: `synclabs/sync-3` - **veed**: `veed/clean-audio`, `veed/clean-audio-video`, `veed/fabric-1.0`, `veed/lipsync-2.0`, `veed/video-background-removal`, `veed/video-background-removal-fast`, `veed/video-background-removal-green-screen` -- **wavespeed**: `wavespeed/flashvsr`, `wavespeed/seedvr2`, `wavespeed/ultimate-image-upscaler`, `wavespeed/wavespeed-gpt-image-2`, `wavespeed/wavespeed-gpt-image-2.5-flare`, `wavespeed/wavespeed-gpt-image-2.5-sunburst` -- **xai**: `xai/grok-imagine-image`, `xai/grok-imagine-image-2.0`, `xai/grok-imagine-image-pro`, `xai/grok-imagine-image-quality`, `xai/grok-imagine-video`, `xai/grok-imagine-video-1.5`, `xai/grok-imagine-video-1.5-lite`, `xai/grok-imagine-video-1.5-preview` +- **wavespeed**: `wavespeed/wavespeed-gpt-image-2`, `wavespeed/wavespeed-gpt-image-2.5-flare`, `wavespeed/wavespeed-gpt-image-2.5-sunburst` {/* END GENERATED: models without a pre-flight estimate */} @@ -141,9 +139,14 @@ Router 目前还无法在运行前可靠地为对以下模型的调用定价, Router 运行模型。文件上传、账户读取、资产管理、流式传输以及提供商任务控制可能需要位于 `/proxy/…` 下的合作伙伴代理路由,这些路由处在 Router 之外,Router 的契约也不涵盖它们。Router 自身对外提供的接口以 [Comfy Router 规范](/router-openapi.yaml) 为准;支持情况因提供商而异。 -### Krea 3 的参考图像必须先上传 +### Krea 3 参考图像:先上传,或使用公共 https URL + +在 `krea/krea-3` 的 `image_urls` 中,由 `POST /proxy/krea/assets` 返回的 `image_url`(一个 `https://app-uploads.krea.ai/...` URL)始终会被接受。其他链接是否会被接受取决于环境;在 api.comfy.org 上,目前会被接受。 + +- **在其他链接会被接受的环境中**,任何公共 `https` 图片网址都可以使用。Router 会在模型运行前读取每张图像的尺寸:如果某个链接的主机无法公开访问或不存在、以 `408` 或 `429` 之外的 `4xx` 响应,或者该链接不是图像,那么它会被拒绝,并返回 `400` `invalid_input`,同时指明其主机。临时性 DNS、TLS 或连接失败、超时,或源站返回 `408` 或 `429`,都会失败并返回 `502` 错误。不是有效上传的 `app-uploads.krea.ai` 链接会像任何其他无法访问的参考一样被拒绝,并返回 `400`。服务器刚启动后、尚未确定适用哪条规则之前,不是 `app-uploads.krea.ai` 链接的公共 `https` URL 可能会失败并返回 `503`,该错误可以安全重试。 +- **在不会接受其他链接的环境中**,每一项都必须是某次上传返回的 `image_url`。Router 只检查该链接能否解析为 `https` URL,并且其主机名恰好是 `app-uploads.krea.ai`(不能是其他主机,也不能带显式端口):任何其他链接,包括你自己托管的公共 `https` URL,都会在模型运行前被拒绝,并返回 `400` `invalid_input`。通过该检查但并非有效上传的链接(已过期、已删除或输入有误)仍会通过该检查,随后 Router 无法读取图像尺寸,并返回 `5xx` 错误,而不是 `400`。 -`krea/krea-3` 不接受任意图像链接。`image_urls` 中的每一项都必须是 `POST /proxy/krea/assets` 返回的 `image_url`,也就是一个 `https://app-uploads.krea.ai/...` URL。Router 只检查该链接能否解析为 `https` URL,并且其主机名恰好是 `app-uploads.krea.ai`(不能是其他主机,也不能带显式端口):任何其他链接,包括你自己托管的公共 `https` URL,都会在模型运行前被拒绝,并返回 `400` `invalid_input`。通过了该检查但并非仍然有效的上传链接(已过期、已删除或输入有误)仍会通过,随后 Router 无法读取图像尺寸,并返回 `5xx` 错误而不是 `400`,因此请始终原样传入上传返回的 `image_url`。 +上传在每个环境中都可用,因此是可移植的选择;请始终原样传入上传返回的 `image_url`。 1. 将每张参考图像以 `multipart/form-data` 上传,图像放在表单字段 `file` 中(JPEG、PNG 或 WebP,最大 75 MB)。使用与 Router 相同的方式进行身份验证,即使用 `X-API-Key` 或 `Authorization: Bearer`。 diff --git a/zh/development/comfy-router/models.mdx b/zh/development/comfy-router/models.mdx index 614ecfce4c..5d42822c4c 100644 --- a/zh/development/comfy-router/models.mdx +++ b/zh/development/comfy-router/models.mdx @@ -2,11 +2,11 @@ title: "Comfy Router 模型" sidebarTitle: "所有模型" description: "Comfy Router 提供的全部模型,按提供方分组,并列出每个模型的输入和输出模态。" -translationSourceHash: f12be9e4 +translationSourceHash: e62265b5 translationFrom: development/comfy-router/models.mdx translationBlockHashes: "_intro": 2584e428 - "Find by output": 380e121d + "Find by output": 9c4c92ac "Anthropic": de8acc20 "Beeble": b52ea340 "Black Forest Labs": 2934e3eb @@ -25,7 +25,7 @@ translationBlockHashes: "LTX": 32595bf9 "Luma": 37a12a19 "Luma 2": 585eb637 - "Meshy": 9292a0a8 + "Meshy": 67e26a17 "MiniMax": 87560ab7 "Moonvalley": 9e63fb77 "OpenAI": c5c4af80 @@ -44,6 +44,7 @@ translationBlockHashes: "xAI": e1706271 --- + {/* 已生成文件。由 `pnpm code-pages:gen` 从 Router 目录生成。 */} 以下每个模型都由同一条路由提供服务:`POST /v2/models/{provider}/{model}`,并使用该模型自身的 JSON 请求体。每个页面都会展示在 Python、TypeScript 和 cURL 中可用的请求示例。关于模型发现、schema、错误、重试和计费,请参阅[使用 Comfy Router API](/zh/development/comfy-router/api)。 @@ -106,7 +107,7 @@ translationBlockHashes: - [Lipsync 2.0](/zh/development/comfy-router/models/veed/lipsync-2-0/code):`veed/lipsync-2.0` - [Video Background Removal Fast](/zh/development/comfy-router/models/veed/video-background-removal-fast/code):`veed/video-background-removal-fast` - [Video Background Removal Green Screen](/zh/development/comfy-router/models/veed/video-background-removal-green-screen/code):`veed/video-background-removal-green-screen` -- [Video Background Removal](/zh/development/comfy-router/models/veed/video-background-removal/code):`veed/video-background-removal` +- [视频背景移除](/zh/development/comfy-router/models/veed/video-background-removal/code):`veed/video-background-removal` - [Veo 3.1 Fast Generate 001](/zh/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code):`veo/veo-3.1-fast-generate-001` - [Veo 3.1 Generate 001](/zh/development/comfy-router/models/veo/veo-3-1-generate-001/code):`veo/veo-3.1-generate-001` - [Veo 3.1 Lite Generate 001](/zh/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code):`veo/veo-3.1-lite-generate-001` @@ -276,7 +277,7 @@ translationBlockHashes: - [Wan 3.0 Video](/zh/development/comfy-router/models/wan/wan3-0-video/code):`wan/wan3.0-video` - + - [Animations](/zh/development/comfy-router/models/meshy/animations/code):`meshy/animations` - [Meshy 6](/zh/development/comfy-router/models/meshy/meshy-6/code):`meshy/meshy-6` diff --git a/zh/development/comfy-router/models/bria/image-edit-relight/code.mdx b/zh/development/comfy-router/models/bria/image-edit-relight/code.mdx index c15d997c7c..923198961f 100644 --- a/zh/development/comfy-router/models/bria/image-edit-relight/code.mdx +++ b/zh/development/comfy-router/models/bria/image-edit-relight/code.mdx @@ -2,17 +2,18 @@ title: "将 Image Edit Relight 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 bria/image-edit-relight:端点、请求形状以及 Router 返回的响应。" sidebarTitle: "Image Edit Relight" -translationSourceHash: 63b5bcef +translationSourceHash: 620fcec7 translationFrom: development/comfy-router/models/bria/image-edit-relight/code.mdx translationBlockHashes: "_intro": cc88af3e "Quick start": 4329dd4b - "Schema": fb8fdff1 + "Schema": 8f45e738 "Examples": f04b0762 --- + {/* 已生成文件。由 `pnpm code-pages:gen` 从 router-schemas/bria/image-edit-relight.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -157,10 +158,10 @@ curl https://api.comfy.org/v2/models/bria/image-edit-relight/requests/$REQUEST_I ### 输入 - 要编辑的图像。支持的输入类型为 Base64 编码字符串,或指向可公开访问图像文件的 URL。接受的格式为 JPEG、JPG、PNG、WEBP。 + 要编辑的图像。支持的输入类型为 Base64 编码字符串,或指向可公开访问的图像文件的 URL。接受的格式为 JPEG、JPG、PNG、WEBP。 - + 光照方向,取值为 "front"、"side"、"bottom" 或 "top-down" 之一。 @@ -205,7 +206,7 @@ curl https://api.comfy.org/v2/models/bria/image-edit-relight/requests/$REQUEST_I - 提示词的优化版本;若 COMPLETED 的生成任务中 Bria 未进行优化,则为 null。可为 null 是因为该键是存在的并携带 null,而不是被省略;在 bria/image-edit-gen-fill 上实际观察到过。 + 提示词的优化版本;若某次 COMPLETED 的生成中 Bria 未进行优化,则为 null。之所以可为 null,是因为该键是存在的并携带 null,而不是被省略;这一点在 bria/image-edit-gen-fill 上实际观察到过。 diff --git a/zh/development/comfy-router/models/krea/krea-3/code.mdx b/zh/development/comfy-router/models/krea/krea-3/code.mdx index acd55f4f3c..6861cc1433 100644 --- a/zh/development/comfy-router/models/krea/krea-3/code.mdx +++ b/zh/development/comfy-router/models/krea/krea-3/code.mdx @@ -2,15 +2,16 @@ title: "通过 Comfy Router 使用 Krea 3" description: "通过 Comfy Router 调用 krea/krea-3:端点、请求形状以及 Router 返回的响应。" sidebarTitle: "Krea 3" -translationSourceHash: a539ac5a +translationSourceHash: 9989319f translationFrom: development/comfy-router/models/krea/krea-3/code.mdx translationBlockHashes: "_intro": ac71b80c "Quick start": d6a4d54e - "Schema": 9c44fce0 + "Schema": ccfc3f63 "Examples": 276619d9 --- + {/* 已生成文件。由 `pnpm code-pages:gen` 从 router-schemas/krea/krea-3.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -155,7 +156,7 @@ curl https://api.comfy.org/v2/models/krea/krea-3/requests/$REQUEST_ID \ - 输入图像 URL,最多 8 个。每个都必须是先将图像上传到 POST /proxy/krea/assets(multipart 表单字段 `file`)后返回的 image_url;任何不是主机 app-uploads.krea.ai 上的 https URL 的链接(包括你自己的 https URL)都会被以 400 拒绝,而非实时上传的 app-uploads.krea.ai 链接则会以 5xx 错误失败。文生图时省略。 + 输入图像 URL,最多 8 个。将图像上传到 POST /proxy/krea/assets(multipart 表单字段 `file`)后返回的 image_url 始终会被接受。是否接受其他公共 https URL 取决于环境:在不接受的环境中,任何不是主机 app-uploads.krea.ai 上的 https URL 的链接都会以 400 被拒绝;在接受的环境中,任何公共 https 图像 URL 都会被接受,而主机不可公开访问或不存在、返回 408 或 429 以外的 4xx,或者不是图像的 URL,会以 400 被拒绝并在错误中指明其主机;而临时的 DNS、TLS 或连接故障、超时,或源站返回 408 或 429,则会以 502 错误失败。在不接受其他 URL 的环境中,未指向有效上传文件的 app-uploads.krea.ai 链接会以 5xx 错误失败;在接受的环境中,它会像任何其他不可达引用一样以 400 被拒绝。当服务器尚未确定适用哪种情况时,不是 app-uploads.krea.ai 链接的公共 https URL 会以 503 错误失败,该错误可安全重试。文生图时省略。 diff --git a/zh/development/comfy-router/models/luma_2/ray-3-2/code.mdx b/zh/development/comfy-router/models/luma_2/ray-3-2/code.mdx index f89f6148bd..8d5c55f129 100644 --- a/zh/development/comfy-router/models/luma_2/ray-3-2/code.mdx +++ b/zh/development/comfy-router/models/luma_2/ray-3-2/code.mdx @@ -2,14 +2,15 @@ title: "搭配 Comfy Router 使用 Ray 3.2" description: "通过 Comfy Router 调用 luma_2/ray-3.2:endpoint、请求结构以及 Router 返回的响应。" sidebarTitle: "Ray 3.2" -translationSourceHash: a796913b +translationSourceHash: 86ca3c26 translationFrom: development/comfy-router/models/luma_2/ray-3-2/code.mdx translationBlockHashes: "_intro": 3348ca65 "Quick start": ad992b88 - "Schema": 50c63e36 + "Schema": 0c4fe0bc "Examples": fdb0ab6e --- + {/* 生成文件。由 `pnpm code-pages:gen` 从 router-schemas/luma_2/ray-3.2.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -168,11 +169,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ 输出宽高比。ray-3.2 视频模型支持 9:16、3:4、1:1、4:3、16:9、21:9 这一子集。 - 可能的值:`3:1`、`2:1`、`21:9`、`16:9`、`3:2`、`4:3`、`1:1`、`3:4`、`2:3`、`9:16`、`1:2`、`1:3` + 可选值:`3:1`、`2:1`、`21:9`、`16:9`、`3:2`、`4:3`、`1:1`、`3:4`、`2:3`、`9:16`、`1:2`、`1:3` - 用于风格/内容引导的参考图像。type 为 'image' 时最多 9 张,type 为 'image_edit' 时最多 8 张。 + 用于风格/内容引导的参考图像。type 为 'image' 时最多 9 个,type 为 'image_edit' 时最多 8 个。 @@ -180,11 +181,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 先前已完成生成的 UUID,用于复用为来源。供 ray-3.2 video_edit / video_reframe 使用。 + 先前已完成生成的 UUID,用于将其复用为来源。由 ray-3.2 video_edit / video_reframe 使用。 - MIME 类型。与 data 一起使用时为必填(对于视频来源还需与 url 一起使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 一起时为必填(视频来源还需与 url 一起提供,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -192,13 +193,13 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 要使用的模型。uni-1 / uni-1-max 用于图像生成,ray-3.2 用于视频生成、编辑和重新取景。 + 要使用的模型。uni-1 / uni-1-max 用于图像生成,ray-3.2 用于视频生成、编辑和重新构图。 输出图像格式 - 可能的值:`png`、`jpeg` + 可选值:`png`、`jpeg` @@ -214,11 +215,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 先前已完成生成的 UUID,用于复用为来源。供 ray-3.2 video_edit / video_reframe 使用。 + 先前已完成生成的 UUID,用于将其复用为来源。由 ray-3.2 video_edit / video_reframe 使用。 - MIME 类型。与 data 一起使用时为必填(对于视频来源还需与 url 一起使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 一起时为必填(视频来源还需与 url 一起提供,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -228,23 +229,23 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ 风格预设 - 可能的值:`auto`、`manga` + 可选值:`auto`、`manga` 要执行的生成类型。image/image_edit 由 uni-1 / uni-1-max 模型生成;video/video_edit/video_reframe 由 ray-3.2 模型生成。 - 可能的值:`image`、`image_edit`、`video`、`video_edit`、`video_reframe` + 可选值:`image`、`image_edit`、`video`、`video_edit`、`video_reframe` - ray-3.2 的视频输出设置。此处仅建模影响验证和计费的字段;其他字段(编辑控制项、source_position)将原样转发给 Luma。 + ray-3.2 的视频输出设置。此处仅建模影响验证和计费的字段;其他字段(编辑控制项、source_position)会原样转发给 Luma。 ray-3.2 video / video_edit 的片段时长。默认为 5s。HDR 生成(type 为 video)仅限 5s。 - 可能的值:`5s`、`10s` + 可选值:`5s`、`10s` @@ -256,11 +257,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 先前已完成生成的 UUID,用于复用为来源。供 ray-3.2 video_edit / video_reframe 使用。 + 先前已完成生成的 UUID,用于将其复用为来源。由 ray-3.2 video_edit / video_reframe 使用。 - MIME 类型。与 data 一起使用时为必填(对于视频来源还需与 url 一起使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 一起时为必填(视频来源还需与 url 一起提供,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -268,19 +269,19 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 暂不可用:在 Luma 提供 EXR 交付之前,带 `exr_export=true` 的请求会以 400 拒绝。将来会在 MP4 之外同时导出 EXR 文件(需要 hdr 为 true)。video_reframe 下会被拒绝。 + 暂不可用:在 Luma 正式提供 EXR 交付之前,exr_export=true 的请求会以 400 被拒绝。将在 MP4 之外额外导出一个 EXR 文件(需要 hdr 为 true)。video_reframe 会被拒绝。 - 以 HDR 渲染。需要 720p/1080p。video_reframe 下会被拒绝。 + 以 HDR 渲染。需要 720p/1080p。video_reframe 会被拒绝。 - `keyframes` 对应的输出帧位置,长度相同;5s 时为 0–120,10s 时为 0–240。原样转发。 + `keyframes` 的输出帧位置,长度相同;5s 时为 0–120,10s 时为 0–240。原样转发。 - 引导帧图像(1–64),与 start_frame/end_frame 互斥。按请求的时长计费;keyframes 请求绝不会是单关键帧延长。 + 引导帧图像(1–64 张),与 start_frame/end_frame 互斥。按请求的时长计费;keyframes 请求绝不会被视为单关键帧延长。 @@ -288,11 +289,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 先前已完成生成的 UUID,用于复用为来源。供 ray-3.2 video_edit / video_reframe 使用。 + 先前已完成生成的 UUID,用于将其复用为来源。由 ray-3.2 video_edit / video_reframe 使用。 - MIME 类型。与 data 一起使用时为必填(对于视频来源还需与 url 一起使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 一起时为必填(视频来源还需与 url 一起提供,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -300,13 +301,13 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 循环播放生成的片段。仅创建时可用(type 为 video)。 + 循环生成的片段。仅限创建(type 为 video)。 ray-3.2 视频的输出分辨率。默认为 720p。360p 为草稿档位。HDR 需要 720p 或 1080p。 - 可能的值:`360p`、`540p`、`720p`、`1080p` + 可选值:`360p`、`540p`、`720p`、`1080p` @@ -318,11 +319,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 先前已完成生成的 UUID,用于复用为来源。供 ray-3.2 video_edit / video_reframe 使用。 + 之前已完成生成的 UUID,用于复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 - MIME 类型。与 data 搭配时为必填(对于视频来源,还需搭配 url,例如在 video_edit / video_reframe 上使用 video/mp4)。 + MIME 类型。与 data 一同使用时为必填(对于视频来源还需与 url 一同使用,例如 video_edit / video_reframe 中的 video/mp4)。 @@ -333,7 +334,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ 启用网络搜索依据 -根据 Router 在 `GET /v2/models/luma_2/ray-3.2/openapi.json` 提供的 schema 生成,该文档也是它在请求到达提供商之前用于校验调用的同一份文档。 +本文档由 Router 在 `GET /v2/models/luma_2/ray-3.2/openapi.json` 提供的 schema 生成,该 schema 也是请求到达提供商之前 Router 用于校验调用的同一份文档。 ### 输出 @@ -344,11 +345,11 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ 供程序化处理的机器可读失败代码 - 可能的值:`content_moderated`、`generation_failed`、`budget_exhausted`、`output_not_found` + 可能值:`content_moderated`、`generation_failed`、`budget_exhausted`、`output_not_found` - 人类可读的失败描述,仅在生成状态为 FAILED 时填充。生成成功时为 `null`。 + 人类可读的失败描述,仅在生成失败时填充。生成成功时为 `null`。 @@ -360,7 +361,7 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ - 一条生成的输出条目 + 一条已生成的输出条目 @@ -374,13 +375,13 @@ curl https://api.comfy.org/v2/models/luma_2/ray-3.2/requests/$REQUEST_ID \ 生成的当前状态 - 可能的值:`queued`、`processing`、`completed`、`failed` + 可能值:`queued`、`processing`、`completed`、`failed` 要执行的生成类型。image/image_edit 由 uni-1 / uni-1-max 模型生成;video/video_edit/video_reframe 由 ray-3.2 模型生成。 - 可能的值:`image`、`image_edit`、`video`、`video_edit`、`video_reframe` + 可能值:`image`、`image_edit`、`video`、`video_edit`、`video_reframe` ## 示例 diff --git a/zh/development/comfy-router/models/luma_2/uni-1-max/code.mdx b/zh/development/comfy-router/models/luma_2/uni-1-max/code.mdx index 7474460314..e6992bf19e 100644 --- a/zh/development/comfy-router/models/luma_2/uni-1-max/code.mdx +++ b/zh/development/comfy-router/models/luma_2/uni-1-max/code.mdx @@ -2,17 +2,18 @@ title: "搭配 Comfy Router 使用 Uni 1 Max" description: "通过 Comfy Router 调用 luma_2/uni-1-max:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "Uni 1 Max" -translationSourceHash: 90d7c51e +translationSourceHash: e88275ff translationFrom: development/comfy-router/models/luma_2/uni-1-max/code.mdx translationBlockHashes: "_intro": 86e0cfe7 "Quick start": dfff1d3d - "Schema": 4916d345 + "Schema": d7d29898 "Examples": f813a867 --- + {/* 已生成文件。由 `pnpm code-pages:gen` 从 router-schemas/luma_2/uni-1-max.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -153,9 +154,9 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ ### 输入 - 输出宽高比。ray-3.2 视频模型支持 9:16、3:4、1:1、4:3、16:9、21:9 这一子集。 + 输出宽高比。ray-3.2 视频模型支持以下子集:9:16、3:4、1:1、4:3、16:9、21:9。 - 可能的值:`3:1`、`2:1`、`21:9`、`16:9`、`3:2`、`4:3`、`1:1`、`3:4`、`2:3`、`9:16`、`1:2`、`1:3` + 可能值:`3:1`、`2:1`、`21:9`、`16:9`、`3:2`、`4:3`、`1:1`、`3:4`、`2:3`、`9:16`、`1:2`、`1:3` @@ -167,11 +168,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 先前已完成生成的 UUID,可复用为来源。供 ray-3.2 video_edit / video_reframe 使用。 + 先前已完成的生成结果的 UUID,用于复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 - MIME 类型。与 data 同时使用时为必填(对于视频来源,还需与 url 同时使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 搭配时必填(对于视频来源,还需与 url 搭配,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -185,7 +186,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ 输出图像格式 - 可能的值:`png`、`jpeg` + 可能值:`png`、`jpeg` @@ -193,7 +194,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 对图像或视频的引用。用于风格/内容引导、引导式生成、视频编辑/重新取景来源以及引导关键帧。必须且只能提供 generation_id、url 或 data 中的一个。 + 对图像或视频的引用。用于风格/内容引导、引导式生成、video-edit/video-reframe 来源以及引导关键帧。请从 generation_id、url 或 data 中恰好提供一个。 @@ -201,11 +202,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 先前已完成生成的 UUID,可复用为来源。供 ray-3.2 video_edit / video_reframe 使用。 + 先前已完成的生成结果的 UUID,用于复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 - MIME 类型。与 data 同时使用时为必填(对于视频来源,还需与 url 同时使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 搭配时必填(对于视频来源,还需与 url 搭配,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -215,27 +216,27 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ 风格预设 - 可能的值:`auto`、`manga` + 可能值:`auto`、`manga` 要执行的生成类型。image/image_edit 由 uni-1 / uni-1-max 模型生成;video/video_edit/video_reframe 由 ray-3.2 模型生成。 - 可能的值:`image`、`image_edit`、`video`、`video_edit`、`video_reframe` + 可能值:`image`、`image_edit`、`video`、`video_edit`、`video_reframe` - ray-3.2 的视频输出设置。此处仅对影响验证和计费的字段建模;其他字段(编辑控制、source_position)会原样转发给 Luma。 + ray-3.2 的视频输出设置。这里仅建模影响验证和计费的字段;其他字段(编辑控制项、source_position)会原样转发给 Luma。 - ray-3.2 video / video_edit 的片段时长。默认为 5s。HDR 生成(type 为 video)仅限 5s。 + ray-3.2 video / video_edit 的片段时长。默认为 5s。HDR 生成(type 为 video)受限于 5s。 - 可能的值:`5s`、`10s` + 可能值:`5s`、`10s` - 对图像或视频的引用。用于风格/内容引导、引导式生成、视频编辑/重新取景来源以及引导关键帧。必须且只能提供 generation_id、url 或 data 中的一个。 + 对图像或视频的引用。用于风格/内容引导、引导式生成、video-edit/video-reframe 来源以及引导关键帧。请从 generation_id、url 或 data 中恰好提供一个。 @@ -243,11 +244,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 先前已完成生成的 UUID,可复用为来源。供 ray-3.2 video_edit / video_reframe 使用。 + 先前已完成的生成结果的 UUID,用于复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 - MIME 类型。与 data 同时使用时为必填(对于视频来源,还需与 url 同时使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 搭配时必填(对于视频来源,还需与 url 搭配,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -255,19 +256,19 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 随 MP4 一并导出 EXR 文件。要求 hdr 为 true。在 video_reframe 中会被拒绝。 + 尚不可用:在 Luma 推出 EXR 交付之前,带 exr_export=true 的请求会以 400 被拒绝。将在 MP4 旁导出 EXR 文件(要求 hdr 为 true)。在 video_reframe 中会被拒绝。 - 以 HDR 渲染。要求 720p/1080p。在 video_reframe 中会被拒绝。 + 以 HDR 渲染。需要 720p/1080p。在 video_reframe 中会被拒绝。 - `keyframes` 的输出帧位置,长度相同;5s 时为 0–120,10s 时为 0–240。原样转发。 + `keyframes` 的输出帧位置,长度相同;5s 为 0–120,10s 为 0–240。原样转发。 - 引导帧图像(1–64),与 start_frame/end_frame 互斥。按请求的时长计费;keyframes 请求绝不会是单关键帧延长。 + 引导帧图像(1–64 张),与 start_frame/end_frame 互斥。按请求的时长计费;`keyframes` 请求绝不会被视为单关键帧扩展。 @@ -275,11 +276,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 先前已完成生成的 UUID,可复用为来源。供 ray-3.2 video_edit / video_reframe 使用。 + 先前已完成的生成结果的 UUID,用于复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 - MIME 类型。与 data 同时使用时为必填(对于视频来源,还需与 url 同时使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 搭配时必填(对于视频来源,还需与 url 搭配,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -287,17 +288,17 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 循环已生成的片段。仅创建时可用(type 为 video)。 + 循环生成的片段。仅创建时可用(type 为 video)。 - ray-3.2 视频的输出分辨率。默认为 720p。360p 是草稿档位。HDR 要求 720p 或 1080p。 + ray-3.2 视频的输出分辨率。默认为 720p。360p 是草稿档位。HDR 需要 720p 或 1080p。 - 可能的值:`360p`、`540p`、`720p`、`1080p` + 可能值:`360p`、`540p`、`720p`、`1080p` - 对图像或视频的引用。用于风格/内容引导、引导式生成、视频编辑/重新取景来源以及引导关键帧。必须且只能提供 generation_id、url 或 data 中的一个。 + 对图像或视频的引用。用于风格/内容引导、引导式生成、video-edit/video-reframe 来源以及引导关键帧。请从 generation_id、url 或 data 中恰好提供一个。 @@ -305,11 +306,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 此前已完成的生成 UUID,可复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 + 之前已完成生成的 UUID,用于作为来源复用。由 ray-3.2 的 video_edit / video_reframe 使用。 - MIME 类型。与 data 一起使用时必填(对于视频来源,还需与 url 一起使用,例如在 video_edit / video_reframe 上使用 video/mp4)。 + MIME 类型。与 data 一起使用时为必填(对于视频来源还需与 url 一起提供,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -317,10 +318,10 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 启用网络搜索接地 + 启用搜索 grounding -根据 Router 在 `GET /v2/models/luma_2/uni-1-max/openapi.json` 提供的 schema 生成,该文档也是 Router 在请求到达提供商之前用于校验调用的同一份文档。 +由 Router 在 `GET /v2/models/luma_2/uni-1-max/openapi.json` 提供的 schema 生成,该文档与它在请求到达提供商之前用于校验调用的文档相同。 ### 输出 @@ -329,7 +330,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 供程序化处理的机器可读失败代码 + 用于程序化处理的机器可读失败代码 可能的值:`content_moderated`、`generation_failed`、`budget_exhausted`、`output_not_found` @@ -347,15 +348,15 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1-max/requests/$REQUEST_ID \ - 一个已生成的输出条目 + 一个生成的输出条目 - 媒体类型(例如 image) + 媒体类型(例如 图像) - 预签名 URL(有效期 1 小时) + 预签名 URL(1 小时有效期) diff --git a/zh/development/comfy-router/models/luma_2/uni-1/code.mdx b/zh/development/comfy-router/models/luma_2/uni-1/code.mdx index 64cd355e54..f5b01e9841 100644 --- a/zh/development/comfy-router/models/luma_2/uni-1/code.mdx +++ b/zh/development/comfy-router/models/luma_2/uni-1/code.mdx @@ -2,17 +2,18 @@ title: "将 Uni 1 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 luma_2/uni-1:端点、请求形状以及 Router 返回的响应。" sidebarTitle: "Uni 1" -translationSourceHash: 5f33116a +translationSourceHash: 897d09ee translationFrom: development/comfy-router/models/luma_2/uni-1/code.mdx translationBlockHashes: "_intro": a9aaf4ab "Quick start": 9d667b90 - "Schema": 6ccb738a + "Schema": fe7e100f "Examples": f993c215 --- + {/* 已生成文件。由 `pnpm code-pages:gen` 从 router-schemas/luma_2/uni-1.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -153,13 +154,13 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ ### 输入 - 输出宽高比。ray-3.2 视频模型支持 9:16、3:4、1:1、4:3、16:9、21:9 这一子集。 + 输出宽高比。ray-3.2 视频模型支持其中的子集:9:16、3:4、1:1、4:3、16:9、21:9。 - 可能的值:`3:1`、`2:1`、`21:9`、`16:9`、`3:2`、`4:3`、`1:1`、`3:4`、`2:3`、`9:16`、`1:2`、`1:3` + 可选值:`3:1`、`2:1`、`21:9`、`16:9`、`3:2`、`4:3`、`1:1`、`3:4`、`2:3`、`9:16`、`1:2`、`1:3` - 用于风格/内容引导的参考图像。类型为 'image' 时最多 9 张,类型为 'image_edit' 时最多 8 张。 + 用于风格/内容引导的参考图像。type 为 'image' 时最多 9 个,type 为 'image_edit' 时最多 8 个。 @@ -167,11 +168,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 之前已完成生成的 UUID,可复用为来源。用于 ray-3.2 的 video_edit / video_reframe。 + 先前已完成的生成任务的 UUID,用于复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 - MIME 类型。与 data 一起使用时必填(视频来源还需与 url 一起使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 一起使用时必填(对于视频来源还需与 url 一起提供,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -179,13 +180,13 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 要使用的模型。uni-1 / uni-1-max 用于图像生成,ray-3.2 用于视频生成、编辑和重新取景。 + 要使用的模型。图像生成使用 uni-1 / uni-1-max,视频生成、编辑和重构图使用 ray-3.2。 输出图像格式 - 可能的值:`png`、`jpeg` + 可选值:`png`、`jpeg` @@ -193,7 +194,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 对图像或视频的引用。用于风格/内容引导、引导式生成、video-edit/video-reframe 来源以及引导关键帧。请仅提供 generation_id、url 或 data 三者之一。 + 对图像或视频的引用。用于风格/内容引导、引导式生成、video-edit/video-reframe 来源以及引导关键帧。请从 generation_id、url 或 data 中恰好提供一个。 @@ -201,11 +202,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 之前已完成生成的 UUID,可复用为来源。用于 ray-3.2 的 video_edit / video_reframe。 + 先前已完成的生成任务的 UUID,用于复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 - MIME 类型。与 data 一起使用时必填(视频来源还需与 url 一起使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 一起使用时必填(对于视频来源还需与 url 一起提供,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -215,27 +216,27 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ 风格预设 - 可能的值:`auto`、`manga` + 可选值:`auto`、`manga` 要执行的生成类型。image/image_edit 由 uni-1 / uni-1-max 模型生成;video/video_edit/video_reframe 由 ray-3.2 模型生成。 - 可能的值:`image`、`image_edit`、`video`、`video_edit`、`video_reframe` + 可选值:`image`、`image_edit`、`video`、`video_edit`、`video_reframe` - ray-3.2 的视频输出设置。此处仅对影响验证和计费的字段建模;其他字段(编辑控制项、source_position)会原样转发给 Luma。 + ray-3.2 的视频输出设置。这里只对影响验证和计费的字段建模;其他字段(编辑控制项、source_position)会原样转发给 Luma。 - ray-3.2 video / video_edit 的片段时长。默认 5s。HDR 生成(类型 video)仅限 5s。 + ray-3.2 video / video_edit 的片段时长。默认为 5s。HDR 生成(type 为 video)仅限 5s。 - 可能的值:`5s`、`10s` + 可选值:`5s`、`10s` - 对图像或视频的引用。用于风格/内容引导、引导式生成、video-edit/video-reframe 来源以及引导关键帧。请仅提供 generation_id、url 或 data 三者之一。 + 对图像或视频的引用。用于风格/内容引导、引导式生成、video-edit/video-reframe 来源以及引导关键帧。请从 generation_id、url 或 data 中恰好提供一个。 @@ -243,11 +244,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 之前已完成生成的 UUID,可复用为来源。用于 ray-3.2 的 video_edit / video_reframe。 + 先前已完成的生成任务的 UUID,用于复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 - MIME 类型。与 data 一起使用时必填(视频来源还需与 url 一起使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 一起使用时必填(对于视频来源还需与 url 一起提供,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -255,11 +256,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 随 MP4 一并导出 EXR 文件。要求 hdr 为 true。在 video_reframe 中会被拒绝。 + 尚不可用:在 Luma 提供 EXR 交付之前,带有 exr_export=true 的请求会以 400 被拒绝。届时会在 MP4 之外额外导出 EXR 文件(需要 hdr 为 true)。video_reframe 不支持此字段。 - 以 HDR 渲染。要求 720p/1080p。在 video_reframe 中会被拒绝。 + 以 HDR 渲染。需要 720p/1080p。video_reframe 不支持此字段。 @@ -267,7 +268,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 引导帧图像(1–64),与 start_frame/end_frame 互斥。按请求的时长计费;keyframes 请求绝不会被视为单关键帧扩展。 + 引导帧图像(1–64 个),与 start_frame/end_frame 互斥。按请求的时长计费;keyframes 请求绝不会被视为单关键帧扩展。 @@ -275,11 +276,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 之前已完成生成的 UUID,可复用为来源。用于 ray-3.2 的 video_edit / video_reframe。 + 先前已完成的生成任务的 UUID,用于复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 - MIME 类型。与 data 一起使用时必填(视频来源还需与 url 一起使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 一起使用时必填(对于视频来源还需与 url 一起提供,例如 video_edit / video_reframe 上的 video/mp4)。 @@ -287,17 +288,17 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 循环播放生成的片段。仅创建时可用(类型 video)。 + 循环生成的片段。仅限创建时使用(type 为 video)。 - ray-3.2 video 的输出分辨率。默认为 720p。360p 是草稿档位。HDR 要求 720p 或 1080p。 + ray-3.2 视频的输出分辨率。默认为 720p。360p 为草稿档位。HDR 需要 720p 或 1080p。 - 可能的值:`360p`、`540p`、`720p`、`1080p` + 可选值:`360p`、`540p`、`720p`、`1080p` - 对图像或视频的引用。用于风格/内容引导、引导式生成、video-edit/video-reframe 来源以及引导关键帧。请仅提供 generation_id、url 或 data 三者之一。 + 对图像或视频的引用。用于风格/内容引导、引导式生成、video-edit/video-reframe 来源以及引导关键帧。请从 generation_id、url 或 data 中恰好提供一个。 @@ -305,11 +306,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 此前已完成的生成 UUID,可复用为来源。供 ray-3.2 的 video_edit / video_reframe 使用。 + 先前已完成的生成任务的 UUID,可作为来源复用。用于 ray-3.2 的 video_edit / video_reframe。 - MIME 类型。与 data 一同使用时为必填(对于视频来源还需与 url 一同使用,例如 video_edit / video_reframe 上的 video/mp4)。 + MIME 类型。与 data 一起使用时必填(对于视频来源,与 url 一起使用时也必填,例如在 video_edit / video_reframe 上为 video/mp4)。 @@ -317,10 +318,10 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 启用 Web 搜索接地 + 启用 Web 搜索 grounding -由 Router 在 `GET /v2/models/luma_2/uni-1/openapi.json` 提供并据此生成的 schema,与它在请求到达提供商之前校验调用时所使用的是同一份文档。 +生成自 Router 在 `GET /v2/models/luma_2/uni-1/openapi.json` 提供的 schema,该文档与请求到达提供商之前用于校验调用的文档相同。 ### 输出 @@ -329,13 +330,13 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 用于程序化处理的机器可读失败代码 + 供程序化处理的机器可读失败代码 可能的值:`content_moderated`、`generation_failed`、`budget_exhausted`、`output_not_found` - 人类可读的失败描述,仅在 FAILED 生成时填充。成功时为 `null`。 + 人类可读的失败描述,仅在生成状态为 FAILED 时填充。成功时为 `null`。 @@ -343,7 +344,7 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 使用的模型 + 所使用的模型 @@ -351,11 +352,11 @@ curl https://api.comfy.org/v2/models/luma_2/uni-1/requests/$REQUEST_ID \ - 媒体类型(例如 image) + 媒体类型(例如:图像) - 预签名 URL(1 小时有效) + 预签名 URL(1 小时有效期) diff --git a/zh/development/comfy-router/reference.mdx b/zh/development/comfy-router/reference.mdx index 1caa523e99..7402b87f11 100644 --- a/zh/development/comfy-router/reference.mdx +++ b/zh/development/comfy-router/reference.mdx @@ -2,17 +2,17 @@ title: "Comfy Router API 参考" description: "每个 Comfy Router 端点、参数、响应体和错误分类,均由 Comfy API 契约生成。" sidebarTitle: "API 参考" -translationSourceHash: 1b971d1c +translationSourceHash: b042583a translationFrom: development/comfy-router/reference.mdx translationBlockHashes: "_intro": 3f6e5d23 - "Endpoints": fbcaaf0e + "Endpoints": 2d5cf8c1 "Error buckets": 36170340 "Response headers": 403c8bf5 - "Pre-flight cost estimates": 3ecabac6 + "Pre-flight cost estimates": cc2dc53c "Result assets": 65fc939b "Per-model input and output schemas": 61c6bde8 - "Schemas": 77cfa4db + "Schemas": 29f3d282 --- @@ -27,6 +27,7 @@ translationBlockHashes: + {/* 生成的文件:请勿手动编辑。 @@ -50,14 +51,14 @@ Comfy API 密钥也可以作为 Bearer token 发送。当同时提供两个凭 **列出 Comfy Router 可运行的模型。** -列出可用的模型 ID 和计费信息。当 `has_more` 为 true 时使用 `next_cursor`。 +列出可用的模型 ID 和计费信息。当 `has_more` 为 true 时,使用 `next_cursor` 继续翻页。 **参数** 不透明分页游标。 - 类型:[`RouterPageCursor`](#routerpagecursor)。作为 `next_cursor` 返回的不透明游标,长度为 1–512 个字符 + 类型:[`RouterPageCursor`](#routerpagecursor):作为 `next_cursor` 返回的不透明游标,长度 1–512 个字符 @@ -67,65 +68,65 @@ Comfy API 密钥也可以作为 Bearer token 发送。当同时提供两个凭 - 调用方从先前的 `200` 响应中持有的 `ETag`。 + 调用方从之前的 `200` 响应中持有的 `ETag`。 **响应** - 成功:模型目录中的一页。 + 成功:模型目录的一页。 - 响应体:[`RouterModelListResponse`](#routermodellistresponse);响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` + 正文:[`RouterModelListResponse`](#routermodellistresponse):响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` - 未修改:页面未发生变化,仍与调用方在 `If-None-Match` 中发送的 `ETag` 所对应的版本一致。 + 未修改:自调用方在 `If-None-Match` 中发送的 `ETag` 以来,页面没有变化。 响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` - 请求无效。请检查错误类型和请求体。 + 无效请求。请检查错误类型和请求正文。 - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse):响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 凭证缺失或无效。 + 凭据缺失或无效。 - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse):响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 该调用方或模型不允许此请求。 - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse):响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router 暂时不可用。请采用退避策略重试。 + Router 暂时不可用。请使用退避策略重试。 - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse):响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` ### `GET /v2/models/{provider}/{model}` -**按规范模型 ID 读取单个合作伙伴模型的目录条目。** +**通过规范模型 ID 读取某个合作伙伴模型的目录条目。** 无需列出完整目录即可读取单个模型的详情。 **参数** - 规范模型 ID `{provider}/{model}` 中的提供商部分。 + 规范 `{provider}/{model}` 模型 ID 中的提供商部分。 - 类型:[`RouterProviderSegment`](#routerprovidersegment)。字母数字 slug,例如 `anthropic`,最多 64 个字符 + 类型:[`RouterProviderSegment`](#routerprovidersegment),字母数字短标识,例如 `anthropic`,最多 64 个字符 - 规范模型 ID `{provider}/{model}` 中的模型部分。 + 规范 `{provider}/{model}` 模型 ID 中的模型部分。 - 类型:[`RouterModelSegment`](#routermodelsegment)。字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 + 类型:[`RouterModelSegment`](#routermodelsegment),字母数字短标识,例如 `claude-opus-4-6`,最多 128 个字符 @@ -135,13 +136,13 @@ Comfy API 密钥也可以作为 Bearer token 发送。当同时提供两个凭 **响应** - OK:该模型的目录条目。 + OK - 该模型的目录条目。 - 响应体:[`RouterModelDetail`](#routermodeldetail)。响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` + 正文:[`RouterModelDetail`](#routermodeldetail) -- 响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` - 未修改:自调用方在 `If-None-Match` 中发送 `ETag` 以来,该条目没有变化。 + Not Modified - 自调用方在 `If-None-Match` 中发送的 `ETag` 以来,该条目未发生变化。 响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` @@ -149,55 +150,55 @@ Comfy API 密钥也可以作为 Bearer token 发送。当同时提供两个凭 凭证缺失或无效。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 该调用方或模型不允许发起此请求。 + 此调用方或模型无权发出该请求。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 未找到该模型 ID。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` Router 暂时不可用。请使用退避策略重试。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` ### `POST /v2/models/{provider}/{model}` **按规范模型 ID 同步运行合作伙伴模型。** -运行模型,并在同一个响应中收到已完成的结果。 +运行模型并在同一个响应中收到其已完成的结果。 **参数** 规范 `{provider}/{model}` 模型 ID 中的提供商部分。 - 类型:[`RouterProviderSegment`](#routerprovidersegment) —— 字母数字 slug,例如 `anthropic`,最长 64 个字符 + 类型:[`RouterProviderSegment`](#routerprovidersegment) -- 字母数字 slug,例如 `anthropic`,最多 64 个字符 规范 `{provider}/{model}` 模型 ID 中的模型部分。 - 类型:[`RouterModelSegment`](#routermodelsegment) —— 字母数字 slug,例如 `claude-opus-4-6`,最长 128 个字符 + 类型:[`RouterModelSegment`](#routermodelsegment) -- 字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 - 由调用方生成的键,用于安全地重试同一次逻辑调用。 + 由调用方生成的密钥,用于安全地重试同一个逻辑调用。 - 1 至 255 个字符 + 1–255 个字符 - 选择一个替代提供商来提供该模型,而不是使用其当前默认提供商;`fal`、`wavespeed`、`runware` 和 `higgsfield` 是可选替代项,`GET /v2/models/{provider}/{model}` 会报告某个模型支持其中的哪些。其拒绝按固定顺序检查,靠前的拒绝无论靠后的拒绝是否成立都会直接作答:无法识别的值(根本不是已注册的提供商)会以 `400` 拒绝;然后,在请求体选择 multipart 操作(编辑)的请求上,替代提供商会以 `409` 拒绝,`detail` 以 "this request's `image` selects the edit operation" 开头,但仅当该提供商针对此模型的转换器无法提供该操作时才会如此(若该线路的转换器确实支持该媒体,则正常继续);然后,在已解析出自带密钥(BYOK)凭据的请求上,任何替代提供商都会以 `409` 拒绝,`detail` 以 `this request resolved a BYOK credential` 开头(参见该响应),无论该提供商是否提供此模型;然后是所指定提供商自身的准入校验,当该提供商未对你开启时以 `403` 及 `error_type: not_enabled` 拒绝,当无法评估该准入校验时以 `503` 及 `error_type: service_unavailable` 拒绝;只有越过以上四项后,一个真实但不具备此模型线路的提供商才会以 `400` 及 `error_type: invalid_input` 拒绝,与无法识别的值的答复相同。在自带密钥请求、请求体选择 multipart 操作的请求以及 `strict_mode=true` 下,`fallback_provider` 是惰性的,而不会被拒绝。 + 选择一个备用提供商来服务此模型,而不是其当前的默认提供商;`fal`、`wavespeed`、`runware` 和 `higgsfield` 是备选提供商,`GET /v2/models/{provider}/{model}` 会报告给定模型支持其中哪些。其拒绝按固定顺序检查,较早的拒绝无论较晚的拒绝是否成立都会作出应答:无法识别的值(根本不是已注册的提供商)会被拒绝并返回 `400`;然后,如果某个请求的请求体选择了 multipart 操作(一次编辑),则该请求上的备用提供商会以 `409` 被拒绝,其 `detail` 以“this request's `image` selects the edit operation”开头,但仅当该提供商针对此模型的转换器无法服务该操作时才会如此——转换器确实支持该媒体的通路会正常进行;然后,任何解析出自带密钥凭据的请求上的备用提供商都会以 `409` 被拒绝,其 `detail` 以 `this request resolved a BYOK credential` 开头(参见该响应),无论该提供商是否服务此模型;然后是所指定提供商自身的准入检查,当该提供商未对你启用时以 `error_type: not_enabled` 拒绝并返回 `403`,当无法评估该检查时以 `error_type: service_unavailable` 拒绝并返回 `503`;只有通过以上全部四项之后,一个没有针对此模型的通路的真实提供商才会以 `error_type: invalid_input` 被拒绝并返回 `400`,与无法识别的值得到的应答相同。在自带密钥请求上、在请求体选择了 multipart 操作的请求上以及在 `strict_mode=true` 下,`fallback_provider` 是无效的,而不是被拒绝。 @@ -207,287 +208,287 @@ Comfy API 密钥也可以作为 Bearer token 发送。当同时提供两个凭 - 控制当首次尝试因可归因于 Router 或所尝试提供商的原因失败时,Router 是否对该模型的其他已注册提供商重试此调用。省略,或设为 `false` 以外的任何值,都会保持回退开启;`false` 将其关闭。成功的回退响应会带有 `X-Comfy-Router-Fallback-Provider`。在已解析出自带密钥凭据的请求上,无论此参数如何设置,回退都不可用:尝试根本不会发起,首次失败会原样返回给你,这属于惰性而非拒绝:不会由此产生 `409`。出于同样的原因,在请求体选择 multipart 操作的请求上以及 `strict_mode=true` 下也同样如此:这两种情况都会把调用绑定到某个无法在另一个提供商上忠实重放的提供商,因此回退只是被跳过,而不是被拒绝。只有显式指定 `model_provider` 才会以该 `409` 拒绝,而且与这种无条件的跳过不同,它的 multipart `409` 仅适用于转换器无法提供该操作的线路。 + 控制当第一次尝试因可归因于 Router 或所尝试的提供商的原因而失败时,Router 是否针对该模型的其他已注册提供商重试此调用。省略该参数,或任何不等于 `false` 的值,都会保持回退开启;`false` 会将其关闭。成功的回退响应会携带 `X-Comfy-Router-Fallback-Provider`。在解析出自带密钥凭据的请求上,无论此参数说什么,回退都不可用——只是不会发起尝试,第一次失败会原样返回给你,这是无效而非拒绝:不会由此产生 `409`。出于同样的原因,在请求体选择了 multipart 操作的请求上以及在 `strict_mode=true` 下也是如此——每一种情况都会把调用绑定到某一个提供商上,而该调用无法被如实地重放到另一个提供商,因此回退只是被跳过,而不是被拒绝。只有显式的 `model_provider` 才会以该 `409` 被拒绝,而且与这种无条件的跳过不同,其 multipart `409` 仅适用于转换器无法服务该操作的通路。 - 选择拒绝此模型输入 schema 未声明的顶层请求体字段,而不是接受它;嵌套字段不做检查,而对于 schema 允许未声明字段或没有已编写 schema 的模型,或者在以 `strict_mode=true` 发送的已执行提交上,都不会拒绝任何内容。 + 选择拒绝此模型的输入 schema 未声明的顶层请求体字段,而不是接受它;不会检查嵌套字段,并且对于 schema 允许未声明字段或没有编写 schema 的模型,或者对于使用 `strict_mode=true` 发送的已排队提交,都不会拒绝任何内容。 默认值:False **请求体** -`application/json` —— [`RouterModelInput`](#routermodelinput)(必填) +`application/json` -- [`RouterModelInput`](#routermodelinput)(必填) -合作伙伴模型的原生 JSON 输入。没有 `model_provider` 时,请求会在模型的默认提供商上执行原生分发,此请求体即为模型自身的原生 schema,原样转发(`strict_mode` 在此处无意义,不会改变任何内容)。当 `model_provider` 选择替代提供商且 `strict_mode=false`(默认值)时,请求体会在发送前被转换为该提供商的实际 schema:任何无法精确表达的原生字段都会被丢弃,并通过响应的 `X-Comfy-Router-Dropped-Params` 头披露,绝不会静默丢弃。当 `model_provider` 选择替代提供商且 `strict_mode=true` 时,不会执行任何转换:请求体必须已经是该替代提供商自身的实际 schema,而不是此模型的原生 schema(参见 `strict_mode`),并会被原样转发。请求体自身的字段也决定 Router 在支持多种操作的模型上运行哪种操作:对于可编辑的图像模型,包含输入图像会将其从文生图切换为图生图(编辑)操作,该操作可能按其自身的费率计费;对于 Seedance 视频模型,`content[].role` 决定操作(首帧图像选择图生视频,参考图像或片段选择参考生视频)。在原生分发下,Seedance 计费依据 `content` 中的媒体类型而非角色:含任何视频输入的请求按视频转视频计费,否则含任何图像的按图生视频计费,否则按文生视频计费,但由 `draft_task` 项产生的最终渲染会按其渲染的 Draft 的操作计费;有些模型对文生视频和图生视频收取相同费率。当 `model_provider` 选择替代提供商时,每种带条件的操作可能会按该提供商自身的费率计费。 +合作伙伴模型的原生 JSON 输入。在没有 `model_provider` 的情况下,请求会在模型的默认提供商上执行原生分发,此请求体就是模型自己的原生 schema,会原样转发(`strict_mode` 在此处没有意义,不会改变任何东西)。当 `model_provider` 选择备用提供商且 `strict_mode=false`(默认值)时,请求体会在发送之前被转换为该提供商的真实 schema——任何无法精确表达的原生字段都会被丢弃,并通过响应的 `X-Comfy-Router-Dropped-Params` 头披露,绝不会静默丢弃。当 `model_provider` 选择备用提供商且 `strict_mode=true` 时,不会执行任何转换:请求体必须已经是该备用提供商自己的真实 schema,而不是此模型的原生 schema(参见 `strict_mode`),并且会原样转发。请求体自身的字段还会选择 Router 在支持多种操作的模型上运行哪一种操作:对于可编辑的图像模型,包含输入图像会将其从文生图切换为图生图(编辑)操作,该操作可能按其自己的费率计费;对于 Seedance 视频模型,`content[].role` 会选择操作(首帧图像选择图生视频,参考图像或视频片段选择参考生视频)。在原生分发中,Seedance 计费依据 `content` 中的媒体类型而非角色:带有任何视频输入的请求按视频转视频计费,否则带有任何图像输入的请求按图生视频计费,否则按文生视频计费,但由 `draft_task` 项生成的最终渲染会按其渲染的 Draft 所属的操作计费;有些模型对文生视频和图生视频收取相同的费率。当 `model_provider` 选择备用提供商时,每种带条件的操作都可能按该提供商自己的费率计费。 **响应** - OK - 不带 `model_provider`,或带 `model_provider` 且 `strict_mode=false`(默认值;在可能时转换回该模型的原生契约,若转换失败则回退到备选提供商自身的原始响应,失败会被记录日志,绝不会静默处理)时,形状为该模型自身的原生输出;当 `strict_mode=true` 时,则原样返回备选提供商的响应。对于合作伙伴直接以字节形式应答生成的模型,响应体是这些字节,并采用合作伙伴自己的 `Content-Type` 而非 `application/json`;请根据响应的 `Content-Type` 分支处理,不要假定返回的是 JSON 文档。 + OK:不带 `model_provider`,或带 `model_provider` 且 `strict_mode=false`(默认值,在可能时转换回该模型自身的原生契约,若转换失败则回退到备用提供商自己的原始响应:会记录日志,绝不静默),形状为该模型自身的原生输出;当 `strict_mode=true` 时,返回的是备用提供商的响应,原样返回。对于合作伙伴直接以字节形式返回生成结果的模型,响应体就是这些字节,使用合作伙伴自己的 `Content-Type` 而非 `application/json`;请根据响应的 `Content-Type` 分支处理,不要假定响应是 JSON 文档。 - Body: [`RouterModelOutput`](#routermodeloutput) 或原始字节(`*/*`) -- Headers: `X-Comfy-Request-Id`、`X-Content-Type-Options`、`X-Comfy-Router-Fallback-Provider`、`X-Comfy-Router-Provider`、`X-Comfy-Router-Dropped-Params`、`X-Comfy-Credits-Used`、`Idempotent-Replayed`、`X-Committed-Spend-Limit`、`X-Committed-Spend-Current`、`X-Committed-Spend-Remaining` + Body: [`RouterModelOutput`](#routermodeloutput) 或原始字节(`*/*`) -- Headers: `X-Comfy-Request-Id`, `X-Content-Type-Options`, `X-Comfy-Router-Fallback-Provider`, `X-Comfy-Router-Provider`, `X-Comfy-Router-Dropped-Params`, `X-Comfy-Credits-Used`, `Idempotent-Replayed`, `X-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining` 请求无效。请检查错误类型和请求体。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`X-Comfy-Upstream-Status`、`X-Comfy-Upstream-Detail`、`X-Comfy-Refusal-Subject`、`Idempotent-Replayed` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status`, `X-Comfy-Upstream-Detail`, `X-Comfy-Refusal-Subject`, `Idempotent-Replayed` - 凭证缺失或无效。 + 凭据缺失或无效。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - Router 请求层面的失败 - 请求从未到达模型,或因模型自身未反馈的原因而失败。 + Router 请求级别的失败:请求从未到达模型,或由于模型自身未反馈的原因而失败。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 该调用方或该模型不允许此请求。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` 未找到该模型 ID。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 请检查 `X-Comfy-Error-Type`:`concurrency_limit_exceeded` 表示原始调用仍在运行,因此请等待 `Retry-After` 后复用同一个 key;`invalid_input` 则需要一个新的 key。此路由上的两种 `invalid_input` 冲突都完全与 key 无关,且任何新 key 都无法消除其中任何一种:当请求体选择的是某个多部分操作(编辑),而该提供商针对此模型的转换器无法处理时,指定备选提供商的 `model_provider` 会被拒绝,其 `detail` 以 "this request's `image` selects the edit operation" 开头;以及在此之后检查的,当请求已经为路径中的提供商解析出自备密钥(BYOK)凭证时会被拒绝,其 `detail` 以 `this request resolved a BYOK credential` 开头。请去掉 `model_provider`,或不带 BYOK 凭证发送请求,并且(对于多部分的情况)不带编辑操作。 + 检查 `X-Comfy-Error-Type`:`concurrency_limit_exceeded` 表示原始调用仍在运行,因此请等待 `Retry-After` 并复用同一个 key;`invalid_input` 则需要新的 key。此路由上的两种 `invalid_input` 冲突与 key 完全无关,换用新 key 也都无法消除:当请求体选择了某个 multipart 操作(编辑),而该提供商针对此模型的转换器无法处理该操作时,指定备用提供商的 `model_provider` 会被拒绝,其 `detail` 以 "this request's `image` selects the edit operation" 开头;另一种在此之后检查的情况是,当请求已经为路径中的提供商解析出自带密钥(BYOK)凭据时也会被拒绝,其 `detail` 以 `this request resolved a BYOK credential` 开头。请去掉 `model_provider`,或在不带 BYOK 凭据的情况下发送请求,并且(对于 multipart 的情况)不带该编辑操作。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(当 `concurrency_limit_exceeded` 时) + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(当 `concurrency_limit_exceeded` 时) 请求体过大。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 请求内容未通过模型 schema 的校验而被拒绝。 + 请求内容未通过该模型 schema 的校验而被拒绝。 - Body: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Idempotent-Replayed` + Body: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Idempotent-Replayed` - 请检查 `X-Comfy-Error-Type`:`concurrency_limit_exceeded` 表示应减少并发中的调用;`rate_limited` 表示应等待配额窗口。 + 检查 `X-Comfy-Error-Type`:`concurrency_limit_exceeded` 表示需要减少进行中的调用;`rate_limited` 表示需要等待配额窗口。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`X-Committed-Spend-Limit`、`X-Committed-Spend-Current`、`X-Committed-Spend-Remaining`、`X-Model-Concurrency-Limit`、`X-Model-Concurrency-Current`、`X-Model-Concurrency-Remaining` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining`, `X-Model-Concurrency-Limit`, `X-Model-Concurrency-Current`, `X-Model-Concurrency-Remaining` - 提供商自身的响应无法被转换为结果(`provider_error`)。 + 提供商自身的响应无法转换为结果(`provider_error`)。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`X-Comfy-Upstream-Status` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status` - Router 暂时不可用。请退避重试。 + Router 暂时不可用。请使用退避策略重试。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(仅容量拒绝时) + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(仅容量拒绝时) 请求超过了截止时间。重试之前请先检查错误类型。 - Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`X-Comfy-Upstream-Status`、`Retry-After` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status`, `Retry-After` ### `POST /v2/models/{provider}/{model}/estimate` -**在运行模型调用之前估算其价格,而无需实际运行。** +**在运行之前为模型调用定价,而不实际运行它。** -返回一份以美元计的预检估算,说明在此模型上运行该请求体会产生多少费用,其定价依据与实际运行计费所依据的同一份费率卡片。这是估算值,而非最终费用:你实际支付的是工作区用量与账单记录中的结算费用。请求体会先按模型的输入 schema 进行校验,与默认运行(不带 `strict_mode`、不带 `reject_unknown_fields`)的校验方式一致,因此不符合模型 schema 的请求体在这里与在运行时一样返回 `422`;不会向提供商派发任何请求,也不会产生任何费用。该结果并非价格锁定:它按 `pricing_as_of` 时点生效的费率计价,而实际运行按其计费定价时生效的费率收费。在该功能逐步推出期间,该路由会返回 `403`,并带有 `error_type: not_enabled`。 +返回一个预检估算(以美元计),说明在此模型上运行此请求体将花费多少,并基于实际运行计费所依据的同一费率卡定价(对于按供应商报告的成本计费的模型,则改为根据供应商公布的价格表进行估算)。它是估算值,而不是最终费用:您实际支付的是工作区使用与计费记录中的结算费用。请求体会先按模型的输入 schema 进行校验,与默认运行(不使用 `strict_mode`,不使用 `reject_unknown_fields`)的校验方式一致,因此不符合模型 schema 的请求体在此处与在运行时同样会返回 `422`;不会向提供商派发任何内容,也不会产生任何费用。该结果并非价格锁定:它是按 `pricing_as_of` 时生效的费率定价的,而运行则按计费评级时生效的费率收费。在该功能逐步推出期间,该路由会返回 `403`,并带有 `error_type: not_enabled`。 **参数** - 规范的 `{provider}/{model}` 模型 ID 中的小写提供商标识段,即所运行模型所属的合作伙伴。 + 规范 `{provider}/{model}` 模型 ID 的小写提供商段,即正在运行其模型的合作伙伴。 - 类型:[`RouterProviderSegment`](#routerprovidersegment):字母数字标识,例如 `anthropic`,最多 64 个字符 + 类型:[`RouterProviderSegment`](#routerprovidersegment) -- 字母数字 slug,例如 `anthropic`,最多 64 个字符 - 规范的 `{provider}/{model}` 模型 ID 中的小写模型标识段,即在该提供商下要运行的模型。 + 规范 `{provider}/{model}` 模型 ID 的小写模型段,即在该提供商内运行的模型。 - 类型:[`RouterModelSegment`](#routermodelsegment):字母数字标识,例如 `claude-opus-4-6`,最多 128 个字符 + 类型:[`RouterModelSegment`](#routermodelsegment) -- 字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 - 选择用于提供此模型的替代提供商,而非其当前的默认提供商。 + 选择为该模型提供服务的替代提供商,而不是其当前的默认提供商。 **请求体** -`application/json`:[`RouterModelInput`](#routermodelinput)(必填) +`application/json` -- [`RouterModelInput`](#routermodelinput)(必填) -合作伙伴模型的原生 JSON 输入,与此模型的同步路由所接受的请求体完全相同。它会按模型自身的输入 schema 进行校验,与默认运行的校验方式一致(此路由不接受 `strict_mode` 或 `reject_unknown_fields`),并由其自身字段(输出数量、输入图像所选的操作)决定计价内容。 +合作伙伴模型的原生 JSON 输入,与同步路由为该模型接受的请求体相同。它会按照模型自身的输入 schema 进行校验,方式与默认运行的校验一致(此路由不接受 `strict_mode` 或 `reject_unknown_fields`),并由其自身字段(输出数量、输入图像所选的操作)决定定价内容。 **响应** 报价。 - 响应体:[`RouterCostEstimate`](#routercostestimate);响应头:`X-Comfy-Request-Id` + 响应体:[`RouterCostEstimate`](#routercostestimate) -- 响应头:`X-Comfy-Request-Id` - 请求无效。请检查错误类型和请求体。 + 无效请求。请检查错误类型和请求体。 - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 凭据缺失或无效。 - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 此调用方或模型不允许该请求。 + 该调用方或模型不允许此请求。 - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 未找到该模型 ID。 - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 请求体过大。 - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 估算请求的请求体被模型 schema 拒绝,或其指定的模型与路径中的模型不一致。 + 估算的请求体被模型的 schema 拒绝,或指定的模型与路径中的模型不同。 - 响应体:[`RouterValidationErrorResponse`](#routervalidationerrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router 暂时不可用。请使用退避策略重试。 + Router 暂时不可用。请退避重试。 - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(仅在容量不足被拒时) + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(仅容量拒绝时) ### `GET /v2/models/{provider}/{model}/openapi.json` -**以 OpenAPI 文档的形式读取单个合作伙伴模型的输入和输出 Schema。** +**以 OpenAPI 文档形式读取单个合作伙伴模型的输入和输出 schema。** -以独立的 OpenAPI 文档形式读取单个模型的输入和输出 Schema。 +以独立 OpenAPI 文档形式读取单个模型的输入和输出 schema。 **参数** - 规范 `{provider}/{model}` 模型 ID 中的提供商部分。 + 规范模型 ID `{provider}/{model}` 中表示提供商的部分。 - 类型:[`RouterProviderSegment`](#routerprovidersegment):字母数字 slug,例如 `anthropic`,最多 64 个字符 + 类型:[`RouterProviderSegment`](#routerprovidersegment) -- 字母数字短标识,例如 `anthropic`,最多 64 个字符 - 规范 `{provider}/{model}` 模型 ID 中的模型部分。 + 规范模型 ID `{provider}/{model}` 中表示模型的部分。 - 类型:[`RouterModelSegment`](#routermodelsegment):字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 + 类型:[`RouterModelSegment`](#routermodelsegment) -- 字母数字短标识,例如 `claude-opus-4-6`,最多 128 个字符 - 调用方从之前的 `200` 响应中持有的 `ETag`。 + 调用方从先前的 `200` 响应中保留的 `ETag`。 **响应** - OK:该模型的输入和输出 Schema,作为独立的 OpenAPI 文档。 + OK - 模型的输入和输出 schema,以独立 OpenAPI 文档形式返回。 - 正文:[`RouterModelInputSchemaDocument`](#routermodelinputschemadocument);响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` + 响应体:[`RouterModelInputSchemaDocument`](#routermodelinputschemadocument) -- 响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` - 未修改:自调用方在 `If-None-Match` 中发送的 `ETag` 以来,文档未发生变化。 + Not Modified - 自调用方在 `If-None-Match` 中发送的 `ETag` 以来,文档未发生变化。 响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` - 凭据缺失或无效。 + 凭证缺失或无效。 - 正文:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 此调用方或模型不允许发起该请求。 + 该调用方或模型不允许发起此请求。 - 正文:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 未找到该模型 ID。 - 正文:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` Router 无法完成该请求。 - 正文:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router 暂时不可用。请退避后重试。 + Router 暂时不可用。请使用退避策略重试。 - 正文:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` ### `POST /v2/models/{provider}/{model}/requests` **将合作伙伴模型运行提交到队列并立即返回。** -Comfy Router 的排队交付模式。请求体与 `POST /v2/models/{provider}/{model}` 为此模型接受的合作伙伴原生 JSON 输入相同:一个请求体形状、一个按模型定义的 schema、两种交付模式。但此路由不会为结果保持连接。它接纳运行,用句柄返回 `201`,调用方稍后通过下面三个读取操作收集结果。 +Comfy Router 的队列投递模式。请求体与 `POST /v2/models/{provider}/{model}` 为该模型接受的合作伙伴原生 JSON 输入相同,即一种请求体形状、每个模型一个 schema、两种投递模式,但此路由不会为结果保持连接。它会接纳该运行,返回 `201` 和一个句柄,调用方随后通过下面的三个读取操作收集结果。 **参数** - 规范化 `{provider}/{model}` 模型 ID 中的小写提供商段,即正在运行其模型的合作伙伴。 + 规范模型 ID `{provider}/{model}` 中的小写提供商段,即正在运行其模型的合作伙伴。 类型:[`RouterProviderSegment`](#routerprovidersegment):字母数字 slug,例如 `anthropic`,最多 64 个字符 - 规范化 `{provider}/{model}` 模型 ID 中的小写模型段,即在该提供商内要运行的模型。 + 规范模型 ID `{provider}/{model}` 中的小写模型段,即要在该提供商内运行的模型。 类型:[`RouterModelSegment`](#routermodelsegment):字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 - 选择服务此模型的备用提供商,而不是其当前默认提供商。 + 选择另一个提供商来服务此模型,而不是其当前默认提供商。 - 仅与 `model_provider` 一起使用时才有意义。 + 仅在与 `model_provider` 一起使用时才有意义。 默认值:False - 调用方生成的键,使重试一个逻辑调用变得安全。 + 调用方生成的键,用于安全地重试一次逻辑调用。 1–255 个字符 - 选择拒绝此模型的输入 schema 未声明的顶层请求体字段,而不是接受它;不检查嵌套字段;并且,对于其 schema 允许未声明字段或没有已编写 schema 的模型,或者对于使用 `strict_mode=true` 发送的排队提交,不会拒绝任何内容。 + 选择拒绝此模型的输入 schema 未声明的顶层请求体字段,而不是接受它;不检查嵌套字段;对于 schema 允许未声明字段或没有已编写 schema 的模型,或者在使用 `strict_mode=true` 发送的队列提交中,不会拒绝任何内容。 默认值:False @@ -496,312 +497,311 @@ Comfy Router 的排队交付模式。请求体与 `POST /v2/models/{provider}/{m `application/json`:[`RouterModelInput`](#routermodelinput)(必填) -合作伙伴模型的原生 JSON 输入,与同步路由为此模型接受的请求体相同;它选择操作,并以相同方式计量:请求体自身的字段决定 Router 在支持多个操作的模型上运行哪个操作(输入图像会将可编辑图像模型切换为图生图,图生图可能按其自身费率计量;Seedance 首帧图像选择图生视频,参考图像或片段选择参考生视频)。在原生调度时,Seedance 请求按 `content` 中的媒体类型计费,而不是按角色计费:任何视频输入都按视频转视频计费,否则任何图像都按图生视频计费,再否则按文生视频计费;例外情况是,来自 `draft_task` 项的最终渲染按其渲染的 Draft 的操作计费,某些模型对文生视频和图生视频收取相同费率;当 `model_provider` 选择备用提供商时,每个带条件的操作可能按该提供商自己的费率计量。相同的提供商选择约定在调度时适用:不提供 `model_provider`,或提供 `model_provider` 且 `strict_mode=false`(默认值)时,请求体是模型的原生文档,并在接纳运行之前根据模型自己的输入 schema 进行验证,因此模型会拒绝的请求体在这里会返回 `422`,而不是一个几分钟后才失败的排队请求;非严格的备用提供商请求体还会在调度时被转换为该提供商的真实 schema。使用 `strict_mode=true` 时,请求体必须已经是备用提供商自己的 schema,并会原样转发:跳过原生 schema 验证,与同步路由完全一样(参见 `model_provider` 和 `strict_mode`)。 +合作伙伴模型的原生 JSON 输入,与此模型在同步路由上接受的请求体相同,并且它选择操作,计费方式也相同:请求体自身的字段决定 Router 在支持多种操作的模型上运行哪一种操作(输入图像会将可编辑图像模型切换为图生图,图生图可能按其自身的费率计费;Seedance 的首帧图像选择图生视频,参考图像或视频片段选择参考生视频)。在原生调度时,Seedance 请求按 `content` 中的媒体种类计费,而不是按角色计费:任何视频输入都按视频转视频计费,否则任何图像都按图生视频计费,否则按文生视频计费,但来自 `draft_task` 项的最终渲染按其所渲染的 Draft 的操作计费,某些模型对文生视频和图生视频收取相同费率;当 `model_provider` 选择另一个提供商时,每个带条件输入的操作可能按该提供商自身的费率计费。同样的提供商选择约定在调度时也适用:在没有 `model_provider` 时,或者带有 `model_provider` 且 `strict_mode=false`(默认值)时,请求体是该模型的原生文档,并在接纳运行之前依据模型自身的输入 schema 进行验证,因此模型会拒绝的请求体在这里会返回 `422`,而不是变成一个几分钟后才失败的队列请求;非严格的备用提供商请求体还会在调度时转换为该提供商真实的 schema。当 `strict_mode=true` 时,请求体必须已经是备用提供商自身的 schema,并且会原样转发:跳过原生 schema 验证,与同步路由完全一致(参见 `model_provider` 和 `strict_mode`)。 **响应** - 已创建:运行已进入队列。 + 已创建:该运行已获准进入队列。 - 响应体:[`RouterQueueSubmitResponse`](#routerqueuesubmitresponse)。响应头:`X-Comfy-Request-Id`、`Idempotent-Replayed` + 响应体:[`RouterQueueSubmitResponse`](#routerqueuesubmitresponse);响应头:`X-Comfy-Request-Id`、`Idempotent-Replayed` 凭据缺失或无效。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 无效请求。请检查错误类型和请求体。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 请求体过大。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router 请求级失败:请求从未到达模型,或因模型本身未报告的原因而失败。 + Router 请求级失败:请求从未到达模型,或由于模型自身未反馈的原因而失败。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 此调用方或模型不允许该请求。对于合作伙伴直接以字节形式返回生成结果的模型,目前无法排队,并会以 `not_enabled` 拒绝;请改为在同步路由上运行它。 + 此调用方或模型不允许该请求。如果某个模型的合作伙伴直接以字节形式返回生成结果,则该模型目前无法排队,相关请求会以 `not_enabled` 拒绝;请改为在同步路由上运行它。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 未找到模型 ID。 + 未找到该模型 ID。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 检查 `X-Comfy-Error-Type`:`concurrency_limit_exceeded` 表示原始调用仍在运行,因此需要等待 `Retry-After` 指示的时间,并复用同一个键;`invalid_input` 则需要使用新的键。此路由上的两种 `invalid_input` 冲突与键完全无关,更换任何新键都无法消除:当请求体选择的是该提供商针对此模型无法处理的 multipart 操作(编辑)时,`model_provider` 指定其他提供商会被拒绝,其 `detail` 以 "this request's `image` selects the edit operation" 开头;之后还会进行另一项检查,如果请求已经为路径中的提供商解析出 bring-your-own-key 凭证,也会被拒绝,其 `detail` 以 `this request resolved a BYOK credential` 开头。请去掉 `model_provider`,或者在不携带 BYOK 凭证的情况下发送请求,并且(对于 multipart 情况)不带编辑操作。 + 检查 `X-Comfy-Error-Type`:`concurrency_limit_exceeded` 表示原始调用仍在运行,因此请等待 `Retry-After` 后复用同一个键;`invalid_input` 则需要换用新键。此路由上的两类 `invalid_input` 冲突与键完全无关,改用新键也无法消除其中任何一个:当请求体选择了 multipart 操作(编辑),而该提供商针对此模型的翻译器无法处理该操作时,指定替代提供商的 `model_provider` 会被拒绝,其 `detail` 以 "this request's `image` selects the edit operation" 开头;之后还会检查,若请求已经为路径中的提供商解析出 BYOK 凭据,同样会被拒绝,其 `detail` 以 `this request resolved a BYOK credential` 开头。请去掉 `model_provider`,或在发送请求时不带 BYOK 凭据,并且(对于 multipart 情形)不带编辑操作。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)——响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(出现 `concurrency_limit_exceeded` 时) +Body:[`RouterErrorResponse`](#routererrorresponse) -- Headers:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(当出现 `concurrency_limit_exceeded` 时) - 请求内容未通过模型 schema 的校验。 + 请求的内容未通过模型 schema 的校验。 - 响应体:[`RouterValidationErrorResponse`](#routervalidationerrorresponse)——响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Idempotent-Replayed` + Body:[`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- Headers:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Idempotent-Replayed` - 检查 `X-Comfy-Error-Type`:`queue_backlog_full` 表示你已持有的未完成排队请求数量已达到上限,等其中一个完成后再提交;`rate_limited` 表示需等待限额窗口。 + 检查 `X-Comfy-Error-Type`:`queue_backlog_full` 表示你已持有的未完成排队请求数达到了允许的上限,因此请等待其中一个完成后再次提交;`rate_limited` 表示需要等待额度窗口。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)——响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body:[`RouterErrorResponse`](#routererrorresponse) -- Headers:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router 暂时不可用。请以退避方式重试。 + Router 暂时不可用。请采用退避策略重试。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)——响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(仅容量拒绝时) + Body:[`RouterErrorResponse`](#routererrorresponse) -- Headers:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Retry-After`(仅容量拒绝时) ### `GET /v2/models/{provider}/{model}/requests/{request_id}` -**收集一次已提交请求的结果。** +**收集单个已提交请求的结果。** -收集端点。对于已成功完成的请求,它返回合作伙伴模型自身的原生输出,与同步路由针对同一模型、同一输入在 `200` 中返回的内容逐字节相同,因此两种交付方式产生同一种结果形状,调用方无需再写一套解析器即可在两者之间切换。 +收集端点。对于已成功完成的请求,它返回合作伙伴模型自身的原生输出,与同步路由针对相同模型和相同输入返回的 `200` 内容逐字节一致,因此两种交付方式产生同一种结果形状,调用方无需第二个解析器即可在两者之间切换。 **参数** - 规范 `{provider}/{model}` 模型 ID 中的小写提供商段,即正在运行其模型的合作伙伴。 + 规范 `{provider}/{model}` 模型 ID 中小写的提供商片段,即正在运行其模型的合作伙伴。 - 类型:[`RouterProviderSegment`](#routerprovidersegment):字母数字 slug,例如 `anthropic`,最多 64 个字符 + 类型:[`RouterProviderSegment`](#routerprovidersegment) -- 字母数字 slug,例如 `anthropic`,最多 64 个字符 - 规范 `{provider}/{model}` 模型 ID 中的小写模型段,即在该提供商下要运行的模型。 + 规范 `{provider}/{model}` 模型 ID 中小写的模型片段,即在该提供商内要运行的模型。 - 类型:[`RouterModelSegment`](#routermodelsegment):字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 + 类型:[`RouterModelSegment`](#routermodelsegment) -- 字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 - 要定位的排队请求,即提交时在响应体中返回的 `request_id`。 + 要寻址的已排队请求,即提交时在响应体中返回的 `request_id`。 - 类型:[`RouterQueueRequestId`](#routerqueuerequestid):`pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,uuid,最多 36 个字符 + 类型:[`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,uuid,最多 36 个字符 **响应** - OK:为产生了结果的请求所存储的结果,该请求可以是已成功完成的请求,也可以是同时带有已记录扣费和已存储结果的终端请求,其结果按合作伙伴自身的媒体类型原样返回,与同步路由的 `200` 完全一致;并且遵循 submit 所接受的同一套提供商选择约定:不带 `model_provider`,或带 `model_provider` 且 `strict_mode=false`(默认值,在可能时转换回该模型的原生约定,转换失败时回退为备用提供商自身的原始响应,并记录日志,绝不静默处理)时,形状为该模型自身的原生输出;当 `strict_mode=true` 时,则为原样返回的备用提供商响应。对于合作伙伴直接以字节形式返回生成结果的模型,响应体是这些字节,其 `Content-Type` 为合作伙伴自身的类型,而非 `application/json`;请根据响应的 `Content-Type` 分支处理,不要假定它是 JSON 文档。 + OK - 为产生了结果的请求所存储的结果 - 该请求已成功完成,或是一个同时带有已记录扣费和已存储结果的终端请求 - 按合作伙伴自身的媒体类型原样返回,与同步路由 `200` 的返回完全一致,并遵循提交时所接受的同一提供商选择约定:不带 `model_provider`,或带 `model_provider` 且 `strict_mode=false`(默认值,在可能时转换回该模型自身的原生约定,转换失败时回退到备选提供商自身的原始响应 - 会记录日志,绝不静默),形状为该模型自身的原生输出;使用 `strict_mode=true` 时,则为原样返回的备选提供商响应。对于合作伙伴直接以字节形式返回生成结果的模型,正文是合作伙伴自身 `Content-Type` 下的这些字节,而非 `application/json`;请根据响应的 `Content-Type` 分支处理,不要假定其为 JSON 文档。 - 响应体:[`RouterModelOutput`](#routermodeloutput) 或原始字节(`*/*`)。响应头:`X-Comfy-Request-Id`、`X-Content-Type-Options`、`X-Comfy-Credits-Used` + 正文:[`RouterModelOutput`](#routermodeloutput) 或原始字节(`*/*`) -- 响应头:`X-Comfy-Request-Id`、`X-Content-Type-Options`、`X-Comfy-Credits-Used` - Accepted:请求尚未完成。 + 已接受 - 请求尚未完成。 - 响应体:[`RouterQueueStatusResponse`](#routerqueuestatusresponse)。响应头:`X-Comfy-Request-Id`、`Retry-After` + 正文:[`RouterQueueStatusResponse`](#routerqueuestatusresponse) -- 响应头:`X-Comfy-Request-Id`、`Retry-After` - 凭证缺失或无效。 + 凭据缺失或无效。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 该请求对此调用方或此模型不被允许。 + 该调用方或该模型不允许此请求。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 未找到该模型 ID。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router 请求级失败:请求从未到达模型,或失败原因并非模型自身所报告。 + Router 请求级失败 - 请求从未到达模型,或因模型自身未反馈的原因而失败。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router 暂时不可用。请退避重试。 + Router 暂时不可用。请以退避方式重试。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 请求处于与该操作冲突的状态。请检查错误类型。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 请求超过了截止时间。重试前请检查错误类型。 + 请求超过了截止时间。重试之前请检查错误类型。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - - Router 请求级失败:请求从未到达模型,或失败原因并非模型自身所报告。 + Router 请求级失败 - 请求从未到达模型,或因模型自身未反馈的原因而失败。 - 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` ### `PUT /v2/models/{provider}/{model}/requests/{request_id}/cancel` -**请求取消某个已提交的请求。** +**请求取消一个已提交的请求。** -请求 Comfy 停止一个尚未完成的请求。这只是一次请求,并不构成保证,而 `202` 正是在表达这一点:`CANCELLATION_REQUESTED` 表示该请求已被接受,并不表示运行已经停止。已经发往合作伙伴处执行的运行仍可能照常完成;而合作伙伴侧完成的生成会被计费,无论是否有人取用其结果。因此,需要知道实际发生了什么情况的调用方,应在此之后读取状态端点。在那里,已生效的取消会表现为 `COMPLETED`,并和其他所有终态结果一样携带一个 `error_type`。 +请求 Comfy 停止一个尚未完成的请求。它只是一个请求,而非保证,`202` 正是表达这一点:`CANCELLATION_REQUESTED` 表示请求已被接受,并不表示运行已经停止。已经发送到合作伙伴处并在执行的运行仍可能照常完成,而合作伙伴完成的生成会被计费,无论是否有人取走结果。因此,若调用方需要知道实际发生了什么,应随后读取状态端点:在那里,已生效的取消会显示为 `COMPLETED`,并像其他所有终端结果一样携带 `error_type`。 **参数** - 规范 `{provider}/{model}` 模型 ID 中的小写提供商片段,即正在运行其模型的合作伙伴。 + 规范 `{provider}/{model}` 模型 ID 中小写的提供商片段,即正在运行其模型的合作伙伴。 - 类型:[`RouterProviderSegment`](#routerprovidersegment) -- 字母数字短标识,例如 `anthropic`,最多 64 个字符 + 类型:[`RouterProviderSegment`](#routerprovidersegment):字母数字短标识,例如 `anthropic`,最多 64 个字符 - 规范 `{provider}/{model}` 模型 ID 中的小写模型片段,即在该提供商下要运行的模型。 + 规范 `{provider}/{model}` 模型 ID 中小写的模型片段,即在该提供商内要运行的模型。 - 类型:[`RouterModelSegment`](#routermodelsegment) -- 字母数字短标识,例如 `claude-opus-4-6`,最多 128 个字符 + 类型:[`RouterModelSegment`](#routermodelsegment):字母数字短标识,例如 `claude-opus-4-6`,最多 128 个字符 - 要处理的已执行请求,即提交时在响应体中返回的 `request_id`。 + 要处理的排队请求,即提交时在响应体中返回的 `request_id`。 - 类型:[`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,uuid,最多 36 个字符 + 类型:[`RouterQueueRequestId`](#routerqueuerequestid):`pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,uuid,最多 36 个字符 **响应** - 已接受 - `CANCELLATION_REQUESTED`。 + 已接受:`CANCELLATION_REQUESTED`。 - 响应体:[`RouterQueueCancelResponse`](#routerqueuecancelresponse) -- 响应头:`X-Comfy-Request-Id` + 响应体:[`RouterQueueCancelResponse`](#routerqueuecancelresponse);响应头:`X-Comfy-Request-Id` - 冲突 - `ALREADY_COMPLETED`。 + 冲突:`ALREADY_COMPLETED`。 - 响应体:[`RouterQueueCancelResponse`](#routerqueuecancelresponse) -- 响应头:`X-Comfy-Request-Id` + 响应体:[`RouterQueueCancelResponse`](#routerqueuecancelresponse);响应头:`X-Comfy-Request-Id` - 无效请求。请检查错误类型与请求体。 + 请求无效。请检查错误类型和请求体。 - 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 凭证缺失或无效。 - 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 该调用方或模型不允许执行此请求。 + 该调用方或该模型不允许执行此请求。 - 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` 未找到该模型 ID。 - 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router 暂时不可用。请以退避方式重试。 + Router 暂时不可用。请退避后重试。 - 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router 请求级失败:请求从未到达模型,或因模型自身未反馈的原因而失败。 + Router 请求级失败:请求从未到达模型,或因模型自身未报告的原因而失败。 - 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` ### `GET /v2/models/{provider}/{model}/requests/{request_id}/status` -**读取单个已提交请求的队列状态。** +**读取一个已提交请求的队列状态。** -轮询端点。它只返回请求的当前状态,从不返回结果,因此客户端可以持续观察一次长时间生成,而不必在每次轮询时传输其输出:当该端点返回 `COMPLETED` 时,再从下面的读取中一次性获取结果。 +轮询端点。它返回请求的当前状态,从不返回结果,因此客户端可以观察长时间生成,而无需在每次轮询时传输其输出:当此端点返回 `COMPLETED` 时,从下面的读取中一次性获取结果。 **参数** - 规范 `{provider}/{model}` 模型 ID 中的小写提供商片段,即正在运行其模型的合作伙伴。 + 规范 `{provider}/{model}` 模型 ID 的小写提供商段:正在运行其模型的合作伙伴。 - 类型:[`RouterProviderSegment`](#routerprovidersegment) -- 字母数字短标识,例如 `anthropic`,最长 64 个字符 + 类型:[`RouterProviderSegment`](#routerprovidersegment)。字母数字 slug,例如 `anthropic`,最多 64 个字符 - 规范 `{provider}/{model}` 模型 ID 中的小写模型片段,即在该提供商下要运行的模型。 + 规范 `{provider}/{model}` 模型 ID 的小写模型段:在该提供商内运行的模型。 - 类型:[`RouterModelSegment`](#routermodelsegment) -- 字母数字短标识,例如 `claude-opus-4-6`,最长 128 个字符 + 类型:[`RouterModelSegment`](#routermodelsegment)。字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 - 要查询的排队请求,即提交时在响应体中返回的 `request_id`。 + 要处理的已排队请求:提交时在响应体中返回的 `request_id`。 - 类型:[`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,uuid,最长 36 个字符 + 类型:[`RouterQueueRequestId`](#routerqueuerequestid)。`pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,uuid,最多 36 个字符 **响应** - OK - 请求当前的队列状态。 + OK:请求的当前队列状态。 - Body:[`RouterQueueStatusResponse`](#routerqueuestatusresponse) -- Headers:`X-Comfy-Request-Id`、`Retry-After`、`X-Comfy-Estimated-Duration-Seconds`、`X-Comfy-Estimated-Duration-P90-Seconds`、`X-Comfy-Estimate-Source` + 响应体:[`RouterQueueStatusResponse`](#routerqueuestatusresponse)。响应头:`X-Comfy-Request-Id`、`Retry-After`、`X-Comfy-Estimated-Duration-Seconds`、`X-Comfy-Estimated-Duration-P90-Seconds`、`X-Comfy-Estimate-Source` - 凭证缺失或无效。 + 凭据缺失或无效。 - Body:[`RouterErrorResponse`](#routererrorresponse) -- Headers:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 该调用方或模型不允许此请求。 + 该请求不允许由此调用方或模型执行。 - Body:[`RouterErrorResponse`](#routererrorresponse) -- Headers:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - 未找到该模型 ID。 + 未找到模型 ID。 - Body:[`RouterErrorResponse`](#routererrorresponse) -- Headers:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` Router 请求级失败:请求从未到达模型,或因模型本身未反馈的原因而失败。 - Body:[`RouterErrorResponse`](#routererrorresponse) -- Headers:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` - Router 暂时不可用。请退避重试。 + Router 暂时不可用。请使用退避策略重试。 - Body:[`RouterErrorResponse`](#routererrorresponse) -- Headers:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` Router 请求级失败:请求从未到达模型,或因模型本身未反馈的原因而失败。 - Body:[`RouterErrorResponse`](#routererrorresponse) -- Headers:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + 响应体:[`RouterErrorResponse`](#routererrorresponse)。响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` -此处描述较为简短。模型选择、验证、重试和计费请参阅[使用 Comfy Router API](/zh/development/comfy-router/api),Header 行为请参阅 [Headers](/zh/development/comfy-router/headers)。 +此处的描述较为简短。有关模型选择、验证、重试和计费,请参阅[使用 Comfy Router API](/zh/development/comfy-router/api);有关请求头行为,请参阅[请求头](/zh/development/comfy-router/headers)。 ## 错误分类桶 @@ -968,38 +968,38 @@ Router 错误的机器可读类别,同时也会在 `X-Comfy-Error-Type` 响应 ## 预检费用预估 -`POST /v2/models/{provider}/{model}/estimate` 可以在不运行请求体的情况下为其定价,而排队提交(`POST /v2/models/{provider}/{model}/requests`)会在其 `201` 响应中返回与 `estimate` 相同的 [`RouterCostEstimate`](#routercostestimate)。两者都按 Comfy 对该次运行计费所依据的费率卡片来定价。两者返回的任何数值都是预估,并非最终收费:工作区的用量与账单记录中的已结算费用才是最终结果。使用你自己的提供商密钥运行不会由 Comfy 计费(见下文)。在预估功能逐步开放期间,该路由会返回 `403` 以及 `error_type: not_enabled`,并且提交响应会省略 `estimate`。目录中仍然不包含任何价格。 +`POST /v2/models/{provider}/{model}/estimate` 可以在不运行请求体的情况下为其定价,而排队提交(`POST /v2/models/{provider}/{model}/requests`)会在其 `201` 响应中返回与 `estimate` 相同的 [`RouterCostEstimate`](#routercostestimate)。两者都按 Comfy 对该次运行计费所依据的费率卡定价,但按供应商上报成本计费的模型除外,这类模型的 `source` 为 `estimated`,依据供应商公布的价格清单。两者返回的任何数值都是预估,并非最终收费:工作区的用量与账单记录中的已结算费用才是最终结果。使用你自己的提供商密钥进行的运行不会由 Comfy 计费(见下文)。在预估功能逐步推出期间,该路由会返回 `403`,并带有 `error_type: not_enabled`,提交响应则会省略 `estimate`。目录中仍然不包含任何价格。 在读取任何金额之前,先读取 `source`。缺失的数值绝不意味着免费。 | `source` | 携带字段 | 如何解读 | | --- | --- | --- | -| `exact` | `amount`、`amount_cents`、`credits` | 一个按 `pricing_as_of` 中的费率计算、等同于该请求体应收费用的预估;工作区的用量与账单记录中的已结算费用才是最终结果。 | -| `estimated` | `min_amount`、`max_amount` 及其 `_cents` 形式,不含 `amount` | 一个预估,其费用取决于提供商回传的某个数量,而请求体对该数量给出了界限;预期收费落在界限之间,工作区的用量与账单记录中的已结算费用才是最终结果。 | +| `exact` | `amount`、`amount_cents`、`credits` | 一个按 `pricing_as_of` 中的费率计算、等于该请求体应收费用的预估;工作区的用量与账单记录中的已结算费用才是最终结果。 | +| `estimated` | `min_amount`、`max_amount` 及其 `_cents` 形式,不含 `amount` | 一个预估,其费用取决于提供商回传的某个数量,而请求体对该数量给出了界限;预期费用落在这些界限之间,工作区的用量与账单记录中的已结算费用才是最终结果。 | | `unknown` | `reason`,无数值 | 在运行之前无法给出价格。任何其他 `source` 值都按 `unknown` 处理。 | `unknown` 预估的 `reason` 是以下之一: -- `not_quotable`:Router 无法在调用运行之前为其定价,因为它按提供商回传的、而请求体未给出界限的数量计费,或者请求体无法按其发送时的状态定价。任何无法识别的 `reason` 都按 `not_quotable` 处理。 -- `unpriced_model`:费率卡片未为此请求定价。 +- `not_quotable`:Router 无法在调用运行之前为其定价,因为它按提供商回传的、而请求体未给出界限的数量计费,或者请求体无法按发送时的状态定价。任何无法识别的 `reason` 都按 `not_quotable` 处理。 +- `unpriced_model`:费率卡未为此请求定价。 - `byok`(仅排队提交):该次运行使用你自己的提供商密钥,因此 Comfy 不收取任何费用。 -- `pricing_unavailable`(仅排队提交):请求被接收时无法读取费率卡片。提交仍会被接受,运行照常计费。 +- `pricing_unavailable`(仅排队提交):请求被接收时无法读取费率卡。提交仍会被接受,运行照常计费。 Router 在运行之前尚无法定价的模型列在[没有预检预估的模型](/zh/development/comfy-router/limitations#无法预先估算的模型)中。未列在该处的模型对于特定请求体仍可能返回 `unknown`,因此请对每个预估都读取 `source`。 预估在以下情况下会采用保守失败策略: -- 当某个数值需要费率卡片,而该卡片未加载或已过期时,`/estimate` 会返回 `503`,而不是给出猜测。排队提交绝不会因为其预估而被拒绝;它改为携带 `source: unknown` 和 `reason: pricing_unavailable`。对于根本不能在运行前定价的调用(`not_quotable`),或使用你自己的提供商密钥的排队提交(`byok`),应答时不会读取费率卡片,因此该 `200` 并不说明卡片是否是最新的。 -- `/estimate` 会像默认运行那样,依据模型自身的输入 schema 校验请求体,因此未通过模型 schema 的请求体会得到与该次运行相同的 `422`,以及相同的 `detail[]` 结构。此时不会进行任何定价或派发。 +- 当某个数值需要费率卡,而该卡未加载或已过期时,`/estimate` 会返回 `503`,而不是给出猜测。排队提交绝不会因为其预估而被拒绝;它会改为携带 `source: unknown` 和 `reason: pricing_unavailable`。对于根本无法在运行前定价的调用(`not_quotable`),或使用你自己的提供商密钥的排队提交(`byok`),应答时不会读取费率卡,因此这个 `200` 并不说明费率卡是否是最新的。 +- `/estimate` 会像默认运行那样,依据模型自身的输入 schema 校验请求体,因此未通过模型 schema 的请求体会得到与运行相同的 `422`,以及相同的 `detail[]` 结构。此时不会进行任何定价或派发。 - 排队提交的幂等重放(`Idempotent-Replayed: true`)会省略 `estimate`,因为原始报价不会被存储。 预估的局限性。`200` 返回的数值并不承诺该次运行会被接受,也不承诺实际收费正好是这个数值: - `/estimate` 不接受 `strict_mode` 或 `reject_unknown_fields`,因此它只检查模型的原生契约:一个在备用提供商自身的 schema 下会被 `strict_mode=true` 的运行接受的请求体,在这里可能得到 `422`;而一个会被 `reject_unknown_fields=true` 的运行拒绝的未声明顶层字段,在这里却会被定价。 -- `pricing_as_of` 是费率卡片被获取的时间(若未读取任何卡片,则为预估被应答的时间)。它不是价格锁定:运行按其被计价时生效的费率收费。 -- `/estimate` 报价的是 `model_provider` 指定的那一段,或原生提供商。它不接受 `fallback_provider` 或 `strict_mode` 参数。同步运行如果其 fallback 重试落到另一个提供商上,就按该提供商的费率收费,而预估并未对该费率报价;运行响应中的 `X-Comfy-Router-Fallback-Provider` 表明发生了这种情况。排队提交没有 fallback,因此其 `estimate` 报价的就是实际运行的那一段。 -- 对于同一个请求体,在 `model_provider` 这一段上,或对于会在同级操作上运行的请求体,`/estimate` 与排队提交的 `estimate` 可能为略微不同的文档定价。提交的 `estimate` 按运行实际发送的文档定价。 -- `/estimate` 始终报价平台费用。使用你自己的提供商密钥运行不会由 Comfy 计费,但 `/estimate` 不会检测到这一点,仍会返回一个数值;只有排队提交会返回 `reason: byok`。 +- `pricing_as_of` 是费率卡被获取的时间;对于取自供应商公布价格清单的 `estimated` 报价,则是该清单被读取的日期(两者均未读取时,它就是预估被应答的时间)。它不是价格锁定:运行按其被计价时生效的费率收费。 +- `/estimate` 报价的是 `model_provider` 指定的调用段,或原生提供商。它不接受 `fallback_provider` 或 `strict_mode` 参数。同步运行如果其 fallback 重试落到另一个提供商上,就会按该提供商的费率收费,而预估并未对该费率报价;运行响应中的 `X-Comfy-Router-Fallback-Provider` 表明发生了这种情况。排队提交没有 fallback,因此其 `estimate` 报价的就是实际运行的调用段。 +- 对于同一个请求体,在 `model_provider` 调用段上,或对于会在同级操作上运行的请求体,`/estimate` 与排队提交的 `estimate` 可能按略微不同的文档定价。提交的 `estimate` 按运行实际发送的文档定价。 +- `/estimate` 始终报价平台费用。使用你自己的提供商密钥进行的运行不会由 Comfy 计费,但 `/estimate` 不会检测到这一点,仍会返回一个数值;只有排队提交会返回 `reason: byok`。 - 美元金额由未取整的美分换算而来,最多保留 8 位小数,可计费的不足一美分的 `amount` 绝不会显示为 `0`。`credits` 为 `round(amount × 211, 2)`,与 `X-Comfy-Credits-Used` 对收费所用的换算相同,因此对于极小的非零价格,`credits` 可能取整为 `0`;在这一点重要时,请以 `amount` 或 `amount_cents` 而非 `credits` 来做预算。该响应头仍是运行事后的数值;余额位于 Comfy 平台上。 ## 结果资产 @@ -1035,13 +1035,13 @@ Router 在运行之前尚无法定价的模型列在[没有预检预估的模型 ### RouterChargesOnPolicyRejection -内容政策拒绝是否会对该模型计费。请将未知值视为可能计费。 +是否对内容政策拒绝向该模型计费。请将未知值视为可能计费。 类型:`string` ### RouterCostEstimate -对本次调用费用的预估值,以美元计,在派发之前依据该次运行实际计费所用的同一费率卡片定价。它不是最终收费:你实际支付的是工作区用量与账单记录中的结算费用。运行结束后返回的 `X-Comfy-Credits-Used` 是一个取整的事后数值,不是收据。`source` 说明该数字的可信程度:`exact` 带有 `amount`;`estimated` 带有 `min_amount` 和 `max_amount`,不带 `amount`;`unknown` 两者都不带,并带有一个 `reason`。绝不要把缺失的 `amount` 理解为免费。这不是价格锁定:请参见 `pricing_as_of`。 +对本次调用费用的预估值,以美元计,在派发之前依据该次运行实际计费所用的同一费率卡片定价(对于按供应商所报告成本计费的模型,则依据供应商公布的价格表估算)。它不是最终收费:你实际支付的是工作区用量与账单记录中的结算费用。运行结束后返回的 `X-Comfy-Credits-Used` 是一个取整的事后数值,不是收据。`source` 说明该数字的可信程度:`exact` 带有 `amount`;`estimated` 带有 `min_amount` 和 `max_amount`,不带 `amount`;`unknown` 两者都不带,并带有一个 `reason`。绝不要把缺失的 `amount` 理解为免费。这不是价格锁定:请参见 `pricing_as_of`。 **字段** @@ -1058,11 +1058,11 @@ Router 在运行之前尚无法定价的模型列在[没有预检预估的模型 - 预估值下限,以十进制字符串表示的美元金额。仅在 `source` 为 `estimated` 时出现。 + 预估值下限,以十进制字符串表示的美元金额。它是估算值,不是保证的下限:调用的实际计费可能更低,例如提供商返回的内容少于请求所要求的内容(例如没有返回图像)、预估是根据过往调用得出的典型价格,或者价格并不随请求数量稳步上升。仅在 `source` 为 `estimated` 时出现。 - 预估值上限,以十进制字符串表示的美元金额。仅在 `source` 为 `estimated` 时出现。 + 预估值上限,以十进制字符串表示的美元金额。它是估算值,不是保证的上限:调用的实际计费可能更高,例如提供商返回的内容多于所请求的内容(例如返回的图像多于请求数量)、预估是根据过往调用得出的,或者价格并不随请求数量稳步上升。仅在 `source` 为 `estimated` 时出现。 @@ -1100,7 +1100,7 @@ Router 在运行之前尚无法定价的模型列在[没有预检预估的模型 - 该报价定价所依据的费率卡片的获取时间。该预估不是价格锁定:运行按评级时生效的费率计费,而非此时间点的费率。每当未读取任何费率卡片时(`reason: pricing_unavailable`、`byok`,或无法从任何卡片定价的 `not_quotable` 调用),这里就是该报价被应答的时间。 + 该报价定价所依据的费率卡片的获取时间。该预估不是价格锁定:运行按评级时生效的费率计费,而非此时间点的费率。取自供应商公布价格表的 `estimated` 报价(即按供应商所报告成本计费的模型)则携带读取该价格表的日期。每当未读取任何费率卡片时(`reason: pricing_unavailable`、`byok`,或无法从任何卡片定价的 `not_quotable` 调用),这里就是该报价被应答的时间。 date-time @@ -1116,17 +1116,17 @@ Router 在运行之前尚无法定价的模型列在[没有预检预估的模型 **字段** - 人类可读的失败描述,可安全地展示给最终用户。该字段不用于机器解析,请改为根据 `error_type` 进行分支判断。对于已退役模型的 `model_not_found`,当已记录后继模型且调用方可见时,`detail` 会显示 ` was retired on ; use `;若未记录后继模型或调用方不可见,则只显示 ` was retired on `,而不是通常的建议列表。此处指明的后继模型始终是一个有效的目录 ID,调用可以重新指向它。停用日期仍在未来的模型并未退役:它仍会被 `GET /v2/models` 列出,并在该日期之前一直可运行。与 `detail` 的其他部分一样,这段退役措辞仅用于展示,不附带任何兼容性保证。“不用于机器解析”这一规则有两个已记录的例外:在 `POST /v2/models/{provider}/{model}` 上,`409` 会针对三种互不相关但同属 `invalid_input` 分类的情况返回,只有 `detail` 能区分它们:以 "this request's `image` selects the edit operation" 开头的 `detail` 表示 multipart 的 `model_provider` 拒绝,以 `this request resolved a BYOK credential` 开头的 `detail` 表示 BYOK 的 `model_provider` 拒绝;这两者都不会因为换用新的 `Idempotency-Key` 而消除。该路由上任何其他 `invalid_input` `409` 都是密钥冲突。这两个前缀都是稳定的契约条款,可以被匹配。在其他任何地方,根据 `detail` 进行分支判断都不附带兼容性保证。 + 人类可读的失败描述,可安全地展示给最终用户。该字段不用于机器解析,请改为根据 `error_type` 进行分支判断。对于已退役模型的 `model_not_found`,当已记录后继模型且调用方可见时,`detail` 会显示 ` was retired on ; use `;若未记录后继模型或调用方不可见,则只显示 ` was retired on `,而不是通常的建议列表。此处指明的后继模型始终是一个有效的目录 ID,调用可以重新指向它。停用日期仍在未来的模型并未退役:它仍会被 `GET /v2/models` 列出,并在该日期之前一直可运行。与 `detail` 的其他部分一样,这段退役措辞仅用于展示,不附带任何兼容性保证。“不用于机器解析”这一规则有两个已记录的例外:在 `POST /v2/models/{provider}/{model}` 上,`409` 会针对三种互不相关但同属 `invalid_input` 分类的情况返回,只有 `detail` 能区分它们:以 “this request's `image` selects the edit operation” 开头的 `detail` 表示 multipart 的 `model_provider` 拒绝,以 “this request resolved a BYOK credential” 开头的 `detail` 表示 BYOK 的 `model_provider` 拒绝;这两者都不会因为换用新的 `Idempotency-Key` 而消除。该路由上任何其他 `invalid_input` `409` 都是密钥冲突。这两个前缀都是稳定的契约条款,可以被匹配。在其他任何地方,根据 `detail` 进行分支判断都不附带兼容性保证。 - 对 Router 失败的粗粒度、机器可读的分类,同时镜像到 `X-Comfy-Error-Type` 响应头,以便调用方无需解析响应体即可分支判断。该集合目前是封闭的,共十九个值:六个请求级分类 `invalid_input`、`content_policy_violation`、`provider_error`、`provider_timeout`、`insufficient_credits` 和 `model_not_found`,以及传输层的 `unauthorized`、`forbidden`、`concurrency_limit_exceeded`、`client_disconnected`、`internal_error`、`deadline_exceeded`、`not_enabled`、`service_unavailable`、`rate_limited`、`cancelled`、`queue_timeout`、`request_not_found` 和 `queue_backlog_full`。“封闭”描述的是当前文档所记录的集合,并不是一个永远成立的界限:该集合预计还会增长,因此这里刻意使用普通字符串而不是 `enum`,客户端必须将无法识别的值视为 `internal_error`,而不是对上面的列表做穷举 switch,并在下次新增取值时出错。 + 对 Router 失败的粗粒度、机器可读的分类,同时镜像到 `X-Comfy-Error-Type` 响应头,以便调用方无需解析响应体即可分支判断。该集合封闭于十九个值:六个请求级分类 `invalid_input`、`content_policy_violation`、`provider_error`、`provider_timeout`、`insufficient_credits` 和 `model_not_found`,以及传输层的 `unauthorized`、`forbidden`、`concurrency_limit_exceeded`、`client_disconnected`、`internal_error`、`deadline_exceeded`、`not_enabled`、`service_unavailable`、`rate_limited`、`cancelled`、`queue_timeout`、`request_not_found` 和 `queue_backlog_full`。“封闭”描述的是当前文档所记录的集合,并不是一个永远成立的界限:该集合预计还会增长,因此这里刻意使用普通字符串而不是 `enum`,客户端必须将无法识别的值视为 `internal_error`,而不是对上面的列表做穷举 switch,并在下次新增取值时出错。 类型:[`RouterErrorType`](#routererrortype) - 模型提供商给出的、有界且经过净化的拒绝原因,仅当 `error_type` 为 `invalid_input` 且 `X-Comfy-Upstream-Status` 是提供商返回的 `4xx` 或 `2xx` 时才存在,也就是说提供商认为请求格式有误而拒绝,并说明了原因。该状态通常是 `4xx`;对于在成功信封内报告生成被拒绝的提供商,它会是 `2xx`(BytePlus 的失败任务轮询返回 HTTP `200`,原因位于响应体中)。在其他所有失败情形下都不存在,包括提供商 `5xx`、传输失败、内容策略拒绝以及 Router 针对自身提出的任何拒绝。它与 `X-Comfy-Upstream-Detail` 响应头对应。 + 模型提供商给出的、有界且经过净化的拒绝原因,仅当 `error_type` 为 `invalid_input` 且 `X-Comfy-Upstream-Status` 是提供商返回的 `4xx` 或 `2xx` 时才存在,也就是说提供商认为请求格式有误而拒绝,并说明了原因。该状态通常是 `4xx`;对于在成功响应封装内报告生成被拒绝的提供商,它会是 `2xx`(BytePlus 的失败任务轮询返回 HTTP `200`,原因位于响应体中)。在其他所有失败情形下都不存在,包括提供商 `5xx`、传输失败、内容策略拒绝以及 Router 针对自身提出的任何拒绝。它与 `X-Comfy-Upstream-Detail` 响应头对应。 @@ -1141,19 +1141,19 @@ Router 在运行之前尚无法定价的模型列在[没有预检预估的模型 ### RouterModelBilling -调用模型之前需要检查的计费行为。它不包含价格或用量信息。 +调用模型之前需要了解的计费行为。它不包含价格或用量信息。 **字段** - 模型以内容政策为由拒绝的调用,是否仍向调用方计费。各提供商的做法不尽相同,而这种差异在调用时无法察觉,因此用户即使同时看到同一次调用的错误与扣费,也无从事先得知。所以这里在调用之前按模型明确说明,而不是留待各提供商各自口口相传。 + 模型因内容政策原因拒绝的调用,是否仍向调用方计费。各提供商的做法不尽相同,而这种差异在调用时无法察觉,因此用户即使同时看到同一次调用的错误与扣费,也无从事先得知。所以这里在调用之前按模型明确说明,而不是留待各提供商各自口口相传。 类型:[`RouterChargesOnPolicyRejection`](#routerchargesonpolicyrejection) ### RouterModelDetail -单个 Comfy Router 模型的逐模型详细信息:目录列表为该模型报告的全部内容,外加只有单模型路由才会携带的逐模型字段。 +单个 Comfy Router 模型的详细信息:目录列表为该模型报告的全部内容,外加只有单模型路由才会携带的逐模型字段。 组合了 [`RouterModelListEntry`](#routermodellistentry)、[`RouterModelDetailFields`](#routermodeldetailfields)。 @@ -1166,9 +1166,9 @@ Router 在运行之前尚无法定价的模型列在[没有预检预估的模型 **字段** - 该模型 OpenAPI 文档的 URL,包含其输入和输出 Schema。 + 该模型的 OpenAPI 文档 URL,其中包含其输入与输出 schema。 - HTTPS URL,例如 `https://api.comfy.org/v2/models/bfl/flux-2-pro/openapi.json`,最多 2048 个字符 + HTTPS URL,例如 `https://api.comfy.org/v2/models/bfl/flux-2-pro/openapi.json`,最长 2048 个字符 ### RouterModelId @@ -1214,13 +1214,13 @@ Router 在运行之前尚无法定价的模型列在[没有预检预估的模型 - 调用方在调用之前需要了解的单模型计费信息,而不是价格。用量和费用数字绝不会出现在这里。 + 调用方在调用之前需要了解的每个模型的计费信息,而不是价格。用量和费用数字绝不会出现在这里。 类型:[`RouterModelBilling`](#routermodelbilling) - 该模型 `GET /v2/models/{provider}/{model}/openapi.json` 文档的当前强 `ETag`。在该读取请求中将其作为 `If-None-Match` 发送,当 schema 未发生变化时即可获得 `304`;也可以将其与上次看到的值比较,从而无需获取每个文档就能得知哪些模型的 schema 发生了变化。只要该读取请求此刻无法为此调用方返回 `200`,该字段就会缺失:schema 服务不可用、该模型的文档无法渲染,或者该模型在响应构建期间对此调用方变为不可用。标签缺失并不表示 schema 发生了变化;请重新读取该模型的文档以了解其当前标签。 + 该模型 `GET /v2/models/{provider}/{model}/openapi.json` 文档的当前强 `ETag`。在该读取请求中将其作为 `If-None-Match` 发送,当 schema 未发生变化时即可获得 `304`;也可以将其与上次看到的值比较,从而无需获取每个文档就能得知哪些模型的 schema 发生了变化。每当该读取请求此刻无法为此调用方返回 `200` 时,该字段就会缺失:schema 服务不可用、该模型的文档无法渲染,或者该模型在响应构建期间对此调用方变为不可用。标签缺失并不表示 schema 发生了变化;请重新读取该模型的文档以了解其当前标签。 ### RouterModelListResponse @@ -1261,19 +1261,19 @@ Router 模型目录的一页。 `{provider}/{model}` 模型 ID 中的模型部分。 -类型:`string`,字母数字组成的 slug,例如 `claude-opus-4-6`,最多 128 个字符 +类型:`string`,由字母和数字组成的短标识(slug),例如 `claude-opus-4-6`,最多 128 个字符 ### RouterPageCursor 一个不透明的目录游标。请原样传回,作为 `cursor`。 -类型:`string`,即作为 `next_cursor` 返回的不透明游标,1–512 个字符 +类型:`string`,即作为 `next_cursor` 返回的不透明游标,长度为 1–512 个字符 ### RouterProviderSegment `{provider}/{model}` 模型 ID 中表示提供商的部分。 -类型:`string`。字母数字 slug,例如 `anthropic`,最多 64 个字符 +类型:`string`。字母数字形式的 slug,例如 `anthropic`,最多 64 个字符 ### RouterQueueCancelResponse @@ -1295,7 +1295,7 @@ Router 模型目录的一页。 ### RouterQueueCancelStatus -取消请求所得到的结果,针对的是该路由实际已处理请求的两种结果。两者都会同步反映到 HTTP 状态码上,因此客户端可以任选其一进行分支判断。 +取消请求所查到的结果,仅描述该路由实际已处理请求的两种结果。两者都会同步反映到 HTTP 状态码上,因此客户端可以任选其一进行分支判断。 类型:`string` @@ -1307,19 +1307,19 @@ Router 模型目录的一页。 ### RouterQueueRequestId -排队中的一个 Router 请求的标识符:调用方通过该句柄进行轮询、取消并收集结果。 +用于标识一个已排队的 Router 请求:调用方通过该句柄进行轮询、取消并获取结果。 类型:`string` -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,uuid,最多 36 个字符 ### RouterQueueStatus -已执行的 Router 请求的状态。它恰好有三个取值,并且与 `RouterErrorType` 不同,它是一个封闭的 `enum`,因为这两个 schema 是刻意朝相反方向封闭的。`RouterErrorType` 对失败进行分类,其集合预期会不断扩展,因此,如果一个已生成的客户端硬性拒绝某个无法识别的分类,那么它恰恰会在已经出问题的时候失败得最严重。而这一类型描述的是生命周期,而日后新增第四个状态的生命周期,无论它是否被声明为 enum,对每一个针对它编写的轮询循环而言都是破坏性变更,因此它被声明为 enum,并且这一约束被写在客户端能够看到的地方。 +已执行的 Router 请求的状态。它恰好有三个取值,并且与 `RouterErrorType` 不同,它是一个封闭的 `enum`,因为这两个 schema 是刻意朝相反方向封闭的。`RouterErrorType` 对失败进行分类,其集合预期会不断扩展,因此,如果一个已生成的客户端硬性拒绝某个无法识别的分类,那么它恰恰会在已经出问题的时候失败得最严重。而这一类型描述的是生命周期,而日后新增第四个状态的生命周期,无论是否被声明为 enum,对每一个针对它编写的轮询循环来说都是破坏性变更,因此它被声明为 enum,并且这一约束被写在客户端能够看到的地方。 类型:`string` ### RouterQueueStatusFields -`RouterQueueStatusResponse` 中不属于 URL 块的那一半:一个排队中请求的身份、它当前的状态,以及在该状态为终端状态且运行未成功时,说明失败原因所属的粗粒度分类桶。 +`RouterQueueStatusResponse` 中不属于 URL 部分的那一半:一个排队中请求的标识、它当前的状态,以及在该状态为终端状态且运行未成功时,用粗粒度分类桶说明原因。 **字段** @@ -1330,7 +1330,7 @@ Router 模型目录的一页。 - 排队中 Router 请求的状态。它恰好有三个值,并且与 `RouterErrorType` 不同,这是一个封闭的 `enum`,因为这两个 schema 是故意朝相反方向封闭的。`RouterErrorType` 对失败进行分类,其集合预期会增长,因此,一个硬性拒绝无法识别分类桶的已生成客户端,恰恰会在已经出错的时候失败得最严重。而这一个描述的是生命周期,一个日后新增第四种状态的生命周期,无论是否被声明为 enum,对每一个针对它编写的轮询循环来说都是破坏性变更。因此它被声明为 enum,并把这一约束写在客户端能看到的地方。 + 排队中 Router 请求的状态。它恰好有三个值,并且与 `RouterErrorType` 不同,这是一个封闭的 `enum`,因为这两个 schema 是故意朝相反方向封闭的。`RouterErrorType` 用于对失败进行分类,其取值集合预期会增长,因此,一个硬性拒绝无法识别分类桶的已生成客户端,恰恰会在已经出错的时候失败得最严重。而这一项描述的是生命周期,日后给生命周期新增第四种状态,无论它是否被声明为 enum,对每一个针对它编写的轮询循环来说都是破坏性变更。因此这里将其声明为 enum,并把该约束写在客户端能看到的地方。 类型:[`RouterQueueStatus`](#routerqueuestatus) @@ -1338,7 +1338,7 @@ Router 模型目录的一页。 在响应生成的那一刻,队列中有多少个请求排在该请求之前。零表示该请求位于队首。 - 类型:[`RouterQueuePosition`](#routerqueueposition) -- 至少 0 + 类型:[`RouterQueuePosition`](#routerqueueposition) -- 至少为 0 @@ -1387,7 +1387,7 @@ Router 模型目录的一页。 ### RouterQueueSubmitResponse -当运行被接纳进入队列时返回的句柄:包含请求的身份与状态,并组合了用于访问其生命周期其余部分的三个 URL。 +当某次运行被接纳进入队列时返回的句柄:包含请求的身份与状态,并组合了指向其生命周期其余部分的三个 URL。 组合了 [`RouterQueueUrls`](#routerqueueurls)、[`RouterQueueSubmitFields`](#routerqueuesubmitfields)。 @@ -1395,7 +1395,7 @@ Router 模型目录的一页。 ### RouterQueueUrls -这三条 URL 指向一个已入队请求剩余的生命周期,凡是携带有效句柄的响应都会返回它们,因此客户端无需自行拼接队列 URL。 +这三条 URL 用于访问一个已入队请求剩余生命周期的各个环节。凡是携带有效句柄的响应都会返回它们,因此客户端无需自行拼接队列 URL。 **字段** @@ -1406,20 +1406,20 @@ Router 模型目录的一页。 - 用于收集此请求结果的绝对 URL。 + 收集此请求结果的绝对 URL。 URI - 用于请求取消此请求的绝对 URL。 + 请求取消此请求时所使用的绝对 URL。 URI ### RouterValidationErrorContext -提供商提供的关于未通过验证的规则的详情。 +提供商提供的关于验证失败的规则的详情。 类型:`object` @@ -1442,20 +1442,20 @@ Router 模型目录的一页。 - 某个 `RouterValidationErrorDetail` 所违反的界限,由提供商原样携带,例如 `{"limit_value": 8}` 配合 `greater_than`,`{"min_width": 512}` 配合 `image_too_small`,或 `{"max_size_bytes": 10485760}` 配合 `file_too_large`。键集合特定于提供商和错误类型,因此这里刻意是一个开放对象:把它收窄为固定字段列表,或把它合并进 `msg` 字符串,正是移植后的集成能够编译、却静默丢失读取该界限的分支的原因。当错误类型不携带界限时,该字段缺省。 + 某个 `RouterValidationErrorDetail` 所违反的界限,由提供商原样携带,例如 `{"limit_value": 8}` 配合 `greater_than`,`{"min_width": 512}` 配合 `image_too_small`,或 `{"max_size_bytes": 10485760}` 配合 `file_too_large`。键集合特定于提供商和错误类型,因此这里刻意设计为开放对象:把它收窄为固定字段列表,或把它合并进 `msg` 字符串,正是移植后的集成能够编译通过、却静默丢失读取该界限的分支的原因。当错误类型不携带界限时,该字段不存在。 类型:[`RouterValidationErrorContext`](#routervalidationerrorcontext) - 出错的输入值,原样回显,以便调用方无需再从 `loc` 重新推导就能看到被拒绝的内容。任意 JSON 类型,包括字符串、数字、布尔、数组、对象或 null,因此该 schema 被有意保持为无类型,而不是收窄为对象。当提供商不回显输入时,该字段缺省。 + 出错的输入值,原样回显,以便调用方无需再从 `loc` 重新推导就能看到被拒绝的内容。可为任意 JSON 类型,包括字符串、数字、布尔、数组、对象或 null,因此该 schema 刻意保持为无类型,而不是收窄为对象。当提供商不回显输入时,该字段不存在。 类型:[`RouterValidationErrorInput`](#routervalidationerrorinput) ### RouterValidationErrorInput -提供商包含该值时,被拒绝的输入值。 +被拒绝的输入值,当提供商包含该值时。 ### RouterValidationErrorResponse @@ -1464,7 +1464,7 @@ Router 模型目录的一页。 **字段** - 请求中发现的每一个验证失败项,每个出错的字段对应一个条目。 + 请求中发现的每个验证失败项,每个出错的字段对应一个条目。 类型:[`RouterValidationErrorDetail`](#routervalidationerrordetail) 数组