From 5e393e574f97d4f80d5d3190eed674993ba2474d Mon Sep 17 00:00:00 2001 From: lin-bot23 Date: Tue, 13 Oct 2026 11:09:11 +0800 Subject: [PATCH 1/6] i18n: sync Comfy Router guide pages with upstream/main (2026-10-13) --- ja/development/comfy-api/overview.mdx | 4 +- ja/development/comfy-router/limitations.mdx | 7 +- ja/development/comfy-router/models.mdx | 30 +- ja/development/comfy-router/providers.mdx | 26 +- ja/development/comfy-router/quickstart.mdx | 95 ++- ja/development/comfy-router/reference.mdx | 615 +++++++++++------- ko/development/comfy-api/overview.mdx | 6 +- ko/development/comfy-router/limitations.mdx | 7 +- ko/development/comfy-router/models.mdx | 29 +- ko/development/comfy-router/providers.mdx | 26 +- ko/development/comfy-router/quickstart.mdx | 96 ++- ko/development/comfy-router/reference.mdx | 567 +++++++++++------ zh/development/comfy-api/overview.mdx | 4 +- zh/development/comfy-router/limitations.mdx | 7 +- zh/development/comfy-router/models.mdx | 29 +- zh/development/comfy-router/providers.mdx | 26 +- zh/development/comfy-router/quickstart.mdx | 89 ++- zh/development/comfy-router/reference.mdx | 655 +++++++++++++------- 18 files changed, 1533 insertions(+), 785 deletions(-) diff --git a/ja/development/comfy-api/overview.mdx b/ja/development/comfy-api/overview.mdx index ae3790e385..b0e9d44247 100644 --- a/ja/development/comfy-api/overview.mdx +++ b/ja/development/comfy-api/overview.mdx @@ -2,7 +2,7 @@ title: "Comfy API のバージョン:v2 と非推奨の v1 Cloud API" sidebarTitle: "概要" description: "Comfy API の各バージョンを比較します。ComfyUI ワークフローをヘッドレスで実行する推奨の v2 HTTP API と、非推奨の v1 Cloud API です。" -translationSourceHash: dda53070 +translationSourceHash: ebaa5065 translationFrom: development/comfy-api/overview.mdx --- @@ -17,4 +17,4 @@ ComfyUIをヘッドレスで実行するためのパブリックAPIは、時間 -関連項目: [Comfy APIデプロイメント](/ja/development/serverless/overview) · [Comfy SDK](/ja/development/api-development/sdks) · [APIキーの取得](/ja/development/api-development/getting-an-api-key) +関連項目: [Comfy APIデプロイメント](/ja/development/serverless/overview) · [Comfy SDK](/ja/development/api-development/sdks) · [APIキーの取得](/ja/development/api-development/getting-an-api-key) \ No newline at end of file diff --git a/ja/development/comfy-router/limitations.mdx b/ja/development/comfy-router/limitations.mdx index b23a68852d..b6b0d2b84e 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: b7f1a006 +translationSourceHash: 8367ba3c translationFrom: development/comfy-router/limitations.mdx translationBlockHashes: "_intro": 6b871cf3 @@ -13,7 +13,7 @@ translationBlockHashes: "Request bodies are capped": 675b77c8 "Requests are rate limited per caller": 421194d9 "No progress while a call runs": 75d42d8d - "Comfy charges and usage": e370030e + "Comfy charges and usage": 1ba61544 "Router does not cover every partner operation": f0902b33 "Model outputs and stored assets": 06c737c1 "Next": be85b789 @@ -22,6 +22,7 @@ translationBlockHashes: + Router はパートナーモデルを、1回の同期 HTTP 呼び出し、または送信して後で結果を取得するキュー中のリクエストを通じて実行します。アプリケーションが完了した結果を待つことができ、あるいは後で結果を取得でき、さらにモデル自身の入力フィールドと出力フィールドを処理できる場合に使用します。 ## Router がサポートするもの @@ -99,6 +100,8 @@ 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` の読み取り方については、[Pre-flight cost estimates](/ja/development/comfy-router/reference#pre-flight-cost-estimates) を参照してください。 + ## Routerはすべてのパートナー操作をカバーしていない Routerはモデルを実行します。ファイルのアップロード、アカウントの読み取り、アセット管理、ストリーミング、プロバイダーのジョブ制御には、`/proxy/…` 配下のパートナープロキシルートが必要になる場合があります。これらはRouterの外部にあり、そのコントラクトには記述されていません。Router自体のサーフェスは [Comfy Router specification](/router-openapi.yaml) です。サポートはプロバイダーによって異なります。 diff --git a/ja/development/comfy-router/models.mdx b/ja/development/comfy-router/models.mdx index 638cdb50cc..ae33c631ce 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: 8488d3b9 +translationSourceHash: 5e001542 translationFrom: development/comfy-router/models.mdx translationBlockHashes: "_intro": 2584e428 - "Find by output": 3e10a83c + "Find by output": dcd31275 "Anthropic": de8acc20 "Beeble": b52ea340 "Black Forest Labs": 2934e3eb @@ -30,6 +30,7 @@ translationBlockHashes: "Moonvalley": e237894a "OpenAI": c5c4af80 "Openrouter": a4f6806b + "Pika": f2b1d797 "Pruna": 903d76ee "Qwen": b3ef78a1 "Recraft": 02b7d9cd @@ -46,6 +47,7 @@ translationBlockHashes: + {/* 生成済みファイル。Router カタログから `pnpm code-pages:gen` によって生成されます。 */} 以下に挙げるすべてのモデルは、同じルート `POST /v2/models/{provider}/{model}` で提供され、それぞれのモデル固有の JSON ボディを使用します。各ページには、Python、TypeScript、cURL で動作するリクエスト例を掲載しています。ディスカバリー、スキーマ、エラー、リトライ、課金については、[Comfy Router API の使用](/ja/development/comfy-router/api) を参照してください。 @@ -55,7 +57,7 @@ translationBlockHashes: ## 出力から探す - + - [SwitchX](/ja/development/comfy-router/models/beeble/switchx/code): `beeble/switchx` - [FLUX 3 Video](/ja/development/comfy-router/models/black-forest-labs/flux-3-video/code): `bfl/flux-3-video` @@ -94,6 +96,8 @@ translationBlockHashes: - [Text To Video](/ja/development/comfy-router/models/moonvalley/text-to-video/code): `moonvalley/text-to-video` - [Video To Video Resize](/ja/development/comfy-router/models/moonvalley/video-to-video-resize/code): `moonvalley/video-to-video-resize` - [Video To Video](/ja/development/comfy-router/models/moonvalley/video-to-video/code): `moonvalley/video-to-video` +- [Pika 2.5 Image To Video](/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code): `pika/pika-2.5-image-to-video` +- [Pika 2.5 Text To Video](/ja/development/comfy-router/models/pika/pika-2-5-text-to-video/code): `pika/pika-2.5-text-to-video` - [P Video 2](/ja/development/comfy-router/models/pruna/p-video-2/code): `pruna/p-video-2` - [Aleph 2](/ja/development/comfy-router/models/runway/aleph2/code): `runway/aleph2` - [Gen 4 Turbo](/ja/development/comfy-router/models/runway/gen4-turbo/code): `runway/gen4_turbo` @@ -105,8 +109,7 @@ translationBlockHashes: - [HappyHorse 1.0 R2V](/ja/development/comfy-router/models/wan/happyhorse-1-0-r2v/code): `wan/happyhorse-1.0-r2v` - [HappyHorse 1.0 T2V](/ja/development/comfy-router/models/wan/happyhorse-1-0-t2v/code): `wan/happyhorse-1.0-t2v` - [HappyHorse 1.0 Video Edit](/ja/development/comfy-router/models/wan/happyhorse-1-0-video-edit/code): `wan/happyhorse-1.0-video-edit` -- [HappyHorse 1.1 I2V](/ja/development/comfy-router/models/wan/happyhorse-1-1-i2v/code): `wan/happyhorse-1.1-i2v` -- [HappyHorse 1.1 R2V](/ja/development/comfy-router/models/wan/happyhorse-1-1-r2v/code): `wan/happyhorse-1.1-r2v` +- [HappyHorse 1.1 I2V](/ja/development/comfy-router/models/wan/happyhorse-1-1-i2v/code): `wan/happyhorse-1.1-i2v`- [HappyHorse 1.1 R2V](/ja/development/comfy-router/models/wan/happyhorse-1-1-r2v/code): `wan/happyhorse-1.1-r2v` - [HappyHorse 1.1 T2V](/ja/development/comfy-router/models/wan/happyhorse-1-1-t2v/code): `wan/happyhorse-1.1-t2v` - [Wan 2.5 I2V Preview](/ja/development/comfy-router/models/wan/wan2-5-i2v-preview/code): `wan/wan2.5-i2v-preview` - [Wan 2.5 T2V Preview](/ja/development/comfy-router/models/wan/wan2-5-t2v-preview/code): `wan/wan2.5-t2v-preview` @@ -160,8 +163,7 @@ translationBlockHashes: - [Crystal Upscaler](/ja/development/comfy-router/models/fal/crystal-upscaler/code): `fal/crystal-upscaler` - [Patina](/ja/development/comfy-router/models/fal/patina/code): `fal/patina` - [AI Image Upscaler Precision V2](/ja/development/comfy-router/models/freepik/ai-image-upscaler-precision-v2/code): `freepik/ai-image-upscaler-precision-v2` -- [AI Skin Enhancer Creative](/ja/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code): `freepik/ai-skin-enhancer-creative` -- [AI Skin Enhancer Faithful](/ja/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code): `freepik/ai-skin-enhancer-faithful` +- [AI Skin Enhancer Creative](/ja/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code): `freepik/ai-skin-enhancer-creative`- [AI Skin Enhancer Faithful](/ja/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code): `freepik/ai-skin-enhancer-faithful` - [AI Skin Enhancer Flexible](/ja/development/comfy-router/models/freepik/ai-skin-enhancer-flexible/code): `freepik/ai-skin-enhancer-flexible` - [Gemini Omni 1.1 Flash](/ja/development/comfy-router/models/gemini-interactions/gemini-omni-1-1-flash/code): `gemini-interactions/gemini-omni-1.1-flash` - [Gemini Omni Flash Preview](/ja/development/comfy-router/models/gemini-interactions/gemini-omni-flash-preview/code): `gemini-interactions/gemini-omni-flash-preview` @@ -212,8 +214,7 @@ translationBlockHashes: - [Wan 2.5 T2I Preview](/ja/development/comfy-router/models/wan/wan2-5-t2i-preview/code): `wan/wan2.5-t2i-preview` - [Seedvr 2](/ja/development/comfy-router/models/wavespeed/seedvr2/code): `wavespeed/seedvr2` - [Ultimate Image Upscaler](/ja/development/comfy-router/models/wavespeed/ultimate-image-upscaler/code): `wavespeed/ultimate-image-upscaler` -- [Grok Imagine Image 2.0](/ja/development/comfy-router/models/xai/grok-imagine-image-2-0/code): `xai/grok-imagine-image-2.0` -- [Grok Imagine Image Pro](/ja/development/comfy-router/models/xai/grok-imagine-image-pro/code): `xai/grok-imagine-image-pro` +- [Grok Imagine Image 2.0](/ja/development/comfy-router/models/xai/grok-imagine-image-2-0/code): `xai/grok-imagine-image-2.0`- [Grok Imagine Image Pro](/ja/development/comfy-router/models/xai/grok-imagine-image-pro/code): `xai/grok-imagine-image-pro` - [Grok Imagine Image Quality](/ja/development/comfy-router/models/xai/grok-imagine-image-quality/code): `xai/grok-imagine-image-quality` - [Grok Imagine Image](/ja/development/comfy-router/models/xai/grok-imagine-image/code): `xai/grok-imagine-image` @@ -275,9 +276,7 @@ translationBlockHashes: - [Claude Fable 5.1](/ja/development/comfy-router/models/anthropic/claude-fable-5-1/code): `anthropic/claude-fable-5-1` -- [Claude Fable 5](/ja/development/comfy-router/models/anthropic/claude-fable-5/code): `anthropic/claude-fable-5` -- [Claude Haiku 4.5 20251001](/ja/development/comfy-router/models/anthropic/claude-haiku-4-5-20251001/code): `anthropic/claude-haiku-4-5-20251001` -- [Claude Opus 4.6](/ja/development/comfy-router/models/anthropic/claude-opus-4-6/code): `anthropic/claude-opus-4-6` +- [Claude Fable 5](/ja/development/comfy-router/models/anthropic/claude-fable-5/code): `anthropic/claude-fable-5`- [Claude Opus 4.6](/ja/development/comfy-router/models/anthropic/claude-opus-4-6/code): `anthropic/claude-opus-4-6` - [Claude Opus 4.7](/ja/development/comfy-router/models/anthropic/claude-opus-4-7/code): `anthropic/claude-opus-4-7` - [Claude Opus 4.8](/ja/development/comfy-router/models/anthropic/claude-opus-4-8/code): `anthropic/claude-opus-4-8` - [Claude Opus 5.5](/ja/development/comfy-router/models/anthropic/claude-opus-5-5/code): `anthropic/claude-opus-5-5` @@ -591,6 +590,13 @@ translationBlockHashes: | --- | --- | --- | --- | | [Chat Completions](/ja/development/comfy-router/models/openrouter/chat-completions/code) | `openrouter/chat-completions` | テキスト, 画像 | テキスト | +## Pika + +| モデル | ID | 入力 | 出力 | +| --- | --- | --- | --- | +| [Pika 2.5 画像から動画](/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code) | `pika/pika-2.5-image-to-video` | テキスト、画像 | ビデオ | +| [Pika 2.5 テキストから動画](/ja/development/comfy-router/models/pika/pika-2-5-text-to-video/code) | `pika/pika-2.5-text-to-video` | テキスト | ビデオ | + ## Pruna | モデル | ID | 入力 | 出力 | diff --git a/ja/development/comfy-router/providers.mdx b/ja/development/comfy-router/providers.mdx index 109e46c987..75c10c6b02 100644 --- a/ja/development/comfy-router/providers.mdx +++ b/ja/development/comfy-router/providers.mdx @@ -2,7 +2,7 @@ title: "Comfy Router の配信プロバイダー" sidebarTitle: "配信プロバイダー" description: "各 Comfy Router モデルを配信できるプロバイダーと、代替プロバイダーを選択する方法を説明します。" -translationSourceHash: bce89598 +translationSourceHash: 91ebc6bc translationFrom: development/comfy-router/providers.mdx --- @@ -14,17 +14,17 @@ translationFrom: development/comfy-router/providers.mdx ## プロバイダー別の対応状況 -| モデル / プロバイダー | **Comfy(デフォルト)** | **fal** | **Higgsfield** | **Runware** | **WaveSpeed** | -| --- | --- | --- | --- | --- | --- | -| [Dreamina Seedance 2.0 260128](/ja/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code) | ✓ | ✓ | ✓ | ✓ | ✓ | -| [Dreamina Seedance 2.5 260628](/ja/development/comfy-router/models/byteplus/dreamina-seedance-2-5-260628/code) | ✓ | ✓ | ✓ | ✓ | ✓ | -| [GPT Image 2](/ja/development/comfy-router/models/openai/gpt-image-2/code) | ✓ | ✓ | - | ✓ | ✓ | -| [GPT Image 2.5 Flare](/ja/development/comfy-router/models/openai/gpt-image-2-5-flare/code) | ✓ | ✓ | - | ✓ | ✓ | -| [GPT Image 2.5 Sunburst](/ja/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code) | ✓ | ✓ | - | ✓ | ✓ | -| [Kling 3.0 Turbo](/ja/development/comfy-router/models/kling/kling-3-0-turbo/code) | ✓ | - | ✓ | - | - | -| [Kling V3](/ja/development/comfy-router/models/kling/kling-v3/code) | ✓ | - | ✓ | - | - | -| [Nano Banana 2](/ja/development/comfy-router/models/google/nano-banana-2/code) | ✓ | ✓ | - | ✓ | ✓ | -| [Nano Banana Pro](/ja/development/comfy-router/models/google/nano-banana-pro/code) | ✓ | ✓ | - | ✓ | ✓ | -| [Wan 3.0 Video](/ja/development/comfy-router/models/wan/wan3-0-video/code) | ✓ | - | ✓ | - | - | +| モデル / プロバイダー | **Comfy(デフォルト)** | **fal** | **Higgsfield** | **Pika** | **Runware** | **WaveSpeed** | +| --- | --- | --- | --- | --- | --- | --- | +| [Dreamina Seedance 2.0 260128](/ja/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [Dreamina Seedance 2.5 260628](/ja/development/comfy-router/models/byteplus/dreamina-seedance-2-5-260628/code) | ✓ | ✓ | ✓ | - | ✓ | ✓ | +| [GPT Image 2](/ja/development/comfy-router/models/openai/gpt-image-2/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [GPT Image 2.5 Flare](/ja/development/comfy-router/models/openai/gpt-image-2-5-flare/code) | ✓ | ✓ | - | - | ✓ | ✓ | +| [GPT Image 2.5 Sunburst](/ja/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code) | ✓ | ✓ | - | - | ✓ | ✓ | +| [Kling 3.0 Turbo](/ja/development/comfy-router/models/kling/kling-3-0-turbo/code) | ✓ | - | ✓ | - | - | - | +| [Kling V3](/ja/development/comfy-router/models/kling/kling-v3/code) | ✓ | - | ✓ | - | - | - | +| [Nano Banana 2](/ja/development/comfy-router/models/google/nano-banana-2/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [Nano Banana Pro](/ja/development/comfy-router/models/google/nano-banana-pro/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [Wan 3.0 Video](/ja/development/comfy-router/models/wan/wan3-0-video/code) | ✓ | - | ✓ | - | - | - | `strict_mode=false`(デフォルト)では、選択したプロバイダー向けにネイティブのリクエストとレスポンスが変換されます。変換できないフィールドは `X-Comfy-Router-Dropped-Params` レスポンスヘッダーに一覧表示されます。 \ No newline at end of file diff --git a/ja/development/comfy-router/quickstart.mdx b/ja/development/comfy-router/quickstart.mdx index 0eba1ebbfb..1766f459b2 100644 --- a/ja/development/comfy-router/quickstart.mdx +++ b/ja/development/comfy-router/quickstart.mdx @@ -2,50 +2,52 @@ title: "Comfy Router クイックスタート" sidebarTitle: "クイックスタート" description: "最新のフロンティアメディアモデルを使って、数分で画像とビデオを生成します。" -translationSourceHash: 36d0191e +translationSourceHash: 8e5bb6d6 translationFrom: development/comfy-router/quickstart.mdx +translationBlockHashes: + "_intro": f2205e95 + "Next steps": ed466781 --- -
-Comfy Router は、`https://api.comfy.org` でホストされている画像・ビデオモデルを単一の API で利用できるようにします。[あなたの Comfy ワークスペース](https://platform.comfy.org/profile/api-keys?onboarding=router)で APIキーを作成し、公式の [Python と TypeScript SDK](/ja/development/api-development/sdks) またはプレーンな HTTP で任意のモデルを呼び出します。課金は従量制です。各リクエストはワークスペースの残高からクレジットを消費し、サブスクリプションはありません。 +Comfy Router は、`https://api.comfy.org` でホスト型の画像モデルとビデオモデルを利用するための単一の API を提供します。[Comfy ワークスペース](https://platform.comfy.org/profile/api-keys?onboarding=router)で API キーを作成し、公式の [Python および TypeScript SDK](/ja/development/api-development/sdks) か、通常の HTTP 経由で任意のモデルを呼び出せます。課金は従量制です。各リクエストはワークスペースの残高からクレジットを消費し、サブスクリプションはありません。 - **Higgsfield をお使いですか?** ご自身の Higgsfield キーを保存すると、それらの生成は Comfy のクレジットではなく、Higgsfield アカウントに課金されます。エンドポイントもリクエストボディも同じです。詳細は[ご自身のキーで Higgsfield を使う](/ja/development/comfy-router/higgsfield-byok)をご覧ください。 + **Higgsfield をお使いですか?** ご自身の Higgsfield キーを保存すると、それらの生成は Comfy クレジットではなく Higgsfield アカウントに課金されます。エンドポイントもリクエストボディも同じです。詳細は [Higgsfield を自分のキーで使う](/ja/development/comfy-router/higgsfield-byok) を参照してください。 - **LiteLLM で支出を追跡していますか?** Router は同期実行の USD コストを LiteLLM が読み取るヘッダーで報告するため、価格表を管理する必要はありません。詳細は[Comfy Router を LiteLLM で使う](/ja/development/comfy-router/litellm)をご覧ください。 + **LiteLLM で支出を追跡しますか?** Router は、LiteLLM が読み取るヘッダーに同期実行の USD コストを報告するため、価格表を維持する必要はありません。詳細は [Comfy Router を LiteLLM で使う](/ja/development/comfy-router/litellm) を参照してください。 - [あなたの Comfy ワークスペース](https://platform.comfy.org/profile/api-keys?onboarding=router)でキーを作成します。Bash 互換のターミナルで、次を設定します: + [Comfy ワークスペース](https://platform.comfy.org/profile/api-keys?onboarding=router)でキーを作成します。Bash 互換のターミナルで次を設定します: ```bash export COMFY_API_KEY="comfyui-..." ``` - APIキーはサーバー上またはローカル環境に保管してください。これらの例はターミナルまたはサーバー向けであり、ブラウザの JavaScript 向けではありません。 + API キーはサーバー上またはローカル環境に保管してください。これらの例はターミナルまたはサーバー向けであり、ブラウザの JavaScript 向けではありません。 - Router はリクエストごとにクレジットを消費します。ワークスペースにクレジット残高がない場合、最初の実呼び出しは `error_type: insufficient_credits` とともに `402` を返します。このチェックはボディの検証が実行される前に実行されるため、クレジットのないワークスペースでは、無効なリクエストであっても `402` が返ることがあります。リクエストボディをデバッグする前に、[ワークスペースの請求](https://platform.comfy.org)でクレジットを追加してください。 + Router はリクエストごとにクレジットを課金します。ワークスペースにクレジット残高がない場合、最初の実際の呼び出しは `402` と `error_type: insufficient_credits` を返します。このチェックはボディの検証より前に実行されるため、クレジットのないワークスペースでは無効なリクエストでも `402` が返ることがあります。リクエストボディをデバッグする前に、[ワークスペースの請求](https://platform.comfy.org)でクレジットを追加してください。 - - 言語を選択して例を実行します。生成には数分かかることがあります。 + + 使用する言語を選んでサンプルを実行します。生成には数分かかることがあります。 ```python Python # Python 3.10+ # インストール: python -m pip install "comfy-sdk>=0.3.0" - # quickstart.py として保存し、次を実行: python quickstart.py + # quickstart.py として保存し、実行: python quickstart.py import asyncio from comfy_sdk import AsyncComfy - # AsyncComfy は環境から COMFY_API_KEY を読み取ります。 + # AsyncComfy は環境変数から COMFY_API_KEY を読み取ります。 async def main(): async with AsyncComfy() as client: handle = await client.models.submit( @@ -64,7 +66,7 @@ Comfy Router は、`https://api.comfy.org` でホストされている画像・ ) print("request_id:", handle.request_id) - # リクエストが完了するまでポーリングし、サーバーが指定する Retry-After の時間だけ待機します。 + # リクエストが完了するまでポーリングし、サーバーが指定する Retry-After だけ待機します。 async for update in handle.iter_events(): print(update.status, update.queue_position) @@ -88,7 +90,7 @@ Comfy Router は、`https://api.comfy.org` でホストされている画像・ curl -i "https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests/$REQUEST_ID/status" \ -H "X-API-Key: $COMFY_API_KEY" - # 3. モデルの結果を収集します。 + # 3. モデルの結果を取得します。 curl "https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests/$REQUEST_ID" \ -H "X-API-Key: $COMFY_API_KEY" ``` @@ -96,11 +98,11 @@ Comfy Router は、`https://api.comfy.org` でホストされている画像・ ```typescript TypeScript // Node.js 22+ // インストール: npm install "@comfyorg/sdk@>=0.4.0" --save-dev tsx - // quickstart.mts として保存し、次を実行: npx tsx quickstart.mts + // quickstart.mts として保存し、実行: npx tsx quickstart.mts import { comfy } from "@comfyorg/sdk"; - // Comfy は環境から COMFY_API_KEY を読み取ります。 + // Comfy は環境変数から COMFY_API_KEY を読み取ります。 const handle = await comfy.models.submit( "byteplus/dreamina-seedance-2-5-260628", { @@ -117,7 +119,7 @@ Comfy Router は、`https://api.comfy.org` でホストされている画像・ ); console.log("requestId:", handle.requestId); - // リクエストが完了するまでポーリングし、サーバーが指定する Retry-After の時間だけ待機します。 + // リクエストが完了するまでポーリングし、サーバーが指定する Retry-After だけ待機します。 for await (const update of handle.events()) { console.log(update.status, update.queuePosition); } @@ -129,17 +131,64 @@ Comfy Router は、`https://api.comfy.org` でホストされている画像・ - SDK の各 submit 呼び出しは冪等キーを生成し、自動再試行のためにそれを再利用します。cURL の例では `uuidgen` でキーを生成します。利用できない場合は、別の UUID ジェネレーターを使用してください。ステータス、キャンセル、結果の収集の詳細については、[キュー配信](/ja/development/comfy-router/queue)をご覧ください。 + SDK の submit 呼び出しはそれぞれ冪等性キーを作成し、自動リトライでそれを再利用します。cURL の例では `uuidgen` で作成します。利用できない場合は、別の UUID 生成ツールを使用してください。ステータス、キャンセル、結果の取得の詳細については、[キューの配信](/ja/development/comfy-router/queue) を参照してください。 +## Image-to-video and reference-to-video + +The same Seedance request takes image, video, and audio inputs. Add items to `content` and set each one's `role`. The roles you send decide the operation Router runs. Pricing follows the media kinds in `content`, not the roles: a request with any video input bills as video-to-video, otherwise one with any image bills as image-to-video, and a text-only request bills as text-to-video. Some models charge the same rate for text-to-video and image-to-video. + +| Operation | `content` items | +|---|---| +| Text-to-video | one `text` item | +| Image-to-video | a `text` item plus an `image_url` item with `role: first_frame` | +| First-and-last-frame | the above plus a second `image_url` item with `role: last_frame` | +| Reference-to-video | a `text` item plus `image_url` items with `role: reference_image`, and on Seedance 2.0 and 2.5, `video_url` items with `role: reference_video` and `audio_url` items with `role: reference_audio` | + +An image `url` can be a public URL or a `data:image/;base64,` string. Submit, poll, and collect exactly as in the quickstart above. Only the body changes. + +```bash Image-to-video +curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d '{ + "content": [ + {"type": "text", "text": "The fox turns and runs into the trees"}, + {"type": "image_url", "image_url": {"url": "https://example.com/fox.png"}, "role": "first_frame"} + ], + "duration": 5, + "resolution": "720p" + }' +``` + +```bash Reference-to-video +curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d '{ + "content": [ + {"type": "text", "text": "The character from the reference walks through a neon-lit market"}, + {"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"}, + {"type": "image_url", "image_url": {"url": "https://example.com/outfit.png"}, "role": "reference_image"} + ], + "duration": 5, + "ratio": "16:9", + "resolution": "720p" + }' +``` + +On Seedance 2.5, first-frame and first-and-last-frame requests take the output aspect ratio from the first frame. Leave `ratio` out or send `adaptive`, because a concrete ratio is refused with a `400`. The request schema is shared across the Seedance family and can list roles a model ignores, so check the `x-comfy-router-input-modalities` field in each model's [input schema](/development/comfy-router/models) for the input kinds that model accepts. For example, `reference_video` and `reference_audio` need a model that lists `video` or `audio` there. + ## 次のステップ - - 利用できるモデルを確認し、モデルごとのリクエスト例を探します。 + + 利用可能なモデルを確認し、モデル固有のリクエスト例を見つけられます。 - - モデルの検索、スキーマ、キューリクエスト、エラー、課金について説明します。 + + モデルの検出、スキーマ、キュー中のリクエスト、エラー、課金について学びます。 - \ No newline at end of file + diff --git a/ja/development/comfy-router/reference.mdx b/ja/development/comfy-router/reference.mdx index 2006f8c3e7..c14abc97c2 100644 --- a/ja/development/comfy-router/reference.mdx +++ b/ja/development/comfy-router/reference.mdx @@ -2,16 +2,17 @@ title: "Comfy Router API リファレンス" description: "Comfy API 契約から生成済みの、Comfy Router のすべてのエンドポイント、パラメータ、レスポンスボディ、エラーバケット。" sidebarTitle: "API リファレンス" -translationSourceHash: 172fce1a +translationSourceHash: af0beef4 translationFrom: development/comfy-router/reference.mdx translationBlockHashes: "_intro": 3f6e5d23 - "Endpoints": 15c825a9 + "Endpoints": 8e72e743 "Error buckets": 36170340 "Response headers": 8b4696f6 + "Pre-flight cost estimates": 6b90f27c "Result assets": 65fc939b "Per-model input and output schemas": 61c6bde8 - "Schemas": ccaaf317 + "Schemas": 235edfce --- @@ -23,6 +24,7 @@ translationBlockHashes: + {/* 生成済みファイル: 手動で編集しないでください。 @@ -58,7 +60,7 @@ Comfy API キーは Bearer トークンとして送信することもできま - 1 ページで返すモデル数。 + 1 ページで返すモデルの数。 最大 100、デフォルト: 20 @@ -68,215 +70,295 @@ Comfy API キーは Bearer トークンとして送信することもできま OK - モデルカタログの 1 ページ。 - ボディ: [`RouterModelListResponse`](#routermodellistresponse) -- ヘッダー: `X-Comfy-Request-Id` + 本文: [`RouterModelListResponse`](#routermodellistresponse) -- ヘッダー: `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` 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 で 1 つのパートナーモデルのカタログエントリを読み取ります。** +**正規のモデルIDで1つのパートナーモデルのカタログエントリを取得します。** -カタログ全体を一覧表示せずに、1 つのモデルの詳細を読み取ります。 +カタログ全体を一覧表示せずに、1つのモデルの詳細を取得します。 **パラメータ** - 正規の `{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文字 **レスポンス** - OK。モデルのカタログエントリ。 + OK - モデルのカタログエントリ。 - ボディ: [`RouterModelDetail`](#routermodeldetail)、ヘッダー: `X-Comfy-Request-Id` + ボディ: [`RouterModelDetail`](#routermodeldetail) -- ヘッダー: `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 が見つかりませんでした。 + モデル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 のプロバイダー部分。 - 型: [`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 文字 - 1 つの論理的な呼び出しを安全に再試行できるようにする、呼び出し側が生成するキー。 + 呼び出し側が生成するキーで、1 つの論理的な呼び出しの再試行を安全にします。 - 1〜255 文字 + 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` では、拒否されるのではなく不活性です。 - `model_provider` と併用した場合にのみ意味を持ちます。 + `model_provider` と併用する場合にのみ意味を持ちます。 デフォルト: False - 最初の試行が 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` で送信されたキュー中の submit では、何も拒否されません。 + このモデルの入力スキーマが宣言していないトップレベルのリクエストボディフィールドを、受け入れるのではなく拒否することをオプトインします。ネストされたフィールドはチェックされず、宣言されていないフィールドを許可するスキーマを持つモデル、または著者によるスキーマを持たないモデルでは何も拒否されません。また、`strict_mode=true` で送信されたキュー中の送信でも拒否されません。 デフォルト: False **リクエストボディ** -`application/json` -- [`RouterModelInput`](#routermodelinput)(必須) +`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 ビデオモデルの場合、先頭フレームの画像は画像から動画へを選択し、参照画像またはクリップは参照から動画を選択します。条件付きの各操作は、基本のテキストから画像へやテキストから動画へのレートではなく、独自のレートで計量されます。 +パートナーモデルのネイティブな 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-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-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` + 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` 認証情報が不足しているか無効です。 - ボディ:[`RouterErrorResponse`](#routererrorresponse) -- ヘッダー:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` Router のリクエストレベルの失敗です。リクエストがモデルに到達しなかったか、モデル自身が報告しなかった理由で失敗しました。 - ボディ:[`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` - `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 認証情報なしで、かつ(マルチパートの場合は)編集なしでリクエストを送信してください。 + `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 認証情報なしで、(マルチパートの場合は)編集なしでリクエストを送信してください。 - ボディ:[`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` の場合) リクエストボディが大きすぎます。 - ボディ:[`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`、`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` は許容量のウィンドウを待つことを意味します。 - ボディ:[`RouterErrorResponse`](#routererrorresponse) -- ヘッダー:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`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-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining` - プロバイダー自身のレスポンスを結果に変換できませんでした(`provider_error`)。 + プロバイダー自身のレスポンスを結果に変換できませんでした(`provider_error`)。 - ボディ:[`RouterErrorResponse`](#routererrorresponse) -- ヘッダー:`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 は一時的に利用できません。バックオフを伴って再試行してください。 - ボディ:[`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` (容量拒否の場合のみ) リクエストが期限を超過しました。再試行する前にエラータイプを確認してください。 - ボディ:[`RouterErrorResponse`](#routererrorresponse) -- ヘッダー:`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` + +**モデル呼び出しを実行する前に、実行せずにその価格を算出します。** + +この body をこのモデルで実行した場合に Comfy が請求する金額を米ドルで返します。価格は、実際の請求に適用されるものと同じレートカードに基づいて算出されます。body はまずモデルの入力スキーマに対して検証されます。これはデフォルト実行(`strict_mode` なし、`reject_unknown_fields` なし)が行う検証と同じであるため、モデルのスキーマに適合しない body は実行時と同じ `422` になります。プロバイダーには何もディスパッチされず、課金も発生しません。この結果は価格のロックではありません。価格は `pricing_as_of` 時点で有効なレートで算出され、実行はレーティング時点で有効なレートで課金されます。この機能の段階的リリース中は、このルートは `error_type: not_enabled` とともに `403` を返します。 + +**パラメータ** + + + 正規の `{provider}/{model}` モデル ID のうち、小文字のプロバイダーセグメント。実行対象のモデルを持つパートナーです。 + + 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字のスラッグ(例: `anthropic`)、最大64文字 + + + + 正規の `{provider}/{model}` モデル ID のうち、小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 + + 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字のスラッグ(例: `claude-opus-4-6`)、最大128文字 + + + + このモデルを提供する代替プロバイダーを、現在のデフォルトの代わりに選択します。 + + +**リクエストボディ** + +`application/json` -- [`RouterModelInput`](#routermodelinput)(必須) + +パートナーモデルのネイティブな JSON 入力で、このモデルに対して同期ルートが受け付ける body と同じものです。デフォルト実行が行うのと同じようにモデル自身の入力スキーマに対して検証され(このルートは `strict_mode` や `reject_unknown_fields` を受け付けません)、その独自のフィールド(出力数、入力画像が選択する操作)が何の価格を算出するかを決定します。 + +**レスポンス** + + + 見積もりです。 + + ボディ: [`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` + + + + モデル ID が見つかりませんでした。 + + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + + + + リクエストボディが大きすぎます。 + + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + + + + 見積もりの body がモデルのスキーマに対して拒否されたか、パスとは異なるモデルが指定されました。 + + ボディ: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + + + + Router が一時的に利用できません。バックオフして再試行してください。 + + ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After`(容量拒否時のみ) ### `GET /v2/models/{provider}/{model}/openapi.json` @@ -300,71 +382,71 @@ Comfy API キーは Bearer トークンとして送信することもできま - 呼び出し元が以前の `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` + ヘッダー: `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がリクエストを完了できませんでした。 + 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 入力です。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文字 @@ -372,33 +454,33 @@ Comfy Router のキュー投入配信モードです。リクエストボディ - `model_provider` と組み合わせた場合にのみ意味を持ちます。 + `model_provider` と併用した場合にのみ意味を持ちます。 デフォルト: False - 1 つの論理的な呼び出しを安全に再試行できるようにする、呼び出し側が生成するキーです。 + 1つの論理的な呼び出しを再試行しても安全にする、呼び出し元が生成するキーです。 - 1〜255 文字 + 1〜255文字 - このモデルの入力スキーマが宣言していないトップレベルのリクエストボディフィールドを受け入れるのではなく、拒否することを選択します。ネストされたフィールドはチェックされません。また、スキーマが未宣言のフィールドを許可しているモデルや、作成されたスキーマを持たないモデル、あるいは `strict_mode=true` で送信されたキュー投入の送信では、何も拒否されません。 + Opt in to refusing a top-level request-body field this model's input schema does not declare, rather than accepting it; nested fields are not checked, and nothing is refused for a model whose schema allows undeclared fields or has no authored schema, or on a queued submit sent with `strict_mode=true`. デフォルト: False **リクエストボディ** -`application/json` -- [`RouterModelInput`](#routermodelinput) (必須) +`application/json` -- [`RouterModelInput`](#routermodelinput)(必須) -パートナーモデルのネイティブ JSON 入力です。このモデルに対して同期ルートが受け付けるボディと同一であり、操作を選択し、同じ方法で課金されます。ボディ自身のフィールドが、複数の操作をサポートするモデルで Router が実行する操作を選択し(入力画像は編集可能な画像モデルを画像から画像へ切り替え、Seedance の先頭フレーム画像は画像から動画へ、参照画像またはクリップは参照から動画を選択します)、条件付けされた各操作は、ベースのテキストから画像へやテキストから動画へのレートではなく、それぞれ独自のレートで課金されます。ディスパッチ時にも同じプロバイダー選択の契約が適用されます。`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` @@ -428,7 +510,7 @@ Comfy Router のキュー投入配信モードです。リクエストボディ - この呼び出し元またはモデルに対してリクエストが許可されていません。パートナーが生成結果を直接バイトとして返すモデルはまだキューに投入できず、`not_enabled` で拒否されます。代わりに同期ルートで実行してください。 + この呼び出し元またはモデルではリクエストが許可されていません。パートナーが生成結果を直接バイトとして返すモデルはまだキューに投入できず、`not_enabled` で拒否されます。代わりに同期ルートで実行してください。 ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` @@ -439,46 +521,45 @@ Comfy Router のキュー投入配信モードです。リクエストボディ ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - - `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" で始まります。2 つ目は、その後にチェックされるもので、リクエストがパス内のプロバイダーに対する 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`) - リクエストの内容がモデルのスキーマに照らして拒否されました。 + リクエストの内容がモデルのスキーマに対して拒否されました。 Body: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Idempotent-Replayed` - 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` (capacity refusals only) ### `GET /v2/models/{provider}/{model}/requests/{request_id}` -**送信した 1 件のリクエストの結果を収集します。** +**送信済みの 1 件のリクエストの結果を収集します。** -収集エンドポイントです。正常に完了したリクエストに対しては、パートナーモデル自身のネイティブ出力を返します。これは同じモデルと同じ入力に対して同期ルートの `200` が返す内容とバイト単位で同一です。つまり、2 つの配信モードは 1 つの結果形状を生成し、呼び出し元は 2 つ目のパーサーなしで両者を切り替えられます。 +収集エンドポイントです。正常に完了したリクエストでは、パートナーモデル自身のネイティブ出力を返します。これは同じモデルと同じ入力に対して同期ルートの `200` が返す内容とバイト単位で同一であり、2 つの配信モードは単一の結果形状を生成するため、呼び出し元は 2 つ目のパーサーなしで両者を切り替えられます。 **パラメータ** - 正規の `{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 文字 - 対象とするキュー中のリクエスト。送信がボディで返した `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 文字 @@ -486,81 +567,81 @@ Comfy Router のキュー投入配信モードです。リクエストボディ **レスポンス** - 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` + 本文: [`RouterModelOutput`](#routermodeloutput) または生のバイト (`*/*`) -- ヘッダー: `X-Comfy-Request-Id`, `X-Content-Type-Options` 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` - リクエストのコンテンツがモデルのスキーマに対して拒否されました。 + リクエストのコンテンツがモデルのスキーマに照らして拒否されました。 - ボディ: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Idempotent-Replayed` + 本文: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Idempotent-Replayed` 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 文字 @@ -572,7 +653,7 @@ Comfy Router のキュー投入配信モードです。リクエストボディ - 対象となるキュー中のリクエスト。送信時にボディで返された `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 文字 @@ -582,73 +663,73 @@ Comfy Router のキュー投入配信モードです。リクエストボディ 受理済み: `CANCELLATION_REQUESTED`。 - 本文: [`RouterQueueCancelResponse`](#routerqueuecancelresponse) -- ヘッダー: `X-Comfy-Request-Id` + ボディ: [`RouterQueueCancelResponse`](#routerqueuecancelresponse) -- ヘッダー: `X-Comfy-Request-Id` 競合: `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` -**送信された 1 件のリクエストのキュー状態を読み取ります。** +**送信済みの 1 件のリクエストのキュー状態を読み取ります。** -ポーリング用のエンドポイントです。返すのはリクエストの現在の状態だけで、結果は返しません。そのためクライアントは、ポーリングのたびに出力を転送することなく、長時間かかる生成を監視できます。結果は、これが `COMPLETED` を示したときに、後述の読み取りから一度だけ取得します。 +ポーリング用のエンドポイントです。応答として返るのはリクエストの現在の状態だけで、結果は返りません。そのため、ポーリングのたびに出力を転送することなく、クライアントは長時間の生成を監視できます。結果は、ここで `COMPLETED` と表示されたときに、後述の読み取りから一度だけ取得します。 **パラメータ** - 正規の `{provider}/{model}` モデル ID の小文字のプロバイダーセグメント。実行対象のモデルを持つパートナーです。 + 正規の `{provider}/{model}` モデル ID のうち小文字のプロバイダーセグメント。モデルを実行するパートナーです。 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字のスラッグ、例: `anthropic`、最大 64 文字 - 正規の `{provider}/{model}` モデル ID の小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 + 正規の `{provider}/{model}` モデル ID のうち小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。 型: [`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 文字 @@ -668,7 +749,7 @@ Comfy Router のキュー投入配信モードです。リクエストボディ - この呼び出し元またはモデルに対してリクエストが許可されていません。 + この呼び出し元またはモデルでは、このリクエストは許可されていません。 ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` @@ -686,7 +767,7 @@ Comfy Router のキュー投入配信モードです。リクエストボディ - Router が一時的に利用できません。バックオフして再試行してください。 + Router は一時的に利用できません。バックオフしながら再試行してください。 ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` @@ -697,7 +778,7 @@ Comfy Router のキュー投入配信モードです。リクエストボディ ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`、`X-Comfy-Request-Id` -ここでの説明は簡潔です。モデルの選択、検証、再試行、課金については [Comfy Router API の使用](/ja/development/comfy-router/api) を、ヘッダーの動作については [ヘッダー](/ja/development/comfy-router/headers) を参照してください。 +ここでの説明は簡潔です。モデルの選択、検証、再試行、課金については [Using the Comfy Router API](/ja/development/comfy-router/api) を、ヘッダーの動作については [Headers](/ja/development/comfy-router/headers) を参照してください。 ## エラーバケット @@ -818,6 +899,40 @@ Router が受け付けたものの、完了できなかったリクエストに Router モデルのすべての成功した実行において、常に `nosniff` です。 +## 事前のコスト見積もり + +`POST /v2/models/{provider}/{model}/estimate` は、リクエストボディを実行せずにその価格を見積もります。また、キュー中の送信 (`POST /v2/models/{provider}/{model}/requests`) は、その `201` で `estimate` と同じ [`RouterCostEstimate`](#routercostestimate) を返します。どちらも、Comfy がその実行の請求に用いるレートカードから価格が決まります。自分のプロバイダーキーでの実行は Comfy から課金されません(後述)。見積もりの展開中は、このルートは `error_type: not_enabled` を伴う `403` を返し、送信レスポンスは `estimate` を省略します。カタログには依然として価格が含まれていません。 + +金額を確認する前に `source` を読んでください。数値が不足していても、決して無料という意味ではありません。 + +| `source` | 含まれるもの | 読み方 | +| --- | --- | --- | +| `exact` | `amount`、`amount_cents`、`credits` | `pricing_as_of` のレートに基づく、このボディに対する請求額です。 | +| `estimated` | `min_amount`、`max_amount` とそれぞれの `_cents` 形式(`amount` はなし) | 請求額はプロバイダーが後から報告する数量に依存し、ボディがその範囲を定めます。2 つの境界の間になると見込まれます。 | +| `unknown` | `reason`(数値はなし) | 実行前に価格を示すことができませんでした。その他の `source` の値はすべて `unknown` として扱ってください。 | + +`unknown` の見積もりの `reason` は次のいずれかです。 + +- `not_quotable`: Router はこの呼び出しが実行される前に価格を算出できません。プロバイダーが後から報告する数量で課金され、ボディがその範囲を定めていないか、送信されたままの内容では価格を算出できないためです。認識できない `reason` はすべて `not_quotable` として扱ってください。 +- `unpriced_model`: レートカードがこのリクエストの価格を定めていません。 +- `byok`(キュー中の送信のみ): 実行が自分のプロバイダーキーを使用するため、Comfy はその実行に対して何も課金しません。 +- `pricing_unavailable`(キュー中の送信のみ): リクエストを受け付けた時点でレートカードを読み取れませんでした。送信はそれでも受け入れられ、実行は通常どおり課金されます。 + +見積もりがフェイルクローズする場合: + +- 数値を出すためにレートカードが必要で、カードが読み込まれていないか古い場合、`/estimate` は推測ではなく `503` を返します。キュー中の送信が見積もりを理由に拒否されることはありません。代わりに `reason: pricing_unavailable` を伴う `source: unknown` を返します。実行前にまったく価格を算出できない呼び出し(`not_quotable`)、または自分のプロバイダーキーでのキュー中の送信(`byok`)は、カードを読まずに応答されるため、その `200` はカードが新しいかどうかについて何も示しません。 +- `/estimate` は、デフォルトの実行と同様に、モデル自身の入力スキーマに対してボディを検証します。そのため、モデルのスキーマに適合しないボディには、実行が返すのと同じ `422` が、同じ `detail[]` の形状で返ります。価格の算出もディスパッチも行われません。 +- キュー中の送信の冪等な再生(`Idempotent-Replayed: true`)は `estimate` を省略します。元の見積もりは保存されないためです。 + +見積もりの限界。`200` の数値は、その実行が受け入れられることや、まさにその額が課金されることを約束するものではありません。 + +- `/estimate` は `strict_mode` や `reject_unknown_fields` を受け取らないため、モデルのネイティブな契約のみを検証します。`strict_mode=true` の実行が代替プロバイダー自身のスキーマで受け入れるボディも、ここでは `422` になることがあります。また、`reject_unknown_fields=true` の実行なら拒否するであろう、宣言されていないトップレベルフィールドも、ここでは価格が算出されます。 +- `pricing_as_of` は、レートカードを取得した時刻です(カードを読まなかった場合は、見積もりに応答した時刻)。これは価格の固定ではありません。実行は、評価された時点で有効なレートで課金されます。 +- `/estimate` が見積もるのは、`model_provider` が指定するレグ、またはネイティブのプロバイダーです。`fallback_provider` や `strict_mode` パラメータは受け取りません。フォールバックの再試行が別のプロバイダーに到達した同期実行は、そのプロバイダーのレートで課金され、見積もりはそのレートを示していません。実行のレスポンスにある `X-Comfy-Router-Fallback-Provider` が、それが発生したことを示します。キュー中の送信にはフォールバックがないため、その `estimate` は実行されるレグを見積もります。 +- `/estimate` とキュー中の送信の `estimate` は、`model_provider` のレグにおける同じボディ、または兄弟オペレーションで実行されるボディに対して、わずかに異なるドキュメントの価格を算出することがあります。送信の `estimate` は、その実行が送るドキュメントに基づいて価格が算出されます。 +- `/estimate` は常にプラットフォームの請求額を見積もります。自分のプロバイダーキーでの実行は Comfy から課金されませんが、`/estimate` はそれを検出せず、依然として数値を返します。`reason: byok` を返すのはキュー中の送信だけです。 +- ドルは丸めていないセントから、最大 8 桁の小数で表示され、課金対象となる 1 セント未満の `amount` が `0` と表示されることはありません。`credits` は `round(amount × 211, 2)` で、`X-Comfy-Credits-Used` が請求額に適用するのと同じ換算です。そのため、非常に小さな非ゼロの価格では `credits` が `0` にラウンドされることがあります。それが問題になる場合は `credits` ではなく `amount` または `amount_cents` で予算を立ててください。このヘッダーは実行後の数値のままであり、残高は Comfy プラットフォーム上にあります。 + ## 結果アセット モデルは、アセット URL、インラインバイト、またはその両方を返すことができます。以下のプロバイダーは、選択済みのアセットを Comfy ストレージにコピーし、その URL を置き換えます。この動作はモデルによって異なります。これを選択するリクエストヘッダーはありません。 @@ -855,112 +970,182 @@ Router が受け付けたものの、完了できなかったリクエストに 型: `string` +### RouterCostEstimate + +この呼び出しに対して Comfy が請求する金額を、ディスパッチ前に、課金の基準となる同じレートカードから米ドルで算出したものです。`source` はその数値をどこまで信頼できるかを示します。`exact` は `amount` を持ち、`estimated` は `min_amount` と `max_amount` を持ち `amount` は持ちません。`unknown` はどちらも持たず `reason` を持ちます。`amount` が存在しないことを無料と読み取らないでください。価格の固定ではありません。`pricing_as_of` を参照してください。 + +**フィールド** + + + `exact` | `estimated` | `unknown`。それ以外の値は `unknown` として読み取ります。 + + + + 常に `USD` です。 + + + + 小数文字列としてのドル額。例: "0.04"。最大 8 桁の小数で、指数表記はありません。課金対象となる 1 セント未満の価格が "0" として表示されることはありません。`source` が `exact` の場合のみ存在します。 + + + + 小数文字列としてのドル額の下限。`source` が `estimated` の場合のみ存在します。 + + + + 小数文字列としてのドル額の上限。`source` が `estimated` の場合のみ存在します。 + + + + 計算用の、端数処理を行っていない米セント単位の同じ数値。`amount` とともに存在します。 + + double + + + + 端数処理を行っていない米セント単位の `min_amount`。`min_amount` とともに存在します。 + + double + + + + 米セント単位の `max_amount`。`max_amount` とともに存在します。 + + double + + + + プラットフォームの換算($1 = 211 credits)を用いた Comfy クレジット単位の `amount`。小数第 2 位に丸められます。`exact` な見積もりで `X-Comfy-Credits-Used` が保持する値です。 + + double + + + + この見積もりが対象とするプロバイダーのレッグ。キュー中の送信では、実行されるレッグになります。 + + + + 正規の Comfy Router モデル ID で、`{provider}/{model}` の形式です。`POST /v2/models/{provider}/{model}` でモデルを指定する値とまったく同じもので、呼び出し元は何からも再導出することなくそのパスに埋め込めます。その `pattern` は `RouterProviderSegment` と `RouterModelSegment` を単一の `/` で連結したもので、`maxLength` はそれらの合計にその区切り文字を加えたものです。 + + 型: [`RouterModelId`](#routermodelid)。モデル ID(例: `anthropic/claude-opus-4-6`)、最大 193 文字 + + + + この見積もりの価格算出に使用したレートカードを取得した日時。実行は、評価された時点で有効な料率で課金され、この瞬間の料率で課金されるわけではありません。レートカードが読まれなかった場合(`reason: pricing_unavailable`、`byok`、またはどのカードからも価格を算出できない `not_quotable` の呼び出し)は、見積もりが返された日時を示します。 + + date-time + + + + `source` が `unknown` の場合のみ存在します。`not_quotable`(Router は実行前にこの呼び出しの価格を算出できません。価格がプロバイダーから返される内容に依存するか、リクエストボディが課金対象の数量を定めていないためです)、`unpriced_model`(レートカードにこのリクエストの価格がない)、`byok`(キュー中の送信のみ: 実行は自身のプロバイダーキーを使用するため、Comfy は何も請求しません)、または `pricing_unavailable`(キュー中の送信のみ: リクエストの受け入れ時にレートカードを読めませんでした。これは一時的なもので、実行は通常どおり課金されます)。それ以外の値は `not_quotable` として読み取ります。 + + ### RouterErrorResponse -認証、アクセス、モデル検索、クォータ、およびプロバイダー転送の失敗に対するエラーボディ。 +認証、アクセス、モデル検索、クォータ、プロバイダーの転送に関する失敗のエラーボディです。 **フィールド** - 失敗内容を人間が読める形式で記述したもの。エンドユーザーに提示しても安全です。機械的にパースされることはありません。分岐には `error_type` を使用してください。文書化された例外が 2 つあります。`POST /v2/models/{provider}/{model}` では、`409` は `invalid_input` バケットを共有する 3 つの無関係な条件に対して返され、それらを区別するのは `detail` だけです。"this request's `image` selects the edit operation" で始まる `detail` はマルチパートの `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` の他の部分と同様に、この退役に関する文言は表示用であり、互換性の保証はありません。機械的にパースされないというルールには、文書化された 2 つの例外があります。`POST /v2/models/{provider}/{model}` では、`409` が `invalid_input` バケットを共有する 3 つの無関係な条件に対して返され、それらを区別するのは `detail` だけです。`detail` が「this request's `image` selects the edit operation」で始まる場合は multipart の `model_provider` 拒否であり、`detail` が `this request resolved a BYOK credential` で始まる場合は BYOK の `model_provider` 拒否です。どちらも新しい `Idempotency-Key` では解消しません。そのルートにおける他の `invalid_input` の `409` はキーの競合です。どちらのプレフィックスも安定した契約用語であり、マッチングしてもかまいません。これ以外の箇所では、`detail` で分岐することに互換性の保証はありません。 - Router の失敗を表す粗い機械可読な分類。レスポンスヘッダー `X-Comfy-Error-Type` にも反映されるため、呼び出し側はボディをパースせずに分岐できます。値の集合は 19 個で閉じています。リクエストレベルの 6 つの分類 `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` レスポンスヘッダーにも反映されるため、呼び出し元はボディをパースせずに分岐できます。この集合は 19 個の値で閉じています。6 つのリクエストレベルのバケット `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` ではなくプレーンな文字列になっています。したがってクライアントは、上記のリストを網羅的に switch して次の追加のたびに壊れるのではなく、認識できない値を `internal_error` として扱わなければなりません。 - 型: [`RouterErrorType`](#routererrortype) + Type: [`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` ヘッダーに反映されます。 - コンテンツポリシーによる拒否がどの入力または出力に関するものかを示す、Router レベルの閉じた語彙です: `input`, `output`, `input_text`, `input_image`, `input_video`, `input_audio`, `output_text`, `output_image`, `output_video`, `output_audio`。プロバイダーがモダリティを特定しなかった場合、`input` / `output` は対象側を示します。`error_type` が `content_policy_violation` で、プロバイダーが拒否対象を機械可読なコードで示した場合にのみ存在し、それ以外では省略されます。プロバイダーの文章は決して含みません。現在、BytePlus、Runway、BFL、Gemini、Veo、Vertex、xAI、Wan の拒否について名前が付けられています。拒否がどちら側に関するものかを示さないプロバイダーでは省略されます。これは `X-Comfy-Refusal-Subject` ヘッダーを反映します。 + コンテンツポリシーによる拒否がどの入力または出力に関するものかを、Router レベルの閉じた語彙として示します。`input`、`output`、`input_text`、`input_image`、`input_video`、`input_audio`、`output_text`、`output_image`、`output_video`、`output_audio` です。プロバイダーがモダリティを特定しなかった場合、単なる `input` / `output` の値がどちら側かを示します。`error_type` が `content_policy_violation` で、プロバイダーが拒否された対象を機械可読なコードで示した場合にのみ存在し、それ以外では存在しません。プロバイダーのテキストが入ることはありません。現在は BytePlus、Runway、BFL、Gemini、Veo、Vertex、xAI、Wan の拒否に対して付与されます。拒否がどちら側に関するものかを示さないプロバイダーでは存在しません。`X-Comfy-Refusal-Subject` ヘッダーに反映されます。 ### RouterErrorType -機械可読な Router エラーのカテゴリ。`X-Comfy-Error-Type` ヘッダーでも送信されます。 +機械可読な Router エラーカテゴリ。`X-Comfy-Error-Type` ヘッダーでも送信されます。 型: `string` ### RouterModelBilling -モデルを呼び出す前に確認すべき課金の挙動。価格や使用量は含まれません。 +モデルを呼び出す前に確認すべき課金動作。価格や使用量は含みません。 **フィールド** - このモデルがコンテンツポリシー上の理由で拒否した呼び出しが、それでも呼び出し元に課金されるかどうか。プロバイダーによって異なり、その違いは呼び出し時には見えず、同じ呼び出しに対してエラーと課金の両方を見たユーザーは知りようがありません。そのため、プロバイダーごとの慣習に任せるのではなく、呼び出し前にモデルごとに明記されています。 + コンテンツポリシーを理由にこのモデルが拒否した呼び出しでも、呼び出し元に課金されるかどうか。プロバイダーによって異なり、その違いは呼び出し時には見えず、同じ呼び出しでエラーと課金の両方を見たユーザーには知りようがありません。そのため、プロバイダーごとの伝聞に任せるのではなく、モデルごとに、呼び出しの前に明示されます。 型: [`RouterChargesOnPolicyRejection`](#routerchargesonpolicyrejection) ### RouterModelDetail -1つの Comfy Router モデルに対するモデル単位の詳細です。カタログ一覧が報告するすべての内容に加えて、単一モデルルートだけが持つモデル単位のフィールドを含みます。 +1つの Comfy Router モデルに関するモデルごとの詳細: カタログ一覧がそのモデルについて報告するすべての情報に加え、単一モデルのルートだけが持つモデル単位のフィールドです。 -[`RouterModelListEntry`](#routermodellistentry)、[`RouterModelDetailFields`](#routermodeldetailfields) を組み合わせます。 +[`RouterModelListEntry`](#routermodellistentry)、[`RouterModelDetailFields`](#routermodeldetailfields) を構成します。 -型: `object` +Type: `object` ### RouterModelDetailFields -モデル詳細エンドポイントが返すオプションのフィールド。 +モデル詳細エンドポイントが返すオプションのフィールドです。 **フィールド** - このモデルのOpenAPIドキュメントのURL。入力スキーマと出力スキーマを含みます。 + このモデルの OpenAPI ドキュメントの URL。入力スキーマと出力スキーマを含みます。 - 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 -`POST /v2/models/{provider}/{model}` で使用されるモデル ID。 +`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` ### RouterModelInputSchemaDocument -1つのモデルの入力と出力のためのスタンドアロンの OpenAPI ドキュメント。 +1つのモデルの入力と出力のためのスタンドアロンな OpenAPI ドキュメント。 型: `object` ### 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文字 + 型: [`RouterModelId`](#routermodelid) -- モデル ID、例: `anthropic/claude-opus-4-6`、最大 193 文字 - 正規の `{provider}/{model}` モデルIDの小文字の `provider` セグメント。モデルを指定する対象のパートナーを表します。呼び出しルートの `provider` パスパラメータとカタログエントリの `provider` フィールドはどちらもこの1つのスキーマを参照しており、これによって一覧に載るIDと受け入れられるIDが乖離しないようになっています。 + 正規の `{provider}/{model}` モデル ID の小文字の `provider` セグメントで、どのパートナーのモデルを扱うかを示します。呼び出しルートの `provider` パスパラメータとカタログエントリの `provider` フィールドはどちらもこの 1 つのスキーマを参照しており、これによって一覧に載る ID と受け付ける ID が食い違わないようになっています。 - 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字のスラッグ、例: `anthropic`、最大64文字 + 型: [`RouterProviderSegment`](#routerprovidersegment) -- 英数字スラッグ、例: `anthropic`、最大 64 文字 - 正規の `{provider}/{model}` モデルIDの小文字の `model` セグメント。そのプロバイダー内で実行するモデルを表します。呼び出しルートの `model` パスパラメータとカタログエントリの `model` フィールドで共有されており、`RouterProviderSegment` と同じく乖離を防ぐためのものです。 + 正規の `{provider}/{model}` モデル ID の小文字の `model` セグメントで、そのプロバイダー内で実行するモデルを指します。呼び出しルートの `model` パスパラメータとカタログエントリの `model` フィールドで共有されており、`RouterProviderSegment` と同じく食い違いを防ぐためです。 - 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字のスラッグ、例: `claude-opus-4-6`、最大128文字 + 型: [`RouterModelSegment`](#routermodelsegment) -- 英数字スラッグ、例: `claude-opus-4-6`、最大 128 文字 - 呼び出しの前に呼び出し側が必要とする、モデルごとの課金に関する事実であり、価格ではありません。使用量やコストの数値がここに現れることは決してありません。 + 呼び出しの前に呼び出し側が必要とするモデルごとの課金情報です。価格ではありません。使用量やコストの数値はここには現れません。 型: [`RouterModelBilling`](#routermodelbilling) @@ -972,171 +1157,177 @@ Router モデルカタログの 1 ページです。 **フィールド** - このページに含まれるモデルで、最大 `limit` 件です。 + このページのモデルで、最大 `limit` 件です。 型: [`RouterModelListEntry`](#routermodellistentry) の配列 - このページより先に別のページが存在するかどうか。これが true の間はページを進め続けてください。`data` が短い、または空であることからカタログの終端を推測しないでください。 + このページより先に別のページが存在するかどうか。これが true である間は辿り続けてください。短い、または空の `data` からカタログの終端を推測しないでください。 - Router リストへの不透明なカーソルです。サーバーによって生成され、そのまま往復されるだけの値です。オフセットではなく、モデル ID でもなく、順序付けもされておらず、カタログの再構築をまたいで安定もしません。したがって、これを解析したり、インクリメントしたり、取得元の走査を超えて永続化したりすることは、いずれも契約の範囲外です。オフセットではなくカーソルである理由は、カタログが変化するリストだからです。走査の途中でエントリが追加または削除されると、オフセットによる走査はエントリを黙ってスキップしたり繰り返したりしますが、呼び出し側はそれが起きたことを判別できません。 + Router リストへの不透明なカーソルです。これはサーバーによって生成され、そのまま往復させるだけのものです。オフセットではなく、モデル ID でもなく、順序付けもされておらず、カタログの再構築をまたいで安定もしません。したがって、カーソルを解析したり、インクリメントしたり、それが得られた走査を超えて永続化したりすることは、いずれも契約の範囲外です。オフセットではなくカーソルを用いるのは、カタログが変化し続けるリストだからです。走査の途中でエントリが追加または削除されると、オフセットによる走査は気付かないうちにエントリをスキップしたり繰り返したりしますが、呼び出し側はそれが起きたことを判別できません。 - 型: [`RouterPageCursor`](#routerpagecursor)。`next_cursor` として返される不透明なカーソルで、1~512 文字です。 + 型: [`RouterPageCursor`](#routerpagecursor): `next_cursor` として返される不透明なカーソル、1〜512 文字 - 実際に提供されたページサイズです。最大値を超える `limit` を要求した場合、拒否されるのではなく最大値にクランプされるため、要求した値より小さくなることがあります。ページネーションには、送信した値ではなくこの数値を使用してください。そうしないと、受け取っていない行を前提にしてしまいます。 + 実際に提供されたページサイズです。最大値を超える `limit` を要求した場合、拒否されるのではなく最大値に切り下げられます。そのため、これは要求した値より小さくなることがあります。送信した値ではなく、この数値でページネーションしてください。さもないと、実際には受け取っていない行が存在すると想定してしまいます。 - 1~100 + 1〜100 ### RouterModelOutput -モデルの結果オブジェクトです。正確な形状については、選択済みモデルの出力スキーマを参照してください。 +モデルの結果オブジェクト。正確な形状については、選択済みモデルの出力スキーマを参照してください。 型: `object` ### RouterModelSegment -`{provider}/{model}` モデル ID のモデル部分です。 +`{provider}/{model}` 形式のモデル ID のうち、モデル部分。 -型: `string`。英数字のスラッグ(例: `claude-opus-4-6`)、最大 128 文字 +型: `string` -- 英数字のスラッグ(例: `claude-opus-4-6`)、最大 128 文字 ### RouterPageCursor -不透明なカタログカーソルです。変更を加えずにそのまま `cursor` として渡し直してください。 +カタログの不透明なカーソル。`cursor` としてそのまま渡し直してください。 -型: `string`。`next_cursor` として返される不透明なカーソルで、1~512文字です。 +型: `string` -- `next_cursor` として返される不透明なカーソル。1〜512文字 ### RouterProviderSegment -`{provider}/{model}` というモデル ID のプロバイダー部分です。 +`{provider}/{model}` というモデル ID のうちプロバイダー部分。 -型: `string`。英数字のスラッグ(例: `anthropic`)、最大 64 文字 +型: `string` - 英数字のスラッグ(例: `anthropic`)、最大 64 文字 ### RouterQueueCancelResponse -このルートが解決したリクエストを表す2つのステータス、すなわち `202` と `400` に対するキャンセル要求への応答です。成功用のエンベロープとエラー用のエンベロープに分けるのではなく、両ステータスで単一のボディ形状をとります。どちらも「キャンセルで何が見つかったか」という同じ内容を伝えるものであり、ステータスコードごとに異なる型をパースしなければならないクライアントにとって、分割による利点は何もないからです。 +このルートが解決したリクエストを記述する 2 つのステータス、`202` と `400` に対するキャンセル要求への応答です。成功エンベロープとエラーエンベロープに分けるのではなく、両方で 1 つのボディ形状を共有します。どちらも同じ表明、つまりキャンセルが何を見つけたかを示すものであり、ステータスコードごとに異なる型をパースしなければならないクライアントにとって、分割には何の利点もないからです。 **フィールド** - キュー中の1件の Router リクエストの識別子。呼び出し側がポーリング、キャンセル、結果の取得に使うハンドルです。 + キュー中の Router リクエスト 1 つを識別するもの。呼び出し元がポーリング、キャンセル、結果の収集に使うハンドルです。 - 型: [`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 文字 - キャンセル要求で何が見つかったかを示します。このルートが実際に解決したリクエストを表す2つの結果に対応します。どちらも HTTP ステータスに反映されるため、クライアントはどちらで分岐してもかまいません。 + このルートが実際に解決したリクエストを記述する 2 つの結果について、キャンセル要求が何を見つけたか。どちらも HTTP ステータスに反映されるため、クライアントはどちらで分岐してもかまいません。 型: [`RouterQueueCancelStatus`](#routerqueuecancelstatus) ### RouterQueueCancelStatus -このルートが実際に解決したリクエストを表す 2 つの結果について、キャンセル要求が検出した内容を示します。どちらも HTTP ステータスに反映されるため、クライアントはどちらで分岐してもかまいません。 +このルートが実際に解決したリクエストを表す2つの結果について、キャンセル要求が何を検出したかを示します。どちらも HTTP ステータスに反映されるため、クライアントはどちらで分岐してもかまいません。 型: `string` ### RouterQueuePosition -レスポンスが構成された時点で、このリクエストより前にキュー内にあるリクエストの数。0 はこのリクエストが先頭であることを意味します。 +応答が構成された時点で、キュー内でこのリクエストより前に並んでいるリクエストの数。0 はこのリクエストが先頭であることを意味します。 型: `integer` -- 0 以上 ### RouterQueueRequestId -キュー中の Router リクエスト 1 件の識別子。呼び出し元がポーリングやキャンセル、結果の取得に用いるハンドルです。 +キュー中の Router リクエスト1件の識別子。呼び出し元がポーリング、キャンセル、結果の取得に使用するハンドルです。 -型: `string`、`pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`、uuid、最大 36 文字 +型: `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 リクエストの状態。取り得る値はちょうど 3 つで、`RouterErrorType` とは異なり、これは閉じた `enum` です。これは、2 つのスキーマが意図的に逆方向に閉じられているためです。`RouterErrorType` は失敗を分類するもので、その集合は今後も増えていくことが想定されています。そのため、認識できないバケットをハード拒否する生成済みクライアントは、すでに何かが失敗したまさにその時に、最も激しく失敗することになります。一方、こちらはライフサイクルであり、後で 4 つ目の状態が追加されるようなライフサイクルは、enum として宣言されているかどうかに関わらず、それに対して書かれたすべてのポーリングループにとって破壊的変更となります。そのためこれは enum として宣言され、その制約はクライアントが見られる場所に明記されています。 +キュー中の Router リクエストの状態です。取り得る値はちょうど 3 つで、`RouterErrorType` とは異なり、こちらは閉じた `enum` です。これは 2 つのスキーマが意図的に逆方向に閉じているためです。`RouterErrorType` は失敗を分類するもので、その集合は今後増えていくことが想定されています。そのため、認識できないバケットを厳格に拒否する生成済みクライアントは、何かがすでに問題を起こしているまさにそのときに最も激しく失敗することになります。一方、こちらはライフサイクルです。後で 4 つ目の状態が追加されたライフサイクルは、enum として宣言されているかどうかにかかわらず、それに対して書かれたすべてのポーリングループにとって破壊的変更になります。そこでこれは enum として宣言され、その制約はクライアントから見える場所に明記されています。 型: `string` ### RouterQueueStatusFields -`RouterQueueStatusResponse` のうち URL ブロックではない半分です。キュー中のリクエスト 1 件の識別情報、その現在の状態、そしてその状態がターミナルで実行が成功しなかった場合は、その理由を示す粗い分類です。 +`RouterQueueStatusResponse` のうち URL ブロックではない半分: キュー中の 1 つのリクエストの識別情報、その現在の状態、そしてその状態がターミナルで実行が成功しなかった場合には、その理由を示す大まかな分類です。 -**フィールド** +**Fields** - キュー中の Router リクエスト 1 件の識別子。呼び出し側がポーリング、キャンセル、結果の取得を行うためのハンドルです。 + キュー中の 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 文字 + Type: [`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) + Type: [`RouterQueueStatus`](#routerqueuestatus) - レスポンスが構成された時点で、キュー内でこのリクエストより前に並んでいるリクエストの数。ゼロはこのリクエストが先頭であることを意味します。 + 応答が構成された瞬間に、キュー内でこのリクエストの前に何件のリクエストがあるかを示します。0 はこのリクエストが先頭にあることを意味します。 - 型: [`RouterQueuePosition`](#routerqueueposition) -- 0 以上 + Type: [`RouterQueuePosition`](#routerqueueposition) -- 0 以上 - 成功しなかった `COMPLETED` リクエストにのみ存在し、その失敗を返すときに結果の読み取りが `X-Comfy-Error-Type` に設定するのと同じ粗い分類を持ちます。これは、成功したターミナルリクエストと、失敗またはキャンセル済みのリクエストを区別するものです(どちらにも別個のターミナルステータスはありません)。また、成功時には null ではなく存在しません。そのため、その存在の有無で分岐してください。 + 成功しなかった `COMPLETED` リクエストにのみ存在し、結果の読み取りがその失敗を返すときに `X-Comfy-Error-Type` に付けるのと同じ大まかな分類を持ちます。これは成功したターミナルリクエストと、失敗またはキャンセルされたリクエストを区別するものです。どちらにも別個のターミナルステータスはありません。また、成功時には null ではなく存在しないため、その存在の有無で分岐してください。 - 型: [`RouterErrorType`](#routererrortype) + Type: [`RouterErrorType`](#routererrortype) ### RouterQueueStatusResponse -キュー中のリクエスト1件の現在の状態を、送信時に返されたものと同じ3つのURLと組み合わせたものです。 +キュー中の1件のリクエストの現在の状態を、送信時に返されたものと同じ3つのURLと組み合わせたものです。 -[`RouterQueueUrls`](#routerqueueurls)、[`RouterQueueStatusFields`](#routerqueuestatusfields) を構成要素とします。 +[`RouterQueueUrls`](#routerqueueurls)、[`RouterQueueStatusFields`](#routerqueuestatusfields)を組み合わせます。 型: `object` ### RouterQueueSubmitFields -`RouterQueueSubmitResponse` のうち URL ブロックではない半分: 新しいリクエストの識別情報と、それが受け付けられた時点での状態です。 +`RouterQueueSubmitResponse` のうち、URL ブロックではない半分です。新しいリクエストの識別情報と、それが受け付けられた時点の状態を表します。 **フィールド** - キュー中の Router リクエスト1件の識別子。呼び出し元がポーリング、キャンセル、結果の収集に使うハンドルです。 + キュー中の Router リクエスト 1 件の識別子です。呼び出し側がポーリングし、キャンセルし、結果を取得するときのハンドルになります。 - 型: [`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 文字 - キュー中の Router リクエストの状態。値はちょうど3つで、`RouterErrorType` とは異なりこちらは閉じた `enum` です。これは2つのスキーマが意図的に逆方向に閉じられているためです。`RouterErrorType` は失敗を分類するものであり、その集合は増えていくことが想定されているため、未知のバケットを厳格に拒否する生成済みクライアントは、すでに何かが失敗したまさにそのときに最も深刻に失敗することになります。一方こちらはライフサイクルであり、後で4番目の状態が追加されたライフサイクルは、enum として宣言されているかどうかに関わらず、それに対して書かれたすべてのポーリングループにとって破壊的変更となります。そのため enum として宣言され、その制約はクライアントが見られる場所に明記されています。 + キュー中の Router リクエストの状態です。値はちょうど 3 つあり、`RouterErrorType` とは異なりこちらは閉じた `enum` です。これは 2 つのスキーマが意図的に逆方向に閉じているためです。`RouterErrorType` は失敗を分類するもので、その集合は今後増えていくことが想定されています。そのため、認識できない区分を厳格に拒否する生成済みのクライアントは、まさに何かがすでに失敗したときに最も激しく失敗することになります。一方こちらはライフサイクルであり、後で 4 つ目の状態が追加されるライフサイクルは、enum として宣言されているかどうかにかかわらず、それに対して書かれたすべてのポーリングループにとって破壊的変更になります。そこで enum として宣言し、その制約はクライアントから見える場所に明記しています。 型: [`RouterQueueStatus`](#routerqueuestatus) - レスポンスが構成された時点で、キュー内でこのリクエストより前に何件のリクエストがあるか。ゼロはこのリクエストが先頭であることを意味します。 + レスポンスが構成された時点で、キューのうちこのリクエストより前に何件のリクエストがあるかを示します。0 はこのリクエストが先頭にあることを意味します。 + + 型: [`RouterQueuePosition`](#routerqueueposition) -- 0 以上 + + + + このリクエストの事前コスト見積もりです。呼び出し側に対してコスト見積もりが有効になっている場合、新規受け付け時に含まれます。このリクエストがピン留めされたプロバイダーのレッグを見積もります(キューにはフォールバックループがないため、`fallback_provider` が実行されるレッグを変えることはありません)。数値を提示できない場合でも、`source: unknown` を伴って常に存在します。見積もりのせいで送信が失敗することはありません。冪等なリプレイ(`Idempotent-Replayed: true`)では省略されます。オリジナルの見積もりは保存されないためです。これは価格を固定するものではありません。実行は、レーティングが行われる時点で有効な料金で課金されます。 - 型: [`RouterQueuePosition`](#routerqueueposition) -- 0以上 + 型: [`RouterCostEstimate`](#routercostestimate) ### RouterQueueSubmitResponse -実行がキューに受け入れられたときに返されるハンドルです。リクエストの識別情報と状態を、そのライフサイクルの残りの部分を指す 3 つの URL と合成したものです。 +実行がキューに受け入れられたときに返されるハンドルです。リクエストの識別情報と状態を、そのライフタイムの残りを担う 3 つの URL と合成したものです。 [`RouterQueueUrls`](#routerqueueurls)、[`RouterQueueSubmitFields`](#routerqueuesubmitfields) を合成します。 -型: `object` +Type: `object` ### RouterQueueUrls -キュー中の 1 つのリクエストの残りのライフタイムに対応する 3 つの URL です。有効なハンドルを含むすべてのレスポンスで返されるため、クライアントが自分でキュー URL を組み立てることはありません。 +キュー中の 1 件のリクエストのライフタイムの残りに対応する 3 つの URL です。有効なハンドルを含むすべてのレスポンスで返されるため、クライアントがキュー URL を自分で組み立てることはありません。 **フィールド** - このリクエストのステータスを読み取るための絶対 URL。 + このリクエストのステータス読み取りの絶対 URL。 URI @@ -1155,52 +1346,52 @@ Router モデルカタログの 1 ページです。 ### RouterValidationErrorContext -失敗した検証ルールに関する、プロバイダー提供の詳細。 +失敗した検証ルールについて、プロバイダーから提供される詳細情報。 型: `object` ### RouterValidationErrorDetail -1 件のフィールドレベルの検証失敗。 +単一のフィールドレベルの検証失敗。 **フィールド** - 問題のあるフィールドへのパス。最も外側のセグメントが先頭に来ます。たとえば `["body", "image_url"]`、または `["body", "images", 0]` のように、整数は配列のインデックスを指します。 + 問題のあるフィールドへのパス。最も外側のセグメントが先頭になります。たとえば `["body", "image_url"]`、または `["body", "images", 0]` のように、整数は配列へのインデックスを表します。 - この単一の失敗についての、人間が読める説明。 + この 1 件の失敗を人間が読める形で説明したもの。 - この失敗の具体的で機械可読な理由。プロバイダーからそのまま渡されます。これは型付き SDK の例外階層が分岐に使う値であり、レスポンスヘッダーの `error_type` はその大まかな分類にすぎません。 + この失敗の具体的で機械可読な理由。プロバイダーからそのまま渡されます。これは型付き SDK の例外階層が分岐に使う値であり、レスポンスヘッダーの `error_type` はその粗い区分にすぎません。 - 1 件の `RouterValidationErrorDetail` で違反した境界値。プロバイダーからそのまま渡されます。たとえば `greater_than` に対する `{"limit_value": 8}`、`image_too_small` に対する `{"min_width": 512}`、`file_too_large` に対する `{"max_size_bytes": 10485760}` などです。キー集合はプロバイダーとエラータイプに固有であるため、これは意図的にオープンなオブジェクトとしています。固定のフィールドリストに絞り込んだり、`msg` 文字列に畳み込んだりすると、まさに移植された統合がコンパイルは通るものの、その境界値を読んでいた分岐を黙って失うことになります。エラータイプが境界値を持たない場合は省略されます。 + 1 つの `RouterValidationErrorDetail` で違反した境界値。プロバイダーからそのまま引き継がれます。たとえば `greater_than` に対応する `{"limit_value": 8}`、`image_too_small` に対応する `{"min_width": 512}`、`file_too_large` に対応する `{"max_size_bytes": 10485760}` などです。キー集合はプロバイダーとエラータイプに固有であるため、これは意図的にオープンなオブジェクトとしています。固定のフィールドリストに狭めたり、`msg` 文字列に畳み込んだりすることこそが、移植された統合がコンパイルは通るものの、境界値を読んでいた分岐を黙って失う原因そのものです。エラータイプが境界値を持たない場合は存在しません。 - 型: [`RouterValidationErrorContext`](#routervalidationerrorcontext) + Type: [`RouterValidationErrorContext`](#routervalidationerrorcontext) - 問題のある入力値。呼び出し元が `loc` から再導出することなく、何が拒否されたかを確認できるよう、そのままエコーバックされます。任意の JSON 型(文字列、数値、ブール、配列、オブジェクト、null)であるため、このスキーマは意図的にオブジェクトに絞り込まず、型なしのままにしています。プロバイダーが入力値をエコーバックしない場合は省略されます。 + 問題のある入力値。呼び出し元が `loc` から再導出することなく何が拒否されたかを確認できるよう、そのまま返されます。文字列、数値、ブール、配列、オブジェクト、null など任意の JSON 型を取りうるため、このスキーマはオブジェクトに狭めず、意図的に型なしのままにしています。プロバイダーが入力をそのまま返さない場合は存在しません。 - 型: [`RouterValidationErrorInput`](#routervalidationerrorinput) + Type: [`RouterValidationErrorInput`](#routervalidationerrorinput) ### RouterValidationErrorInput -プロバイダーがこの値を含める場合の、拒否された入力値です。 +拒否された入力値。プロバイダーがこれを含める場合に含まれます。 ### RouterValidationErrorResponse -`422` 検証エラーのレスポンスボディ。カテゴリについては `X-Comfy-Error-Type` を参照してください。 +`422` 検証エラーのレスポンスボディです。カテゴリの確認には `X-Comfy-Error-Type` を参照してください。 **フィールド** - リクエストで検出されたすべての検証失敗。問題のあるフィールドごとに 1 エントリ。 + リクエストで検出されたすべての検証失敗です。問題のあるフィールドごとに 1 件のエントリが含まれます。 型: [`RouterValidationErrorDetail`](#routervalidationerrordetail) の配列 diff --git a/ko/development/comfy-api/overview.mdx b/ko/development/comfy-api/overview.mdx index 5fcd4ece20..82ebca356c 100644 --- a/ko/development/comfy-api/overview.mdx +++ b/ko/development/comfy-api/overview.mdx @@ -2,11 +2,11 @@ title: "Comfy API 버전: v2 및 지원 중단된 v1 Cloud API" sidebarTitle: "개요" description: "Comfy API 버전을 비교합니다. ComfyUI 워크플로를 헤드리스로 실행하는 권장 v2 HTTP API와 지원 중단된 v1 Cloud API입니다." -translationSourceHash: dda53070 +translationSourceHash: ebaa5065 translationFrom: development/comfy-api/overview.mdx --- -ComfyUI를 헤드리스로 실행하기 위한 퍼블릭 API는 시간이 지나면서 발전해 왔습니다. 새로운 통합에는 [Comfy API v2](/ko/api-reference/v2/overview)를 사용하세요. 오픈소스 ComfyUI는 [API Proxy](/ko/development/comfyui-server/api-proxy)를 통해 이 API를 제공하며, Comfy Cloud와 [개발자 플랫폼의 Comfy API 배포](/ko/development/serverless/overview)도 이 API를 지원합니다. 이전 버전으로는 [v1 Cloud API](/ko/development/cloud/overview)가 있으며, 이는 지원 중단되었습니다. +ComfyUI를 헤드리스로 실행하기 위한 퍼블릭 API는 시간이 지나면서 발전해 왔습니다. 새로운 통합에는 [Comfy API v2](/ko/api-reference/v2/overview)를 사용하세요. 이 버전은 오픈소스 ComfyUI에서 [API Proxy](/ko/development/comfyui-server/api-proxy), Comfy Cloud, 그리고 [개발자 플랫폼의 Comfy API 배포](/ko/development/serverless/overview)를 통해 지원됩니다. 이전 버전으로는 [v1 Cloud API](/ko/development/cloud/overview)가 있으며, 이는 지원 중단되었습니다. @@ -17,4 +17,4 @@ ComfyUI를 헤드리스로 실행하기 위한 퍼블릭 API는 시간이 지나 -참고: [Comfy API 배포](/ko/development/serverless/overview) · [Comfy SDK](/ko/development/api-development/sdks) · [API 키 발급](/ko/development/api-development/getting-an-api-key) +참고: [Comfy API 배포](/ko/development/serverless/overview) · [Comfy SDK](/ko/development/api-development/sdks) · [API 키 발급](/ko/development/api-development/getting-an-api-key) \ No newline at end of file diff --git a/ko/development/comfy-router/limitations.mdx b/ko/development/comfy-router/limitations.mdx index d5c7746d30..661865daad 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: b7f1a006 +translationSourceHash: 8367ba3c translationFrom: development/comfy-router/limitations.mdx translationBlockHashes: "_intro": 6b871cf3 @@ -13,7 +13,7 @@ translationBlockHashes: "Request bodies are capped": 675b77c8 "Requests are rate limited per caller": 421194d9 "No progress while a call runs": 75d42d8d - "Comfy charges and usage": e370030e + "Comfy charges and usage": 1ba61544 "Router does not cover every partner operation": f0902b33 "Model outputs and stored assets": 06c737c1 "Next": be85b789 @@ -22,6 +22,7 @@ translationBlockHashes: + Router는 파트너 모델을 하나의 동기식 HTTP 호출로 실행하거나, 제출한 뒤 나중에 수집하는 대기 중 요청을 통해 실행합니다. 애플리케이션이 완료된 결과를 기다리거나 나중에 결과를 수집할 수 있고, 모델 자체의 입력 및 출력 필드를 처리할 수 있는 경우에 사용하십시오. ## Router가 지원하는 기능 @@ -99,6 +100,8 @@ 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#사전-비용-추정)를 참조하세요. + ## Router는 모든 파트너 작업을 다루지 않습니다 Router는 모델을 실행합니다. 파일 업로드, 계정 읽기, 에셋 관리, 스트리밍, 공급자 작업 제어에는 Router 외부에 있고 그 계약에서 설명되지 않는 `/proxy/…` 아래의 파트너 프록시 라우트가 필요할 수 있습니다. Router 자체의 표면은 [Comfy Router 명세](/router-openapi.yaml)입니다. 지원 여부는 공급자마다 다릅니다. diff --git a/ko/development/comfy-router/models.mdx b/ko/development/comfy-router/models.mdx index e254141d22..55ec90a251 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: 8488d3b9 +translationSourceHash: 5e001542 translationFrom: development/comfy-router/models.mdx translationBlockHashes: "_intro": 2584e428 - "Find by output": 3e10a83c + "Find by output": dcd31275 "Anthropic": de8acc20 "Beeble": b52ea340 "Black Forest Labs": 2934e3eb @@ -30,6 +30,7 @@ translationBlockHashes: "Moonvalley": e237894a "OpenAI": c5c4af80 "Openrouter": a4f6806b + "Pika": f2b1d797 "Pruna": 903d76ee "Qwen": b3ef78a1 "Recraft": 02b7d9cd @@ -46,6 +47,7 @@ translationBlockHashes: + {/* 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)를 참고하세요. @@ -55,7 +57,7 @@ translationBlockHashes: ## 출력으로 찾기 - + - [SwitchX](/ko/development/comfy-router/models/beeble/switchx/code): `beeble/switchx` - [FLUX 3 Video](/ko/development/comfy-router/models/black-forest-labs/flux-3-video/code): `bfl/flux-3-video` @@ -94,6 +96,8 @@ translationBlockHashes: - [Text To Video](/ko/development/comfy-router/models/moonvalley/text-to-video/code): `moonvalley/text-to-video` - [Video To Video Resize](/ko/development/comfy-router/models/moonvalley/video-to-video-resize/code): `moonvalley/video-to-video-resize` - [Video To Video](/ko/development/comfy-router/models/moonvalley/video-to-video/code): `moonvalley/video-to-video` +- [Pika 2.5 Image To Video](/ko/development/comfy-router/models/pika/pika-2-5-image-to-video/code): `pika/pika-2.5-image-to-video` +- [Pika 2.5 Text To Video](/ko/development/comfy-router/models/pika/pika-2-5-text-to-video/code): `pika/pika-2.5-text-to-video` - [P Video 2](/ko/development/comfy-router/models/pruna/p-video-2/code): `pruna/p-video-2` - [Aleph 2](/ko/development/comfy-router/models/runway/aleph2/code): `runway/aleph2` - [Gen 4 Turbo](/ko/development/comfy-router/models/runway/gen4-turbo/code): `runway/gen4_turbo` @@ -105,8 +109,7 @@ translationBlockHashes: - [HappyHorse 1.0 R2V](/ko/development/comfy-router/models/wan/happyhorse-1-0-r2v/code): `wan/happyhorse-1.0-r2v` - [HappyHorse 1.0 T2V](/ko/development/comfy-router/models/wan/happyhorse-1-0-t2v/code): `wan/happyhorse-1.0-t2v` - [HappyHorse 1.0 Video Edit](/ko/development/comfy-router/models/wan/happyhorse-1-0-video-edit/code): `wan/happyhorse-1.0-video-edit` -- [HappyHorse 1.1 I2V](/ko/development/comfy-router/models/wan/happyhorse-1-1-i2v/code): `wan/happyhorse-1.1-i2v` -- [HappyHorse 1.1 R2V](/ko/development/comfy-router/models/wan/happyhorse-1-1-r2v/code): `wan/happyhorse-1.1-r2v` +- [HappyHorse 1.1 I2V](/ko/development/comfy-router/models/wan/happyhorse-1-1-i2v/code): `wan/happyhorse-1.1-i2v`- [HappyHorse 1.1 R2V](/ko/development/comfy-router/models/wan/happyhorse-1-1-r2v/code): `wan/happyhorse-1.1-r2v` - [HappyHorse 1.1 T2V](/ko/development/comfy-router/models/wan/happyhorse-1-1-t2v/code): `wan/happyhorse-1.1-t2v` - [Wan 2.5 I2V Preview](/ko/development/comfy-router/models/wan/wan2-5-i2v-preview/code): `wan/wan2.5-i2v-preview` - [Wan 2.5 T2V Preview](/ko/development/comfy-router/models/wan/wan2-5-t2v-preview/code): `wan/wan2.5-t2v-preview` @@ -160,8 +163,7 @@ translationBlockHashes: - [Crystal Upscaler](/ko/development/comfy-router/models/fal/crystal-upscaler/code): `fal/crystal-upscaler` - [Patina](/ko/development/comfy-router/models/fal/patina/code): `fal/patina` - [AI Image Upscaler Precision V2](/ko/development/comfy-router/models/freepik/ai-image-upscaler-precision-v2/code): `freepik/ai-image-upscaler-precision-v2` -- [AI Skin Enhancer Creative](/ko/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code): `freepik/ai-skin-enhancer-creative` -- [AI Skin Enhancer Faithful](/ko/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code): `freepik/ai-skin-enhancer-faithful` +- [AI Skin Enhancer Creative](/ko/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code): `freepik/ai-skin-enhancer-creative`- [AI Skin Enhancer Faithful](/ko/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code): `freepik/ai-skin-enhancer-faithful` - [AI Skin Enhancer Flexible](/ko/development/comfy-router/models/freepik/ai-skin-enhancer-flexible/code): `freepik/ai-skin-enhancer-flexible` - [Gemini Omni 1.1 Flash](/ko/development/comfy-router/models/gemini-interactions/gemini-omni-1-1-flash/code): `gemini-interactions/gemini-omni-1.1-flash` - [Gemini Omni Flash Preview](/ko/development/comfy-router/models/gemini-interactions/gemini-omni-flash-preview/code): `gemini-interactions/gemini-omni-flash-preview` @@ -212,8 +214,7 @@ translationBlockHashes: - [Wan 2.5 T2I Preview](/ko/development/comfy-router/models/wan/wan2-5-t2i-preview/code): `wan/wan2.5-t2i-preview` - [Seedvr 2](/ko/development/comfy-router/models/wavespeed/seedvr2/code): `wavespeed/seedvr2` - [Ultimate Image Upscaler](/ko/development/comfy-router/models/wavespeed/ultimate-image-upscaler/code): `wavespeed/ultimate-image-upscaler` -- [Grok Imagine Image 2.0](/ko/development/comfy-router/models/xai/grok-imagine-image-2-0/code): `xai/grok-imagine-image-2.0` -- [Grok Imagine Image Pro](/ko/development/comfy-router/models/xai/grok-imagine-image-pro/code): `xai/grok-imagine-image-pro` +- [Grok Imagine Image 2.0](/ko/development/comfy-router/models/xai/grok-imagine-image-2-0/code): `xai/grok-imagine-image-2.0`- [Grok Imagine Image Pro](/ko/development/comfy-router/models/xai/grok-imagine-image-pro/code): `xai/grok-imagine-image-pro` - [Grok Imagine Image Quality](/ko/development/comfy-router/models/xai/grok-imagine-image-quality/code): `xai/grok-imagine-image-quality` - [Grok Imagine Image](/ko/development/comfy-router/models/xai/grok-imagine-image/code): `xai/grok-imagine-image` @@ -276,8 +277,7 @@ translationBlockHashes: - [Claude Fable 5.1](/ko/development/comfy-router/models/anthropic/claude-fable-5-1/code): `anthropic/claude-fable-5-1` - [Claude Fable 5](/ko/development/comfy-router/models/anthropic/claude-fable-5/code): `anthropic/claude-fable-5` -- [Claude Haiku 4.5 20251001](/ko/development/comfy-router/models/anthropic/claude-haiku-4-5-20251001/code): `anthropic/claude-haiku-4-5-20251001` -- [Claude Opus 4.6](/ko/development/comfy-router/models/anthropic/claude-opus-4-6/code): `anthropic/claude-opus-4-6` +- [Claude Haiku 4.5 20251001](/ko/development/comfy-router/models/anthropic/claude-haiku-4-5-20251001/code): `anthropic/claude-haiku-4-5-20251001`- [Claude Opus 4.6](/ko/development/comfy-router/models/anthropic/claude-opus-4-6/code): `anthropic/claude-opus-4-6` - [Claude Opus 4.7](/ko/development/comfy-router/models/anthropic/claude-opus-4-7/code): `anthropic/claude-opus-4-7` - [Claude Opus 4.8](/ko/development/comfy-router/models/anthropic/claude-opus-4-8/code): `anthropic/claude-opus-4-8` - [Claude Opus 5.5](/ko/development/comfy-router/models/anthropic/claude-opus-5-5/code): `anthropic/claude-opus-5-5` @@ -591,6 +591,13 @@ translationBlockHashes: | --- | --- | --- | --- | | [Chat Completions](/ko/development/comfy-router/models/openrouter/chat-completions/code) | `openrouter/chat-completions` | 텍스트, 이미지 | 텍스트 | +## Pika + +| 모델 | ID | 입력 | 출력 | +| --- | --- | --- | --- | +| [Pika 2.5 이미지 기반 비디오 생성](/ko/development/comfy-router/models/pika/pika-2-5-image-to-video/code) | `pika/pika-2.5-image-to-video` | 텍스트, 이미지 | 비디오 | +| [Pika 2.5 텍스트 기반 비디오 생성](/ko/development/comfy-router/models/pika/pika-2-5-text-to-video/code) | `pika/pika-2.5-text-to-video` | 텍스트 | 비디오 | + ## Pruna | 모델 | ID | 입력 | 출력 | diff --git a/ko/development/comfy-router/providers.mdx b/ko/development/comfy-router/providers.mdx index 602f00f7c5..7f46170fc4 100644 --- a/ko/development/comfy-router/providers.mdx +++ b/ko/development/comfy-router/providers.mdx @@ -2,7 +2,7 @@ title: "Comfy Router 서빙 공급자" sidebarTitle: "서빙 공급자" description: "각 Comfy Router 모델을 서빙할 수 있는 공급자와 대체 공급자를 선택하는 방법을 확인합니다." -translationSourceHash: bce89598 +translationSourceHash: 91ebc6bc translationFrom: development/comfy-router/providers.mdx --- @@ -14,17 +14,17 @@ translationFrom: development/comfy-router/providers.mdx ## 공급자 지원 현황 -| 모델 / 공급자 | **Comfy (기본)** | **fal** | **Higgsfield** | **Runware** | **WaveSpeed** | -| --- | --- | --- | --- | --- | --- | -| [Dreamina Seedance 2.0 260128](/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code) | ✓ | ✓ | ✓ | ✓ | ✓ | -| [Dreamina Seedance 2.5 260628](/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-5-260628/code) | ✓ | ✓ | ✓ | ✓ | ✓ | -| [GPT Image 2](/ko/development/comfy-router/models/openai/gpt-image-2/code) | ✓ | ✓ | - | ✓ | ✓ | -| [GPT Image 2.5 Flare](/ko/development/comfy-router/models/openai/gpt-image-2-5-flare/code) | ✓ | ✓ | - | ✓ | ✓ | -| [GPT Image 2.5 Sunburst](/ko/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code) | ✓ | ✓ | - | ✓ | ✓ | -| [Kling 3.0 Turbo](/ko/development/comfy-router/models/kling/kling-3-0-turbo/code) | ✓ | - | ✓ | - | - | -| [Kling V3](/ko/development/comfy-router/models/kling/kling-v3/code) | ✓ | - | ✓ | - | - | -| [Nano Banana 2](/ko/development/comfy-router/models/google/nano-banana-2/code) | ✓ | ✓ | - | ✓ | ✓ | -| [Nano Banana Pro](/ko/development/comfy-router/models/google/nano-banana-pro/code) | ✓ | ✓ | - | ✓ | ✓ | -| [Wan 3.0 Video](/ko/development/comfy-router/models/wan/wan3-0-video/code) | ✓ | - | ✓ | - | - | +| 모델 / 공급자 | **Comfy (기본)** | **fal** | **Higgsfield** | **Pika** | **Runware** | **WaveSpeed** | +| --- | --- | --- | --- | --- | --- | --- | +| [Dreamina Seedance 2.0 260128](/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [Dreamina Seedance 2.5 260628](/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-5-260628/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [GPT Image 2](/ko/development/comfy-router/models/openai/gpt-image-2/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [GPT Image 2.5 Flare](/ko/development/comfy-router/models/openai/gpt-image-2-5-flare/code) | ✓ | ✓ | - | - | ✓ | ✓ | +| [GPT Image 2.5 Sunburst](/ko/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code) | ✓ | ✓ | - | - | ✓ | ✓ | +| [Kling 3.0 Turbo](/ko/development/comfy-router/models/kling/kling-3-0-turbo/code) | ✓ | - | ✓ | - | - | - | +| [Kling V3](/ko/development/comfy-router/models/kling/kling-v3/code) | ✓ | - | ✓ | - | - | - | +| [Nano Banana 2](/ko/development/comfy-router/models/google/nano-banana-2/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [Nano Banana Pro](/ko/development/comfy-router/models/google/nano-banana-pro/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [Wan 3.0 Video](/ko/development/comfy-router/models/wan/wan3-0-video/code) | ✓ | - | ✓ | - | - | - | `strict_mode=false`(기본값)는 선택된 공급자에 맞게 네이티브 요청과 응답을 변환합니다. 변환할 수 없는 필드는 `X-Comfy-Router-Dropped-Params` 응답 헤더에 나열됩니다. \ No newline at end of file diff --git a/ko/development/comfy-router/quickstart.mdx b/ko/development/comfy-router/quickstart.mdx index 186580fa49..7ea8714cdb 100644 --- a/ko/development/comfy-router/quickstart.mdx +++ b/ko/development/comfy-router/quickstart.mdx @@ -2,44 +2,47 @@ title: "Comfy Router 빠른 시작" sidebarTitle: "빠른 시작" description: "최신 프런티어 미디어 모델로 몇 분 만에 이미지와 비디오를 생성하세요." -translationSourceHash: 36d0191e +translationSourceHash: fd6c0aee translationFrom: development/comfy-router/quickstart.mdx +translationBlockHashes: + "_intro": f2205e95 + "Image-to-video and reference-to-video": 8ac90191 + "Next steps": ed466781 --- -
-Comfy Router는 `https://api.comfy.org`에서 호스팅되는 이미지 및 비디오 모델을 위한 단일 API를 제공합니다. [Comfy 워크스페이스](https://platform.comfy.org/profile/api-keys?onboarding=router)에서 API 키를 생성한 다음, 공식 [Python 및 TypeScript SDK](/ko/development/api-development/sdks) 또는 일반 HTTP로 모든 모델을 호출하세요. 과금은 사용한 만큼 지불하는 방식입니다. 각 요청은 구독 없이 워크스페이스 잔액에서 크레딧을 차감합니다. +Comfy Router는 `https://api.comfy.org`에서 호스팅되는 이미지 및 비디오 모델을 위한 단일 API를 제공합니다. [Comfy 워크스페이스](https://platform.comfy.org/profile/api-keys?onboarding=router)에서 API 키를 생성한 다음, 공식 [Python 및 TypeScript SDK](/ko/development/api-development/sdks)나 일반 HTTP로 모든 모델을 호출하세요. 과금은 사용량 기반입니다. 각 요청은 구독 없이 워크스페이스 잔액에서 크레딧을 차감합니다. - **Higgsfield를 사용 중이신가요?** 자신의 Higgsfield 키를 저장하면 해당 생성은 Comfy 크레딧 대신 Higgsfield 계정에 청구됩니다. 엔드포인트와 요청 본문은 동일합니다. 자세한 내용은 [자신의 키로 Higgsfield 사용](/ko/development/comfy-router/higgsfield-byok)을 참고하세요. + **Higgsfield를 사용 중이신가요?** 자체 Higgsfield 키를 저장하면 해당 생성은 Comfy 크레딧 대신 Higgsfield 계정으로 청구됩니다. 엔드포인트와 요청 본문은 동일합니다. [자체 키로 Higgsfield 사용하기](/ko/development/comfy-router/higgsfield-byok)를 참고하세요. - **LiteLLM으로 지출을 추적하시나요?** Router는 동기 실행의 USD 비용을 LiteLLM이 읽는 헤더로 보고하므로 가격표를 직접 관리할 필요가 없습니다. 자세한 내용은 [LiteLLM에서 Comfy Router 사용](/ko/development/comfy-router/litellm)을 참고하세요. + **LiteLLM으로 지출을 추적하시나요?** Router는 동기 실행의 USD 비용을 LiteLLM이 읽는 헤더에 보고하므로, 가격표를 직접 관리할 필요가 없습니다. [LiteLLM과 함께 Comfy Router 사용하기](/ko/development/comfy-router/litellm)를 참고하세요. - [Comfy 워크스페이스](https://platform.comfy.org/profile/api-keys?onboarding=router)에서 키를 생성하세요. Bash 호환 터미널에서 다음을 설정합니다: + [Comfy 워크스페이스](https://platform.comfy.org/profile/api-keys?onboarding=router)에서 키를 생성하세요. Bash 호환 터미널에서 다음을 설정하세요: ```bash export COMFY_API_KEY="comfyui-..." ``` - API 키는 서버나 로컬 환경에 보관하세요. 이 예시는 터미널 또는 서버용이며, 브라우저 JavaScript용이 아닙니다. + API 키는 서버나 로컬 환경에 보관하세요. 이 예제는 터미널이나 서버용이며, 브라우저 JavaScript용이 아닙니다. - Router는 요청마다 크레딧을 차감합니다. 워크스페이스에 크레딧 잔액이 없으면 첫 실제 호출에서 `error_type: insufficient_credits`와 함께 `402`가 반환됩니다. 이 검사는 본문 검증 이전에 실행되므로, 크레딧이 없는 워크스페이스는 잘못된 요청에 대해서도 `402`를 반환할 수 있습니다. 요청 본문을 디버깅하기 전에 [워크스페이스 결제](https://platform.comfy.org)에서 크레딧을 추가하세요. + Router는 요청당 크레딧을 청구합니다. 워크스페이스에 크레딧 잔액이 없으면 첫 실제 호출은 `402`와 함께 `error_type: insufficient_credits`를 반환합니다. 이 검사는 본문 검증 이전에 실행되므로, 크레딧이 없는 워크스페이스는 잘못된 요청에 대해서도 `402`를 반환할 수 있습니다. 요청 본문을 디버깅하기 전에 [워크스페이스 결제](https://platform.comfy.org)에서 크레딧을 추가하세요. - - 언어를 선택하고 예시를 실행하세요. 생성에는 몇 분이 걸릴 수 있습니다. + + 언어를 선택하고 예제를 실행하세요. 생성에는 몇 분이 걸릴 수 있습니다. ```python Python # Python 3.10+ # 설치: python -m pip install "comfy-sdk>=0.3.0" - # quickstart.py로 저장한 뒤 실행: python quickstart.py + # quickstart.py로 저장한 다음 실행: python quickstart.py import asyncio @@ -64,7 +67,7 @@ Comfy Router는 `https://api.comfy.org`에서 호스팅되는 이미지 및 비 ) print("request_id:", handle.request_id) - # 요청이 완료될 때까지 폴링하며, 서버가 알려준 Retry-After만큼 대기합니다. + # 서버가 알려주는 Retry-After를 기다리며 요청이 완료될 때까지 폴링합니다. async for update in handle.iter_events(): print(update.status, update.queue_position) @@ -83,12 +86,12 @@ Comfy Router는 `https://api.comfy.org`에서 호스팅되는 이미지 및 비 -H "Content-Type: application/json" \ -d '{"content": [{"text": "A red fox trotting through a snowy pine forest", "type": "text"}], "duration": 5, "ratio": "16:9", "resolution": "720p"}' - # 2. 상태가 COMPLETED가 될 때까지 폴링하며, 매번 Retry-After 값만큼 대기합니다. + # 2. 상태가 COMPLETED가 될 때까지 폴링하며, 매번 Retry-After 값을 기다립니다. REQUEST_ID="paste-request-id-from-201-response" curl -i "https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests/$REQUEST_ID/status" \ -H "X-API-Key: $COMFY_API_KEY" - # 3. 모델 결과를 수집합니다. + # 3. 모델 결과를 가져옵니다. curl "https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests/$REQUEST_ID" \ -H "X-API-Key: $COMFY_API_KEY" ``` @@ -96,7 +99,7 @@ Comfy Router는 `https://api.comfy.org`에서 호스팅되는 이미지 및 비 ```typescript TypeScript // Node.js 22+ // 설치: npm install "@comfyorg/sdk@>=0.4.0" --save-dev tsx - // quickstart.mts로 저장한 뒤 실행: npx tsx quickstart.mts + // quickstart.mts로 저장한 다음 실행: npx tsx quickstart.mts import { comfy } from "@comfyorg/sdk"; @@ -117,7 +120,7 @@ Comfy Router는 `https://api.comfy.org`에서 호스팅되는 이미지 및 비 ); console.log("requestId:", handle.requestId); - // 요청이 완료될 때까지 폴링하며, 서버가 알려준 Retry-After만큼 대기합니다. + // 서버가 알려주는 Retry-After를 기다리며 요청이 완료될 때까지 폴링합니다. for await (const update of handle.events()) { console.log(update.status, update.queuePosition); } @@ -129,19 +132,66 @@ Comfy Router는 `https://api.comfy.org`에서 호스팅되는 이미지 및 비 - 각 SDK submit 호출은 멱등성 키를 생성하고 자동 재시도에 재사용합니다. - cURL 예시는 `uuidgen`으로 키를 하나 생성합니다. `uuidgen`을 사용할 수 없다면 다른 UUID 생성기를 사용하세요. - 상태, 취소, 결과 수집에 대한 세부 정보는 [대기 중 전송](/ko/development/comfy-router/queue)을 참고하세요. + 각 SDK 제출 호출은 멱등성 키를 생성하고 자동 재시도에 재사용합니다. + cURL 예제는 `uuidgen`으로 키를 생성합니다. 사용할 수 없다면 다른 UUID 생성기를 사용하세요. + 상태, 취소, 결과 수집에 대한 세부 정보는 [대기열 전달](/ko/development/comfy-router/queue)을 참고하세요. +## 이미지 기반 비디오 생성 및 레퍼런스 기반 비디오 생성 + +동일한 Seedance 요청이 이미지, 비디오, 오디오 입력을 받습니다. `content`에 항목을 추가하고 각 항목의 `role`을 설정하세요. 전송하는 역할이 Router가 실행할 작업을 결정합니다. 과금은 역할이 아니라 `content`에 담긴 미디어 종류를 따릅니다. 비디오 입력이 하나라도 있는 요청은 비디오 기반 비디오 생성으로 청구되고, 그런 입력이 없으면서 이미지가 하나라도 있으면 이미지 기반 비디오 생성으로 청구되며, 텍스트만 있는 요청은 텍스트 기반 비디오 생성으로 청구됩니다. 일부 모델은 텍스트 기반 비디오 생성과 이미지 기반 비디오 생성에 동일한 요금을 부과합니다. + +| 작업 | `content` 항목 | +|---|---| +| 텍스트 기반 비디오 생성 | `text` 항목 하나 | +| 이미지 기반 비디오 생성 | `text` 항목 하나와 `role: first_frame`인 `image_url` 항목 | +| 첫 프레임과 마지막 프레임 | 위 항목에 더해 `role: last_frame`인 두 번째 `image_url` 항목 | +| 레퍼런스 기반 비디오 생성 | `text` 항목 하나와 `role: reference_image`인 `image_url` 항목들, 그리고 Seedance 2.0 및 2.5에서는 `role: reference_video`인 `video_url` 항목들과 `role: reference_audio`인 `audio_url` 항목들 | + +이미지 `url`은 공개 URL이거나 `data:image/;base64,` 문자열일 수 있습니다. 제출, 폴링, 수집은 위 퀵스타트와 정확히 동일합니다. 본문만 달라집니다. + +```bash Image-to-video +curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d '{ + "content": [ + {"type": "text", "text": "The fox turns and runs into the trees"}, + {"type": "image_url", "image_url": {"url": "https://example.com/fox.png"}, "role": "first_frame"} + ], + "duration": 5, + "resolution": "720p" + }' +``` + +```bash Reference-to-video +curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d '{ + "content": [ + {"type": "text", "text": "The character from the reference walks through a neon-lit market"}, + {"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"}, + {"type": "image_url", "image_url": {"url": "https://example.com/outfit.png"}, "role": "reference_image"} + ], + "duration": 5, + "ratio": "16:9", + "resolution": "720p" + }' +``` + +Seedance 2.5에서 첫 프레임 요청과 첫 프레임 및 마지막 프레임 요청은 첫 프레임에서 출력 화면 비율을 가져옵니다. 구체적인 비율을 지정하면 `400`으로 거부되므로 `ratio`를 생략하거나 `adaptive`를 전송하세요. 요청 스키마는 Seedance 제품군 전체가 공유하며 모델이 무시하는 역할도 나열할 수 있으므로, 각 모델의 [입력 스키마](/ko/development/comfy-router/models)에서 `x-comfy-router-input-modalities` 필드를 확인해 해당 모델이 허용하는 입력 종류를 파악하세요. 예를 들어 `reference_video`와 `reference_audio`는 여기에 `video` 또는 `audio`를 나열하는 모델이 필요합니다. + ## 다음 단계 - 사용 가능한 모델을 둘러보고 모델별 요청 예시를 확인하세요. + 사용 가능한 모델을 살펴보고 모델별 요청 예제를 확인해 보세요. - - 모델 검색, 스키마, 대기열 요청, 오류, 과금에 대해 알아보세요. + + 모델 탐색, 스키마, 대기 중인 요청, 오류, 과금에 대해 알아보세요. - \ No newline at end of file + diff --git a/ko/development/comfy-router/reference.mdx b/ko/development/comfy-router/reference.mdx index 6a75356b25..c9c5baef91 100644 --- a/ko/development/comfy-router/reference.mdx +++ b/ko/development/comfy-router/reference.mdx @@ -2,16 +2,17 @@ title: "Comfy Router API 레퍼런스" description: "Comfy API 계약에서 생성된 모든 Comfy Router 엔드포인트, 매개변수, 응답 본문 및 오류 버킷." sidebarTitle: "API 레퍼런스" -translationSourceHash: 172fce1a +translationSourceHash: af0beef4 translationFrom: development/comfy-router/reference.mdx translationBlockHashes: "_intro": 3f6e5d23 - "Endpoints": 15c825a9 + "Endpoints": 8e72e743 "Error buckets": 36170340 "Response headers": 8b4696f6 + "Pre-flight cost estimates": 6b90f27c "Result assets": 65fc939b "Per-model input and output schemas": 61c6bde8 - "Schemas": ccaaf317 + "Schemas": 235edfce --- @@ -23,6 +24,7 @@ translationBlockHashes: + {/* 생성된 파일: 손으로 편집하지 마십시오. @@ -47,18 +49,18 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 **Comfy Router가 실행할 수 있는 모델을 나열합니다.** -사용 가능한 모델 ID와 과금 정보를 나열합니다. `has_more`가 true인 동안 `next_cursor`를 사용하세요. +사용 가능한 모델 ID와 과금 정보를 나열합니다. `has_more`가 참인 동안 `next_cursor`를 사용하세요. **파라미터** - 불투명한 페이지네이션 커서. + 불투명 페이지네이션 커서입니다. - 유형: [`RouterPageCursor`](#routerpagecursor) -- `next_cursor`로 반환되는 불투명 커서, 1–512자 + Type: [`RouterPageCursor`](#routerpagecursor) -- `next_cursor`로 반환되는 불투명 커서, 1–512자 - 한 페이지에 반환할 모델 수. + 한 페이지에 반환할 모델 수입니다. 최대 100, 기본값: 20 @@ -66,33 +68,33 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 **응답** - OK - 모델 카탈로그의 한 페이지. + OK - 모델 카탈로그의 한 페이지입니다. - 본문: [`RouterModelListResponse`](#routermodellistresponse) -- 헤더: `X-Comfy-Request-Id` + Body: [`RouterModelListResponse`](#routermodellistresponse) -- 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` Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` ### `GET /v2/models/{provider}/{model}` @@ -106,89 +108,89 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 정식 `{provider}/{model}` 모델 ID의 공급자 부분입니다. - Type: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 + 유형: [`RouterProviderSegment`](#routerprovidersegment). 영숫자 슬러그, 예: `anthropic`, 최대 64자 정식 `{provider}/{model}` 모델 ID의 모델 부분입니다. - Type: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 + 유형: [`RouterModelSegment`](#routermodelsegment). 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 **응답** - OK - 모델의 카탈로그 항목입니다. + OK: 모델의 카탈로그 항목입니다. - Body: [`RouterModelDetail`](#routermodeldetail) -- Headers: `X-Comfy-Request-Id` + 본문: [`RouterModelDetail`](#routermodeldetail), 헤더: `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` 모델 ID를 찾을 수 없습니다. - 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` ### `POST /v2/models/{provider}/{model}` -**정식 모델 ID로 파트너 모델을 동기식으로 실행합니다.** +**정규 모델 ID로 파트너 모델을 동기식으로 실행합니다.** -모델을 실행하고 완료된 결과를 같은 응답으로 받습니다. +모델을 실행하고 완료된 결과를 같은 응답에서 받습니다. **파라미터** - 정식 `{provider}/{model}` 모델 ID의 공급자 부분입니다. + 정규 `{provider}/{model}` 모델 ID의 공급자 부분입니다. 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 - 정식 `{provider}/{model}` 모델 ID의 모델 부분입니다. + 정규 `{provider}/{model}` 모델 ID의 모델 부분입니다. 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 - 하나의 논리적 호출을 안전하게 재시도할 수 있게 해 주는, 호출자가 생성한 키입니다. + 하나의 논리적 호출을 다시 시도해도 안전하게 만드는 호출자 생성 키입니다. - 1~255자 + 1–255자 - 이 모델을 현재 기본 공급자 대신 대체 공급자가 서비스하도록 선택합니다. `fal`, `wavespeed`, `runware`, `higgsfield`가 대체 공급자이며, `GET /v2/models/{provider}/{model}`은 주어진 모델이 이들 중 어느 것을 지원하는지 보고합니다. 이 파라미터의 거부는 고정된 순서로 검사되며, 앞선 거부는 이후 거부가 해당되든 아니든 응답합니다. 인식할 수 없는 값(등록된 공급자가 전혀 아닌 값)은 `400`으로 거부됩니다. 그다음, 본문이 멀티파트 작업(편집)을 선택하는 요청에서의 대체 공급자는 `detail`이 "this request's `image` selects the edit operation"으로 시작하는 `409`로 거부됩니다. 단, 해당 공급자의 이 모델에 대한 translator가 그 작업을 처리할 수 없을 때만 그러하며, translator가 미디어를 처리할 수 있는 leg는 정상적으로 진행됩니다. 그다음, 자체 키(BYOK) 자격 증명을 해석한 요청에서의 대체 공급자는 `detail`이 `this request resolved a BYOK credential`로 시작하는 `409`로 거부됩니다(해당 응답 참조). 그 공급자가 이 모델을 서비스하는지와 무관합니다. 그다음, 지정된 공급자 자체의 gate가 있습니다. 이 gate는 해당 공급자가 사용자에게 활성화되어 있지 않으면 `error_type: not_enabled`와 함께 `403`으로 거부하고, gate를 평가할 수 없으면 `error_type: service_unavailable`과 함께 `503`으로 거부합니다. 이 네 가지를 모두 통과한 경우에만, 이 모델에 대한 leg가 없는 실제 공급자가 `error_type: invalid_input`과 함께 `400`으로 거부되며, 이는 인식할 수 없는 값과 같은 응답입니다. `fallback_provider`는 자체 키 요청에서, 본문이 멀티파트 작업을 선택하는 요청에서, 그리고 `strict_mode=true`에서 거부되지 않고 아무 효과가 없습니다. + 이 모델을 현재 기본값 대신 다른 공급자가 제공하도록 선택합니다. `fal`, `wavespeed`, `runware`, `higgsfield`가 대체 공급자이며, `GET /v2/models/{provider}/{model}`은 주어진 모델이 이 중 어떤 것을 지원하는지 보고합니다. 거부 사유는 고정된 순서로 검사되며, 앞선 사유는 뒤따르는 사유가 해당하든 하지 않든 응답합니다. 등록된 공급자가 전혀 아닌, 인식할 수 없는 값은 `400`으로 거부됩니다. 그다음, 본문이 멀티파트 작업(편집)을 선택하는 요청에서 대체 공급자는 `detail`이 "this request's `image` selects the edit operation"으로 시작하는 `409`로 거부됩니다. 다만 해당 공급자의 이 모델용 변환기가 그 작업을 처리할 수 없을 때만 그렇습니다. 변환기가 미디어를 처리하는 경로는 정상적으로 진행됩니다. 그다음, 자체 키(BYOK) 자격 증명을 확인한 요청에서는 대체 공급자가 해당 공급자가 이 모델을 제공하는지와 무관하게 `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`는 BYOK 요청에서, 본문이 멀티파트 작업을 선택하는 요청에서, 그리고 `strict_mode=true`인 경우에 거부되는 대신 아무 효과가 없습니다. - `model_provider`와 함께 사용할 때만 의미가 있습니다. + `model_provider`와 함께일 때만 의미가 있습니다. 기본값: False - 첫 시도가 Router 또는 시도된 공급자에게 귀속되는 이유로 실패했을 때 Router가 이 호출을 모델의 다른 등록된 공급자에 대해 재시도할지 여부를 제어합니다. 생략하거나 `false` 이외의 어떤 값을 사용해도 fallback은 켜진 상태로 유지되며, `false`는 이를 끕니다. 성공한 fallback 응답에는 `X-Comfy-Router-Fallback-Provider`가 포함됩니다. 자체 키 자격 증명을 해석한 요청에서는 이 파라미터가 무엇을 말하든 fallback을 사용할 수 없습니다. 시도가 아예 이루어지지 않고 첫 실패가 그대로 전달되는데, 이는 거부가 아니라 아무 효과가 없는 것입니다. 여기서 `409`는 발생하지 않습니다. 같은 이유로 본문이 멀티파트 작업을 선택하는 요청과 `strict_mode=true`에서도 마찬가지입니다. 각각은 호출을 다른 공급자에 대해 충실히 재현할 수 없는 하나의 공급자에 묶으므로, fallback은 거부되지 않고 단순히 건너뜁니다. 명시적인 `model_provider`만이 그 `409`로 거부되며, 이 무조건적 건너뜀과 달리 그 멀티파트 `409`는 translator가 그 작업을 처리할 수 없는 leg에만 적용됩니다. + 첫 시도가 Router 또는 시도한 공급자에게 귀속되는 이유로 실패했을 때 Router가 이 호출을 모델의 다른 등록된 공급자에 대해 재시도할지 여부를 제어합니다. 생략하거나 `false` 이외의 값을 지정하면 폴백이 켜진 상태로 유지되고, `false`는 폴백을 끕니다. 성공한 폴백 응답에는 `X-Comfy-Router-Fallback-Provider`가 포함됩니다. BYOK 자격 증명을 확인한 요청에서는 이 파라미터가 무엇을 말하든 폴백을 사용할 수 없습니다. 시도가 아예 이루어지지 않고 첫 실패가 그대로 전달되며, 이는 거부가 아니라 아무 효과가 없는 것입니다. 여기서 `409`가 발생하지 않습니다. 같은 이유로, 본문이 멀티파트 작업을 선택하는 요청과 `strict_mode=true`인 경우에도 마찬가지입니다. 각각은 호출을 다른 공급자에 대해 충실히 재현할 수 없는 하나의 공급자에 묶기 때문에, 폴백은 거부되지 않고 단순히 건너뜁니다. 명시적인 `model_provider`만이 그 `409`로 거부되며, 이 무조건적 건너뜀과 달리 그 멀티파트 `409`는 변환기가 작업을 처리할 수 없는 경로에만 적용됩니다. - 이 모델의 입력 스키마가 선언하지 않은 최상위 요청 본문 필드를 수락하는 대신 거부하도록 선택합니다. 중첩 필드는 검사하지 않으며, 스키마가 선언되지 않은 필드를 허용하거나 작성된 스키마가 없는 모델에서는 아무것도 거부되지 않고, `strict_mode=true`로 보낸 대기 중 제출에서도 마찬가지입니다. + 이 모델의 입력 스키마가 선언하지 않은 최상위 요청 본문 필드를 수락하는 대신 거부하도록 선택합니다. 중첩 필드는 검사되지 않으며, 스키마가 선언되지 않은 필드를 허용하거나 작성된 스키마가 없는 모델에서는 아무것도 거부되지 않고, `strict_mode=true`와 함께 전송된 대기 중 제출에서도 마찬가지입니다. 기본값: False @@ -197,14 +199,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 비디오 모델의 경우 첫 프레임 이미지는 이미지 기반 비디오 생성을 선택하고, 레퍼런스 이미지나 클립은 레퍼런스 기반 비디오 생성을 선택합니다. 조건화된 각 작업은 기본 텍스트 기반 이미지 생성 또는 텍스트 기반 비디오 생성 요율이 아니라 자체 요율로 과금됩니다. +파트너 모델의 네이티브 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 문서라고 가정하지 마세요. + 정상 - `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-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-Dropped-Params`, `X-Comfy-Credits-Used`, `Idempotent-Replayed`, `X-Committed-Spend-Limit`, `X-Committed-Spend-Current`, `X-Committed-Spend-Remaining` @@ -226,7 +228,7 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 - 이 호출자 또는 모델에 대해 허용되지 않는 요청입니다. + 이 호출자 또는 모델에 대해서는 요청이 허용되지 않습니다. 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` @@ -238,9 +240,9 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 - `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"으로 시작합니다. 둘째, 그 이후에 검사하는 것으로, 요청이 경로에 있는 공급자에 대해 이미 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` 충돌은 키와 전혀 관련이 없으며 새 키로도 어느 쪽도 해결되지 않습니다. `model_provider`가 대체 공급자를 지정하는 경우, 요청 본문이 해당 공급자의 이 모델용 translator가 처리할 수 없는 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`인 경우) @@ -250,7 +252,7 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 - 요청 내용이 모델의 스키마에 맞지 않아 거부되었습니다. + 요청의 내용이 모델의 스키마에 대해 거부되었습니다. 본문: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Idempotent-Replayed` @@ -262,15 +264,15 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 - 공급자 자체의 응답을 결과로 변환할 수 없습니다 (`provider_error`). + 공급자 자체의 응답을 결과로 변환할 수 없습니다(`provider_error`). 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status` - 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`(용량 거부인 경우에만) @@ -279,22 +281,102 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `X-Comfy-Upstream-Status`, `Retry-After` +### `POST /v2/models/{provider}/{model}/estimate` + +**실행하지 않고도 실행 전에 모델 호출의 가격을 산정합니다.** + +이 모델에서 이 본문을 실행할 때 Comfy가 청구할 금액을 미국 달러로 반환하며, 청구가 이루어지는 것과 동일한 요율표를 기준으로 가격이 산정됩니다. 본문은 먼저 모델의 입력 스키마에 대해 검증되며, 이는 기본 실행(`strict_mode` 없음, `reject_unknown_fields` 없음)이 검증하는 방식과 같습니다. 따라서 모델의 스키마를 통과하지 못하는 본문은 여기서도 실행 시와 동일한 `422`입니다. 공급자에게 아무것도 전달되지 않고 아무것도 청구되지 않습니다. 이 응답은 가격을 고정하는 것이 아닙니다. `pricing_as_of` 시점에 유효한 요율로 산정되며, 실행은 요율이 책정되는 시점에 유효한 요율로 청구됩니다. 기능이 순차 배포되는 동안 이 라우트는 `error_type: not_enabled`와 함께 `403`을 응답합니다. + +**파라미터** + + + 정식 `{provider}/{model}` 모델 ID의 소문자 공급자 세그먼트로, 모델을 실행하는 파트너입니다. + + Type: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 + + + + 정식 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트로, 해당 공급자 내에서 실행할 모델입니다. + + Type: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 + + + + 이 모델을 제공할 대체 공급자를 선택합니다. 현재의 기본 공급자 대신 사용됩니다. + + +**요청 본문** + +`application/json` -- [`RouterModelInput`](#routermodelinput) (필수) + +파트너 모델의 네이티브 JSON 입력으로, 이 모델에 대해 동기 라우트가 받는 본문과 동일합니다. 기본 실행이 검증하는 방식대로 모델 자체의 입력 스키마에 대해 검증되며(이 라우트는 `strict_mode`나 `reject_unknown_fields`를 받지 않습니다), 본문 자체의 필드(출력 개수, 입력 이미지가 선택하는 작업)가 무엇의 가격을 산정할지 결정합니다. + +**응답** + + + 견적입니다. + + Body: [`RouterCostEstimate`](#routercostestimate) -- Headers: `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` + + + + 견적 요청의 본문이 모델의 스키마에 의해 거부되었거나, 경로에 지정된 것과 다른 모델을 지정했습니다. + + Body: [`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + + + + Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. + + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id`, `Retry-After` (용량 거부에만 해당) + + ### `GET /v2/models/{provider}/{model}/openapi.json` -**파트너 모델 하나의 입력 및 출력 스키마를 OpenAPI 문서로 읽습니다.** +**파트너 모델 하나의 입력 및 출력 스키마를 OpenAPI 문서로 읽어옵니다.** -모델 하나의 입력 및 출력 스키마를 독립형 OpenAPI 문서로 읽습니다. +모델 하나의 입력 및 출력 스키마를 독립형 OpenAPI 문서로 읽어옵니다. **파라미터** - 정식 `{provider}/{model}` 모델 ID의 공급자 부분입니다. + 정규 `{provider}/{model}` 모델 ID의 공급자 부분입니다. 유형: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 - 정식 `{provider}/{model}` 모델 ID의 모델 부분입니다. + 정규 `{provider}/{model}` 모델 ID의 모델 부분입니다. 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 @@ -306,7 +388,7 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 **응답** - OK - 모델의 입력 및 출력 스키마를 독립형 OpenAPI 문서로 제공합니다. + OK - 모델의 입력 및 출력 스키마를 독립형 OpenAPI 문서로 반환합니다. 본문: [`RouterModelInputSchemaDocument`](#routermodelinputschemadocument) -- 헤더: `X-Comfy-Request-Id`, `ETag`, `Cache-Control` @@ -342,7 +424,7 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 - Router를 일시적으로 사용할 수 없습니다. 백오프를 적용해 다시 시도하세요. + Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` @@ -351,24 +433,24 @@ Comfy API 키는 Bearer 토큰으로도 전송할 수 있습니다. 두 자격 **파트너 모델 실행을 실행 대기열에 제출하고 즉시 반환합니다.** -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자 - 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트입니다. 해당 공급자 내에서 실행할 모델입니다. + 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트로, 해당 공급자 내에서 실행할 모델입니다. 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 - 이 모델을 현재 기본값 대신 처리할 대체 공급자를 선택합니다. + 현재 기본값 대신 이 모델을 제공할 대체 공급자를 선택합니다. @@ -378,13 +460,13 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod - 하나의 논리적 호출을 재시도해도 안전하게 만드는 호출자 생성 키입니다. + 호출자가 생성하는 키로, 하나의 논리적 호출을 안전하게 재시도할 수 있게 합니다. 1–255자 - 이 모델의 입력 스키마가 선언하지 않은 최상위 요청 본문 필드를 허용하는 대신 거부하도록 선택합니다. 중첩 필드는 검사하지 않으며, 선언되지 않은 필드를 허용하는 스키마를 가진 모델이나 작성된 스키마가 없는 모델, 또는 `strict_mode=true`로 전송된 대기열 제출에서는 아무것도 거부되지 않습니다. + 이 모델의 입력 스키마가 선언하지 않은 최상위 요청 본문 필드를 수용하는 대신 거부하도록 선택합니다. 중첩 필드는 검사하지 않으며, 스키마가 선언되지 않은 필드를 허용하거나 작성된 스키마가 없는 모델의 경우, 또는 `strict_mode=true`로 전송된 대기 중 제출에서는 아무것도 거부되지 않습니다. 기본값: False @@ -393,7 +475,7 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod `application/json` -- [`RouterModelInput`](#routermodelinput) (필수) -파트너 모델의 네이티브 JSON 입력으로, 동기 경로가 이 모델에 대해 받아들이는 본문과 동일합니다. 이 입력은 작업을 선택하며 동일한 방식으로 과금됩니다. 즉, 본문 자체의 필드가 둘 이상을 지원하는 모델에서 Router가 실행할 작업을 선택하고(입력 이미지는 편집 가능한 이미지 모델을 이미지 기반 이미지 생성으로 전환하며, Seedance의 첫 프레임 이미지는 이미지 기반 비디오 생성으로, 레퍼런스 이미지나 클립은 레퍼런스 기반 비디오 생성으로 선택합니다), 조건이 적용된 각 작업은 기본 텍스트 기반 이미지 생성 또는 텍스트 기반 비디오 생성 요율이 아니라 자체 요율로 과금됩니다. 동일한 공급자 선택 계약이 디스패치 시점에 적용됩니다. `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` 참조). **응답** @@ -428,7 +510,7 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod - 이 호출자 또는 모델에 대해 요청이 허용되지 않습니다. 파트너가 생성을 바이트로 직접 응답하는 모델은 아직 대기열에 넣을 수 없으며 `not_enabled`로 거부됩니다. 대신 동기 경로에서 실행하세요. + 이 호출자나 모델에 대해 요청이 허용되지 않습니다. 파트너가 생성을 바이트로 직접 응답하는 모델은 아직 실행 대기열에 넣을 수 없으며 `not_enabled`로 거부됩니다. 대신 동기 라우트에서 실행하세요. 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` @@ -439,46 +521,45 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod 본문: [`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`가 대체 공급자를 지정하는 경우는 요청 본문이 이 모델에 대해 해당 공급자의 translator가 처리할 수 없는 multipart 작업(편집)을 선택했을 때 거부되며, `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` 충돌은 키와 전혀 관련이 없으며, 어떤 새 키로도 해결되지 않습니다: `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` 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자 - 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트이며, 해당 공급자 내에서 실행할 모델입니다. + 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트입니다. 해당 공급자 내에서 실행할 모델입니다. 유형: [`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자 @@ -486,13 +567,13 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod **응답** - 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` - 수락됨 - 요청이 아직 완료되지 않았습니다. + Accepted - 요청이 아직 완료되지 않았습니다. 본문: [`RouterQueueStatusResponse`](#routerqueuestatusresponse) -- 헤더: `X-Comfy-Request-Id`, `Retry-After` @@ -528,19 +609,19 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod - 요청이 작업과 충돌하는 상태에 있습니다. 오류 유형을 확인하십시오. + 요청이 작업과 충돌하는 상태입니다. 오류 유형을 확인하십시오. 본문: [`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` @@ -553,102 +634,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자 + Type: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 - 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트로, 해당 공급자에서 실행할 모델입니다. + 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트로, 해당 공급자 내에서 실행할 모델입니다. - 유형: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 + Type: [`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자 + Type: [`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` + Body: [`RouterQueueCancelResponse`](#routerqueuecancelresponse) -- Headers: `X-Comfy-Request-Id` - 충돌: `ALREADY_COMPLETED`. + 충돌 - `ALREADY_COMPLETED`. - 본문: [`RouterQueueCancelResponse`](#routerqueuecancelresponse) -- 헤더: `X-Comfy-Request-Id` + Body: [`RouterQueueCancelResponse`](#routerqueuecancelresponse) -- 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` - Router를 일시적으로 사용할 수 없습니다. 백오프를 두고 재시도하세요. + Router를 일시적으로 사용할 수 없습니다. 백오프를 적용해 재시도하세요. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` Router 요청 수준의 실패로, 요청이 모델에 도달하지 않았거나 모델 자체가 보고하지 않은 이유로 실패한 경우입니다. - 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `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자 - 정규 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트로, 해당 공급자 내에서 실행할 모델입니다. + 정식 `{provider}/{model}` 모델 ID의 소문자 모델 세그먼트입니다. 해당 공급자 내에서 실행할 모델입니다. 유형: [`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자 @@ -656,7 +737,7 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod **응답** - OK: 요청의 현재 실행 대기열 상태입니다. + OK - 요청의 현재 실행 대기열 상태입니다. 본문: [`RouterQueueStatusResponse`](#routerqueuestatusresponse) -- 헤더: `X-Comfy-Request-Id`, `Retry-After` @@ -680,7 +761,7 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod - Router 요청 수준의 실패입니다. 요청이 모델에 도달하지 못했거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. + Router 요청 수준 실패입니다. 요청이 모델에 도달하지 못했거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. 본문: [`RouterErrorResponse`](#routererrorresponse) -- 헤더: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` @@ -692,12 +773,12 @@ Comfy Router의 대기열 전달 모드입니다. 요청 본문은 `POST /v2/mod - Router 요청 수준의 실패입니다. 요청이 모델에 도달하지 못했거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. + Router 요청 수준 실패입니다. 요청이 모델에 도달하지 못했거나, 모델 자체가 보고하지 않은 이유로 실패했습니다. 본문: [`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)를 참고하세요. ## 오류 버킷 @@ -818,6 +899,40 @@ Router가 요청을 접수한 뒤 완료하지 못한 경우 발생합니다. Router 모델의 모든 성공 실행에서 항상 `nosniff`입니다. +## 실행 전 비용 추정 + +`POST /v2/models/{provider}/{model}/estimate`는 본문을 실행하지 않고 가격을 산정하며, 대기 중 제출(`POST /v2/models/{provider}/{model}/requests`)은 `201` 응답에서 `estimate`와 동일한 [`RouterCostEstimate`](#routercostestimate)를 반환합니다. 둘 다 Comfy가 해당 실행에 청구하는 요율 카드를 기준으로 가격이 산정됩니다. 자체 공급자 키로 실행한 경우에는 Comfy가 청구하지 않습니다(아래 참조). 추정 기능이 점진적으로 배포되는 동안에는 이 경로가 `error_type: not_enabled`와 함께 `403`을 응답하고, 제출 응답에서는 `estimate`가 생략됩니다. 카탈로그에는 여전히 가격이 없습니다. + +어떤 금액보다도 `source`를 먼저 확인하세요. 수치가 누락되었다고 해서 무료라는 뜻은 결코 아닙니다. + +| `source` | 포함하는 항목 | 해석 방법 | +| --- | --- | --- | +| `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`: 요율 카드에 이 요청의 가격이 없습니다. +- `byok`(대기 중 제출 전용): 자체 공급자 키로 실행하므로 Comfy는 이에 대해 아무것도 청구하지 않습니다. +- `pricing_unavailable`(대기 중 제출 전용): 요청이 접수될 때 요율 카드를 읽을 수 없었습니다. 제출은 그대로 수락되며 실행은 평소와 같이 청구됩니다. + +추정이 실패 시 안전하게 닫히는 지점: + +- 수치를 내려면 요율 카드가 필요한데 카드가 로드되지 않았거나 오래된 경우, `/estimate`는 추측 대신 `503`을 응답합니다. 대기 중 제출은 추정 때문에 거부되는 일이 없으며, 대신 `reason: pricing_unavailable`과 함께 `source: unknown`을 포함합니다. 실행 전에 전혀 가격을 산정할 수 없는 호출(`not_quotable`)이나 자체 공급자 키를 사용하는 대기 중 제출(`byok`)은 카드를 읽지 않고 응답하므로, 그 `200`은 카드가 최신인지에 대해 아무것도 말해주지 않습니다. +- `/estimate`는 기본 실행과 마찬가지로 모델 자체의 입력 스키마에 대해 본문을 검증하므로, 모델 스키마를 통과하지 못하는 본문은 실행이 응답했을 것과 동일한 `detail[]` 형태의 동일한 `422`를 받습니다. 가격 산정도 디스패치도 이루어지지 않습니다. +- 대기 중 제출의 멱등 재실행(`Idempotent-Replayed: true`)은 원본 견적이 저장되지 않으므로 `estimate`를 생략합니다. + +추정의 한계. `200` 수치가 실행이 수락된다거나 정확히 그 금액이 청구된다는 약속은 아닙니다. + +- `/estimate`는 `strict_mode`나 `reject_unknown_fields`를 받지 않으므로 모델의 네이티브 계약만 검사합니다. `strict_mode=true` 실행이 대체 공급자 자체 스키마에서 수락하는 본문이 여기서는 `422`를 받을 수 있고, `reject_unknown_fields=true` 실행이라면 거부했을 선언되지 않은 최상위 필드도 여기서는 가격이 산정됩니다. +- `pricing_as_of`는 요율 카드를 가져온 시점입니다(카드를 읽지 않은 경우에는 추정이 응답된 시점). 이는 가격 고정이 아닙니다. 실행은 요율이 적용되는 시점에 유효한 요율로 청구됩니다. +- `/estimate`는 `model_provider`가 지정한 레그, 또는 네이티브 공급자의 가격을 제시합니다. `fallback_provider`나 `strict_mode` 매개변수는 받지 않습니다. 폴백 재시도가 다른 공급자로 넘어간 동기 실행은 그 공급자의 요율로 청구되며, 추정은 이를 제시하지 않았습니다. 실행 응답의 `X-Comfy-Router-Fallback-Provider`가 그런 일이 있었음을 알려줍니다. 대기 중 제출에는 폴백이 없으므로 그 `estimate`는 실제로 실행되는 레그의 가격을 제시합니다. +- `/estimate`와 대기 중 제출의 `estimate`는 `model_provider` 레그에서 동일한 본문에 대해, 또는 형제 작업에서 실행되는 본문에 대해 약간 다른 문서의 가격을 산정할 수 있습니다. 제출의 `estimate`는 실행이 전송하는 문서를 기준으로 가격이 산정됩니다. +- `/estimate`는 항상 플랫폼 요금을 제시합니다. 자체 공급자 키로 실행한 경우 Comfy는 청구하지 않지만, `/estimate`는 이를 감지하지 못하고 여전히 수치를 반환합니다. `reason: byok`를 응답하는 것은 대기 중 제출뿐입니다. +- 달러는 반올림되지 않은 센트에서 최대 소수점 8자리로 표시되며, 청구 가능한 1센트 미만의 `amount`가 `0`으로 표시되는 일은 없습니다. `credits`는 `round(amount × 211, 2)`로, `X-Comfy-Credits-Used`가 요금에 적용하는 것과 동일한 변환입니다. 따라서 0이 아닌 아주 작은 가격에서 `credits`가 `0`으로 반올림될 수 있습니다. 이것이 중요한 경우에는 `credits`가 아니라 `amount` 또는 `amount_cents`를 기준으로 예산을 세우세요. 해당 헤더는 실행에 대한 사후 수치로 남으며, 잔액은 Comfy 플랫폼에 있습니다. + ## 결과 에셋 모델은 에셋 URL, 인라인 바이트, 또는 둘 다를 반환할 수 있습니다. 아래 공급자는 선택된 에셋을 Comfy 스토리지로 복사하고 해당 URL을 대체합니다. 이 동작은 모델에 따라 다르며, 이를 선택하는 요청 헤더는 없습니다. @@ -847,13 +962,83 @@ Router가 요청을 접수한 뒤 완료하지 못한 경우 발생합니다. 각 모델의 필드는 `GET /v2/models/{provider}/{model}/openapi.json`에서 확인할 수 있습니다. 이 호출에는 API 키가 필요합니다. 스키마가 작성된 모든 모델에 대해 동일한 문서가 이 사이트에도 인증 없이 `/router-schemas/{provider}/{model}.json`에서 게시됩니다. 이 복사본은 마지막 문서 업데이트 시점에 캡처한 스냅샷이므로, 두 문서가 다를 경우 엔드포인트가 우선합니다. 오퍼레이션의 `requestBody`는 입력 검증을 설명하고, `200` 응답은 스키마가 작성된 경우 출력 형태와 미디어 타입을 설명합니다. `x-comfy-input-schema-authored`가 false이면 Router는 모델별 사전 검증 없이 모든 JSON 객체를 허용합니다. 공급자 요구 사항은 여전히 적용됩니다. 출력 스키마는 결과를 설명하며, Router는 반환된 공급자 페이로드를 스키마와 대조하여 검증하지 않습니다. 스키마가 작성되지 않은 출력은 `application/json` 대신 `*/*`를 사용할 수 있으므로, 디코딩하기 전에 응답 콘텐츠 타입을 확인하세요. -## 스키마 +## 스키마 {#schemas} -### RouterChargesOnPolicyRejection +### RouterChargesOnPolicyRejection {#routerchargesonpolicyrejection} -이 모델에 대해 콘텐츠 정책 거부가 과금되는지 여부입니다. 알 수 없는 값은 과금될 수 있는 것으로 간주하세요. +이 모델에 대해 콘텐츠 정책 거부가 청구되는지 여부입니다. 알 수 없는 값은 청구될 수 있는 것으로 간주하세요. -타입: `string` +유형: `string` + +### RouterCostEstimate + +이 호출에 대해 Comfy가 청구할 금액으로, 디스패치 이전에 청구가 과금되는 것과 동일한 요율표를 기준으로 산정되며 미국 달러로 표시됩니다. `source`는 이 숫자를 얼마나 신뢰할 수 있는지 나타냅니다. `exact`는 `amount`를 포함하고, `estimated`는 `min_amount`와 `max_amount`를 포함하며 `amount`는 없고, `unknown`은 둘 다 없이 `reason`을 포함합니다. 누락된 `amount`를 무료로 해석하지 마세요. 가격 고정이 아닙니다. `pricing_as_of`를 참고하세요. + +**필드** + + + `exact` | `estimated` | `unknown`; 그 외의 값은 `unknown`으로 해석합니다. + + + + 항상 `USD`입니다. + + + + 달러를 소수점 문자열로 나타낸 값입니다. 예: "0.04". 소수점 이하 최대 8자리이며 지수 표기를 쓰지 않습니다. 청구 대상이 되는 1센트 미만 가격은 "0"으로 표시되지 않습니다. `source`가 `exact`일 때만 존재합니다. + + + + 달러 기준 하한값을 소수점 문자열로 나타낸 값입니다. `source`가 `estimated`일 때만 존재합니다. + + + + 달러 기준 상한값을 소수점 문자열로 나타낸 값입니다. `source`가 `estimated`일 때만 존재합니다. + + + + 산술 연산에 쓰기 위해 같은 값을 반올림하지 않은 미국 센트 단위로 나타낸 값입니다. `amount`와 함께 존재합니다. + + double + + + + 반올림하지 않은 미국 센트 단위의 `min_amount`입니다. `min_amount`와 함께 존재합니다. + + double + + + + 미국 센트 단위의 `max_amount`입니다. `max_amount`와 함께 존재합니다. + + double + + + + 플랫폼 환산율($1 = 211 크레딧)을 사용해 `amount`를 Comfy 크레딧으로 나타낸 값이며 소수점 이하 2자리로 반올림됩니다. `exact` 견적에 대해 `X-Comfy-Credits-Used`가 담게 될 값입니다. + + double + + + + 이 견적이 대상으로 하는 공급자 구간입니다. 대기 중 제출에서는 실행될 구간입니다. + + + + 정식 Comfy Router 모델 ID인 `{provider}/{model}`이며, `POST /v2/models/{provider}/{model}`에서 모델을 지정하는 값과 정확히 같습니다. 따라서 호출자는 다른 것에서 다시 도출할 필요 없이 이 값을 그 경로에 그대로 넣을 수 있습니다. 이 값의 `pattern`은 `RouterProviderSegment`와 `RouterModelSegment`를 단일 `/`로 연결한 것이고, `maxLength`는 두 값의 길이 합에 그 구분자를 더한 값입니다. + + Type: [`RouterModelId`](#routermodelid) -- 모델 ID, 예: `anthropic/claude-opus-4-6`, 최대 193자 + + + + 이 견적을 산정할 때 사용한 요율표를 가져온 시각입니다. 실행은 이 시점이 아니라 요금이 산정되는 시점에 유효한 요율로 청구됩니다. 요율표를 읽지 않은 경우(`reason: pricing_unavailable`, `byok`, 또는 어떤 요율표로도 산정할 수 없는 `not_quotable` 호출)에는 이 값이 견적이 응답된 시각입니다. + + date-time + + + + `source`가 `unknown`일 때만 존재합니다. `not_quotable`(Router가 실행 전에 이 호출의 가격을 산정할 수 없음. 가격이 공급자가 보고하는 내용에 따라 달라지거나, 요청 본문이 청구 대상 수량을 한정하지 않는 경우), `unpriced_model`(요율표에 이 요청의 가격이 없음), `byok`(대기 중 제출에만 해당: 실행에 사용자의 공급자 키를 사용하므로 Comfy는 이에 대해 아무것도 청구하지 않음), 또는 `pricing_unavailable`(대기 중 제출에만 해당: 요청이 접수될 때 요율표를 읽을 수 없었음. 이는 일시적이며 실행은 평소와 같이 청구됨)입니다. 그 외의 값은 `not_quotable`로 해석합니다. + ### RouterErrorResponse @@ -862,28 +1047,28 @@ Router가 요청을 접수한 뒤 완료하지 못한 경우 발생합니다. **필드** - 최종 사용자에게 노출해도 안전한, 사람이 읽을 수 있는 실패 설명입니다. 기계적으로 파싱되지 않으므로 대신 `error_type`을 기준으로 분기하세요. 문서화된 두 가지 예외가 있습니다. `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`로 취급해야 하고, 위 목록을 전수 분기하여 다음 추가에서 깨져서는 안 됩니다. + 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`이 아닌 일반 문자열입니다. 따라서 클라이언트는 위 목록을 전수 `switch`하여 다음 추가에서 깨지는 대신, 인식할 수 없는 값을 `internal_error`로 처리해야 합니다. - 타입: [`RouterErrorType`](#routererrortype) + Type: [`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` 헤더를 반영합니다. - 콘텐츠 정책 거부가 어떤 입력 또는 출력에 관한 것인지 나타내는 Router 수준의 폐쇄형 어휘입니다: `input`, `output`, `input_text`, `input_image`, `input_video`, `input_audio`, `output_text`, `output_image`, `output_video`, `output_audio`. 공급자가 모달리티를 지정하지 않은 경우 단독 `input` / `output` 값이 해당 방향을 나타냅니다. `error_type`이 `content_policy_violation`이고 공급자가 거부 대상을 기계 판독 가능한 코드로 지정한 경우에만 존재하며, 그 외에는 생략됩니다. 공급자 텍스트는 절대 포함하지 않습니다. 현재 BytePlus, Runway, BFL, Gemini, Veo, Vertex, xAI 및 Wan의 거부에 대해 명명되며, 어떤 방향에 관한 것인지 밝히지 않는 공급자의 거부에서는 생략됩니다. `X-Comfy-Refusal-Subject` 헤더를 반영합니다. + 콘텐츠 정책 거부가 어떤 입력 또는 출력에 관한 것이었는지를 Router 수준의 닫힌 어휘로 나타냅니다. `input`, `output`, `input_text`, `input_image`, `input_video`, `input_audio`, `output_text`, `output_image`, `output_video`, `output_audio`. 공급자가 모달리티를 명시하지 않은 경우에는 접두사 없는 `input` / `output` 값이 어느 쪽인지를 나타냅니다. `error_type`이 `content_policy_violation`이고 공급자가 거부된 대상을 기계 판독 가능한 코드로 명시한 경우에만 존재하며, 그렇지 않으면 없습니다. 공급자 텍스트는 절대 아닙니다. 현재 BytePlus, Runway, BFL, Gemini, Veo, Vertex, xAI, Wan의 거부에 대해 명시되며, 거부가 어느 쪽에 관한 것인지 밝히지 않는 공급자의 경우 이 필드는 없습니다. 이는 `X-Comfy-Refusal-Subject` 헤더를 반영합니다. ### RouterErrorType -기계가 읽을 수 있는 Router 오류 카테고리이며, `X-Comfy-Error-Type` 헤더로도 전송됩니다. +기계가 읽을 수 있는 Router 오류 카테고리로, `X-Comfy-Error-Type` 헤더에도 전송됩니다. -타입: `string` +유형: `string` ### RouterModelBilling @@ -892,251 +1077,257 @@ Router가 요청을 접수한 뒤 완료하지 못한 경우 발생합니다. **필드** - 이 모델이 콘텐츠 정책을 이유로 거부한 호출이 그럼에도 호출자에게 과금되는지 여부입니다. 공급자마다 다르고, 그 차이는 호출 시점에는 드러나지 않으며, 같은 호출에 대해 오류와 과금을 함께 보게 된 사용자는 미리 알 방법이 없었습니다. 따라서 공급자별 속설에 맡기는 대신 호출 이전에 모델별로 명시합니다. + 이 모델이 콘텐츠 정책을 이유로 거부한 호출이 그럼에도 호출자에게 과금되는지 여부입니다. 공급자마다 다르고, 그 차이는 호출 시점에는 보이지 않으며, 같은 호출에 대해 오류와 과금을 함께 보게 된 사용자는 미리 알 방법이 없었습니다. 그래서 공급자마다의 통설에 맡기는 대신, 모델별로 호출 전에 명시합니다. 타입: [`RouterChargesOnPolicyRejection`](#routerchargesonpolicyrejection) ### RouterModelDetail -하나의 Comfy Router 모델에 대한 모델별 상세 정보입니다. 카탈로그 목록이 해당 모델에 대해 보고하는 모든 항목과, 단일 모델 경로만이 가지는 모델별 필드를 포함합니다. +하나의 Comfy Router 모델에 대한 모델별 상세 정보입니다. 카탈로그 목록이 해당 모델에 대해 보고하는 모든 항목에 더해, 단일 모델 라우트만 제공하는 모델별 필드까지 포함합니다. -[`RouterModelListEntry`](#routermodellistentry), [`RouterModelDetailFields`](#routermodeldetailfields)를 구성합니다. +[`RouterModelListEntry`](#routermodellistentry), [`RouterModelDetailFields`](#routermodeldetailfields)로 구성됩니다. 타입: `object` ### RouterModelDetailFields -모델 세부 정보 엔드포인트에서 반환되는 선택적 필드입니다. +모델 세부 정보 엔드포인트가 반환하는 선택적 필드입니다. **필드** - 입력 및 출력 스키마를 포함한 이 모델의 OpenAPI 문서 URL입니다. + 이 모델의 OpenAPI 문서 URL이며, 입력 및 출력 스키마를 포함합니다. HTTPS URL, 예: `https://api.comfy.org/v2/models/bfl/flux-2-pro/openapi.json`, 최대 2048자 ### RouterModelId -`POST /v2/models/{provider}/{model}`에서 사용되는 모델 ID입니다. +`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` ### RouterModelInputSchemaDocument -하나의 모델에 대한 입력과 출력을 담은 독립형 OpenAPI 문서입니다. +한 모델의 입력과 출력을 위한 독립형 OpenAPI 문서입니다. 타입: `object` ### 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자 + 타입: [`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자 + 타입: [`RouterProviderSegment`](#routerprovidersegment) -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 - 정규 `{provider}/{model}` 모델 ID의 소문자 `model` 세그먼트로, 해당 공급자 내에서 실행할 모델을 나타냅니다. 호출 라우트의 `model` 경로 매개변수와 카탈로그 항목의 `model` 필드가 이를 공유하며, 이는 `RouterProviderSegment`와 마찬가지로 ID가 어긋나지 않게 하기 위한 것입니다. + 정식 `{provider}/{model}` 모델 ID에서 소문자로 표기되는 `model` 세그먼트이며, 해당 공급자 안에서 실행할 모델을 나타냅니다. 호출 라우트의 `model` 경로 매개변수와 카탈로그 항목의 `model` 필드에서 공유되며, `RouterProviderSegment`와 마찬가지로 ID가 어긋나지 않게 하기 위한 것입니다. - 타입: [`RouterModelSegment`](#routermodelsegment), 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 + 타입: [`RouterModelSegment`](#routermodelsegment) -- 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 - 호출자가 호출하기 전에 알아야 하는 모델별 과금 정보이며, 가격이 아닙니다. 사용량과 비용 수치는 여기에 절대 나타나지 않습니다. + 호출 전에 호출자가 알아야 하는 모델별 청구 정보이며, 가격이 아닙니다. 사용량과 비용 수치는 여기에 절대 나타나지 않습니다. 타입: [`RouterModelBilling`](#routermodelbilling) ### RouterModelListResponse -라우터 모델 카탈로그의 한 페이지입니다. +Router 모델 카탈로그의 한 페이지입니다. **필드** - 이 페이지에 있는 모델들이며, 최대 `limit`개입니다. + 이 페이지의 모델들로, 최대 `limit`개입니다. - 타입: [`RouterModelListEntry`](#routermodellistentry)의 배열 + 유형: [`RouterModelListEntry`](#routermodellistentry)의 배열 - 이 페이지 이후에 다른 페이지가 존재하는지 여부입니다. 이 값이 true인 동안 계속 순회하세요. `data`가 짧거나 비어 있다고 해서 카탈로그의 끝이라고 추론하지 마세요. + 이 페이지 뒤에 다른 페이지가 있는지 여부입니다. 이 값이 참인 동안 계속 순회하세요. 짧거나 빈 `data`로 카탈로그의 끝이라고 추측하지 마세요. - 라우터 목록을 가리키는 불투명 커서입니다. 이 커서는 서버에서 생성되며 오직 그대로 주고받기만 합니다. 오프셋도, 모델 ID도 아니고, 정렬되지도 않으며, 카탈로그가 다시 빌드되면 안정적이지도 않습니다. 따라서 커서를 파싱하거나, 값을 증가시키거나, 원래 순회했던 범위를 넘어 저장하는 것은 모두 계약 범위 밖입니다. 오프셋 대신 커서를 사용하는 이유는 카탈로그가 계속 변하는 목록이기 때문입니다. 오프셋 순회는 순회 도중 항목이 추가되거나 제거되면 조용히 항목을 건너뛰거나 반복하며, 호출자는 그런 일이 일어났는지 알 수 없습니다. + Router 목록에 대한 불투명 커서입니다. 서버에서 생성되며 오직 왕복 전달만 됩니다. 즉, 오프셋도 아니고, 모델 ID도 아니고, 정렬되지 않으며, 카탈로그 재구축 간에 안정적이지 않으므로, 이를 파싱하거나 값을 증가시키거나 그것이 나온 순회를 넘어 보관하는 것은 모두 계약 밖입니다. 오프셋이 아니라 커서인 이유는 카탈로그가 움직이는 목록이기 때문입니다. 오프셋 순회는 순회 도중 항목이 추가되거나 제거되면 조용히 항목을 건너뛰거나 반복하며, 호출자는 그런 일이 발생했는지 알 수 없습니다. - 타입: [`RouterPageCursor`](#routerpagecursor) -- `next_cursor`로 반환되는 불투명 커서, 1–512자 + 유형: [`RouterPageCursor`](#routerpagecursor), `next_cursor`로 반환되는 불투명 커서, 1–512자 - 실제로 제공된 페이지 크기입니다. 요청한 `limit`이 최댓값을 초과하면 거부되는 대신 최댓값으로 제한되므로, 요청한 값보다 작을 수 있습니다. 보낸 값이 아니라 이 숫자를 기준으로 페이지네이션하세요. 그렇지 않으면 실제로 받지 못한 행이 있다고 착각하게 됩니다. + 실제로 제공된 페이지 크기입니다. 최대값을 초과하여 요청한 `limit`은 거부되지 않고 최대값으로 제한되므로, 이 값은 요청한 값보다 작을 수 있습니다. 보낸 값이 아니라 이 값으로 페이지네이션하세요. 그렇지 않으면 받지도 못한 행을 받았다고 가정하게 됩니다. 1–100 ### RouterModelOutput -모델 결과 객체입니다. 정확한 형태는 선택된 모델의 출력 스키마를 참고하세요. +모델 결과 객체입니다. 정확한 형태를 확인하려면 선택된 모델의 출력 스키마를 참조하세요. -타입: `object` +유형: `object` ### RouterModelSegment -`{provider}/{model}` 모델 ID에서 모델에 해당하는 부분입니다. +`{provider}/{model}` 모델 ID에서 모델 부분입니다. -타입: `string`. 영숫자 슬러그, 예: `claude-opus-4-6`, 최대 128자 +Type: `string` -- 영숫자 슬러그입니다(예: `claude-opus-4-6`). 최대 128자입니다. ### RouterPageCursor -불투명한 카탈로그 커서입니다. `cursor`로 변경 없이 그대로 다시 전달하세요. +불투명한 카탈로그 커서입니다. `cursor`로 그대로 다시 전달하세요. -타입: `string`. `next_cursor`로 반환되는 불투명 커서이며, 1–512자입니다. +유형: `string` -- `next_cursor`로 반환되는 불투명 커서, 1–512자 ### RouterProviderSegment -`{provider}/{model}` 모델 ID의 공급자 부분입니다. +`{provider}/{model}` 모델 ID에서 공급자 부분입니다. -타입: `string`. 영숫자 슬러그(예: `anthropic`), 최대 64자 +유형: `string` -- 영숫자 슬러그, 예: `anthropic`, 최대 64자 ### RouterQueueCancelResponse -이 라우트가 처리한 요청을 설명하는 두 상태, 즉 `202`와 `400`에 대한 취소 요청의 응답입니다. 성공 envelope에 오류 envelope을 더하는 대신 두 상태 모두에 하나의 body 형태를 사용하는데, 두 경우 모두 동일한 진술, 즉 취소가 무엇을 찾았는지를 나타내며, 상태 코드마다 다른 타입을 파싱해야 하는 클라이언트가 분리에서 얻는 이점은 없기 때문입니다. +이 라우트가 처리한 요청을 설명하는 두 상태 코드, 즉 `202`와 `400`에 대한 취소 요청에 대한 응답입니다. 성공 envelope과 오류 envelope을 따로 두지 않고 두 상태 모두에 하나의 body 형태를 사용합니다. 두 경우 모두 동일한 진술, 즉 취소가 발견한 내용을 나타내며, 상태 코드마다 다른 타입을 파싱해야 하는 클라이언트는 이러한 분리에서 얻는 것이 없기 때문입니다. **필드** - 대기 중인 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자 - 이 라우트가 실제로 처리한 요청을 설명하는 두 결과에 대해 취소 요청이 찾은 내용입니다. 두 결과 모두 HTTP 상태로 반영되므로 클라이언트는 어느 쪽으로든 분기할 수 있습니다. + 이 라우트가 실제로 처리한 요청을 설명하는 두 결과에 대해, 취소 요청이 발견한 내용입니다. 두 결과 모두 HTTP 상태 코드에 반영되므로, 클라이언트는 둘 중 어느 것으로도 분기할 수 있습니다. 타입: [`RouterQueueCancelStatus`](#routerqueuecancelstatus) ### RouterQueueCancelStatus -취소 요청이 찾아낸 결과로, 이 라우트가 실제로 처리한 요청을 설명하는 두 가지 결과에 해당합니다. 두 결과 모두 HTTP 상태 코드에 반영되므로 클라이언트는 어느 쪽으로든 분기할 수 있습니다. +취소 요청이 확인한 결과로, 이 라우트가 실제로 처리한 요청을 설명하는 두 가지 결과에 해당합니다. 두 결과 모두 HTTP 상태로 그대로 반영되므로, 클라이언트는 둘 중 어느 쪽을 기준으로 분기해도 됩니다. 타입: `string` ### RouterQueuePosition -응답이 구성된 시점에 실행 대기열에서 이 요청보다 앞에 있는 요청이 몇 개인지 나타냅니다. 0이면 이 요청이 맨 앞에 있습니다. +응답이 생성된 그 순간, 실행 대기열에서 이 요청보다 앞에 있는 요청 수입니다. 0이면 이 요청이 맨 앞에 있습니다. -타입: `integer` -- 최소 0 +유형: `integer` -- 최소 0 ### 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자 +유형: `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`입니다. 두 스키마가 의도적으로 서로 반대 방향으로 닫혀 있기 때문입니다. `RouterErrorType`은 실패를 분류하며 그 집합은 확장될 것으로 예상되므로, 인식되지 않은 버킷을 곧바로 거부하는 생성된 클라이언트는 문제가 이미 발생한 바로 그 시점에 가장 심하게 실패하게 됩니다. 이 스키마는 라이프사이클이며, 나중에 네 번째 상태가 추가된 라이프사이클은 enum으로 선언되었는지 여부와 관계없이 그에 맞춰 작성된 모든 폴링 루프에 호환성을 깨는 변경입니다. 그래서 enum으로 선언하며, 제약 조건은 클라이언트가 볼 수 있는 곳에 명시합니다. +대기 중인 Router 요청의 상태입니다. 정확히 세 개의 값을 가지며, `RouterErrorType`과 달리 이것은 닫힌 `enum`입니다. 두 스키마가 의도적으로 서로 반대 방향으로 닫혀 있기 때문입니다. `RouterErrorType`은 실패를 분류하며 그 집합은 늘어날 것으로 예상되므로, 인식할 수 없는 버킷을 단호히 거부하는 생성된 클라이언트는 이미 무언가 잘못된 바로 그 시점에 가장 심하게 실패하게 됩니다. 이쪽은 라이프사이클이며, 나중에 네 번째 상태가 추가되는 라이프사이클은 enum으로 선언되었든 아니든 이를 대상으로 작성된 모든 폴링 루프에 호환성을 깨뜨리는 변경입니다. 그래서 enum으로 선언되며, 제약은 클라이언트가 볼 수 있는 곳에 명시됩니다. 타입: `string` ### 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자 + 유형: [`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) + 유형: [`RouterQueueStatus`](#routerqueuestatus) - 응답이 구성된 즉시 이 요청보다 실행 대기열에서 앞에 있는 요청의 수입니다. 0이면 이 요청이 맨 앞에 있습니다. + 응답이 구성된 즉시, 실행 대기열에서 이 요청보다 앞에 있는 요청이 몇 개인지입니다. 0은 이 요청이 맨 앞에 있음을 의미합니다. - 타입: [`RouterQueuePosition`](#routerqueueposition) -- 0 이상 + 유형: [`RouterQueuePosition`](#routerqueueposition) -- 최소 0 - 성공하지 못한 `COMPLETED` 요청에만 존재하며, 결과 조회가 해당 실패를 반환할 때 `X-Comfy-Error-Type`에 담는 것과 동일한 포괄적인 분류를 담습니다. 이것이 성공한 터미널 요청과 실패했거나 취소된 요청을 구분하는 기준입니다. 어느 쪽도 별도의 터미널 상태가 없습니다. 또한 성공 시에는 null이 아니라 아예 존재하지 않으므로, 존재 여부로 분기하세요. + 성공하지 못한 `COMPLETED` 요청에만 존재하며, 결과 조회가 해당 실패를 반환할 때 `X-Comfy-Error-Type`에 붙이는 것과 동일한 포괄적 분류를 담습니다. 성공한 터미널 요청과 실패했거나 취소된 요청을 구분하는 역할을 합니다(둘 모두를 위한 별도의 터미널 상태는 없습니다). 그리고 성공 시에는 null이 아니라 아예 존재하지 않으므로, 존재 여부로 분기하세요. - 타입: [`RouterErrorType`](#routererrortype) + 유형: [`RouterErrorType`](#routererrortype) ### RouterQueueStatusResponse 대기 중인 요청 하나의 현재 상태이며, 제출 시 반환된 것과 동일한 세 개의 URL로 구성됩니다. -다음을 구성 요소로 포함합니다: [`RouterQueueUrls`](#routerqueueurls), [`RouterQueueStatusFields`](#routerqueuestatusfields). +[`RouterQueueUrls`](#routerqueueurls), [`RouterQueueStatusFields`](#routerqueuestatusfields)를 구성합니다. 타입: `object` ### RouterQueueSubmitFields -`RouterQueueSubmitResponse`에서 URL 블록이 아닌 나머지 절반: 새 요청의 식별자와 요청이 접수된 즉시의 상태입니다. +`RouterQueueSubmitResponse`에서 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자 + Type: [`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) + Type: [`RouterQueueStatus`](#routerqueuestatus) - 응답이 구성된 즉시 이 요청보다 실행 대기열에서 앞에 있는 요청이 몇 개인지입니다. 0이면 이 요청이 맨 앞에 있습니다. + 응답이 구성된 순간에 실행 대기열에서 이 요청보다 앞에 있는 요청의 수입니다. 0이면 이 요청이 맨 앞에 있습니다. - 타입: [`RouterQueuePosition`](#routerqueueposition) -- 0 이상 + Type: [`RouterQueuePosition`](#routerqueueposition) -- 최소 0 + + + + 이 요청에 대한 사전 비용 추정치로, 호출자에게 비용 추정이 활성화된 경우 새로 접수될 때 포함됩니다. 이 요청이 고정된 공급자 구간을 제시합니다(실행 대기열에는 폴백 루프가 없으므로 `fallback_provider`가 실제로 실행되는 구간을 바꾸는 일은 없습니다). 수치를 제시할 수 없을 때도 `source: unknown`과 함께 여전히 포함되며, 추정치 때문에 제출이 실패하는 일은 없습니다. 멱등 재실행(`Idempotent-Replayed: true`)에서는 원본 견적이 저장되지 않으므로 생략됩니다. 이는 가격 고정이 아닙니다: 실행은 평가될 때 적용되는 요금으로 청구됩니다. + + Type: [`RouterCostEstimate`](#routercostestimate) ### RouterQueueSubmitResponse -실행이 실행 대기열에 등록될 때 반환되는 핸들로, 요청의 식별자와 상태를 나머지 수명 주기를 처리하는 세 개의 URL과 결합한 것입니다. +실행이 실행 대기열에 승인될 때 반환되는 핸들로, 요청의 식별자와 상태에 나머지 수명 주기를 처리하는 세 개의 URL을 결합한 것입니다. -다음을 구성합니다: [`RouterQueueUrls`](#routerqueueurls), [`RouterQueueSubmitFields`](#routerqueuesubmitfields). +[`RouterQueueUrls`](#routerqueueurls), [`RouterQueueSubmitFields`](#routerqueuesubmitfields)를 구성합니다. -타입: `object` +유형: `object` ### RouterQueueUrls -대기 중인 요청 하나의 남은 수명 주기를 다루는 세 개의 URL입니다. 활성 핸들을 포함하는 모든 응답에서 반환되므로, 클라이언트가 실행 대기열 URL을 직접 구성하는 일은 없습니다. +대기 중인 한 요청의 남은 수명을 다루는 세 가지 URL입니다. 활성 핸들을 포함하는 모든 응답에서 반환되므로, 클라이언트가 실행 대기열 URL을 직접 조합할 일이 없습니다. **필드** - 이 요청의 상태를 조회하는 절대 URL입니다. + 이 요청의 상태 조회를 위한 절대 URL입니다. URI @@ -1155,18 +1346,18 @@ Router가 요청을 접수한 뒤 완료하지 못한 경우 발생합니다. ### RouterValidationErrorContext -실패한 검증 규칙에 대해 공급자가 제공하는 세부 정보입니다. +검증 규칙이 실패한 이유에 대해 공급자가 제공한 세부 정보입니다. -타입: `object` +Type: `object` ### RouterValidationErrorDetail -단일 필드 수준 검증 실패입니다. +필드 수준 검증 실패 하나입니다. **필드** - 문제가 된 필드의 경로이며, 가장 바깥쪽 세그먼트가 먼저 옵니다. 예를 들어 `["body", "image_url"]`, 또는 정수가 배열을 인덱싱하는 `["body", "images", 0]`과 같습니다. + 문제가 된 필드의 경로이며, 가장 바깥쪽 세그먼트가 먼저 옵니다. 예를 들어 `["body", "image_url"]`, 또는 정수가 배열의 인덱스를 가리키는 `["body", "images", 0]`과 같습니다. @@ -1174,33 +1365,33 @@ Router가 요청을 접수한 뒤 완료하지 못한 경우 발생합니다. - 이 실패에 대한 구체적이고 기계가 읽을 수 있는 이유로, 공급자로부터 변경 없이 그대로 전달됩니다. 이는 타입이 지정된 SDK 예외 계층이 분기하는 값이며, 응답 헤더의 `error_type`은 그 거친 분류에 불과합니다. + 이 실패에 대한 구체적이고 기계가 읽을 수 있는 이유이며, 공급자로부터 변경 없이 그대로 전달됩니다. 타입이 지정된 SDK 예외 계층이 분기하는 값이 바로 이것이며, 응답 헤더의 `error_type`은 그것의 포괄적인 분류일 뿐입니다. - 하나의 `RouterValidationErrorDetail`에서 위반된 경계 값으로, 공급자로부터 그대로 전달됩니다. 예를 들어 `greater_than`과 함께 오는 `{"limit_value": 8}`, `image_too_small`과 함께 오는 `{"min_width": 512}`, 또는 `file_too_large`와 함께 오는 `{"max_size_bytes": 10485760}`입니다. 키 집합은 공급자와 오류 타입에 따라 달라지므로, 이는 의도적으로 열린 객체입니다. 고정된 필드 목록으로 좁히거나 `msg` 문자열에 합쳐 버리는 것이야말로, 포팅된 통합이 컴파일은 되지만 경계를 읽던 분기를 조용히 잃게 되는 바로 그 방식입니다. 오류 타입에 경계가 없으면 이 필드는 존재하지 않습니다. + 하나의 `RouterValidationErrorDetail`에 대해 위반된 경계값으로, 공급자로부터 그대로 전달됩니다. 예를 들어 `greater_than`과 함께 오는 `{"limit_value": 8}`, `image_too_small`과 함께 오는 `{"min_width": 512}`, 또는 `file_too_large`와 함께 오는 `{"max_size_bytes": 10485760}`과 같습니다. 키 집합은 공급자와 오류 유형에 따라 다르므로 이는 의도적으로 열린 객체입니다. 이것을 고정된 필드 목록으로 좁히거나 `msg` 문자열에 접어 넣는 것이야말로, 포팅된 통합이 컴파일은 되지만 경계값을 읽던 분기를 조용히 잃게 되는 바로 그 방식입니다. 오류 유형에 경계값이 없으면 이 필드는 생략됩니다. - 타입: [`RouterValidationErrorContext`](#routervalidationerrorcontext) + Type: [`RouterValidationErrorContext`](#routervalidationerrorcontext) - 문제가 된 입력 값으로, 호출자가 `loc`에서 다시 도출하지 않고도 무엇이 거부되었는지 확인할 수 있도록 그대로 되돌려 전달됩니다. 문자열, 숫자, 논리값, 배열, 객체 또는 null 등 모든 JSON 타입이 될 수 있으므로, 이 스키마는 객체로 좁히지 않고 의도적으로 타입 없이 둡니다. 공급자가 입력을 되돌려 전달하지 않으면 존재하지 않습니다. + 문제가 된 입력 값으로, 호출자가 `loc`에서 다시 도출하지 않고도 무엇이 거부되었는지 볼 수 있도록 그대로 되돌려 전달됩니다. 문자열, 숫자, 논리값, 배열, 객체 또는 null 등 모든 JSON 타입이므로, 이 스키마는 객체로 좁히지 않고 의도적으로 타입 없이 둡니다. 공급자가 입력을 되돌려 전달하지 않으면 이 필드는 생략됩니다. - 타입: [`RouterValidationErrorInput`](#routervalidationerrorinput) + Type: [`RouterValidationErrorInput`](#routervalidationerrorinput) ### RouterValidationErrorInput -공급자가 이를 포함하는 경우, 거부된 입력 값입니다. +거부된 입력 값이며, 공급자가 이를 포함하는 경우에 해당합니다. ### RouterValidationErrorResponse -`422` 검증 오류 본문입니다. 해당 카테고리는 `X-Comfy-Error-Type`을 확인하세요. +`422` 검증 오류 본문입니다. 카테고리는 `X-Comfy-Error-Type`을 확인하세요. **필드** - 요청에서 발견된 모든 검증 실패 항목으로, 문제가 있는 필드마다 하나의 항목이 대응됩니다. + 요청에서 발견된 모든 검증 실패 항목으로, 문제가 있는 필드마다 하나의 항목이 대응합니다. - 타입: [`RouterValidationErrorDetail`](#routervalidationerrordetail) 배열 + 유형: [`RouterValidationErrorDetail`](#routervalidationerrordetail)의 배열 diff --git a/zh/development/comfy-api/overview.mdx b/zh/development/comfy-api/overview.mdx index 37533fb027..ffc3be6649 100644 --- a/zh/development/comfy-api/overview.mdx +++ b/zh/development/comfy-api/overview.mdx @@ -2,7 +2,7 @@ title: "Comfy API 版本:v2 与已弃用的 v1 Cloud API" sidebarTitle: "概述" description: "对比各版本 Comfy API:推荐用于无界面运行 ComfyUI 工作流的 v2 HTTP API,以及已弃用的 v1 Cloud API。" -translationSourceHash: dda53070 +translationSourceHash: ebaa5065 translationFrom: development/comfy-api/overview.mdx --- @@ -17,4 +17,4 @@ translationFrom: development/comfy-api/overview.mdx -另请参阅:[Comfy API 部署](/zh/development/serverless/overview) · [Comfy SDK](/zh/development/api-development/sdks) · [获取 API 密钥](/zh/development/api-development/getting-an-api-key) +另请参阅:[Comfy API 部署](/zh/development/serverless/overview) · [Comfy SDK](/zh/development/api-development/sdks) · [获取 API 密钥](/zh/development/api-development/getting-an-api-key) \ No newline at end of file diff --git a/zh/development/comfy-router/limitations.mdx b/zh/development/comfy-router/limitations.mdx index fee02db3db..76cef4a86a 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: b7f1a006 +translationSourceHash: 8367ba3c translationFrom: development/comfy-router/limitations.mdx translationBlockHashes: "_intro": 6b871cf3 @@ -13,7 +13,7 @@ translationBlockHashes: "Request bodies are capped": 675b77c8 "Requests are rate limited per caller": 421194d9 "No progress while a call runs": 75d42d8d - "Comfy charges and usage": e370030e + "Comfy charges and usage": 1ba61544 "Router does not cover every partner operation": f0902b33 "Model outputs and stored assets": 06c737c1 "Next": be85b789 @@ -22,6 +22,7 @@ translationBlockHashes: + Router 通过一次同步 HTTP 调用运行合作伙伴模型,或通过一个已排队的请求运行:你提交请求,稍后再收集结果。当你的应用能够等待一个已完成的结果,或稍后收集结果,并且能够处理模型自身的输入和输出字段时,就使用它。 ## Router 支持的功能 @@ -99,6 +100,8 @@ 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#pre-flight-cost-estimates)。 + ## Router 并不覆盖每个合作伙伴操作 Router 运行模型。文件上传、账户读取、资产管理、流式传输以及提供商任务控制可能需要位于 `/proxy/…` 下的合作伙伴代理路由,这些路由处在 Router 之外,其契约也不对其加以描述。Router 自身的接口面是 [Comfy Router 规范](/router-openapi.yaml);支持情况因提供商而异。 diff --git a/zh/development/comfy-router/models.mdx b/zh/development/comfy-router/models.mdx index 2467235c22..4749838a32 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: 8488d3b9 +translationSourceHash: 5e001542 translationFrom: development/comfy-router/models.mdx translationBlockHashes: "_intro": 2584e428 - "Find by output": 3e10a83c + "Find by output": dcd31275 "Anthropic": de8acc20 "Beeble": b52ea340 "Black Forest Labs": 2934e3eb @@ -30,6 +30,7 @@ translationBlockHashes: "Moonvalley": e237894a "OpenAI": c5c4af80 "Openrouter": a4f6806b + "Pika": f2b1d797 "Pruna": 903d76ee "Qwen": b3ef78a1 "Recraft": 02b7d9cd @@ -46,6 +47,7 @@ translationBlockHashes: + {/* 已生成文件。由 `pnpm code-pages:gen` 从 Router 目录生成。 */} 以下每个模型都由同一条路由提供服务:`POST /v2/models/{provider}/{model}`,并使用该模型自身的 JSON 请求体。每个页面都会展示在 Python、TypeScript 和 cURL 中可用的请求示例。关于模型发现、schema、错误、重试和计费,请参阅[使用 Comfy Router API](/zh/development/comfy-router/api)。 @@ -55,7 +57,7 @@ translationBlockHashes: ## 按输出查找 - + - [SwitchX](/zh/development/comfy-router/models/beeble/switchx/code):`beeble/switchx` - [FLUX 3 Video](/zh/development/comfy-router/models/black-forest-labs/flux-3-video/code):`bfl/flux-3-video` @@ -94,6 +96,8 @@ translationBlockHashes: - [Text To Video](/zh/development/comfy-router/models/moonvalley/text-to-video/code):`moonvalley/text-to-video` - [Video To Video Resize](/zh/development/comfy-router/models/moonvalley/video-to-video-resize/code):`moonvalley/video-to-video-resize` - [Video To Video](/zh/development/comfy-router/models/moonvalley/video-to-video/code):`moonvalley/video-to-video` +- [Pika 2.5 Image To Video](/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code):`pika/pika-2.5-image-to-video` +- [Pika 2.5 Text To Video](/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code):`pika/pika-2.5-text-to-video` - [P Video 2](/zh/development/comfy-router/models/pruna/p-video-2/code):`pruna/p-video-2` - [Aleph 2](/zh/development/comfy-router/models/runway/aleph2/code):`runway/aleph2` - [Gen 4 Turbo](/zh/development/comfy-router/models/runway/gen4-turbo/code):`runway/gen4_turbo` @@ -105,8 +109,7 @@ translationBlockHashes: - [HappyHorse 1.0 R2V](/zh/development/comfy-router/models/wan/happyhorse-1-0-r2v/code):`wan/happyhorse-1.0-r2v` - [HappyHorse 1.0 T2V](/zh/development/comfy-router/models/wan/happyhorse-1-0-t2v/code):`wan/happyhorse-1.0-t2v` - [HappyHorse 1.0 Video Edit](/zh/development/comfy-router/models/wan/happyhorse-1-0-video-edit/code):`wan/happyhorse-1.0-video-edit` -- [HappyHorse 1.1 I2V](/zh/development/comfy-router/models/wan/happyhorse-1-1-i2v/code):`wan/happyhorse-1.1-i2v` -- [HappyHorse 1.1 R2V](/zh/development/comfy-router/models/wan/happyhorse-1-1-r2v/code):`wan/happyhorse-1.1-r2v` +- [HappyHorse 1.1 I2V](/zh/development/comfy-router/models/wan/happyhorse-1-1-i2v/code):`wan/happyhorse-1.1-i2v`- [HappyHorse 1.1 R2V](/zh/development/comfy-router/models/wan/happyhorse-1-1-r2v/code):`wan/happyhorse-1.1-r2v` - [HappyHorse 1.1 T2V](/zh/development/comfy-router/models/wan/happyhorse-1-1-t2v/code):`wan/happyhorse-1.1-t2v` - [Wan 2.5 I2V Preview](/zh/development/comfy-router/models/wan/wan2-5-i2v-preview/code):`wan/wan2.5-i2v-preview` - [Wan 2.5 T2V Preview](/zh/development/comfy-router/models/wan/wan2-5-t2v-preview/code):`wan/wan2.5-t2v-preview` @@ -160,8 +163,7 @@ translationBlockHashes: - [Crystal Upscaler](/zh/development/comfy-router/models/fal/crystal-upscaler/code):`fal/crystal-upscaler` - [Patina](/zh/development/comfy-router/models/fal/patina/code):`fal/patina` - [AI Image Upscaler Precision V2](/zh/development/comfy-router/models/freepik/ai-image-upscaler-precision-v2/code):`freepik/ai-image-upscaler-precision-v2` -- [AI Skin Enhancer Creative](/zh/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code):`freepik/ai-skin-enhancer-creative` -- [AI Skin Enhancer Faithful](/zh/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code):`freepik/ai-skin-enhancer-faithful` +- [AI Skin Enhancer Creative](/zh/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code):`freepik/ai-skin-enhancer-creative`- [AI Skin Enhancer Faithful](/zh/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code):`freepik/ai-skin-enhancer-faithful` - [AI Skin Enhancer Flexible](/zh/development/comfy-router/models/freepik/ai-skin-enhancer-flexible/code):`freepik/ai-skin-enhancer-flexible` - [Gemini Omni 1.1 Flash](/zh/development/comfy-router/models/gemini-interactions/gemini-omni-1-1-flash/code):`gemini-interactions/gemini-omni-1.1-flash` - [Gemini Omni Flash Preview](/zh/development/comfy-router/models/gemini-interactions/gemini-omni-flash-preview/code):`gemini-interactions/gemini-omni-flash-preview` @@ -212,8 +214,7 @@ translationBlockHashes: - [Wan 2.5 T2I Preview](/zh/development/comfy-router/models/wan/wan2-5-t2i-preview/code):`wan/wan2.5-t2i-preview` - [Seedvr 2](/zh/development/comfy-router/models/wavespeed/seedvr2/code):`wavespeed/seedvr2` - [Ultimate Image Upscaler](/zh/development/comfy-router/models/wavespeed/ultimate-image-upscaler/code):`wavespeed/ultimate-image-upscaler` -- [Grok Imagine Image 2.0](/zh/development/comfy-router/models/xai/grok-imagine-image-2-0/code):`xai/grok-imagine-image-2.0` -- [Grok Imagine Image Pro](/zh/development/comfy-router/models/xai/grok-imagine-image-pro/code):`xai/grok-imagine-image-pro` +- [Grok Imagine Image 2.0](/zh/development/comfy-router/models/xai/grok-imagine-image-2-0/code):`xai/grok-imagine-image-2.0`- [Grok Imagine Image Pro](/zh/development/comfy-router/models/xai/grok-imagine-image-pro/code):`xai/grok-imagine-image-pro` - [Grok Imagine Image Quality](/zh/development/comfy-router/models/xai/grok-imagine-image-quality/code):`xai/grok-imagine-image-quality` - [Grok Imagine Image](/zh/development/comfy-router/models/xai/grok-imagine-image/code):`xai/grok-imagine-image` @@ -276,8 +277,7 @@ translationBlockHashes: - [Claude Fable 5.1](/zh/development/comfy-router/models/anthropic/claude-fable-5-1/code):`anthropic/claude-fable-5-1` - [Claude Fable 5](/zh/development/comfy-router/models/anthropic/claude-fable-5/code):`anthropic/claude-fable-5` -- [Claude Haiku 4.5 20251001](/zh/development/comfy-router/models/anthropic/claude-haiku-4-5-20251001/code):`anthropic/claude-haiku-4-5-20251001` -- [Claude Opus 4.6](/zh/development/comfy-router/models/anthropic/claude-opus-4-6/code):`anthropic/claude-opus-4-6` +- [Claude Haiku 4.5 20251001](/zh/development/comfy-router/models/anthropic/claude-haiku-4-5-20251001/code):`anthropic/claude-haiku-4-5-20251001`- [Claude Opus 4.6](/zh/development/comfy-router/models/anthropic/claude-opus-4-6/code):`anthropic/claude-opus-4-6` - [Claude Opus 4.7](/zh/development/comfy-router/models/anthropic/claude-opus-4-7/code):`anthropic/claude-opus-4-7` - [Claude Opus 4.8](/zh/development/comfy-router/models/anthropic/claude-opus-4-8/code):`anthropic/claude-opus-4-8` - [Claude Opus 5.5](/zh/development/comfy-router/models/anthropic/claude-opus-5-5/code):`anthropic/claude-opus-5-5` @@ -591,6 +591,13 @@ translationBlockHashes: | --- | --- | --- | --- | | [Chat Completions](/zh/development/comfy-router/models/openrouter/chat-completions/code) | `openrouter/chat-completions` | 文本, 图像 | 文本 | +## Pika + +| 模型 | ID | 输入 | 输出 | +| --- | --- | --- | --- | +| [Pika 2.5 图生视频](/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code) | `pika/pika-2.5-image-to-video` | 文本、图像 | 视频 | +| [Pika 2.5 文生视频](/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code) | `pika/pika-2.5-text-to-video` | 文本 | 视频 | + ## Pruna | 模型 | ID | 输入 | 输出 | diff --git a/zh/development/comfy-router/providers.mdx b/zh/development/comfy-router/providers.mdx index 367f05ebc7..37fb599634 100644 --- a/zh/development/comfy-router/providers.mdx +++ b/zh/development/comfy-router/providers.mdx @@ -2,7 +2,7 @@ title: "Comfy Router 服务提供商" sidebarTitle: "服务提供商" description: "查看每个 Comfy Router 模型可由哪些提供商提供服务,以及如何选择备用提供商。" -translationSourceHash: bce89598 +translationSourceHash: 91ebc6bc translationFrom: development/comfy-router/providers.mdx --- @@ -14,17 +14,17 @@ translationFrom: development/comfy-router/providers.mdx ## 提供商覆盖范围 -| 模型 / 提供商 | **Comfy(默认)** | **fal** | **Higgsfield** | **Runware** | **WaveSpeed** | -| --- | --- | --- | --- | --- | --- | -| [Dreamina Seedance 2.0 260128](/zh/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code) | ✓ | ✓ | ✓ | ✓ | ✓ | -| [Dreamina Seedance 2.5 260628](/zh/development/comfy-router/models/byteplus/dreamina-seedance-2-5-260628/code) | ✓ | ✓ | ✓ | ✓ | ✓ | -| [GPT Image 2](/zh/development/comfy-router/models/openai/gpt-image-2/code) | ✓ | ✓ | - | ✓ | ✓ | -| [GPT Image 2.5 Flare](/zh/development/comfy-router/models/openai/gpt-image-2-5-flare/code) | ✓ | ✓ | - | ✓ | ✓ | -| [GPT Image 2.5 Sunburst](/zh/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code) | ✓ | ✓ | - | ✓ | ✓ | -| [Kling 3.0 Turbo](/zh/development/comfy-router/models/kling/kling-3-0-turbo/code) | ✓ | - | ✓ | - | - | -| [Kling V3](/zh/development/comfy-router/models/kling/kling-v3/code) | ✓ | - | ✓ | - | - | -| [Nano Banana 2](/zh/development/comfy-router/models/google/nano-banana-2/code) | ✓ | ✓ | - | ✓ | ✓ | -| [Nano Banana Pro](/zh/development/comfy-router/models/google/nano-banana-pro/code) | ✓ | ✓ | - | ✓ | ✓ | -| [Wan 3.0 Video](/zh/development/comfy-router/models/wan/wan3-0-video/code) | ✓ | - | ✓ | - | - | +| 模型 / 提供商 | **Comfy(默认)** | **fal** | **Higgsfield** | **Pika** | **Runware** | **WaveSpeed** | +| --- | --- | --- | --- | --- | --- | --- | +| [Dreamina Seedance 2.0 260128](/zh/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [Dreamina Seedance 2.5 260628](/zh/development/comfy-router/models/byteplus/dreamina-seedance-2-5-260628/code) | ✓ | ✓ | ✓ | - | ✓ | ✓ | +| [GPT Image 2](/zh/development/comfy-router/models/openai/gpt-image-2/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [GPT Image 2.5 Flare](/zh/development/comfy-router/models/openai/gpt-image-2-5-flare/code) | ✓ | ✓ | - | - | ✓ | ✓ | +| [GPT Image 2.5 Sunburst](/zh/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code) | ✓ | ✓ | - | - | ✓ | ✓ | +| [Kling 3.0 Turbo](/zh/development/comfy-router/models/kling/kling-3-0-turbo/code) | ✓ | - | ✓ | - | - | - | +| [Kling V3](/zh/development/comfy-router/models/kling/kling-v3/code) | ✓ | - | ✓ | - | - | - | +| [Nano Banana 2](/zh/development/comfy-router/models/google/nano-banana-2/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [Nano Banana Pro](/zh/development/comfy-router/models/google/nano-banana-pro/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [Wan 3.0 Video](/zh/development/comfy-router/models/wan/wan3-0-video/code) | ✓ | - | ✓ | - | - | - | `strict_mode=false`(默认值)会为所选提供商转换原生请求和响应。无法转换的字段会列在 `X-Comfy-Router-Dropped-Params` 响应头中。 \ No newline at end of file diff --git a/zh/development/comfy-router/quickstart.mdx b/zh/development/comfy-router/quickstart.mdx index be641415e9..2f8af54943 100644 --- a/zh/development/comfy-router/quickstart.mdx +++ b/zh/development/comfy-router/quickstart.mdx @@ -2,42 +2,44 @@ title: "Comfy Router 快速入门" sidebarTitle: "快速入门" description: "在几分钟内使用最新前沿媒体模型生成图像和视频。" -translationSourceHash: 36d0191e +translationSourceHash: 8e5bb6d6 translationFrom: development/comfy-router/quickstart.mdx +translationBlockHashes: + "_intro": f2205e95 + "Next steps": ed466781 --- -
-Comfy Router 为您提供一个用于托管图像和视频模型的 API,地址为 `https://api.comfy.org`。在[您的 Comfy 工作区](https://platform.comfy.org/profile/api-keys?onboarding=router)中创建 API 密钥,然后使用官方 [Python 和 TypeScript SDK](/zh/development/api-development/sdks) 或通过纯 HTTP 调用任意模型。计费按使用量付费:每次请求都会从您的工作区余额中扣除积分,无需订阅。 +Comfy Router 为你提供一套用于托管图像和视频模型的 API,地址为 `https://api.comfy.org`。请在[你的 Comfy 工作区](https://platform.comfy.org/profile/api-keys?onboarding=router)中创建 API 密钥,然后使用官方 [Python 和 TypeScript SDK](/zh/development/api-development/sdks) 或直接通过 HTTP 调用任意模型。计费方式为按使用量付费:每次请求都会从你的工作区余额中扣除积分,无需订阅。 - **使用 Higgsfield?** 保存您自己的 Higgsfield 密钥,这些生成就会计入您的 Higgsfield 账户,而不是您的 Comfy 积分:相同的端点,相同的请求体。请参阅[使用自己的密钥调用 Higgsfield](/zh/development/comfy-router/higgsfield-byok)。 + **使用 Higgsfield?** 保存你自己的 Higgsfield 密钥后,这些生成将计入你的 Higgsfield 账户,而不是你的 Comfy 积分。端点相同,请求体也相同。请参阅[使用你自己的密钥的 Higgsfield](/zh/development/comfy-router/higgsfield-byok)。 - **使用 LiteLLM 追踪支出?** Router 会在 LiteLLM 读取的响应头中报告同步运行的美元费用,因此您无需维护价格表。请参阅[在 LiteLLM 中使用 Comfy Router](/zh/development/comfy-router/litellm)。 + **用 LiteLLM 追踪支出?** Router 会在 LiteLLM 读取的响应头中报告同步运行的美元成本,因此你无需维护价格表。请参阅[将 Comfy Router 与 LiteLLM 搭配使用](/zh/development/comfy-router/litellm)。 - 在[您的 Comfy 工作区](https://platform.comfy.org/profile/api-keys?onboarding=router)中创建一个密钥。在兼容 Bash 的终端中,设置: + 在[你的 Comfy 工作区](https://platform.comfy.org/profile/api-keys?onboarding=router)中创建密钥。在兼容 Bash 的终端中,设置: ```bash export COMFY_API_KEY="comfyui-..." ``` - 请将 API 密钥保存在您的服务器或本地环境中。这些示例面向终端或服务器,而不是浏览器 JavaScript。 + 请将 API 密钥保存在你的服务器上或本地环境中。这些示例面向终端或服务器,不适用于浏览器 JavaScript。 - Router 每次请求都会扣除积分。如果您的工作区没有积分余额,首次实际调用会返回 `402`,以及 `error_type: insufficient_credits`。该校验在请求体验证之前执行,因此未充值的工作区即使发送无效请求也会收到 `402`。在调试请求体之前,请先前往[工作区账单](https://platform.comfy.org)添加积分。 + Router 按请求扣除积分。如果你的工作区没有积分余额,首次实际调用会返回 `402`,并带有 `error_type: insufficient_credits`。该检查在请求体验证之前执行,因此未充值的工作区即使请求无效也可能返回 `402`。在调试请求体之前,请先到[工作区计费](https://platform.comfy.org)添加积分。 - 选择您的语言并运行示例。生成可能需要几分钟。 + 选择你的语言并运行示例。生成可能需要几分钟。 ```python Python - # Python 3.10+ + # 需要 Python 3.10+ # 安装:python -m pip install "comfy-sdk>=0.3.0" # 保存为 quickstart.py,然后运行:python quickstart.py @@ -45,7 +47,7 @@ Comfy Router 为您提供一个用于托管图像和视频模型的 API,地址 from comfy_sdk import AsyncComfy - # AsyncComfy 会从环境中读取 COMFY_API_KEY。 + # AsyncComfy 会从环境变量中读取 COMFY_API_KEY。 async def main(): async with AsyncComfy() as client: handle = await client.models.submit( @@ -94,13 +96,13 @@ Comfy Router 为您提供一个用于托管图像和视频模型的 API,地址 ``` ```typescript TypeScript - // Node.js 22+ + // 需要 Node.js 22+ // 安装:npm install "@comfyorg/sdk@>=0.4.0" --save-dev tsx // 保存为 quickstart.mts,然后运行:npx tsx quickstart.mts import { comfy } from "@comfyorg/sdk"; - // Comfy 会从环境中读取 COMFY_API_KEY。 + // Comfy 会从环境变量中读取 COMFY_API_KEY。 const handle = await comfy.models.submit( "byteplus/dreamina-seedance-2-5-260628", { @@ -129,19 +131,64 @@ Comfy Router 为您提供一个用于托管图像和视频模型的 API,地址 - 每次 SDK 的 submit 调用都会创建一个幂等键,并在自动重试时复用它。 - cURL 示例使用 `uuidgen` 创建一个。如果它不可用,请使用其他 UUID 生成器。 - 关于状态、取消与结果收集的详情,请参阅[队列投递](/zh/development/comfy-router/queue)。 + 每次 SDK 提交调用都会创建一个幂等键,并在自动重试时复用它。cURL 示例使用 `uuidgen` 创建一个幂等键。如果该命令不可用,请改用其他 UUID 生成工具。关于状态查询、取消和结果获取的详情,请参阅[队列投递](/zh/development/comfy-router/queue)。 -## 后续步骤 +## Image-to-video and reference-to-video + +The same Seedance request takes image, video, and audio inputs. Add items to `content` and set each one's `role`. The roles you send decide the operation Router runs. Pricing follows the media kinds in `content`, not the roles: a request with any video input bills as video-to-video, otherwise one with any image bills as image-to-video, and a text-only request bills as text-to-video. Some models charge the same rate for text-to-video and image-to-video. + +| Operation | `content` items | +|---|---| +| Text-to-video | one `text` item | +| Image-to-video | a `text` item plus an `image_url` item with `role: first_frame` | +| First-and-last-frame | the above plus a second `image_url` item with `role: last_frame` | +| Reference-to-video | a `text` item plus `image_url` items with `role: reference_image`, and on Seedance 2.0 and 2.5, `video_url` items with `role: reference_video` and `audio_url` items with `role: reference_audio` | + +An image `url` can be a public URL or a `data:image/;base64,` string. Submit, poll, and collect exactly as in the quickstart above. Only the body changes. + +```bash Image-to-video +curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d '{ + "content": [ + {"type": "text", "text": "The fox turns and runs into the trees"}, + {"type": "image_url", "image_url": {"url": "https://example.com/fox.png"}, "role": "first_frame"} + ], + "duration": 5, + "resolution": "720p" + }' +``` + +```bash Reference-to-video +curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d '{ + "content": [ + {"type": "text", "text": "The character from the reference walks through a neon-lit market"}, + {"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"}, + {"type": "image_url", "image_url": {"url": "https://example.com/outfit.png"}, "role": "reference_image"} + ], + "duration": 5, + "ratio": "16:9", + "resolution": "720p" + }' +``` + +On Seedance 2.5, first-frame and first-and-last-frame requests take the output aspect ratio from the first frame. Leave `ratio` out or send `adaptive`, because a concrete ratio is refused with a `400`. The request schema is shared across the Seedance family and can list roles a model ignores, so check the `x-comfy-router-input-modalities` field in each model's [input schema](/development/comfy-router/models) for the input kinds that model accepts. For example, `reference_video` and `reference_audio` need a model that lists `video` or `audio` there. + +## 下一步 - 浏览可用模型并查找对应的请求示例。 + 探索可用的模型,并查找针对具体模型的请求示例。 - - 了解模型发现、schema、排队请求、错误和计费。 + + 了解模型发现、schema、排队请求、错误以及计费。 - \ No newline at end of file + diff --git a/zh/development/comfy-router/reference.mdx b/zh/development/comfy-router/reference.mdx index 188796bbc7..1654bedf35 100644 --- a/zh/development/comfy-router/reference.mdx +++ b/zh/development/comfy-router/reference.mdx @@ -2,16 +2,17 @@ title: "Comfy Router API 参考" description: "每个 Comfy Router 端点、参数、响应体和错误分类,均由 Comfy API 契约生成。" sidebarTitle: "API 参考" -translationSourceHash: 172fce1a +translationSourceHash: af0beef4 translationFrom: development/comfy-router/reference.mdx translationBlockHashes: "_intro": 3f6e5d23 - "Endpoints": 15c825a9 + "Endpoints": 8e72e743 "Error buckets": 36170340 "Response headers": 8b4696f6 + "Pre-flight cost estimates": 6b90f27c "Result assets": 65fc939b "Per-model input and output schemas": 61c6bde8 - "Schemas": ccaaf317 + "Schemas": 235edfce --- @@ -23,6 +24,7 @@ translationBlockHashes: + {/* 生成的文件:请勿手动编辑。 @@ -51,104 +53,104 @@ Comfy API 密钥也可以作为 Bearer token 发送。当同时提供两个凭 **参数** - 不透明分页游标。 + 不透明的分页游标。 - 类型:[`RouterPageCursor`](#routerpagecursor) -- 作为 `next_cursor` 返回的不透明游标,1–512 个字符 + Type: [`RouterPageCursor`](#routerpagecursor) -- 作为 `next_cursor` 返回的不透明游标,1–512 个字符 - 每页返回的模型数量。 + 单页返回的模型数量。 - 最多 100,默认值:20 + 最多 100,Default: 20 **响应** - OK - 模型目录的一页。 + OK - 模型目录中的一页。 - 正文:[`RouterModelListResponse`](#routermodellistresponse) -- 响应头:`X-Comfy-Request-Id` + Body: [`RouterModelListResponse`](#routermodellistresponse) -- 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` Router 暂时不可用。请使用退避策略重试。 - 正文:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`,`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` ### `GET /v2/models/{provider}/{model}` -**按规范模型 ID 读取某个合作伙伴模型的目录条目。** +**通过规范模型 ID 读取某个合作伙伴模型的目录条目。** -无需列出完整目录即可读取单个模型的详情。 +无需列出完整目录,即可读取单个模型的详情。 **参数** - 规范 `{provider}/{model}` 模型 ID 中的提供商部分。 + 规范模型 ID `{provider}/{model}` 中的提供商部分。 - 类型:[`RouterProviderSegment`](#routerprovidersegment),字母数字 slug,例如 `anthropic`,最多 64 个字符 + Type: [`RouterProviderSegment`](#routerprovidersegment) -- 字母数字标识符,例如 `anthropic`,最多 64 个字符 - 规范 `{provider}/{model}` 模型 ID 中的模型部分。 + 规范模型 ID `{provider}/{model}` 中的模型部分。 - 类型:[`RouterModelSegment`](#routermodelsegment),字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 + Type: [`RouterModelSegment`](#routermodelsegment) -- 字母数字标识符,例如 `claude-opus-4-6`,最多 128 个字符 **响应** - OK:该模型的目录条目。 + OK - 该模型的目录条目。 - 响应体:[`RouterModelDetail`](#routermodeldetail),响应头:`X-Comfy-Request-Id` + Body: [`RouterModelDetail`](#routermodeldetail) -- 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` 未找到该模型 ID。 - 响应体:[`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` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` ### `POST /v2/models/{provider}/{model}` -**使用规范模型 ID 同步运行合作伙伴模型。** +**按规范模型 ID 同步运行合作伙伴模型。** 运行模型,并在同一个响应中收到其已完成的结果。 @@ -157,13 +159,13 @@ Comfy API 密钥也可以作为 Bearer token 发送。当同时提供两个凭 规范 `{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 个字符 @@ -173,145 +175,225 @@ Comfy API 密钥也可以作为 Bearer token 发送。当同时提供两个凭 - 选择一个备用提供商来服务此模型,而不是使用它当前的默认提供商;`fal`、`wavespeed`、`runware` 和 `higgsfield` 是备用提供商,`GET /v2/models/{provider}/{model}` 会报告给定模型支持其中哪些。它的各种拒绝按固定顺序检查,较早的拒绝无论较晚的拒绝是否也会发生,都会给出应答:无法识别的值(根本不是已注册的提供商)会被拒绝并返回 `400`;接着,对于请求体选择了 multipart 操作(一次编辑)的请求,备用提供商会以 `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`,与无法识别的值得到相同的应答。在自带密钥请求上、在请求体选择了 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` 都是不生效而不是被拒绝。 - 仅在配合 `model_provider` 时才有意义。 + 仅在与 `model_provider` 一起使用时才有意义。 默认值:False - 控制当首次尝试因可归因于 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 视频模型,首帧图像选择图生视频,参考图像或视频片段选择参考生视频。每个带条件的操作都按其自身的费率计费,而不是基础的文生图或文生视频费率。 +合作伙伴模型的原生 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 文档。 - 响应体:[`RouterModelOutput`](#routermodeloutput) 或原始字节(`*/*`);响应头:`X-Comfy-Request-Id`、`X-Content-Type-Options`、`X-Comfy-Router-Fallback-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-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 请求级失败:请求从未到达模型,或失败的原因并非模型本身所反馈。 + 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` 并复用同一个 key;`invalid_input` 则需要使用新的 key。此路由上的两种 `invalid_input` 冲突与 key 完全无关,任何新的 key 都无法消除:当请求体选择了该提供商针对此模型的翻译器无法处理的多部分(multipart)操作(即编辑操作)时,指名备用提供商的 `model_provider` 会被拒绝,其 `detail` 以 "this request's `image` selects the edit operation" 开头;之后还会检查另一种情况,当请求已经为路径中的提供商解析出 bring-your-own-key(BYOK)凭据时,也会被拒绝,其 `detail` 以 `this request resolved a BYOK credential` 开头。请去掉 `model_provider`,或者发送请求时不带 BYOK 凭据,并且(对于 multipart 的情况)不带编辑操作。 + 检查 `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" 开头;之后还会检查另一种情况,即请求已为该路径中的提供商解析出 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` 时) 请求体过大。 - 响应体:[`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`、`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` + 响应体:[`RouterErrorResponse`](#routererrorresponse) 请求头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`X-Committed-Spend-Limit`、`X-Committed-Spend-Current`、`X-Committed-Spend-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` + + +### `POST /v2/models/{provider}/{model}/estimate` + +**在运行模型调用之前先为其定价,而无需实际运行。** + +返回 Comfy 使用此模型运行该请求体将会收取的费用,以美元计,依据与实际扣费相同的费率卡定价。请求体会先按模型的输入 schema 进行校验,与默认运行(不带 `strict_mode`、不带 `reject_unknown_fields`)的校验方式相同,因此未通过模型 schema 的请求体在此处与在运行时一样会返回 `422`;不会向任何提供商派发请求,也不会产生任何费用。该结果并非价格锁定:它按 `pricing_as_of` 当时生效的费率计价,而一次运行则按其计费时生效的费率收取费用。在该功能逐步上线期间,此路由会返回 `403`,并带有 `error_type: not_enabled`。 + +**参数** + + + 规范 `{provider}/{model}` 模型 ID 中的小写提供商段,即正在运行其模型的合作伙伴。 + + 类型:[`RouterProviderSegment`](#routerprovidersegment),字母数字 slug,例如 `anthropic`,最多 64 个字符 + + + + 规范 `{provider}/{model}` 模型 ID 中的小写模型段,即在该提供商内要运行的模型。 + + 类型:[`RouterModelSegment`](#routermodelsegment),字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 + + + + 选择另一个提供商来提供此模型的服务,而非其当前的默认提供商。 + + +**请求体** + +`application/json`,[`RouterModelInput`](#routermodelinput)(必填) + +合作伙伴模型的原生 JSON 输入,与同步路由为此模型接受的请求体完全相同。它会按模型自身的输入 schema 进行校验,与默认运行的校验方式相同(此路由不接受 `strict_mode` 或 `reject_unknown_fields`),并由其自身的字段(输出数量、输入图像所选定的操作)决定计价内容。 + +**响应** - 响应体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`X-Comfy-Upstream-Status`、`Retry-After` + + 报价。 + + 响应体:[`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` + + + + 未找到该模型 ID。 + + 响应体:[`RouterErrorResponse`](#routererrorresponse),响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + + + + 请求体过大。 + + 响应体:[`RouterErrorResponse`](#routererrorresponse),响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + + + + 估算的请求体未通过模型 schema 的校验,或者指定的模型与路径中的模型不一致。 + + 响应体:[`RouterValidationErrorResponse`](#routervalidationerrorresponse),响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + + + + Router 暂时不可用。请使用退避策略重试。 + + 响应体:[`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 个字符 - 规范 `{provider}/{model}` 模型 ID 中的模型部分。 + 规范模型 ID `{provider}/{model}` 中的模型部分。 类型:[`RouterModelSegment`](#routermodelsegment) -- 由字母和数字组成的 slug,例如 `claude-opus-4-6`,最多 128 个字符 - 调用方从先前的 `200` 响应中保存的 `ETag`。 + 调用方从先前的 `200` 响应中持有的 `ETag`。 **响应** - 成功 - 模型的输入和输出 schema,作为独立的 OpenAPI 文档。 + OK - 该模型的输入和输出 schema,以独立的 OpenAPI 文档形式呈现。 响应体:[`RouterModelInputSchemaDocument`](#routermodelinputschemadocument) -- 响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` - 未修改 - 自调用方在 `If-None-Match` 中发送 `ETag` 以来,文档未发生变化。 + 未修改 - 自调用方在 `If-None-Match` 中发送的 `ETag` 以来,文档未发生变化。 响应头:`X-Comfy-Request-Id`、`ETag`、`Cache-Control` @@ -323,7 +405,7 @@ Comfy API 密钥也可以作为 Bearer token 发送。当同时提供两个凭 - 该调用方或该模型不允许发起此请求。 + 不允许该调用方或模型发起此请求。 响应体:[`RouterErrorResponse`](#routererrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` @@ -348,230 +430,229 @@ Comfy API 密钥也可以作为 Bearer token 发送。当同时提供两个凭 ### `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`,调用方随后通过下面三个读取操作获取结果。 **参数** - 规范模型 ID `{provider}/{model}` 中的小写提供商段,即正在运行其模型的合作伙伴。 + 规范 `{provider}/{model}` 模型 ID 中的小写提供商段,即正在运行其模型的合作伙伴。 - 类型:[`RouterProviderSegment`](#routerprovidersegment),字母数字 slug,例如 `anthropic`,最多 64 个字符 + Type: [`RouterProviderSegment`](#routerprovidersegment) -- 字母数字短标识,例如 `anthropic`,最多 64 个字符 - 规范模型 ID `{provider}/{model}` 中的小写模型段,即在该提供商内要运行的模型。 + 规范 `{provider}/{model}` 模型 ID 中的小写模型段,即要在该提供商内运行的模型。 - 类型:[`RouterModelSegment`](#routermodelsegment),字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 + Type: [`RouterModelSegment`](#routermodelsegment) -- 字母数字短标识,例如 `claude-opus-4-6`,最多 128 个字符 - 选择服务此模型的替代提供商,而非其当前默认提供商。 + 选择另一个提供商来服务此模型,而不是使用其当前默认提供商。 - 仅在配合 `model_provider` 使用时才有意义。 + 仅在配合 `model_provider` 时才有意义。 - 默认值:False + Default: False - 由调用方生成的键,使重试同一次逻辑调用变得安全。 + 由调用方生成的键,使重试同一次逻辑调用是安全的。 1–255 个字符 - 选择拒绝该模型输入 schema 未声明的顶层请求体字段,而不是接受它;嵌套字段不会被检查,对于 schema 允许未声明字段或没有编写 schema 的模型,以及使用 `strict_mode=true` 发送的排队提交,不会拒绝任何内容。 + 选择拒绝该模型输入 schema 未声明的顶层请求体字段,而不是接受它;嵌套字段不会被检查,对于其 schema 允许未声明字段或没有编写 schema 的模型,或者对以 `strict_mode=true` 发送的队列提交,都不会拒绝任何内容。 - 默认值:False + Default: False **请求体** -`application/json`:[`RouterModelInput`](#routermodelinput)(必填) +`application/json` -- [`RouterModelInput`](#routermodelinput)(必填) -合作伙伴模型的原生 JSON 输入,与此模型在同步路由上接受的请求体完全相同,并且它以同样的方式选择操作与计费:对于支持多种操作的模型,由请求体自身的字段决定 Router 运行哪一种操作(输入图像会将可编辑图像模型切换为图生图;Seedance 首帧图像会选择图生视频,参考图像或视频片段会选择参考生视频),每个带条件的操作按其自身的费率计费,而不是基础的文生图或文生视频费率。相同的提供商选择约定在分发时同样适用:不使用 `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`)。 **响应** - 已创建:该次运行已被接纳入队列。 + Created:运行已被接纳进入队列。 - 请求体:[`RouterQueueSubmitResponse`](#routerqueuesubmitresponse);响应头:`X-Comfy-Request-Id`、`Idempotent-Replayed` + Body: [`RouterQueueSubmitResponse`](#routerqueuesubmitresponse) -- Headers: `X-Comfy-Request-Id`, `Idempotent-Replayed` 凭据缺失或无效。 - 请求体:[`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` Router 请求级失败:请求从未到达模型,或因模型自身未反馈的原因而失败。 - 请求体:[`RouterErrorResponse`](#routererrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id` + Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` - 该请求对此调用方或模型不被允许。其合作伙伴直接以字节形式返回生成结果的模型目前尚无法进入队列,会被以 `not_enabled` 拒绝;请改用同步路由运行它。 + 该请求对此调用方或模型不被允许。如果某个模型的合作伙伴直接以字节形式返回生成结果,则该模型目前无法排队,并会以 `not_enabled` 被拒绝;请改为在同步路由上运行它。 - 请求体:[`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` - - 检查 `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 凭据,其 `detail` 以 `this request resolved a BYOK credential` 开头。请去掉 `model_provider`,或者在发送请求时不带 BYOK 凭据,并且(对于 multipart 的情况)不带编辑。 +检查 `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 凭据,(对于多部分操作的情况)也不带该编辑操作。 - 请求体:[`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` 时) - 请求的内容未通过模型 schema 的校验。 + 请求的内容未通过模型的 schema 校验。 - 请求体:[`RouterValidationErrorResponse`](#routervalidationerrorresponse);响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Idempotent-Replayed` + 请求体:[`RouterValidationErrorResponse`](#routervalidationerrorresponse)。请求头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Idempotent-Replayed` - 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}/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` 返回方式完全一致,并遵循提交时接受的同一提供商选择契约:没有 `model_provider` 时,或带有 `model_provider` 且 `strict_mode=false`(默认值,在可能时翻译回该模型的原生契约,翻译失败时回退到备用提供商自身的原始响应,会记录日志,绝不静默)时,形状是该模型自身的原生输出;当 `strict_mode=true` 时,返回的是备用提供商的响应,原样返回。对于其合作伙伴直接以字节回答生成的模型,响应体就是这些字节,采用合作伙伴自己的 `Content-Type` 而非 `application/json`;请根据响应的 `Content-Type` 进行分支判断,不要假定是 JSON 文档。 + 正常,即为产生了结果的请求所存储的结果:一个成功完成的请求,或一个同时带有已记录扣费和已存储结果的终端请求。该结果以合作伙伴自身的媒体类型原样返回,与同步路由的 `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` + 响应体:[`RouterModelOutput`](#routermodeloutput) 或原始字节(`*/*`)-- 响应头:`X-Comfy-Request-Id`、`X-Content-Type-Options` - 已接受:请求尚未完成。 + 已接受,请求尚未完成。 - 响应体:[`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 暂时不可用。请使用退避策略重试。 + 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` - 请求的内容未通过模型 schema 的校验。 + 请求的内容依据模型的 schema 被拒绝。 - 响应体:[`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- 响应头:`X-Comfy-Error-Type`,`X-Comfy-Request-Id`,`Idempotent-Replayed` + 响应体:[`RouterValidationErrorResponse`](#routervalidationerrorresponse) -- 响应头:`X-Comfy-Error-Type`、`X-Comfy-Request-Id`、`Idempotent-Replayed` 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) -- 字母数字 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 个字符 @@ -591,65 +672,65 @@ Comfy Router 的队列交付模式。请求体与该模型在 `POST /v2/models/{ - 请求无效。请检查错误类型和请求体。 + 无效请求。请检查错误类型和请求体。 - 响应体:[`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 暂时不可用。请使用退避策略重试。 - 响应体:[`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` -**读取某个已提交请求的队列状态。** +**读取已提交请求的队列状态。** -这是轮询端点。它只返回请求的当前状态,而从不返回结果,因此客户端可以持续观察长时间的生成过程,而无需在每次轮询时传输其输出:结果只需收集一次,即在下方读取接口中,当本接口返回 `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 个字符 **响应** @@ -657,46 +738,46 @@ Comfy Router 的队列交付模式。请求体与该模型在 `POST /v2/models/{ OK,请求当前的队列状态。 - 正文:[`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` - 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](/zh/development/comfy-router/api);有关请求头行为,请参阅[请求头](/zh/development/comfy-router/headers)。 +这里的描述较为简略。关于模型选择、验证、重试和计费,请参阅[使用 Comfy Router API](/zh/development/comfy-router/api);关于响应头行为,请参阅[响应头](/zh/development/comfy-router/headers)。 ## 错误分类桶 @@ -817,6 +898,40 @@ Router 错误的机器可读类别,同时也会在 `X-Comfy-Error-Type` 响应 在 Router 模型的每次成功运行中都始终为 `nosniff`。 +## 预检费用预估 + +`POST /v2/models/{provider}/{model}/estimate` 可以在不运行请求体的情况下为其定价;排队提交(`POST /v2/models/{provider}/{model}/requests`)会在其 `201` 响应中返回与 `estimate` 相同的 [`RouterCostEstimate`](#routercostestimate)。两者的定价都基于 Comfy 对该次运行计费所依据的费率卡片;使用你自己的提供商密钥运行时,Comfy 不会计费(见下文)。在预估功能逐步开放期间,该路由会返回 `403` 以及 `error_type: not_enabled`,并且提交响应会省略 `estimate`。目录中仍然不包含任何价格。 + +在读取任何金额之前,先读取 `source`。缺失的数值绝不意味着免费。 + +| `source` | 携带字段 | 如何解读 | +| --- | --- | --- | +| `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`:费率卡片未为此请求定价。 +- `byok`(仅排队提交):该次运行使用你自己的提供商密钥,因此 Comfy 不收取任何费用。 +- `pricing_unavailable`(仅排队提交):请求被接收时无法读取费率卡片。提交仍会被接受,运行照常计费。 + +预估在以下情况下会采用保守失败策略: + +- 当某个数值需要费率卡片,而该卡片未加载或已过期时,`/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`。 +- 美元金额由未取整的分数金额换算而来,最多保留 8 位小数,可计费的不足一美分的 `amount` 绝不会显示为 `0`。`credits` 为 `round(amount × 211, 2)`,与 `X-Comfy-Credits-Used` 对收费所用的换算相同,因此对于极小的非零价格,`credits` 可能取整为 `0`;在这一点重要时,请以 `amount` 或 `amount_cents` 而非 `credits` 来做预算。该响应头仍是运行事后的数值;余额位于 Comfy 平台上。 + ## 结果资产 模型可以返回资产 URL、内联字节,或两者兼有。下面的提供商会将已选择的资产复制到 Comfy 存储上并替换其 URL。此行为取决于模型;没有任何请求头能选择它。 @@ -850,39 +965,109 @@ Router 错误的机器可读类别,同时也会在 `X-Comfy-Error-Type` 响应 ### RouterChargesOnPolicyRejection -内容策略拒绝是否会对此模型收费。将未知值视为可能收费。 +内容政策拒绝是否会对该模型计费。请将未知值视为可能计费。 类型:`string` +### RouterCostEstimate + +Comfy 将为此调用收取的费用,在派发之前依据该费用实际计费所用的同一费率卡片定价,以美元计。`source` 说明该数字的可信程度:`exact` 会带有 `amount`;`estimated` 带有 `min_amount` 和 `max_amount`,不带 `amount`;`unknown` 两者都没有,并带有一个 `reason`。绝不要把缺失的 `amount` 理解为免费。这不是价格锁定:请参见 `pricing_as_of`。 + +**字段** + + + `exact` | `estimated` | `unknown`;其他任何值都按 `unknown` 理解。 + + + + 始终为 `USD`。 + + + + 以十进制字符串表示的美元金额,例如 "0.04",最多 8 位小数,且不使用指数形式。可计费的低于 1 美分的价格绝不会被渲染为 "0"。仅在 `source` 为 `exact` 时出现。 + + + + 以十进制字符串表示的美元下限金额。仅在 `source` 为 `estimated` 时出现。 + + + + 以十进制字符串表示的美元上限金额。仅在 `source` 为 `estimated` 时出现。 + + + + 以美分表示的同一数值,不做四舍五入,用于算术运算。与 `amount` 一同出现。 + + double + + + + 以美分表示的 `min_amount`,不做四舍五入。与 `min_amount` 一同出现。 + + double + + + + 以美分表示的 `max_amount`。与 `max_amount` 一同出现。 + + double + + + + 使用平台换算率($1 = 211 积分)换算得到的 `amount` 积分数,四舍五入到 2 位小数,即 `X-Comfy-Credits-Used` 对 `exact` 报价将携带的数值。 + + double + + + + 该报价所对应的提供商线路。在排队提交中,它就是将要运行的那条线路。 + + + + 规范的 Comfy Router 模型 ID,即 `{provider}/{model}`,正是 `POST /v2/models/{provider}/{model}` 上用于寻址该模型的值,因此调用方可以直接将其插入该路径,而无需从其他任何地方重新推导。其 `pattern` 为用单个 `/` 连接的 `RouterProviderSegment` 和 `RouterModelSegment`,`maxLength` 为二者之和加上该分隔符。 + + 类型:[`RouterModelId`](#routermodelid):模型 ID,例如 `anthropic/claude-opus-4-6`,最多 193 个字符 + + + + 该报价定价所依据的费率卡片的获取时间。运行时按评级时生效的费率计费,而非此时间点的费率。只要未读取任何费率卡片(`reason: pricing_unavailable`、`byok`,或无法从任何卡片定价的 `not_quotable` 调用),这里就是该报价被应答的时间。 + + date-time + + + + 仅在 `source` 为 `unknown` 时出现:`not_quotable`(Router 无法在调用运行之前为其定价:其价格取决于提供商回报的内容,或者请求体未限定计费数量)、`unpriced_model`(费率卡片未对该请求定价)、`byok`(仅排队提交:运行时使用你自己的提供商密钥,因此 Comfy 不为此收取任何费用),或 `pricing_unavailable`(仅排队提交:请求被接受时无法读取费率卡片;这是暂时性的,运行仍会照常计费)。其他任何值都按 `not_quotable` 理解。 + + ### RouterErrorResponse -认证、访问、模型查找、配额以及提供商传输失败时的错误响应体。 +用于认证、访问、模型查找、配额以及提供商传输失败的错误响应体。 **字段** - 对失败的可读描述,可安全地展示给最终用户。不会被机器解析,请改为根据 `error_type` 进行分支判断。有两处已记录的例外:在 `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`,而不是对上面的列表做穷举分支,从而在下一次新增时出错。 + 对 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) + Type: [`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` 响应头对应。 - 内容策略拒绝所涉及的输入或输出,使用 Router 层面的封闭词汇表示:`input`、`output`、`input_text`、`input_image`、`input_video`、`input_audio`、`output_text`、`output_image`、`output_video`、`output_audio`。当提供商没有指出模态时,单独的 `input` / `output` 值表示相应的一侧。仅当 `error_type` 为 `content_policy_violation` 且提供商用机器可读代码指出被拒绝的对象时才会出现;否则省略。绝不是提供商的文本。目前已对 BytePlus、Runway、BFL、Gemini、Veo、Vertex、xAI 和 Wan 的拒绝情况命名;如果提供商的拒绝没有说明涉及哪一侧,则该字段省略。它会镜像 `X-Comfy-Refusal-Subject` 响应头。 + 内容策略拒绝针对的是哪个输入或输出,采用 Router 层面的封闭词表:`input`、`output`、`input_text`、`input_image`、`input_video`、`input_audio`、`output_text`、`output_image`、`output_video`、`output_audio`。当提供商未指明具体模态时,仅用 `input` / `output` 这两个值来指明是哪一侧。仅当 `error_type` 为 `content_policy_violation` 且提供商以机器可读代码指明了被拒绝的对象时才存在;否则不存在。绝不会是提供商原文。目前已对 BytePlus、Runway、BFL、Gemini、Veo、Vertex、xAI 和 Wan(万相)的拒绝进行命名;如果提供商的拒绝未说明针对哪一侧,该字段就会缺失。它与 `X-Comfy-Refusal-Subject` 响应头对应。 ### RouterErrorType -机器可读的 Router 错误类别,同时也会在 `X-Comfy-Error-Type` 请求头中发送。 +机器可读的 Router 错误类别,同时也会在 `X-Comfy-Error-Type` 标头中发送。 -类型:`string` +类型: `string` ### RouterModelBilling @@ -891,18 +1076,18 @@ Router 错误的机器可读类别,同时也会在 `X-Comfy-Error-Type` 响应 **字段** - 模型因内容政策原因而拒绝的调用,是否仍会向调用方收费。各提供商的做法不同,这种差异在调用时不可见,而用户即使同时看到错误和同一调用被收费,也无从事先得知。因此这里在调用之前按模型明确说明,而不是留给各提供商的“民间说法”。 + 模型因内容政策原因拒绝的调用,是否仍会向调用方收费。各提供商的做法不同,而这种差异在调用时无法察觉,因此用户即使同时看到同一次调用的错误和扣费,也无从事先得知。所以这里按模型在调用之前明确说明,而不是留作各提供商之间的传闻。 类型:[`RouterChargesOnPolicyRejection`](#routerchargesonpolicyrejection) ### RouterModelDetail -单个 Comfy Router 模型的详细信息:目录列表为其报告的全部内容,以及仅单模型路由携带的按模型字段。 +单个 Comfy Router 模型的逐模型详细信息:目录列表为该模型报告的全部内容,外加只有单模型路由才会携带的逐模型字段。 -组合 [`RouterModelListEntry`](#routermodellistentry)、[`RouterModelDetailFields`](#routermodeldetailfields)。 +组合了 [`RouterModelListEntry`](#routermodellistentry)、[`RouterModelDetailFields`](#routermodeldetailfields)。 -类型:`object` +Type: `object` ### RouterModelDetailFields @@ -911,26 +1096,26 @@ Router 错误的机器可读类别,同时也会在 `X-Comfy-Error-Type` 响应 **字段** - 此模型的 OpenAPI 文档的 URL,包含其输入和输出 schema。 + 该模型的 OpenAPI 文档 URL,包含其输入和输出 Schema。 HTTPS URL,例如 `https://api.comfy.org/v2/models/bfl/flux-2-pro/openapi.json`,最多 2048 个字符 ### RouterModelId -`POST /v2/models/{provider}/{model}` 中使用的模型 ID。 +用于 `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` ### RouterModelInputSchemaDocument -针对单个模型的输入与输出的独立 OpenAPI 文档。 +单个模型的输入和输出的独立 OpenAPI 文档。 类型:`object` @@ -941,25 +1126,25 @@ Router 错误的机器可读类别,同时也会在 `X-Comfy-Error-Type` 响应 **字段** - 规范的 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 个字符 + 类型:[`RouterModelId`](#routermodelid),模型 ID,例如 `anthropic/claude-opus-4-6`,最多 193 个字符 - 规范 `{provider}/{model}` 模型 ID 中的小写 `provider` 段,即被寻址模型所属的合作伙伴。调用路由的 `provider` 路径参数与目录条目的 `provider` 字段都引用这同一个 schema,这正是让已列出的 ID 与可接受的 ID 不会彼此偏移的原因。 + 规范化 `{provider}/{model}` 模型 ID 中的小写 `provider` 段,即所寻址模型所属的合作伙伴。调用路由的 `provider` 路径参数与目录条目的 `provider` 字段都引用这同一个 schema,正是这一点让列出的 ID 与可接受的 ID 不会彼此偏离。 - 类型:[`RouterProviderSegment`](#routerprovidersegment) -- 字母数字 slug,例如 `anthropic`,最多 64 个字符 + 类型:[`RouterProviderSegment`](#routerprovidersegment),字母数字 slug,例如 `anthropic`,最多 64 个字符 - 规范 `{provider}/{model}` 模型 ID 中的小写 `model` 段,即在该提供商下要运行的模型。调用路由的 `model` 路径参数与目录条目的 `model` 字段共享它,原因与 `RouterProviderSegment` 相同,同样是为了避免偏移。 + 规范化 `{provider}/{model}` 模型 ID 中的小写 `model` 段,即在该提供商下要运行的模型。调用路由的 `model` 路径参数与目录条目的 `model` 字段共用这一 schema,原因与 `RouterProviderSegment` 一样,同样是为了避免偏离。 - 类型:[`RouterModelSegment`](#routermodelsegment) -- 字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 + 类型:[`RouterModelSegment`](#routermodelsegment),字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 - 调用方在调用之前需要了解的各模型计费信息,而非价格。使用量与费用数字绝不会出现在这里。 + 调用方在调用之前需要了解的单模型计费信息,而不是价格。用量和费用数字绝不会出现在这里。 类型:[`RouterModelBilling`](#routermodelbilling) @@ -977,24 +1162,24 @@ Router 模型目录的一页。 - 本页之后是否还存在另一页。只要该值为 true,就继续遍历;不要因为 `data` 较短或为空,就推断目录已经结束。 + 本页之后是否还有另一页。只要此值为 true 就继续向后翻页;不要因为 `data` 很短或为空就断定目录已到末尾。 - 指向 Router 列表的不透明游标。它由服务器生成,并且只能原样往返传递:它不是偏移量,不是模型 ID,没有顺序,也不会在目录重建之间保持稳定,因此解析它、对它做自增,或在其所属的那次遍历之外持久化它,都超出了约定范围。之所以使用游标而不是偏移量,是因为目录是一个不断变化的列表:当遍历过程中有条目被添加或删除时,基于偏移量的遍历会静默跳过或重复条目,而调用方无法察觉这种情况的发生。 + 指向 Router 列表的一个不透明游标。它由服务器生成,且仅用于原样往返传递:它不是偏移量,不是模型 ID,没有顺序,也不能在目录重建后保持稳定,因此解析它、对它做自增,或在产生它的那次遍历之外持久化它,都不属于契约范围。之所以使用游标而非偏移量,是因为目录是一个不断变化的列表:当遍历过程中有条目被增删时,基于偏移量的遍历会静默地跳过或重复条目,而调用方无法察觉这种情况已经发生。 - 类型:[`RouterPageCursor`](#routerpagecursor),即作为 `next_cursor` 返回的不透明游标,1–512 个字符 + 类型:[`RouterPageCursor`](#routerpagecursor) -- 作为 `next_cursor` 返回的不透明游标,1–512 个字符 - 实际返回的页大小。请求的 `limit` 若超过上限,会被钳制到上限,而不是被拒绝,因此该值可能小于请求时的值。请用这个数字进行分页,而不是用你发送的那个数字,否则你会以为存在你从未收到的行。 + 实际提供的分页大小。请求的 `limit` 超过上限时会被截断到上限,而不是被拒绝,因此该值可能小于你所请求的值。请用这个数字进行分页,而不是你发送的那个数字,否则你会以为收到了从未收到的行。 1–100 ### RouterModelOutput -模型结果对象。请阅读已选择模型的输出 schema,以了解其确切结构。 +模型结果对象。请阅读已选择模型的输出 Schema,以了解其确切的形状。 类型:`object` @@ -1002,127 +1187,133 @@ Router 模型目录的一页。 `{provider}/{model}` 模型 ID 中的模型部分。 -类型:`string`:字母数字 slug,例如 `claude-opus-4-6`,最多 128 个字符 +类型:`string` -- 字母数字组成的 slug,例如 `claude-opus-4-6`,最多 128 个字符 ### RouterPageCursor -不透明的目录游标。请将其原样传回作为 `cursor`。 +一个不透明的目录游标。请原样传回,作为 `cursor`。 -类型:`string` -- 不透明游标,作为 `next_cursor` 返回,1–512 个字符 +类型:`string` —— 作为 `next_cursor` 返回的不透明游标,1–512 个字符 ### RouterProviderSegment -`{provider}/{model}` 模型 ID 中的提供商部分。 +`{provider}/{model}` 模型 ID 中表示提供商的部分。 -类型:`string`,由字母数字组成的 slug,例如 `anthropic`,最多 64 个字符 +类型:`string`。字母数字 slug,例如 `anthropic`,最多 64 个字符 ### RouterQueueCancelResponse -对取消请求的应答,用于两种描述此路由已处理请求的状态:`202` 和 `400`。两者共用一个响应体形状,而不是成功信封加错误信封,因为二者表达的是同一个陈述,即取消操作发现了什么;而一个必须按状态码解析不同类型的客户端,从这种拆分中得不到任何好处。 +针对本路由已处理的请求的两种状态(`202` 与 `400`)的取消询问回答。两种状态共用一种响应体形状,而不是一个成功信封加一个错误信封,因为两者陈述的是同一件事:取消操作发现了什么;而如果客户端不得不按状态码解析不同类型,这种拆分不会带来任何好处。 **字段** - 单个排队中的 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 个字符 + 类型:[`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 个字符 - 取消请求所发现的内容,对应两种描述此路由实际已处理请求的结果。两者都由 HTTP 状态码体现,因此客户端可以基于其中任一进行分支。 + 取消询问所发现的内容,针对的是本路由实际已处理的两种结果。两者都与 HTTP 状态相呼应,因此客户端可以依据任一者进行分支。 类型:[`RouterQueueCancelStatus`](#routerqueuecancelstatus) ### RouterQueueCancelStatus -取消请求得到的结果,用于描述此路由实际已处理请求的两种结果。两者都会体现在 HTTP 状态码中,因此客户端可以依据其中任意一个进行分支判断。 +取消请求所发现的结果,仅针对该路由实际已处理请求的两种结果进行说明。两者都由 HTTP 状态码映射呈现,因此客户端可以任选其一进行分支判断。 -类型:`string` +Type: `string` ### RouterQueuePosition -在响应生成的那一刻,队列中有多少个请求排在此请求之前。零表示此请求位于队首。 +在响应生成的那一刻,此请求在队列中前面还有多少请求。零表示此请求位于队首。 -类型:`integer`,至少为 0 +类型:`integer` -- 至少为 0 ### 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 个字符 +类型:`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 块的那一半:一个队列中请求的身份、它当前的状态,以及在该状态为终端状态且运行未成功时,说明原因所属的粗粒度分类桶。 **字段** - 标识一个排队中的 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 个字符 + 类型:[`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`,因为这两个 schema 是有意朝相反方向封闭的。`RouterErrorType` 用于对失败进行分类,其取值集合预期会增长,因此一个会硬性拒绝无法识别分类桶的生成客户端,恰恰会在已经出错的时候失败得最严重。而这个是生命周期,日后为其新增第四个状态,对所有针对它编写的轮询循环来说都是破坏性变更,无论它是否被声明为 enum 都是如此;所以就把它声明为 enum,并把这一约束写在客户端能看到的地方。 + 队列中 Router 请求的状态。它恰好有三个值,并且与 `RouterErrorType` 不同,这是一个封闭的 `enum`,因为这两个 schema 是故意朝相反方向封闭的。`RouterErrorType` 对失败进行分类,其集合预期会增长,因此,一个硬性拒绝无法识别分类桶的已生成客户端,恰恰会在已经出错的时候失败得最严重。而这一个描述的是生命周期,而一个日后新增第四种状态的生命周期,无论是否声明为 enum,对每一个针对它编写的轮询循环来说都是破坏性变更。因此它被声明为 enum,并把这一约束写在客户端能看到的地方。 类型:[`RouterQueueStatus`](#routerqueuestatus) - 在响应被组合出来的那一刻,队列中排在该请求之前的请求数量。为零表示该请求位于队首。 + 在响应生成的那一刻,队列中有多少个请求排在这一个之前。零表示该请求位于队首。 类型:[`RouterQueuePosition`](#routerqueueposition) -- 至少 0 - 仅出现在未成功的 `COMPLETED` 请求上,携带的是与结果读取在返回该失败时放在 `X-Comfy-Error-Type` 上的同一个粗粒度分类桶。它用于区分成功的终端请求与失败或被取消的终端请求:这两种情况都没有单独的终端状态。成功时它是缺失的,而不是 null,因此请依据其是否存在来分支判断。 + 仅出现在未成功的 `COMPLETED` 请求上,携带的正是结果读取在返回该失败时赋给 `X-Comfy-Error-Type` 的那个粗粒度分类桶。它把一个成功的终端请求与一个失败或被取消的终端请求区分开来(后两者都没有单独的终端状态),并且它在成功时是缺失的而不是 null,因此请依据它的存在与否来分支。 类型:[`RouterErrorType`](#routererrortype) ### RouterQueueStatusResponse -单个已执行请求的当前状态,由提交时返回的同样三个 URL 组合而成。 +一个已执行请求的当前状态,并与提交时返回的相同三个 URL 组合在一起。 -组合了 [`RouterQueueUrls`](#routerqueueurls) 和 [`RouterQueueStatusFields`](#routerqueuestatusfields)。 +组合了 [`RouterQueueUrls`](#routerqueueurls)、[`RouterQueueStatusFields`](#routerqueuestatusfields)。 类型:`object` ### RouterQueueSubmitFields -`RouterQueueSubmitResponse` 中不属于 URL 块的那一半:新请求的身份标识,以及它被接纳那一刻的状态。 +`RouterQueueSubmitResponse` 中除 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 个字符 + Type: [`RouterQueueRequestId`](#routerqueuerequestid) -- `pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`, uuid, Up to 36 characters - 已排队的 Router 请求的状态。它恰好有三个取值,而且与 `RouterErrorType` 不同,这个确实是封闭的 `enum`,因为这两个 schema 是有意朝相反方向封闭的。`RouterErrorType` 用于对失败进行分类,其取值集合预计会增长,因此,如果生成的客户端硬性拒绝一个无法识别的分类,那么它恰恰会在已经出错的时候失败得最严重。而这个描述的是生命周期,对一个生命周期而言,日后新增第四种状态,对所有针对它编写的轮询循环来说都是破坏性变更,无论它是否被声明为 enum 都一样。所以这里将其声明为 enum,并把该约束写在客户端能看到的地方。 + 排队中的 Router 请求的状态。它恰好有三个取值,而且与 `RouterErrorType` 不同,这是一个封闭的 `enum`,因为这两个 schema 被有意设计成朝相反方向封闭。`RouterErrorType` 对失败进行分类,其取值集合预期会增长,因此一个会硬性拒绝无法识别分类的已生成客户端,恰恰会在已经出错的时候失败得最惨。而这一个是一个生命周期,日后新增第四种状态对每一个针对它编写的轮询循环来说都是破坏性变更,无论它是否被声明为 enum,所以这里就把它声明为 enum,并把该约束写在客户端能看到的地方。 - 类型:[`RouterQueueStatus`](#routerqueuestatus) + Type: [`RouterQueueStatus`](#routerqueuestatus) - 在响应生成的那一刻,队列中排在此请求前面的请求数量。零表示此请求位于最前面。 + 在响应生成的那一刻,队列中有多少个请求排在本请求之前。零表示本请求位于队首。 + + Type: [`RouterQueuePosition`](#routerqueueposition) -- At least 0 + + + + 本次请求的预检成本估算,在调用方启用了成本估算时,会出现在新的准入响应中。它给出的是本次请求被固定到的那条提供商链路(队列没有回退循环,因此 `fallback_provider` 永远不会改变实际运行的链路)。当无法给出任何数字时,该字段仍然存在,并带有 `source: unknown`;提交永远不会因为成本估算而失败。在幂等重放时会省略(`Idempotent-Replayed: true`),因为原始报价不会被存储。它不是价格锁定:运行时按计费当时生效的费率收费。 - 类型:[`RouterQueuePosition`](#routerqueueposition) -- 至少为 0 + Type: [`RouterCostEstimate`](#routercostestimate) ### RouterQueueSubmitResponse -一次运行被准入队列时返回的句柄:包含该请求的身份与状态,并与指向其生命周期其余部分的三个 URL 组合在一起。 +运行被接纳进入队列时返回的句柄:请求的身份与状态,并与用于处理其生命周期其余部分的三个 URL 组合在一起。 组合了 [`RouterQueueUrls`](#routerqueueurls)、[`RouterQueueSubmitFields`](#routerqueuesubmitfields)。 @@ -1130,12 +1321,12 @@ Router 模型目录的一页。 ### RouterQueueUrls -三个 URL,用于寻址某个已排队请求生命周期的其余阶段。每个携带活动句柄的响应都会返回这三个 URL,因此客户端永远不需要自行拼接队列 URL。 +这三条 URL 指向一个已入队请求剩余的生命周期,凡是携带有效句柄的响应都会返回它们,因此客户端无需自行拼接队列 URL。 **字段** - 读取此请求状态的绝对 URL。 + 获取此请求状态的绝对 URL。 URI @@ -1147,43 +1338,43 @@ Router 模型目录的一页。 - 发起取消请求所指向的绝对 URL。 + 请求取消时使用的绝对 URL。 URI ### RouterValidationErrorContext -提供商提供的详情,说明是哪条验证规则失败了。 +由提供商提供的、关于验证失败的规则的详情。 类型:`object` ### RouterValidationErrorDetail -单个字段级验证失败。 +一个字段级验证失败。 **字段** - 出错字段的路径,最外层片段在前。例如 `["body", "image_url"]`,或 `["body", "images", 0]`,其中整数表示数组中的索引。 + 指向出错字段的路径,最外层片段在前,例如 `["body", "image_url"]`,或 `["body", "images", 0]`,其中整数表示数组的索引。 - 针对该单个失败的人类可读描述。 + 对这一次失败的人类可读描述。 - 该失败具体且机器可读的原因,由提供商原样透传。类型化 SDK 异常层级正是依据此值进行分支判断;响应头中的 `error_type` 只是它粗粒度的归类。 + 该失败的具体、机器可读的原因,由提供商原样传递。这是类型化 SDK 异常层次结构用于分支判断的值;响应头中的 `error_type` 只是它的粗略分类。 - 单个 `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) @@ -1194,12 +1385,12 @@ Router 模型目录的一页。 ### RouterValidationErrorResponse -`422` 验证错误响应体。读取 `X-Comfy-Error-Type` 以了解其类别。 +`422` 验证错误的响应体。读取 `X-Comfy-Error-Type` 以获取其类别。 **字段** - 请求中发现的每一处验证失败,每个出错的字段对应一个条目。 + 请求中发现的每一个验证失败项,每个出错的字段对应一个条目。 类型:[`RouterValidationErrorDetail`](#routervalidationerrordetail) 数组 From b3e9644b426314763095bfed9009b5a03c5cc591 Mon Sep 17 00:00:00 2001 From: lin-bot23 Date: Tue, 13 Oct 2026 11:19:26 +0800 Subject: [PATCH 2/6] i18n: sync Comfy Router model code pages (veo, byteplus, google, xai) with upstream/main (2026-10-13) --- .../dreamina-seedance-2-0-260128/code.mdx | 6 +- .../models/google/nano-banana-2/code.mdx | 6 +- .../models/google/nano-banana-pro/code.mdx | 6 +- .../veo/veo-3-1-fast-generate-001/code.mdx | 15 ++--- .../models/veo/veo-3-1-generate-001/code.mdx | 19 ++++--- .../veo/veo-3-1-lite-generate-001/code.mdx | 6 +- .../xai/grok-imagine-video-1-5-lite/code.mdx | 19 ++++--- .../grok-imagine-video-1-5-preview/code.mdx | 19 ++++--- .../xai/grok-imagine-video-1-5/code.mdx | 19 ++++--- .../models/xai/grok-imagine-video/code.mdx | 19 ++++--- .../dreamina-seedance-2-0-260128/code.mdx | 6 +- .../models/google/nano-banana-2/code.mdx | 8 ++- .../models/google/nano-banana-pro/code.mdx | 6 +- .../veo/veo-3-1-fast-generate-001/code.mdx | 27 ++++----- .../models/veo/veo-3-1-generate-001/code.mdx | 6 +- .../veo/veo-3-1-lite-generate-001/code.mdx | 19 ++++--- .../xai/grok-imagine-video-1-5-lite/code.mdx | 19 ++++--- .../grok-imagine-video-1-5-preview/code.mdx | 21 +++---- .../xai/grok-imagine-video-1-5/code.mdx | 19 ++++--- .../models/xai/grok-imagine-video/code.mdx | 21 +++---- .../dreamina-seedance-2-0-260128/code.mdx | 6 +- .../models/google/nano-banana-2/code.mdx | 6 +- .../models/google/nano-banana-pro/code.mdx | 6 +- .../veo/veo-3-1-fast-generate-001/code.mdx | 29 +++++----- .../models/veo/veo-3-1-generate-001/code.mdx | 25 +++++---- .../veo/veo-3-1-lite-generate-001/code.mdx | 55 ++++++++++--------- .../xai/grok-imagine-video-1-5-lite/code.mdx | 21 +++---- .../grok-imagine-video-1-5-preview/code.mdx | 19 ++++--- .../xai/grok-imagine-video-1-5/code.mdx | 19 ++++--- .../models/xai/grok-imagine-video/code.mdx | 23 ++++---- 30 files changed, 266 insertions(+), 229 deletions(-) diff --git a/ja/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx b/ja/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx index b6d7085bf0..235bad36b1 100644 --- a/ja/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx +++ b/ja/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx @@ -2,18 +2,19 @@ title: "Dreamina Seedance 2.0 260128 を Comfy Router で使用する" description: "Comfy Router 経由で byteplus/dreamina-seedance-2-0-260128 を呼び出します。endpoint、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Dreamina Seedance 2.0 260128" -translationSourceHash: f91db797 +translationSourceHash: 98890ddf translationFrom: development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx translationBlockHashes: "_intro": 54eac94b "Quick start": ca074ca5 - "Serving providers": b0d0caab + "Serving providers": 74eb2a7c "Schema": 5c27d10f "Examples": 641c458b --- + {/* 生成済みファイル。router-schemas/byteplus/dreamina-seedance-2-0-260128.json から `pnpm code-pages:gen` によって生成されます。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -184,6 +185,7 @@ curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128/reque - **Comfy**(デフォルト): `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128` - **fal**、`fal/fal-seedance-2.0` として: `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=fal` - **Higgsfield**、`higgsfield/higgsfield-seedance-2.0` として: `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=higgsfield` +- **Pika**、`pika/pika-seedance-2.0` として: `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=pika` - **Runware**、`runware/runware-seedance-2.0` として: `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=runware` - **WaveSpeed**、`wavespeed/wavespeed-seedance-2.0` として: `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=wavespeed` diff --git a/ja/development/comfy-router/models/google/nano-banana-2/code.mdx b/ja/development/comfy-router/models/google/nano-banana-2/code.mdx index 77140b61f0..e5a2cfcc18 100644 --- a/ja/development/comfy-router/models/google/nano-banana-2/code.mdx +++ b/ja/development/comfy-router/models/google/nano-banana-2/code.mdx @@ -2,18 +2,19 @@ title: "Comfy Router で Nano Banana 2 を使う" description: "Comfy Router 経由で HTTP を使って Nano Banana 2 (Gemini 3.1 Flash Image) で画像を生成するための Python、TypeScript、cURL スニペット、およびリクエストのフィールドと結果の形状" sidebarTitle: "Nano Banana 2" -translationSourceHash: abe95d9d +translationSourceHash: 29a236f1 translationFrom: development/comfy-router/models/google/nano-banana-2/code.mdx translationBlockHashes: "_intro": e6f85ac2 "Quick start": 7fb17070 - "Serving providers": bdc69c7e + "Serving providers": 5e97418c "Schema": 63c93920 "Examples": d294783d --- + {/* 生成されたファイルです。このディレクトリの code.yaml を編集し、`pnpm code-pages:gen` を実行してください。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -219,6 +220,7 @@ curl https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image/requests/$R - **Comfy**(デフォルト): `POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image` - **fal**、`fal/fal-nano-banana-2` として: `POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=fal` +- **Pika**、`pika/pika-nano-banana-2` として: `POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=pika` - **Runware**、`runware/runware-nano-banana-2` として: `POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=runware` - **WaveSpeed**、`wavespeed/wavespeed-nano-banana-2` として: `POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=wavespeed` diff --git a/ja/development/comfy-router/models/google/nano-banana-pro/code.mdx b/ja/development/comfy-router/models/google/nano-banana-pro/code.mdx index c7da1a3b26..002a22eed7 100644 --- a/ja/development/comfy-router/models/google/nano-banana-pro/code.mdx +++ b/ja/development/comfy-router/models/google/nano-banana-pro/code.mdx @@ -2,12 +2,12 @@ title: "Comfy Router で Nano Banana Pro を使う" description: "Comfy Router 経由の HTTP で Nano Banana Pro(Gemini 3 Pro Image)を使って画像を生成するための Python、TypeScript、cURL スニペット、およびリクエストフィールドと結果の形状" sidebarTitle: "Nano Banana Pro" -translationSourceHash: eeeda284 +translationSourceHash: 14675d65 translationFrom: development/comfy-router/models/google/nano-banana-pro/code.mdx translationBlockHashes: "_intro": 34f7de08 "Quick start": b78c780a - "Serving providers": f8e41f81 + "Serving providers": 1176620b "Schema": b9a919e8 "Examples": 54f56549 --- @@ -15,6 +15,7 @@ translationBlockHashes: + {/* GENERATED FILE. Edit code.yaml in this directory and run `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -220,6 +221,7 @@ curl https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image/requests/$REQUE - **Comfy**(デフォルト): `POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image` - **fal**、`fal/fal-nano-banana-pro` として: `POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=fal` +- **Pika**、`pika/pika-nano-banana-pro` として: `POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=pika` - **Runware**、`runware/runware-nano-banana-pro` として: `POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=runware` - **WaveSpeed**、`wavespeed/wavespeed-nano-banana-pro` として: `POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=wavespeed` diff --git a/ja/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx b/ja/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx index b9776158b0..3d6a5e17fd 100644 --- a/ja/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx +++ b/ja/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx @@ -2,16 +2,17 @@ title: "Comfy Router で Veo 3.1 Fast Generate 001 を使う" description: "Comfy Router 経由で veo/veo-3.1-fast-generate-001 を呼び出す: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Veo 3.1 Fast Generate 001" -translationSourceHash: d61d2fe8 +translationSourceHash: f5553980 translationFrom: development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx translationBlockHashes: "_intro": 2dd8ad2f "Quick start": 4f13f7f7 - "Schema": 70736fe7 + "Schema": e44aea6d "Examples": 88e27039 --- + {/* 生成済みファイル。`pnpm code-pages:gen` により router-schemas/veo/veo-3.1-fast-generate-001.json から生成されました。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -336,15 +337,15 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-fast-generate-001/requests/$REQ - 高品質化のためにプロンプトを自動的に改善します。デフォルトは true です。 + プロンプトを自動的に改善して品質を高めます。デフォルトは true。 - 生成されるビデオのフレームレート(1 秒あたりのフレーム数) + 生成されるビデオのフレームレート(1秒あたりのフレーム数) - ビデオとともにオーディオを生成するかどうか。デフォルトは true です。Veo 3.0 以降のモデルでサポートされています。 + ビデオと一緒にオーディオを生成するかどうか。デフォルトは true。Veo 3.0 以降のモデルでサポートされています。 @@ -358,7 +359,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-fast-generate-001/requests/$REQ - 進捗更新用の Cloud Pub/Sub トピック(projects/\{project}/topics/\{topic}) + 進捗更新用の Cloud Pub/Sub トピック(projects/\{project}/topics/\{topic})。Comfy の認証情報を使用する(BYOK 以外の)リクエストでは受け付けられません。この値が存在する場合、generate ルートは 400 を返します。これは、操作が Comfy のプロジェクトで実行され、Vertex が Comfy のサービスエージェントとして公開することになるためです。受け付けられるのは bring-your-own-key リクエストのみで、この場合 Vertex は自分のプロジェクト内でトピックに対する付与を評価します。 @@ -387,7 +388,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-fast-generate-001/requests/$REQ 生成されたビデオの保存先となる省略可能な Cloud Storage の場所(`gs://` URI)。 -自分自身のバケットを指定する必要があります。bring-your-own-key 以外では、このルートは自分のものではなく Comfy 自身の Google Cloud 認証情報で実行されるため、Comfy が所有するバケット内の保存先は、Comfy のサービスアカウントが共有レイアウトに実行し、Comfy のプロジェクトに課金される書き込みになります。そのような値を指定したリクエストは 400 で拒否され、何も生成されません。例外は 1 つだけで、プラットフォームストレージが有効な同期 Comfy Router 呼び出し(`POST /v2/models/{provider}/{model}`)です。この場合、Router 自身の Veo または Gemini アセットバケットを指す値は、その呼び出しのために Router が自分のプラットフォームプレフィックス配下で発行する保存先に置き換えられ、その Router が発行した正確な保存先だけが通されます。キューに入れた Router 送信(`POST /v2/models/{provider}/{model}/requests`)ではそのような置き換えは行われないため、他の Comfy 所有バケットと同様にその値を 400 で拒否します。それ以外の保存先は変更されずに Vertex へ転送され、アクセス権の付与は自分の責任です。bring-your-own-key の呼び出しは自分のプロジェクトで実行され、送信されたまま転送されます。 +自分自身のバケットを指定する必要があります。bring-your-own-key 以外では、このルートは自分のものではなく Comfy 自身の Google Cloud 認証情報で実行されるため、Comfy が所有するバケット内の保存先は、Comfy のサービスアカウントが共有レイアウトに対して実行し、Comfy のプロジェクトに課金される書き込みになります。そのような値を指定したリクエストは 400 で拒否され、何も生成されません。唯一の例外は、プラットフォームストレージが有効な同期 Comfy Router 呼び出し(`POST /v2/models/{provider}/{model}`)です。この場合、Router 自身の Veo または Gemini アセットバケットを指す値は、その呼び出しのために Router が自分のプラットフォームプレフィックス配下で発行する保存先に置き換えられ、その Router が発行した正確な保存先だけが通されます。キュー中の Router 送信(`POST /v2/models/{provider}/{model}/requests`)ではそのような置き換えは行われないため、他の Comfy 所有バケットと同様にその値を 400 で拒否します。それ以外の保存先は変更されずに Vertex へ転送され、アクセス権を付与するかどうかは自分で決めることになります。bring-your-own-key の呼び出しは自分のプロジェクトで実行され、送信されたまま転送されます。 diff --git a/ja/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx b/ja/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx index 967bd6d536..220e0ccd26 100644 --- a/ja/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx +++ b/ja/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx @@ -2,16 +2,17 @@ title: "Comfy Router で Veo 3.1 Generate 001 を使う" description: "Comfy Router 経由で veo/veo-3.1-generate-001 を呼び出します: エンドポイント、リクエストの形状、Router が返すレスポンス。" sidebarTitle: "Veo 3.1 Generate 001" -translationSourceHash: 576d56a4 +translationSourceHash: 0fab4eef translationFrom: development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx translationBlockHashes: "_intro": cba04c2d "Quick start": cd500ec3 - "Schema": b2b8f3ad + "Schema": 5618a5b3 "Examples": 88e27039 --- + {/* GENERATED FILE. Generated from router-schemas/veo/veo-3.1-generate-001.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -336,29 +337,29 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-generate-001/requests/$REQUEST_ - 高品質化のためにプロンプトを自動的に改善します。デフォルトは true です。 + プロンプトを自動的に改善して品質を高めます。デフォルト: true。 - 生成されるビデオのフレームレート (1 秒あたりのフレーム数) + 生成されるビデオのフレームレート(1 秒あたりのフレーム数) - ビデオとともにオーディオを生成するかどうか。デフォルトは true です。Veo 3.0 以降のモデルでサポートされています。 + ビデオと一緒にオーディオを生成するかどうか。デフォルト: true。Veo 3.0 以降のモデルでサポートされています。 - 生成されるビデオで避けるべき内容を記述したテキスト + 生成されるビデオで避けるべき内容を説明するテキスト - 生成されるビデオ内の人物を制御します。デフォルト: allow_adult + 生成されるビデオに登場する人物を制御します。デフォルト: allow_adult 指定可能な値: `dont_allow`、`allow_adult`、`allowAll` - 進捗更新用の Cloud Pub/Sub トピック (projects/\{project}/topics/\{topic}) + 進捗更新用の Cloud Pub/Sub トピック(projects/\{project}/topics/\{topic})。Comfy の認証情報を使う(BYOK 以外の)リクエストでは受け付けられません。指定されている場合、generate ルートは 400 を返します。これは操作が Comfy のプロジェクトで実行され、Vertex が Comfy のサービスエージェントとして公開することになるためです。bring-your-own-key リクエストでのみ受け付けられ、その場合 Vertex は自分のプロジェクトでトピックの付与を評価します。 @@ -393,7 +394,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-generate-001/requests/$REQUEST_ ビデオ生成リクエストの操作タイプ - 指定可能な値: `textToVideo`, `imageToVideo`, `referenceToVideo`, `edit`, `extend`, `upscale` + 指定可能な値: `textToVideo`、`imageToVideo`、`referenceToVideo`、`edit`、`extend`、`upscale` Router が `GET /v2/models/veo/veo-3.1-generate-001/openapi.json` で提供するスキーマから生成されたもので、リクエストがプロバイダーに到達する前に Router が呼び出しを検証する際に使用するドキュメントと同じです。 diff --git a/ja/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx b/ja/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx index eba3a8cb18..4008756ed4 100644 --- a/ja/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx +++ b/ja/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx @@ -2,12 +2,12 @@ title: "Comfy Router で Veo 3.1 Lite Generate 001 を使用する" description: "Comfy Router 経由で veo/veo-3.1-lite-generate-001 を呼び出します: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Veo 3.1 Lite Generate 001" -translationSourceHash: 530bd375 +translationSourceHash: 6526c1c6 translationFrom: development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx translationBlockHashes: "_intro": 8110da35 "Quick start": 7f826038 - "Schema": 59698d01 + "Schema": 647d02c5 "Examples": 88e27039 --- @@ -358,7 +358,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 進捗更新用の Cloud Pub/Sub トピック (projects/\{project}/topics/\{topic}) + 進捗更新のための Cloud Pub/Sub トピック(projects/\{project}/topics/\{topic})。Comfy の認証情報を使う(non-BYOK)リクエストでは受け付けられません。指定されている場合、generate ルートは 400 を返します。これは、操作が Comfy のプロジェクトで実行され、Vertex が Comfy のサービスエージェントとして公開することになるためです。受け付けられるのは bring-your-own-key リクエストのみで、その場合 Vertex はあなた自身のプロジェクトでトピックの許可を評価します。 diff --git a/ja/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx b/ja/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx index 05566779d8..346fad972b 100644 --- a/ja/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx +++ b/ja/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx @@ -2,14 +2,15 @@ title: "Comfy Router で Grok Imagine Video 1.5 Lite を使用する" description: "Comfy Router 経由で xai/grok-imagine-video-1.5-lite を呼び出す方法の説明です。エンドポイント、リクエストの形状、Router が返すレスポンスについて扱います。" sidebarTitle: "Grok Imagine Video 1.5 Lite" -translationSourceHash: 88188b7d +translationSourceHash: 770f7444 translationFrom: development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx translationBlockHashes: "_intro": 9f670d3a "Quick start": b5b53e4a - "Schema": 6acaee57 + "Schema": b2ee9fc3 "Examples": a4d81583 --- + {/* GENERATED FILE. Generated from router-schemas/xai/grok-imagine-video-1.5-lite.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -212,7 +213,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-lite/requests/$R ### 出力 - リクエストが入力モデレーションによってブロックされた場合、ブロック理由が含まれます + このドキュメントでは理由を一切含みません。空でないブロック理由は入力モデレーションによる拒否であり、Router はこのボディではなく Comfy Router エラーとして応答します。ここでは存在しないか、null または空です。 @@ -220,9 +221,9 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-lite/requests/$R - 遅延リクエストのステータス: "pending" または "done" + このドキュメントでは存在しないか `done` です。`pending` は Router が完了していないポーリングのボディであり、`200` として返されることはありません。Router は `video.url` が設定されている場合に status の不足を受け入れるため、呼び出し側はこれを必須にしてはなりません。 - 取り得る値: `pending`、`done` + 取り得る値: `done` @@ -233,8 +234,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-lite/requests/$R このリクエストのコストを USD ticks で表したもの。1 USD セントは 100,000,000 ticks に等しく、1 米ドルは 10,000,000,000 ticks に等しくなります。 - - xAI によって生成されたビデオ + + 完了した生成結果。ポーリングのドキュメントとは異なり、ここでは必須です。`video.url` を持たないターミナル結果は Comfy Router エラーとして応答されるため、`200` には常にこれが含まれます。 @@ -245,8 +246,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-lite/requests/$R モデルによって生成されたビデオがモデレーションルールに従っているかどうか - - 生成されたビデオのダウンロード URL。Router はビデオを Comfy ストレージに再ホストしてこのフィールドを書き換えるため、通常は最大 24 時間有効な Comfy 署名付き URL になります。発行時に 24 時間で署名され、23 時間のメモから再現されるため、その後のポーリングでは残り 1 時間しかない URL が返されることがあります。再ホストを実行できなかった場合、このフィールドは代わりに xAI 自身の短命な URL を保持します。NULLABLE: `url` が空の成功は、生成が完了したことを意味しません。いずれの場合もリンクは失効するため、URL を保存するのではなくビデオをダウンロードしてください。 + + このドキュメントでは空になりません。Router はこのリーフが設定されている場合にのみ成功を報告します。これは上記の再ホストされた Comfy 署名付き URL、または再ホストを実行できなかった場合は xAI 自身の短命な URL です。 ## 例 diff --git a/ja/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx b/ja/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx index ed546e5624..fe90890ebf 100644 --- a/ja/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx +++ b/ja/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router で Grok Imagine Video 1.5 Preview を使う" description: "Comfy Router 経由で xai/grok-imagine-video-1.5-preview を呼び出します: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Grok Imagine Video 1.5 Preview" -translationSourceHash: 718d565c +translationSourceHash: 6e071d09 translationFrom: development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx translationBlockHashes: "_intro": 1ac68989 "Quick start": 569a1e6f - "Schema": 89898016 + "Schema": 48e33fb3 "Examples": 53c80746 --- + {/* 生成済みファイル。`pnpm code-pages:gen` により router-schemas/xai/grok-imagine-video-1.5-preview.json から生成されました。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -215,7 +216,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-preview/requests ### 出力 - リクエストが入力モデレーションによってブロックされた場合、そのブロック理由が含まれます + このドキュメントでは理由を一切含みません。空でないブロック理由は入力モデレーションによる拒否であり、Router はこのボディではなく Comfy Router エラーとして応答します。ここでは存在しないか、null または空です。 @@ -223,9 +224,9 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-preview/requests - 遅延リクエストのステータス: 「pending」または「done」 + このドキュメントでは存在しないか `done` です。`pending` は Router が完了していないポーリングのボディであり、`200` として返されることはありません。Router は `video.url` が設定されている場合、status の不足を許容するため、呼び出し側はこれを必須にしてはなりません。 - 指定可能な値: `pending`、`done` + 指定可能な値: `done` @@ -236,8 +237,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-preview/requests このリクエストのコストを USD ティックで表したもの。1 米セントは 100,000,000 ティックに等しく、1 米ドルは 10,000,000,000 ティックに等しくなります。 - - xAI によって生成されたビデオ + + 完了した生成結果。ポーリング用ドキュメントとは異なり、ここでは必須です。`video.url` を持たないターミナル結果は Comfy Router エラーとして応答されるため、`200` には常にこれが含まれます。 @@ -248,8 +249,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-preview/requests モデルによって生成されたビデオがモデレーションルールに準拠しているかどうか - - 生成されたビデオのダウンロード URL。Router はビデオを Comfy ストレージに再ホストしてこのフィールドを書き換えるため、通常は最大 24 時間有効な Comfy 署名付き URL になります。発行時に 24 時間の署名が付き、23 時間のメモから再生されるため、後でポーリングすると残り 1 時間しかない URL が返されることがあります。再ホストを実行できなかった場合、このフィールドには代わりに xAI 自身の短命な URL が保持されます。NULLABLE: `url` が空の成功は、生成が完了したことを意味しません。いずれの場合もリンクは失効するため、URL を保存するのではなくビデオをダウンロードしてください。 + + このドキュメントでは空ではありません。Router はこのリーフが設定されている場合にのみ成功を報告します。これは上記で説明した再ホストされた Comfy 署名付き URL、または再ホストを実行できなかった場合は xAI 自身の短命な URL です。 ## 例 diff --git a/ja/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx b/ja/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx index 160e0cfdda..6e043a9fb1 100644 --- a/ja/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx +++ b/ja/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router で Grok Imagine Video 1.5 を使用する" description: "Comfy Router 経由で xai/grok-imagine-video-1.5 を呼び出す方法: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Grok Imagine Video 1.5" -translationSourceHash: 00ebc99e +translationSourceHash: e2c9e07a translationFrom: development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx translationBlockHashes: "_intro": cd12ea0a "Quick start": e6732b5e - "Schema": 5333f354 + "Schema": 616f8051 "Examples": 53c80746 --- + {/* GENERATED FILE. Generated from router-schemas/xai/grok-imagine-video-1.5.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -215,7 +216,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5/requests/$REQUES ### 出力 - リクエストが入力モデレーションによってブロックされた場合、ブロック理由を含みます + このドキュメントでは理由を含むことはありません。空でないブロック理由は入力モデレーションによる拒否であり、その場合 Router はこのボディではなく Comfy Router エラーとして応答します。ここでは存在しないか、null または空です。 @@ -223,9 +224,9 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5/requests/$REQUES - 遅延リクエストのステータス: "pending" または "done" + このドキュメントでは存在しないか `done` です。`pending` は Router が完了していないポーリングのボディであり、`200` として返されることはありません。Router は `video.url` が設定されている場合、status の不足を許容するため、呼び出し側はこれを必須にしてはいけません。 - 指定可能な値: `pending`、`done` + 指定可能な値: `done` @@ -236,8 +237,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5/requests/$REQUES USD ticks で表したこのリクエストのコスト。1 米国セントは 100,000,000 ticks、つまり 1 米国ドルは 10,000,000,000 ticks です。 - - xAI によって生成されたビデオ + + 完了した生成。ポーリング用ドキュメントとは異なり、ここでは必須です。`video.url` を持たないターミナル結果は Comfy Router エラーとして応答されるため、`200` には常にこれが含まれます。 @@ -248,8 +249,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5/requests/$REQUES モデルによって生成されたビデオがモデレーションルールを遵守しているかどうか - - 生成されたビデオのダウンロード URL。Router はビデオを Comfy ストレージに再ホストし、このフィールドを書き換えるため、通常は最大 24 時間有効な Comfy 署名付き URL になります。発行時に 24 時間で署名され、23 時間のメモから再生されるため、後のポーリングでは残り 1 時間程度の URL が返されることがあります。再ホストを実行できなかった場合、このフィールドには xAI 自身の短命な URL がそのまま残ります。NULLABLE: `url` が空の成功は完了した生成ではありません。いずれの場合もリンクは失効するため、URL を保存するのではなくビデオをダウンロードしてください。 + + このドキュメントでは空ではありません。Router が成功を報告するのは、このリーフが設定されている場合のみです。これは上記の再ホストされた Comfy 署名付き URL、または再ホストを実行できなかった場合は xAI 自身の短命な URL です。 ## 例 diff --git a/ja/development/comfy-router/models/xai/grok-imagine-video/code.mdx b/ja/development/comfy-router/models/xai/grok-imagine-video/code.mdx index 985a5eef0a..5741936dc2 100644 --- a/ja/development/comfy-router/models/xai/grok-imagine-video/code.mdx +++ b/ja/development/comfy-router/models/xai/grok-imagine-video/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router で Grok Imagine Video を使用する" description: "Comfy Router 経由で xai/grok-imagine-video を呼び出します。エンドポイント、リクエスト形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Grok Imagine Video" -translationSourceHash: 5f5a2915 +translationSourceHash: 5e191b3a translationFrom: development/comfy-router/models/xai/grok-imagine-video/code.mdx translationBlockHashes: "_intro": 343db6d5 "Quick start": 1c8fb26d - "Schema": a80ca991 + "Schema": d4d12d6e "Examples": 1085f4b8 --- + {/* 生成済みファイル。`pnpm code-pages:gen` により router-schemas/xai/grok-imagine-video.json から生成されています。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -215,7 +216,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID ### 出力 - リクエストが入力モデレーションによってブロックされた場合、そのブロック理由を含みます + このドキュメントでは理由を一切含みません。空でないブロック理由は入力モデレーションによる拒否であり、Router はこのボディではなく Comfy Router エラーとして応答します。ここでは存在しないか、null または空です。 @@ -223,9 +224,9 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID - 遅延リクエストのステータス: "pending" または "done" + このドキュメントでは存在しないか `done` です。`pending` は Router が完了していないポーリングのボディであり、`200` として返されることはありません。Router は `video.url` が設定されている場合は status の不足を許容するため、呼び出し側はこれを必須にしてはなりません。 - 指定可能な値: `pending`、`done` + 指定可能な値: `done` @@ -236,8 +237,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID このリクエストのコストを USD ティックで表したもの。1 USD セントは 100,000,000 ティック、つまり 1 米ドルは 10,000,000,000 ティックです。 - - xAI によって生成されたビデオ + + 完了した生成。ポーリング用ドキュメントとは異なり、ここでは必須です。`video.url` を持たないターミナルな結果は Comfy Router エラーとして応答されるため、`200` には常にこれが含まれます。 @@ -248,8 +249,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID モデルが生成したビデオがモデレーションルールに従っているかどうか - - 生成されたビデオのダウンロード URL。Router はビデオを Comfy のストレージに再ホストしてこのフィールドを書き換えるため、通常は最大 24 時間有効な Comfy 署名付き URL になります。発行時に 24 時間の署名が付与され、23 時間のメモから再現されるため、後でポーリングすると残り 1 時間しかない URL が返されることがあります。再ホストを実行できなかった場合、このフィールドには xAI 自身の短命な URL がそのまま残ります。NULLABLE: `url` が空の成功は、完了した生成ではありません。いずれの場合もリンクは失効するため、URL を保存するのではなくビデオをダウンロードしてください。 + + このドキュメントでは空ではありません。Router はこのリーフが設定されている場合にのみ成功を報告します。これは上記で説明した再ホストされた Comfy 署名付き URL、または再ホストを実行できなかった場合は xAI 自身の短命な URL です。 ## 例 diff --git a/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx b/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx index af83c91a86..1a406b5c67 100644 --- a/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx +++ b/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx @@ -2,18 +2,19 @@ title: "Comfy Router로 Dreamina Seedance 2.0 260128 사용하기" description: "Comfy Router를 통해 byteplus/dreamina-seedance-2-0-260128을 호출합니다. endpoint, 요청 형태, 그리고 Router가 반환하는 응답을 다룹니다." sidebarTitle: "Dreamina Seedance 2.0 260128" -translationSourceHash: f91db797 +translationSourceHash: 98890ddf translationFrom: development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx translationBlockHashes: "_intro": 54eac94b "Quick start": ca074ca5 - "Serving providers": b0d0caab + "Serving providers": 74eb2a7c "Schema": 5c27d10f "Examples": 641c458b --- + {/* GENERATED FILE. Generated from router-schemas/byteplus/dreamina-seedance-2-0-260128.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -184,6 +185,7 @@ curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128/reque - **Comfy** (기본값): `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128` - **fal**, `fal/fal-seedance-2.0` 이름으로: `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=fal` - **Higgsfield**, `higgsfield/higgsfield-seedance-2.0` 이름으로: `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=higgsfield` +- **Pika**, `pika/pika-seedance-2.0` 이름으로: `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=pika` - **Runware**, `runware/runware-seedance-2.0` 이름으로: `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=runware` - **WaveSpeed**, `wavespeed/wavespeed-seedance-2.0` 이름으로: `POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=wavespeed` diff --git a/ko/development/comfy-router/models/google/nano-banana-2/code.mdx b/ko/development/comfy-router/models/google/nano-banana-2/code.mdx index b59543fa5b..bfeb41fddc 100644 --- a/ko/development/comfy-router/models/google/nano-banana-2/code.mdx +++ b/ko/development/comfy-router/models/google/nano-banana-2/code.mdx @@ -2,18 +2,19 @@ title: "Comfy Router로 Nano Banana 2 사용하기" description: "Comfy Router를 통해 HTTP로 Nano Banana 2(Gemini 3.1 Flash Image)로 이미지를 생성하기 위한 Python, TypeScript, cURL 스니펫과 요청 필드 및 결과 형태" sidebarTitle: "Nano Banana 2" -translationSourceHash: abe95d9d +translationSourceHash: 29a236f1 translationFrom: development/comfy-router/models/google/nano-banana-2/code.mdx translationBlockHashes: "_intro": e6f85ac2 "Quick start": 7fb17070 - "Serving providers": bdc69c7e + "Serving providers": 5e97418c "Schema": 63c93920 "Examples": d294783d --- + {/* 생성된 파일입니다. 이 디렉터리의 code.yaml을 편집한 뒤 `pnpm code-pages:gen`을 실행하세요. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -219,10 +220,11 @@ curl https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image/requests/$R - **Comfy**(기본값): `POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image` - **fal**, `fal/fal-nano-banana-2`로: `POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=fal` +- **Pika**, `pika/pika-nano-banana-2`로: `POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=pika` - **Runware**, `runware/runware-nano-banana-2`로: `POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=runware` - **WaveSpeed**, `wavespeed/wavespeed-nano-banana-2`로: `POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=wavespeed` -`strict_mode`의 기본값은 false이므로, Router는 이 페이지에 문서화된 네이티브 요청 본문을 공급자 자체 스키마로 변환하고 응답을 다시 변환합니다. API 레퍼런스의 [`model_provider`, `strict_mode`, `fallback_provider`](/ko/development/comfy-router/reference#post-v2modelsprovidermodel)와 이렇게 라우팅되는 모든 모델을 다루는 [제공 공급자](/ko/development/comfy-router/providers)를 참조하세요. +`strict_mode`의 기본값은 `false`이므로, Router는 이 페이지에 문서화된 네이티브 요청 본문을 공급자 자체 스키마로 변환하고 응답을 다시 변환합니다. API 레퍼런스의 [`model_provider`, `strict_mode`, `fallback_provider`](/ko/development/comfy-router/reference#post-v2modelsprovidermodel)와 이렇게 라우팅되는 모든 모델을 다루는 [제공 공급자](/ko/development/comfy-router/providers)를 참조하세요. ## 스키마 diff --git a/ko/development/comfy-router/models/google/nano-banana-pro/code.mdx b/ko/development/comfy-router/models/google/nano-banana-pro/code.mdx index b82bf28211..783eaf4795 100644 --- a/ko/development/comfy-router/models/google/nano-banana-pro/code.mdx +++ b/ko/development/comfy-router/models/google/nano-banana-pro/code.mdx @@ -2,18 +2,19 @@ title: "Comfy Router로 Nano Banana Pro 사용하기" description: "Comfy Router를 통해 HTTP로 Nano Banana Pro(Gemini 3 Pro Image)로 이미지를 생성하는 Python, TypeScript, cURL 스니펫과 요청 필드 및 결과 형태" sidebarTitle: "Nano Banana Pro" -translationSourceHash: eeeda284 +translationSourceHash: 14675d65 translationFrom: development/comfy-router/models/google/nano-banana-pro/code.mdx translationBlockHashes: "_intro": 34f7de08 "Quick start": b78c780a - "Serving providers": f8e41f81 + "Serving providers": 1176620b "Schema": b9a919e8 "Examples": 54f56549 --- + {/* GENERATED FILE. Edit code.yaml in this directory and run `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -219,6 +220,7 @@ curl https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image/requests/$REQUE - **Comfy**(기본값): `POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image` - **fal**, `fal/fal-nano-banana-pro` 이름으로: `POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=fal` +- **Pika**, `pika/pika-nano-banana-pro` 이름으로: `POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=pika` - **Runware**, `runware/runware-nano-banana-pro` 이름으로: `POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=runware` - **WaveSpeed**, `wavespeed/wavespeed-nano-banana-pro` 이름으로: `POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=wavespeed` diff --git a/ko/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx b/ko/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx index 1f597848a8..6b5e73b949 100644 --- a/ko/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx +++ b/ko/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx @@ -2,16 +2,17 @@ title: "Comfy Router로 Veo 3.1 Fast Generate 001 사용하기" description: "Comfy Router를 통해 veo/veo-3.1-fast-generate-001을 호출합니다: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답." sidebarTitle: "Veo 3.1 Fast Generate 001" -translationSourceHash: d61d2fe8 +translationSourceHash: f5553980 translationFrom: development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx translationBlockHashes: "_intro": 2dd8ad2f "Quick start": 4f13f7f7 - "Schema": 70736fe7 + "Schema": e44aea6d "Examples": 88e27039 --- + {/* 생성된 파일. `pnpm code-pages:gen`으로 router-schemas/veo/veo-3.1-fast-generate-001.json에서 생성됨. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -336,41 +337,41 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-fast-generate-001/requests/$REQ - 더 높은 품질을 위해 프롬프트를 자동으로 개선합니다. 기본값은 true입니다. + 더 높은 품질을 위해 프롬프트를 자동으로 개선합니다. 기본값은 참입니다. - 생성된 비디오의 프레임 속도(초당 프레임 수) + 생성된 비디오의 프레임 레이트(초당 프레임 수) - 비디오와 함께 오디오를 생성할지 여부입니다. 기본값은 true입니다. Veo 3.0+ 모델에서 지원됩니다. + 비디오와 함께 오디오를 생성할지 여부입니다. 기본값은 참입니다. Veo 3.0+ 모델에서 지원됩니다. - 생성된 비디오에서 피해야 할 사항을 설명하는 텍스트 + 생성된 비디오에서 피하고자 하는 내용을 설명하는 텍스트입니다. - 생성된 비디오에서 사람을 제어합니다. 기본값: allow_adult + 생성된 비디오에 등장하는 사람을 제어합니다. 기본값: allow_adult - 사용 가능한 값: `dont_allow`, `allow_adult`, `allowAll` + 가능한 값: `dont_allow`, `allow_adult`, `allowAll` - 진행 상황 업데이트를 위한 Cloud Pub/Sub 주제 (projects/\{project}/topics/\{topic}) + 진행 상황 업데이트를 위한 Cloud Pub/Sub 주제입니다(projects/\{project}/topics/\{topic}). Comfy 자격 증명을 사용하는(비 BYOK) 요청에서는 허용되지 않습니다: 이 값이 있으면 생성 라우트가 400으로 응답하는데, 작업이 Comfy의 프로젝트에서 실행되어 Vertex가 Comfy의 서비스 에이전트로 게시하기 때문입니다. bring-your-own-key 요청에서만 허용되며, 이 경우 Vertex는 사용자 자신의 프로젝트에서 해당 주제에 대한 권한 부여를 평가합니다. 입력 이미지의 크기 조정 방식입니다. 기본값: pad - 사용 가능한 값: `pad`, `crop` + 가능한 값: `pad`, `crop` 출력 비디오 해상도입니다. Veo 3.0+ 모델에서 지원됩니다. 기본값: 720p - 사용 가능한 값: `720p`, `1080p`, `4k` + 가능한 값: `720p`, `1080p`, `4k` @@ -387,13 +388,13 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-fast-generate-001/requests/$REQ 생성된 비디오를 저장할 선택적 Cloud Storage 대상 위치이며 `gs://` URI입니다. -반드시 자신의 버킷을 지정해야 합니다. bring-your-own-key가 아니면 이 라우트는 사용자의 자격 증명이 아니라 Comfy 자체의 Google Cloud 자격 증명으로 실행되므로, Comfy 소유 버킷 안의 대상 위치는 Comfy 서비스 계정이 공유 레이아웃에 수행하고 Comfy 프로젝트에 청구되는 쓰기가 됩니다. 그런 값을 지정한 요청은 400으로 거부되고 아무것도 생성되지 않습니다. 예외는 하나뿐이며, 플랫폼 스토리지가 활성화된 동기 Comfy Router 호출(`POST /v2/models/{provider}/{model}`)입니다. 이 경우 Router 자체의 Veo 또는 Gemini 에셋 버킷을 가리키는 값은 해당 호출을 위해 Router가 사용자의 플랫폼 접두사 아래에서 발급하는 대상 위치로 대체되며, Router가 발급한 바로 그 대상 위치만 통과합니다. 큐에 넣은 Router 제출(`POST /v2/models/{provider}/{model}/requests`)은 그러한 대체를 하지 않으므로 다른 Comfy 소유 버킷과 마찬가지로 그 값을 400으로 거부합니다. 그 밖의 대상 위치는 변경 없이 Vertex로 전달되며 액세스 권한 부여는 사용자 몫입니다. bring-your-own-key 호출은 자신의 프로젝트에서 실행되며 전송된 그대로 전달됩니다. +반드시 자신의 버킷을 지정해야 합니다. bring-your-own-key가 아니면 이 라우트는 사용자의 자격 증명이 아니라 Comfy 자체의 Google Cloud 자격 증명으로 실행되므로, Comfy 소유 버킷 안의 대상 위치는 Comfy 서비스 계정이 공유 레이아웃에 수행하고 Comfy 프로젝트에 청구되는 쓰기가 됩니다. 그런 값을 지정한 요청은 400으로 거부되고 아무것도 생성되지 않습니다. 예외는 하나뿐이며, 플랫폼 스토리지가 활성화된 동기 Comfy Router 호출(`POST /v2/models/{provider}/{model}`)입니다. 이 경우 Router 자체의 Veo 또는 Gemini 에셋 버킷을 가리키는 값은 해당 호출을 위해 Router가 사용자의 플랫폼 접두사 아래에서 발급하는 대상 위치로 대체되며, Router가 발급한 바로 그 대상 위치만 통과합니다. 대기 중인 Router 제출(`POST /v2/models/{provider}/{model}/requests`)은 그러한 대체를 하지 않으므로 다른 Comfy 소유 버킷과 마찬가지로 그 값을 400으로 거부합니다. 그 밖의 대상 위치는 변경 없이 Vertex로 전달되며 액세스 권한 부여는 사용자 몫입니다. bring-your-own-key 호출은 자신의 프로젝트에서 실행되며 전송된 그대로 전달됩니다. 비디오 생성 요청의 작업 유형 - 가능한 값: `textToVideo`, `imageToVideo`, `referenceToVideo`, `edit`, `extend`, `upscale` + 가능한 값: `textToVideo`, `imageToVideo`, `referenceToVideo`, `edit`, `extend`, `upscale` Router가 `GET /v2/models/veo/veo-3.1-fast-generate-001/openapi.json`에서 제공하는 스키마를 기반으로 생성되었으며, 이는 요청이 공급자에게 도달하기 이전에 호출을 검증하는 데 사용하는 것과 동일한 문서입니다. diff --git a/ko/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx b/ko/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx index 9583323019..bee90086fe 100644 --- a/ko/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx +++ b/ko/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx @@ -2,12 +2,12 @@ title: "Comfy Router로 Veo 3.1 Generate 001 사용하기" description: "Comfy Router를 통해 veo/veo-3.1-generate-001을 호출합니다: endpoint, 요청 형태, 그리고 Router가 반환하는 응답을 설명합니다." sidebarTitle: "Veo 3.1 Generate 001" -translationSourceHash: 576d56a4 +translationSourceHash: 0fab4eef translationFrom: development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx translationBlockHashes: "_intro": cba04c2d "Quick start": cd500ec3 - "Schema": b2b8f3ad + "Schema": 5618a5b3 "Examples": 88e27039 --- @@ -358,7 +358,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-generate-001/requests/$REQUEST_ - 진행 상황 업데이트를 위한 Cloud Pub/Sub 토픽 (projects/\{project}/topics/\{topic}) + 진행 상황 업데이트를 위한 Cloud Pub/Sub 주제입니다 (projects/\{project}/topics/\{topic}). Comfy 자격 증명(non-BYOK) 요청에서는 허용되지 않습니다. 이 값이 포함되어 있으면 generate 라우트가 400을 반환합니다. 작업이 Comfy 프로젝트에서 실행되고 Vertex가 Comfy의 서비스 에이전트로 게시하기 때문입니다. bring-your-own-key 요청에서만 허용되며, 이 경우 Vertex는 자신의 프로젝트에서 주제 권한을 평가합니다. diff --git a/ko/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx b/ko/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx index cb945bc6e2..85255f53cd 100644 --- a/ko/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx +++ b/ko/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx @@ -2,16 +2,17 @@ title: "Comfy Router로 Veo 3.1 Lite Generate 001 사용하기" description: "Comfy Router를 통해 veo/veo-3.1-lite-generate-001을 호출합니다: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답." sidebarTitle: "Veo 3.1 Lite Generate 001" -translationSourceHash: 530bd375 +translationSourceHash: 6526c1c6 translationFrom: development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx translationBlockHashes: "_intro": 8110da35 "Quick start": 7f826038 - "Schema": 59698d01 + "Schema": 647d02c5 "Examples": 88e27039 --- + {/* GENERATED FILE. Generated from router-schemas/veo/veo-3.1-lite-generate-001.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -336,33 +337,33 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 더 높은 품질을 위해 프롬프트를 자동으로 개선합니다. 기본값은 true입니다. + 더 높은 품질을 위해 프롬프트를 자동으로 개선합니다. 기본값: 참. - 생성된 비디오의 초당 프레임 수 + 생성된 비디오의 프레임 레이트(초당 프레임 수)입니다. - 비디오와 함께 오디오를 생성할지 여부. 기본값은 true입니다. Veo 3.0+ 모델에서 지원됩니다. + 비디오와 함께 오디오를 생성할지 여부입니다. 기본값: 참. Veo 3.0+ 모델에서 지원됩니다. - 생성된 비디오에서 피해야 할 내용을 설명하는 텍스트 + 생성된 비디오에서 피해야 할 내용을 설명하는 텍스트입니다. - 생성된 비디오의 사람을 제어합니다. 기본값: allow_adult + 생성된 비디오에 등장하는 사람을 제어합니다. 기본: allow_adult 가능한 값: `dont_allow`, `allow_adult`, `allowAll` - 진행 상황 업데이트를 위한 Cloud Pub/Sub 주제 (projects/\{project}/topics/\{topic}) + 진행 상황 업데이트를 위한 Cloud Pub/Sub 토픽입니다(projects/\{project}/topics/\{topic}). Comfy 자격 증명(비 BYOK) 요청에서는 허용되지 않습니다. 이 파라미터가 있으면 generate 라우트가 400으로 응답하는데, 작업이 Comfy의 프로젝트에서 실행되고 Vertex가 Comfy의 서비스 에이전트로 게시하게 되기 때문입니다. Vertex가 자신의 프로젝트에서 토픽 권한을 평가하는 bring-your-own-key 요청에서만 허용됩니다. - 입력 이미지의 크기 조정 방식. 기본값: pad + 입력 이미지의 크기 조정 방식입니다. 기본: pad 가능한 값: `pad`, `crop` diff --git a/ko/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx b/ko/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx index 5f31b5473e..34a0ec91ef 100644 --- a/ko/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx +++ b/ko/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx @@ -2,14 +2,15 @@ title: "Comfy Router로 Grok Imagine Video 1.5 Lite 사용하기" description: "Comfy Router를 통해 xai/grok-imagine-video-1.5-lite를 호출합니다: endpoint, 요청 형태, 그리고 Router가 반환하는 응답." sidebarTitle: "Grok Imagine Video 1.5 Lite" -translationSourceHash: 88188b7d +translationSourceHash: 770f7444 translationFrom: development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx translationBlockHashes: "_intro": 9f670d3a "Quick start": b5b53e4a - "Schema": 6acaee57 + "Schema": b2ee9fc3 "Examples": a4d81583 --- + {/* 생성된 파일. `pnpm code-pages:gen`에 의해 router-schemas/xai/grok-imagine-video-1.5-lite.json에서 생성됨. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -212,7 +213,7 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5-lite/openapi.json`에서 ### 출력 - 입력 검열로 요청이 차단된 경우 차단 사유를 포함합니다 + 이 문서에서는 사유를 담지 않습니다. 비어 있지 않은 차단 사유는 입력 검열 거부이며, Router는 이 본문 대신 Comfy Router 오류로 응답합니다. 여기서는 누락되거나 null이거나 비어 있습니다. @@ -220,9 +221,9 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5-lite/openapi.json`에서 - 지연된 요청의 상태: "pending" 또는 "done" + 이 문서에서는 누락되거나 `done`입니다. `pending`은 Router가 아직 완료하지 않은 폴링의 본문이며 `200`으로 반환되지 않습니다. Router는 `video.url`이 채워져 있으면 누락된 status를 허용하므로, 호출자가 이를 필수로 요구해서는 안 됩니다. - 가능한 값: `pending`, `done` + 가능한 값: `done` @@ -233,8 +234,8 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5-lite/openapi.json`에서 이 요청의 비용을 USD 틱 단위로 나타낸 값입니다. 1 US 센트는 100,000,000틱이므로 1 미국 달러는 10,000,000,000틱입니다. - - xAI에서 생성된 비디오 + + 완료된 생성 결과입니다. 폴링 문서와 달리 여기서는 필수입니다. `video.url`이 없는 터미널 결과는 Comfy Router 오류로 응답되므로, `200`에는 항상 이 필드가 포함됩니다. @@ -245,8 +246,8 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5-lite/openapi.json`에서 모델이 생성한 비디오가 검열 규칙을 준수하는지 여부 - - 생성된 비디오의 다운로드 URL. Router는 비디오를 Comfy 스토리지에 다시 호스팅하고 이 필드를 재작성하므로, 일반적으로 최대 24시간 동안 유효한 Comfy 서명 URL입니다. 발급될 때 24시간으로 서명되고 23시간 메모에서 재생되므로, 나중에 폴링하면 남은 시간이 1시간도 되지 않는 URL을 받을 수 있습니다. 재호스팅을 수행할 수 없었던 경우에는 이 필드가 대신 xAI 자체의 단기 URL을 유지합니다. NULLABLE: `url`이 비어 있는 성공은 완료된 생성이 아닙니다. 어느 쪽이든 링크는 만료되므로 URL을 저장하지 말고 비디오를 다운로드하세요. + + 이 문서에서는 비어 있지 않습니다. Router는 이 리프가 채워진 경우에만 성공을 보고합니다. 이는 위에서 설명한 재호스팅된 Comfy 서명 URL이거나, 재호스팅을 수행할 수 없었던 경우 xAI 자체의 단기 URL입니다. ## 예시 diff --git a/ko/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx b/ko/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx index 1f43ae0438..bbd8ba18e4 100644 --- a/ko/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx +++ b/ko/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router로 Grok Imagine Video 1.5 Preview 사용하기" description: "Comfy Router를 통해 xai/grok-imagine-video-1.5-preview를 호출하는 방법: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답." sidebarTitle: "Grok Imagine Video 1.5 Preview" -translationSourceHash: 718d565c +translationSourceHash: 6e071d09 translationFrom: development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx translationBlockHashes: "_intro": 1ac68989 "Quick start": 569a1e6f - "Schema": 89898016 + "Schema": 48e33fb3 "Examples": 53c80746 --- + {/* GENERATED FILE. Generated from router-schemas/xai/grok-imagine-video-1.5-preview.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -161,7 +162,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-preview/requests 비디오 재생 시간(초). 범위 [1, 15]. 기본값 8. - 범위: `1` ~ `15` + 범위: `1`부터 `15`까지 @@ -215,7 +216,7 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5-preview/openapi.json`에서 ### 출력 - 요청이 입력 검열로 인해 차단된 경우 차단 사유를 포함합니다 + 이 문서에서는 사유를 담지 않습니다. 비어 있지 않은 차단 사유는 입력 검열 거부이며, Router는 이 본문 대신 Comfy Router 오류로 응답합니다. 여기서는 누락되거나 null이거나 비어 있습니다. @@ -223,9 +224,9 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5-preview/openapi.json`에서 - 지연된 요청의 상태: "pending" 또는 "done" + 이 문서에서는 누락되거나 `done`입니다. `pending`은 Router가 아직 완료하지 않은 폴링의 본문이며 `200`으로 반환되지 않습니다. Router는 `video.url`이 채워져 있으면 누락된 status를 허용하므로, 호출자가 이를 필수로 요구해서는 안 됩니다. - 가능한 값: `pending`, `done` + 가능한 값: `done` @@ -236,8 +237,8 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5-preview/openapi.json`에서 이 요청의 비용을 USD 틱으로 나타낸 값입니다. 1 미국 센은 100,000,000틱이므로 1 미국 달러는 10,000,000,000틱입니다. - - xAI에서 생성된 비디오 + + 완료된 생성 결과입니다. 폴링 문서와 달리 여기에서는 필수입니다. `video.url`이 없는 터미널 결과는 Comfy Router 오류로 응답되므로, `200`은 항상 이 필드를 포함합니다. @@ -248,8 +249,8 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5-preview/openapi.json`에서 모델이 생성한 비디오가 검열 규칙을 준수하는지 여부 - - 생성된 비디오의 다운로드 URL입니다. Router는 비디오를 Comfy 스토리지에 다시 호스팅하고 이 필드를 다시 작성하므로, 일반적으로 최대 24시간 동안 유효한 Comfy 서명 URL입니다. 발급 시 24시간으로 서명되고 23시간짜리 메모에서 재생되므로, 나중에 폴링하면 남은 유효 시간이 1시간도 되지 않은 URL이 반환될 수 있습니다. 재호스팅을 수행할 수 없는 경우에는 이 필드가 xAI 자체의 수명이 짧은 URL을 그대로 유지합니다. NULLABLE: `url`이 비어 있는 성공은 완료된 생성이 아닙니다. 어느 경우든 링크는 만료되므로 URL을 저장하지 말고 비디오를 다운로드하세요. + + 이 문서에서는 비어 있지 않습니다. Router는 이 리프가 채워진 경우에만 성공을 보고합니다. 이는 위에서 설명한 다시 호스팅된 Comfy 서명 URL이거나, 재호스팅을 수행할 수 없었던 경우에는 xAI 자체의 수명이 짧은 URL입니다. ## 예시 diff --git a/ko/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx b/ko/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx index 2d5a392da3..aaa8fcb773 100644 --- a/ko/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx +++ b/ko/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router로 Grok Imagine Video 1.5 사용하기" description: "Comfy Router를 통해 xai/grok-imagine-video-1.5를 호출합니다: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답입니다." sidebarTitle: "Grok Imagine Video 1.5" -translationSourceHash: 00ebc99e +translationSourceHash: e2c9e07a translationFrom: development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx translationBlockHashes: "_intro": cd12ea0a "Quick start": e6732b5e - "Schema": 5333f354 + "Schema": 616f8051 "Examples": 53c80746 --- + {/* GENERATED FILE. Generated from router-schemas/xai/grok-imagine-video-1.5.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -215,7 +216,7 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5/openapi.json`에서 제공 ### 출력 - 입력 검열로 요청이 차단된 경우 차단 사유를 포함합니다 + 이 문서에서는 사유를 담지 않습니다. 비어 있지 않은 차단 사유는 입력 검열 거부이며, Router는 이 본문 대신 Comfy Router 오류로 응답합니다. 여기서는 존재하지 않거나 null이거나 빈 값입니다. @@ -223,9 +224,9 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5/openapi.json`에서 제공 - 지연된 요청의 상태: "pending" 또는 "done" + 이 문서에서는 존재하지 않거나 `done`입니다. `pending`은 Router가 아직 완료하지 못한 폴링의 본문이며 `200`으로 반환되지 않습니다. Router는 `video.url`이 채워져 있으면 누락된 status를 허용하므로, 호출자가 이를 필수로 요구해서는 안 됩니다. - 가능한 값: `pending`, `done` + 가능한 값: `done` @@ -236,8 +237,8 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5/openapi.json`에서 제공 이 요청의 비용을 USD tick 단위로 나타낸 값. 1 미국 센트는 100,000,000 tick이고, 1 미국 달러는 10,000,000,000 tick입니다. - - xAI가 생성한 비디오 + + 완료된 생성 결과입니다. 폴링 문서와 달리 여기서는 필수입니다. `video.url`이 없는 터미널 결과는 Comfy Router 오류로 응답되므로, `200`은 항상 이 객체를 포함합니다. @@ -248,8 +249,8 @@ Router가 `GET /v2/models/xai/grok-imagine-video-1.5/openapi.json`에서 제공 모델이 생성한 비디오가 검열 규칙을 준수하는지 여부 - - 생성된 비디오의 다운로드 URL. Router는 비디오를 Comfy 스토리지에 다시 호스팅하고 이 필드를 재작성하므로, 일반적으로 최대 24시간 동안 유효한 Comfy 서명 URL입니다. 발급 시 24시간으로 서명되고 23시간 메모에서 재생되므로, 나중에 폴링하면 남은 유효 기간이 1시간도 되지 않는 URL을 받을 수 있습니다. 재호스팅을 수행할 수 없었던 경우에는 이 필드가 xAI 자체의 단기 URL을 유지합니다. NULLABLE: `url`이 비어 있는 성공은 완료된 생성이 아닙니다. 어느 경우든 링크는 만료되므로, URL을 저장하지 말고 비디오를 다운로드하세요. + + 이 문서에서는 비어 있지 않습니다. Router는 이 리프가 채워진 경우에만 성공을 보고합니다. 이 값은 위에서 설명한 재호스팅된 Comfy 서명 URL이며, 재호스팅을 수행할 수 없었던 경우에는 xAI 자체의 단기 URL입니다. ## 예시 diff --git a/ko/development/comfy-router/models/xai/grok-imagine-video/code.mdx b/ko/development/comfy-router/models/xai/grok-imagine-video/code.mdx index 80626fd71e..bc47affdd7 100644 --- a/ko/development/comfy-router/models/xai/grok-imagine-video/code.mdx +++ b/ko/development/comfy-router/models/xai/grok-imagine-video/code.mdx @@ -2,17 +2,18 @@ title: "Comfy Router로 Grok Imagine Video 사용하기" description: "Comfy Router를 통해 xai/grok-imagine-video 호출하기: 엔드포인트, 요청 형태, Router가 반환하는 응답." sidebarTitle: "Grok Imagine Video" -translationSourceHash: 5f5a2915 +translationSourceHash: 5e191b3a translationFrom: development/comfy-router/models/xai/grok-imagine-video/code.mdx translationBlockHashes: "_intro": 343db6d5 "Quick start": 1c8fb26d - "Schema": a80ca991 + "Schema": d4d12d6e "Examples": 1085f4b8 --- + {/* GENERATED FILE. Generated from router-schemas/xai/grok-imagine-video.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -175,7 +176,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID - 입력 이미지의 URL (공개 URL 또는 base64로 인코딩된 데이터 URI) + 입력 이미지의 URL(공개 URL 또는 base64로 인코딩된 데이터 URI) @@ -215,7 +216,7 @@ Router가 `GET /v2/models/xai/grok-imagine-video/openapi.json`에서 제공하 ### 출력 - 입력 검열로 인해 요청이 차단된 경우 차단 사유를 포함합니다 + 이 문서에서는 사유를 담지 않습니다. 비어 있지 않은 차단 사유는 입력 검열 거부이며, Router는 이를 이 본문이 아니라 Comfy Router 오류로 응답합니다. 이 문서에서는 누락되거나 null이거나 비어 있습니다. @@ -223,9 +224,9 @@ Router가 `GET /v2/models/xai/grok-imagine-video/openapi.json`에서 제공하 - 지연된 요청의 상태: "pending" 또는 "done" + 이 문서에서는 누락되거나 `done`입니다. `pending`은 Router가 아직 완료하지 않은 폴링의 본문이며 `200`으로 반환되지 않습니다. Router는 `video.url`이 채워져 있으면 누락된 status를 허용하므로, 호출자가 이를 필수로 요구해서는 안 됩니다. - 가능한 값: `pending`, `done` + 가능한 값: `done` @@ -236,8 +237,8 @@ Router가 `GET /v2/models/xai/grok-imagine-video/openapi.json`에서 제공하 USD 틱으로 표시된 이 요청의 비용입니다. 1 USD 센트는 100,000,000틱이므로, 1 미국 달러는 10,000,000,000틱입니다. - - xAI에서 생성된 비디오 + + 완료된 생성 결과입니다. 폴링 문서와 달리 여기에서는 필수입니다. `video.url`이 없는 터미널 결과는 Comfy Router 오류로 응답되므로, `200`에는 항상 이 객체가 포함됩니다. @@ -248,8 +249,8 @@ Router가 `GET /v2/models/xai/grok-imagine-video/openapi.json`에서 제공하 모델이 생성한 비디오가 검열 규칙을 준수하는지 여부 - - 생성된 비디오의 다운로드 URL. Router는 비디오를 Comfy 스토리지에 다시 호스팅하고 이 필드를 재작성하므로, 일반적으로 최대 24시간 동안 유효한 Comfy 서명 URL입니다. 발급 시점에 24시간으로 서명되며 23시간짜리 메모에서 재생되므로, 나중에 폴링하면 남은 유효 시간이 1시간도 되지 않은 URL이 반환될 수 있습니다. 다시 호스팅할 수 없는 경우에는 이 필드가 xAI 자체의 수명이 짧은 URL을 그대로 유지합니다. NULLABLE: `url`이 비어 있는 성공은 완료된 생성이 아닙니다. 어느 경우든 링크는 만료되므로 URL을 저장하기보다 비디오를 다운로드하세요. + + 이 문서에서는 비어 있지 않습니다. Router는 이 리프가 채워져 있을 때만 성공을 보고합니다. 이 값은 위에서 설명한 다시 호스팅된 Comfy 서명 URL이거나, 다시 호스팅할 수 없었을 경우 xAI 자체의 수명이 짧은 URL입니다. ## 예시 diff --git a/zh/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx b/zh/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx index 4ab887be0c..b41516a4fd 100644 --- a/zh/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx +++ b/zh/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx @@ -2,18 +2,19 @@ title: "使用 Dreamina Seedance 2.0 260128 与 Comfy Router" description: "通过 Comfy Router 调用 byteplus/dreamina-seedance-2-0-260128:端点、请求形状以及 Router 返回的响应。" sidebarTitle: "Dreamina Seedance 2.0 260128" -translationSourceHash: f91db797 +translationSourceHash: 98890ddf translationFrom: development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code.mdx translationBlockHashes: "_intro": 54eac94b "Quick start": ca074ca5 - "Serving providers": b0d0caab + "Serving providers": 74eb2a7c "Schema": 5c27d10f "Examples": 641c458b --- + {/* 已生成文件。由 `pnpm code-pages:gen` 从 router-schemas/byteplus/dreamina-seedance-2-0-260128.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -184,6 +185,7 @@ curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128/reque - **Comfy**(默认):`POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128` - **fal**,以 `fal/fal-seedance-2.0` 的形式:`POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=fal` - **Higgsfield**,以 `higgsfield/higgsfield-seedance-2.0` 的形式:`POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=higgsfield` +- **Pika**,以 `pika/pika-seedance-2.0` 的形式:`POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=pika` - **Runware**,以 `runware/runware-seedance-2.0` 的形式:`POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=runware` - **WaveSpeed**,以 `wavespeed/wavespeed-seedance-2.0` 的形式:`POST https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-0-260128?model_provider=wavespeed` diff --git a/zh/development/comfy-router/models/google/nano-banana-2/code.mdx b/zh/development/comfy-router/models/google/nano-banana-2/code.mdx index ce362c2ae7..40b938289a 100644 --- a/zh/development/comfy-router/models/google/nano-banana-2/code.mdx +++ b/zh/development/comfy-router/models/google/nano-banana-2/code.mdx @@ -2,18 +2,19 @@ title: "将 Nano Banana 2 与 Comfy Router 配合使用" description: "通过 Comfy Router 以 HTTP 方式调用 Nano Banana 2(Gemini 3.1 Flash Image)生成图像的 Python、TypeScript 和 cURL 代码片段,以及请求字段和返回结果结构" sidebarTitle: "Nano Banana 2" -translationSourceHash: abe95d9d +translationSourceHash: 29a236f1 translationFrom: development/comfy-router/models/google/nano-banana-2/code.mdx translationBlockHashes: "_intro": e6f85ac2 "Quick start": 7fb17070 - "Serving providers": bdc69c7e + "Serving providers": 5e97418c "Schema": 63c93920 "Examples": d294783d --- + {/* 生成文件。请编辑此目录中的 code.yaml 并运行 `pnpm code-pages:gen`。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -219,6 +220,7 @@ curl https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image/requests/$R - **Comfy**(默认):`POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image` - **fal**,即 `fal/fal-nano-banana-2`:`POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=fal` +- **Pika**,即 `pika/pika-nano-banana-2`:`POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=pika` - **Runware**,即 `runware/runware-nano-banana-2`:`POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=runware` - **WaveSpeed**,即 `wavespeed/wavespeed-nano-banana-2`:`POST https://api.comfy.org/v2/models/vertexai/gemini-3.1-flash-image?model_provider=wavespeed` diff --git a/zh/development/comfy-router/models/google/nano-banana-pro/code.mdx b/zh/development/comfy-router/models/google/nano-banana-pro/code.mdx index 20c8113ac3..d553dae047 100644 --- a/zh/development/comfy-router/models/google/nano-banana-pro/code.mdx +++ b/zh/development/comfy-router/models/google/nano-banana-pro/code.mdx @@ -2,18 +2,19 @@ title: "搭配 Comfy Router 使用 Nano Banana Pro" description: "通过 Comfy Router 以 HTTP 方式使用 Nano Banana Pro(Gemini 3 Pro Image)生成图像的 Python、TypeScript 和 cURL 代码片段,以及请求字段和返回结果结构" sidebarTitle: "Nano Banana Pro" -translationSourceHash: eeeda284 +translationSourceHash: 14675d65 translationFrom: development/comfy-router/models/google/nano-banana-pro/code.mdx translationBlockHashes: "_intro": 34f7de08 "Quick start": b78c780a - "Serving providers": f8e41f81 + "Serving providers": 1176620b "Schema": b9a919e8 "Examples": 54f56549 --- + {/* GENERATED FILE. Edit code.yaml in this directory and run `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -219,6 +220,7 @@ curl https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image/requests/$REQUE - **Comfy**(默认):`POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image` - **fal**,以 `fal/fal-nano-banana-pro` 提供:`POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=fal` +- **Pika**,以 `pika/pika-nano-banana-pro` 提供:`POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=pika` - **Runware**,以 `runware/runware-nano-banana-pro` 提供:`POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=runware` - **WaveSpeed**,以 `wavespeed/wavespeed-nano-banana-pro` 提供:`POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image?model_provider=wavespeed` diff --git a/zh/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx b/zh/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx index d2751963f2..1cdfe6dff9 100644 --- a/zh/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx +++ b/zh/development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx @@ -2,16 +2,17 @@ title: "将 Veo 3.1 Fast Generate 001 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 veo/veo-3.1-fast-generate-001:endpoint、请求结构以及 Router 返回的响应。" sidebarTitle: "Veo 3.1 Fast Generate 001" -translationSourceHash: d61d2fe8 +translationSourceHash: f5553980 translationFrom: development/comfy-router/models/veo/veo-3-1-fast-generate-001/code.mdx translationBlockHashes: "_intro": 2dd8ad2f "Quick start": 4f13f7f7 - "Schema": 70736fe7 + "Schema": e44aea6d "Examples": 88e27039 --- + {/* GENERATED FILE. Generated from router-schemas/veo/veo-3.1-fast-generate-001.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -262,7 +263,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-fast-generate-001/requests/$REQ - 用于引导视频生成的可选参考图像。最多支持 3 张素材图像或 1 张风格图像。受 Veo 3.1 模型(预览)支持。 + 用于引导视频生成的可选参考图像。最多支持 3 张素材图像或 1 张风格图像。受 Veo 3.1 模型(预览版)支持。 @@ -332,7 +333,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-fast-generate-001/requests/$REQ - 已生成视频的目标时长(秒)。Veo 2:5-8。Veo 3/3.1:4、6 或 8。默认值:8 + 已生成视频的目标时长,单位为秒。Veo 2:5-8。Veo 3/3.1:4、6 或 8。默认值:8 @@ -340,37 +341,37 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-fast-generate-001/requests/$REQ - 已生成视频的帧率,单位为帧/秒 + 生成视频的帧率,以每秒帧数为单位 - 是否在生成视频的同时生成音频。默认为 true。受 Veo 3.0+ 模型支持。 + 是否在生成视频的同时生成音频。默认为 true。Veo 3.0+ 模型支持。 - 描述已生成视频中应避免出现哪些内容的文本 + 描述在已生成视频中要避免出现的内容的文本 控制已生成视频中的人物。默认值:allow_adult - 可能的值:`dont_allow`、`allow_adult`、`allowAll` + 可选值:`dont_allow`、`allow_adult`、`allowAll` - 用于进度更新的 Cloud Pub/Sub 主题(projects/\{project}/topics/\{topic}) + 用于进度更新的 Cloud Pub/Sub 主题(projects/\{project}/topics/\{topic})。在使用 Comfy 凭据(非 BYOK)的请求中不被接受:如果该参数存在,generate 路由会返回 400,因为操作在 Comfy 的项目中运行,而 Vertex 会以 Comfy 服务代理的身份发布。仅在自带密钥(bring-your-own-key)的请求中被接受,此时 Vertex 会在你自己的项目中评估该主题的授权。 输入图像的调整大小方式。默认值:pad - 可能的值:`pad`、`crop` + 可选值:`pad`、`crop` - 输出视频分辨率。受 Veo 3.0+ 模型支持。默认值:720p + 输出视频分辨率。Veo 3.0+ 模型支持。默认值:720p - 可能的值:`720p`、`1080p`、`4k` + 可选值:`720p`、`1080p`、`4k` @@ -386,8 +387,8 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-fast-generate-001/requests/$REQ - 生成视频的可选 Cloud Storage 目标位置,使用 `gs://` URI。 -它必须指向你自己的存储桶。在非自带密钥(bring-your-own-key)的情况下,此路由使用 Comfy 自己的 Google Cloud 凭据而不是你的凭据运行,因此指向 Comfy 拥有存储桶的目标位置会变成由 Comfy 服务账号执行的写入,落到共享布局中,并计入 Comfy 的项目费用。指定此类目标位置的请求会以 400 被拒绝,且不会生成任何内容;唯一例外是启用了平台存储的同步 Comfy Router 调用(`POST /v2/models/{provider}/{model}`):若值指向 Router 自己的 Veo 或 Gemini 资产存储桶,则会替换为 Router 为该次调用在你自己的平台前缀下铸造的目标位置(参见 Router Veo 路由),并且只有该确切由 Router 铸造的目标位置会放行。排队的 Router 提交(`POST /v2/models/{provider}/{model}/requests`)不会做这种替换,因此会像对待任何其他 Comfy 拥有的存储桶一样,以 400 拒绝该值。任何其他目标位置都会原样转发给 Vertex,访问权限由你自行授予。自带密钥的调用在你自己的项目中运行,并按发送内容原样转发。 + 可选的已生成视频 Cloud Storage 目标位置,以 `gs://` URI 表示。 +它必须指向你自己的存储桶。在非自带密钥(bring-your-own-key)的情况下,此路由使用 Comfy 自己的 Google Cloud 凭据而不是你的凭据运行,因此指向 Comfy 拥有的存储桶中的目标位置会变成由 Comfy 服务账号执行的写入,落到共享布局中,并计入 Comfy 的项目费用。指定此类目标位置的请求会以 400 被拒绝,且不会生成任何内容。唯一的例外是启用了平台存储的同步 Comfy Router 调用(`POST /v2/models/{provider}/{model}`):若值指向 Router 自己的 Veo 或 Gemini 资产存储桶,则会替换为 Router 为该次调用在你自己的平台前缀下铸造的目标位置(参见 Router Veo 路由),并且只有该确切由 Router 铸造的目标位置会放行。排队的 Router 提交(`POST /v2/models/{provider}/{model}/requests`)不会做这种替换,因此会像对待任何其他 Comfy 拥有的存储桶一样,以 400 拒绝该值。任何其他目标位置都会原样转发给 Vertex,访问权限由你自行授予。自带密钥的调用在你自己的项目中运行,并按发送内容原样转发。 diff --git a/zh/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx b/zh/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx index 3be50c2637..b1982378b1 100644 --- a/zh/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx +++ b/zh/development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx @@ -2,16 +2,17 @@ title: "使用 Comfy Router 调用 Veo 3.1 Generate 001" description: "通过 Comfy Router 调用 veo/veo-3.1-generate-001:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "Veo 3.1 Generate 001" -translationSourceHash: 576d56a4 +translationSourceHash: 0fab4eef translationFrom: development/comfy-router/models/veo/veo-3-1-generate-001/code.mdx translationBlockHashes: "_intro": cba04c2d "Quick start": cd500ec3 - "Schema": b2b8f3ad + "Schema": 5618a5b3 "Examples": 88e27039 --- + {/* GENERATED FILE. Generated from router-schemas/veo/veo-3.1-generate-001.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -336,41 +337,41 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-generate-001/requests/$REQUEST_ - 自动优化提示词以获得更高质量。默认为 true。 + 自动改进提示词以获得更高质量。默认值为 true。 - 生成视频的帧率,单位为每秒帧数 + 生成视频的帧率,单位为帧每秒 - 是否随视频一起生成音频。默认为 true。由 Veo 3.0+ 模型支持。 + 是否随视频一起生成音频。默认值为 true。由 Veo 3.0+ 模型支持。 - 描述在生成视频中应避免出现的内容的文本 + 描述已生成视频中应避免出现内容的文本 - 控制生成视频中的人物。默认值:allow_adult + 控制已生成视频中的人物。默认值:allow_adult - 可能的值:`dont_allow`、`allow_adult`、`allowAll` + 可选值:`dont_allow`、`allow_adult`、`allowAll` - 用于进度更新的 Cloud Pub/Sub 主题(projects/\{project}/topics/\{topic}) + 用于进度更新的 Cloud Pub/Sub 主题(projects/\{project}/topics/\{topic})。使用 Comfy 凭据(非自带密钥)的请求不接受此项:如果请求中存在该字段,generate 路由会返回 400,因为该操作在 Comfy 的项目中运行,Vertex 会以 Comfy 的服务代理身份发布。仅在自带密钥请求中被接受,此时 Vertex 会在你自己的项目中评估该主题的授权。 输入图像的调整大小方式。默认值:pad - 可能的值:`pad`、`crop` + 可选值:`pad`、`crop` 输出视频分辨率。由 Veo 3.0+ 模型支持。默认值:720p - 可能的值:`720p`、`1080p`、`4k` + 可选值:`720p`、`1080p`、`4k` @@ -386,7 +387,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-generate-001/requests/$REQUEST_ - 生成视频的可选 Cloud Storage 目标位置,使用 `gs://` URI。 + 可选的、用于存放已生成视频的 Cloud Storage 目标位置,以 `gs://` URI 表示。 它必须指向你自己的存储桶。在非自带密钥(bring-your-own-key)的情况下,此路由使用 Comfy 自己的 Google Cloud 凭据而不是你的凭据运行,因此指向 Comfy 拥有存储桶的目标位置会变成由 Comfy 服务账号执行的写入,落到共享布局中,并计入 Comfy 的项目费用。指定此类目标位置的请求会以 400 被拒绝,且不会生成任何内容;唯一例外是启用了平台存储的同步 Comfy Router 调用(`POST /v2/models/{provider}/{model}`):若值指向 Router 自己的 Veo 或 Gemini 资产存储桶,则会替换为 Router 为该次调用在你自己的平台前缀下铸造的目标位置(参见 Router Veo 路由),并且只有该确切由 Router 铸造的目标位置会放行。排队的 Router 提交(`POST /v2/models/{provider}/{model}/requests`)不会做这种替换,因此会像对待任何其他 Comfy 拥有的存储桶一样,以 400 拒绝该值。任何其他目标位置都会原样转发给 Vertex,访问权限由你自行授予。自带密钥的调用在你自己的项目中运行,并按发送内容原样转发。 diff --git a/zh/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx b/zh/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx index 439c8138ef..c30bb7e7a2 100644 --- a/zh/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx +++ b/zh/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx @@ -2,16 +2,17 @@ title: "使用 Comfy Router 调用 Veo 3.1 Lite Generate 001" description: "通过 Comfy Router 调用 veo/veo-3.1-lite-generate-001:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "Veo 3.1 Lite Generate 001" -translationSourceHash: 530bd375 +translationSourceHash: 6526c1c6 translationFrom: development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx translationBlockHashes: "_intro": 8110da35 "Quick start": 7f826038 - "Schema": 59698d01 + "Schema": 647d02c5 "Examples": 88e27039 --- + {/* GENERATED FILE. Generated from router-schemas/veo/veo-3.1-lite-generate-001.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -194,7 +195,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 可选的用于引导视频生成的初始帧图像 + 可选的初始帧图像,用于引导视频生成 @@ -204,11 +205,11 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 图像的 Cloud Storage URI。在非 BYOK 请求中,若 `gs://` URI(或其 `https://storage.googleapis.com` 形式)指向 Comfy 拥有的存储桶,则会以 400 拒绝;除非该对象位于你自己的 `POST /customers/storage` 前缀之下,或者它是一段此前某次 Veo 生成为你写入的视频。 + 图像的 Cloud Storage URI。在非 BYOK 请求中,若 `gs://` URI(或其 `https://storage.googleapis.com` 形式)指向 Comfy 拥有的存储桶,则会以 400 拒绝;除非该对象位于你自己的 `POST /customers/storage` 前缀之下,或者它是一段上一次 Veo 生成为你写入的视频。 - 图像的 MIME 类型(image/jpeg 或 image/png) + 图像的 MIME 类型(image/jpeg 或 image/png) 可能的值:`image/jpeg`、`image/png` @@ -224,11 +225,11 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 图像的 Cloud Storage URI。在非 BYOK 请求中,若 `gs://` URI(或其 `https://storage.googleapis.com` 形式)指向 Comfy 拥有的存储桶,则会以 400 拒绝;除非该对象位于你自己的 `POST /customers/storage` 前缀之下,或者它是一段此前某次 Veo 生成为你写入的视频。 + 图像的 Cloud Storage URI。在非 BYOK 请求中,若 `gs://` URI(或其 `https://storage.googleapis.com` 形式)指向 Comfy 拥有的存储桶,则会以 400 拒绝;除非该对象位于你自己的 `POST /customers/storage` 前缀之下,或者它是一段上一次 Veo 生成为你写入的视频。 - 图像的 MIME 类型(image/jpeg 或 image/png) + 图像的 MIME 类型(image/jpeg 或 image/png) 可能的值:`image/jpeg`、`image/png` @@ -244,7 +245,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 遮罩文件的 Cloud Storage URI。在非 BYOK 请求中,若 `gs://` URI(或其 `https://storage.googleapis.com` 形式)指向 Comfy 拥有的存储桶,则会以 400 拒绝;除非该对象位于你自己的 `POST /customers/storage` 前缀之下,或者它是一段此前某次 Veo 生成为你写入的视频。 + 遮罩文件的 Cloud Storage URI。在非 BYOK 请求中,若 `gs://` URI(或其 `https://storage.googleapis.com` 形式)指向 Comfy 拥有的存储桶,则会以 400 拒绝;除非该对象位于你自己的 `POST /customers/storage` 前缀之下,或者它是一段上一次 Veo 生成为你写入的视频。 @@ -254,15 +255,15 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 遮罩的 MIME 类型(image/png、image/jpeg、image/webp 或视频格式) + 遮罩的 MIME 类型(image/png、image/jpeg、image/webp 或视频格式) - 要生成视频的文本描述 + 要生成的视频的文本描述 - 用于引导视频生成的可选参考图像。最多支持 3 张资产图像或 1 张风格图像。受 Veo 3.1 模型(预览)支持。 + 用于引导视频生成的可选参考图像。最多支持 3 张资产图像或 1 张风格图像。受 Veo 3.1 模型(预览)支持。 @@ -276,11 +277,11 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 图像的 Cloud Storage URI。在非 BYOK 请求中,若 `gs://` URI(或其 `https://storage.googleapis.com` 形式)指向 Comfy 拥有的存储桶,则会以 400 拒绝;除非该对象位于你自己的 `POST /customers/storage` 前缀之下,或者它是一段此前某次 Veo 生成为你写入的视频。 + 图像的 Cloud Storage URI。在非 BYOK 请求中,若 `gs://` URI(或其 `https://storage.googleapis.com` 形式)指向 Comfy 拥有的存储桶,则会以 400 拒绝;除非该对象位于你自己的 `POST /customers/storage` 前缀之下,或者它是一段上一次 Veo 生成为你写入的视频。 - 图像的 MIME 类型(image/jpeg 或 image/png) + 图像的 MIME 类型(image/jpeg 或 image/png) 可能的值:`image/jpeg`、`image/png` @@ -306,7 +307,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 输入视频的 Cloud Storage URI。在非 BYOK 请求中,若 `gs://` URI(或其 `https://storage.googleapis.com` 形式)指向 Comfy 拥有的存储桶,则会以 400 拒绝;除非该对象位于你自己的 `POST /customers/storage` 前缀之下,或者它是一段此前某次 Veo 生成为你写入的视频。 + 输入视频的 Cloud Storage URI。在非 BYOK 请求中,若 `gs://` URI(或其 `https://storage.googleapis.com` 形式)指向 Comfy 拥有的存储桶,则会以 400 拒绝;除非该对象位于你自己的 `POST /customers/storage` 前缀之下,或者它是一段上一次 Veo 生成为你写入的视频。 @@ -332,43 +333,43 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 已生成视频的目标时长(秒)。Veo 2:5-8。Veo 3/3.1:4、6 或 8。默认值:8 + 已生成视频的目标时长(秒)。Veo 2:5-8。Veo 3/3.1:4、6 或 8。默认值:8 - 自动优化提示词以获得更高质量。默认为 是。 + 自动改进提示词以获得更高质量。默认为 true。 - 已生成视频的帧率(帧/秒) + 已生成视频的帧率,以每秒帧数表示 - 是否在生成视频的同时生成音频。默认为 是。受 Veo 3.0+ 模型支持。 + 是否在生成视频的同时生成音频。默认为 true。Veo 3.0+ 模型支持。 - 描述已生成视频中应避免出现内容的文本 + 描述应在已生成视频中避免出现的内容的文本 - 控制已生成视频中的人物。默认值:allow_adult + 控制已生成视频中的人物。默认:allow_adult 可能的值:`dont_allow`、`allow_adult`、`allowAll` - 用于接收进度更新的 Cloud Pub/Sub 主题(projects/\{project}/topics/\{topic}) + 用于进度更新的 Cloud Pub/Sub 主题(projects/\{project}/topics/\{topic})。在 Comfy 凭据(非 BYOK)请求中不接受:如果存在该字段,generate 路由会返回 400,因为该操作在 Comfy 的项目中运行,而 Vertex 会以 Comfy 的服务代理身份发布。仅在自带密钥请求中接受,此时 Vertex 会在你自己的项目中评估该主题授权。 - 输入图像的大小调整方式。默认值:pad + 输入图像的调整大小方式。默认:pad 可能的值:`pad`、`crop` - 输出视频分辨率。受 Veo 3.0+ 模型支持。默认值:720p + 输出视频分辨率。Veo 3.0+ 模型支持。默认:720p 可能的值:`720p`、`1080p`、`4k` @@ -380,13 +381,13 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 用于确定性输出的随机种子。如果 sampleCount > 1,则为每个视频使用不同的种子。 + 用于确定性输出的随机种子。如果 sampleCount > 1,则每个视频使用不同的种子。 格式:`uint32` - 生成视频的可选 Cloud Storage 目标位置,使用 `gs://` URI。 + 可选的 Cloud Storage 目标位置,用于存放已生成的视频,格式为 `gs://` URI。 它必须指向你自己的存储桶。在非自带密钥(bring-your-own-key)的情况下,此路由使用 Comfy 自己的 Google Cloud 凭据而不是你的凭据运行,因此指向 Comfy 拥有存储桶的目标位置会变成由 Comfy 服务账号执行的写入,落到共享布局中,并计入 Comfy 的项目费用。指定此类目标位置的请求会以 400 被拒绝,且不会生成任何内容;唯一例外是启用了平台存储的同步 Comfy Router 调用(`POST /v2/models/{provider}/{model}`):若值指向 Router 自己的 Veo 或 Gemini 资产存储桶,则会替换为 Router 为该次调用在你自己的平台前缀下铸造的目标位置(参见 Router Veo 路由),并且只有该确切由 Router 铸造的目标位置会放行。排队的 Router 提交(`POST /v2/models/{provider}/{model}/requests`)不会做这种替换,因此会像对待任何其他 Comfy 拥有的存储桶一样,以 400 拒绝该值。任何其他目标位置都会原样转发给 Vertex,访问权限由你自行授予。自带密钥的调用在你自己的项目中运行,并按发送内容原样转发。 @@ -429,11 +430,11 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 被责任 AI 政策过滤掉的视频数量 + 被负责任 AI 政策过滤的视频数量 - 视频被责任 AI 政策过滤的原因 + 视频被负责任 AI 政策过滤的原因 diff --git a/zh/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx b/zh/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx index 7e41acee68..27f31da91a 100644 --- a/zh/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx +++ b/zh/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx @@ -2,14 +2,15 @@ title: "将 Grok Imagine Video 1.5 Lite 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 xai/grok-imagine-video-1.5-lite:端点、请求形状以及 Router 返回的响应。" sidebarTitle: "Grok Imagine Video 1.5 Lite" -translationSourceHash: 88188b7d +translationSourceHash: 770f7444 translationFrom: development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code.mdx translationBlockHashes: "_intro": 9f670d3a "Quick start": b5b53e4a - "Schema": 6acaee57 + "Schema": b2ee9fc3 "Examples": a4d81583 --- + {/* GENERATED FILE. Generated from router-schemas/xai/grok-imagine-video-1.5-lite.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -212,7 +213,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-lite/requests/$R ### 输出 - 如果请求被输入审核拦截,则包含拦截原因 + 在此文档中绝不会携带原因:非空的拦截原因属于输入审核拒绝,Router 会以 Comfy Router 错误的形式返回,而不是返回此响应体。此处为缺失、null 或空。 @@ -220,21 +221,21 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-lite/requests/$R - 延迟请求的状态:"pending" 或 "done" + 在此文档中缺失或为 `done`。`pending` 是 Router 尚未完成的轮询响应体,绝不会作为 `200` 返回;当 `video.url` 已填充时,Router 接受缺失的 status,因此调用方不得要求该字段必然存在。 - 可选值:`pending`、`done` + 可选值:`done` - 视频生成请求的使用信息 + 视频生成请求的用量信息 此请求的费用,以 USD ticks 表示。一美分等于 100,000,000 ticks,因此一美元等于 10,000,000,000 ticks。 - - xAI 生成的视频 + + 已完成的生成。与轮询文档不同,此处为必填:没有 `video.url` 的终端结果会以 Comfy Router 错误的形式返回,因此 `200` 必定携带该字段。 @@ -245,8 +246,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-lite/requests/$R 模型生成的视频是否符合审核规则 - - 已生成视频的下载 URL。Router 会将视频重新托管到 Comfy 存储并重写此字段,因此它通常是 Comfy 签名的 URL,有效期最长 24 小时:签发时按 24 小时签名,并从 23 小时的备忘中重放,因此稍后的轮询可能返回仅剩一小时有效期的链接。当无法执行重新托管时,该字段会改为保留 xAI 自己的短时效 URL。可为 NULL:`url` 为空的成功响应并不表示生成已完成。无论哪种情况链接都会过期,因此请下载视频,而不要存储 URL。 + + 在此文档中为非空。只有当此叶子字段已填充时,Router 才报告成功;它是上文所述的重新托管的 Comfy 签名 URL,当无法执行重新托管时,则为 xAI 自己的短时效 URL。 ## 示例 diff --git a/zh/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx b/zh/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx index 932be381b3..510a112433 100644 --- a/zh/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx +++ b/zh/development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx @@ -2,17 +2,18 @@ title: "结合 Comfy Router 使用 Grok Imagine Video 1.5 Preview" description: "通过 Comfy Router 调用 xai/grok-imagine-video-1.5-preview:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "Grok Imagine Video 1.5 Preview" -translationSourceHash: 718d565c +translationSourceHash: 6e071d09 translationFrom: development/comfy-router/models/xai/grok-imagine-video-1-5-preview/code.mdx translationBlockHashes: "_intro": 1ac68989 "Quick start": 569a1e6f - "Schema": 89898016 + "Schema": 48e33fb3 "Examples": 53c80746 --- + {/* GENERATED FILE. Generated from router-schemas/xai/grok-imagine-video-1.5-preview.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -215,7 +216,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-preview/requests ### 输出 - 如果请求被输入审核拦截,则包含拦截原因 + 在本文档中绝不会携带原因:非空的 block 原因属于输入审核拒绝,Router 会以 Comfy Router 错误的形式作答,而不是返回此响应体。在本文档中为缺失、null 或空。 @@ -223,9 +224,9 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-preview/requests - 延迟请求的状态:"pending" 或 "done" + 在本文档中缺失或为 `done`。`pending` 是 Router 尚未完成的轮询响应体,绝不会作为 `200` 返回;当 `video.url` 已填充时,Router 接受缺失的 status,因此调用方不得将其视为必需。 - 可能的值:`pending`、`done` + 可能的值:`done` @@ -236,8 +237,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-preview/requests 此请求的费用,以 USD tick 表示。1 美分等于 100,000,000 ticks,因此 1 美元等于 10,000,000,000 ticks。 - - 来自 xAI 的已生成视频 + + 已完成的生成结果。与轮询文档不同,此处为必填:对于没有 `video.url` 的终端结果,会以 Comfy Router 错误的形式作答,因此 `200` 始终会携带它。 @@ -248,8 +249,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5-preview/requests 模型生成的视频是否遵守审核规则 - - 已生成视频的下载 URL。Router 会将视频重新托管到 Comfy 存储并重写此字段,因此它通常是 Comfy 签名的 URL,有效期最长 24 小时。签发时按 24 小时签名,并从 23 小时的备忘中重放,因此稍后的轮询可能返回剩余有效期仅 1 小时的链接。当无法执行重新托管时,该字段会保留 xAI 自己的短期 URL。可为空(NULLABLE):`url` 为空的成功响应并不代表生成已完成。无论哪种情况,链接都会过期,因此请下载视频,而不要保存该 URL。 + + 在本文档中为非空。只有当此叶子字段已填充时,Router 才报告成功;它是上文所述的重新托管的 Comfy 签名 URL,或者在无法执行重新托管时,为 xAI 自己的短期 URL。 ## 示例 diff --git a/zh/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx b/zh/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx index 318a53be2f..5029253f72 100644 --- a/zh/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx +++ b/zh/development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx @@ -2,17 +2,18 @@ title: "将 Grok Imagine Video 1.5 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 xai/grok-imagine-video-1.5:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "Grok Imagine Video 1.5" -translationSourceHash: 00ebc99e +translationSourceHash: e2c9e07a translationFrom: development/comfy-router/models/xai/grok-imagine-video-1-5/code.mdx translationBlockHashes: "_intro": cd12ea0a "Quick start": e6732b5e - "Schema": 5333f354 + "Schema": 616f8051 "Examples": 53c80746 --- + {/* 已生成的文件。由 `pnpm code-pages:gen` 从 router-schemas/xai/grok-imagine-video-1.5.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -215,7 +216,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5/requests/$REQUES ### 输出 - 如果请求被输入审核拦截,则包含拦截原因 + 在此文档中绝不会携带原因:非空的拦截原因属于输入审核拒绝,Router 会以 Comfy Router 错误的形式返回,而不是返回此响应体。此处为缺失、null 或空。 @@ -223,9 +224,9 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5/requests/$REQUES - 延迟请求的状态:"pending" 或 "done" + 在此文档中缺失或为 `done`。`pending` 是 Router 尚未完成的某次轮询的响应体,绝不会作为 `200` 返回;当 `video.url` 有值时,Router 接受缺失的 status,因此调用方不得将其视为必需。 - 可能的值:`pending`、`done` + 可能的值:`done` @@ -236,8 +237,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5/requests/$REQUES 此请求的费用,以 USD ticks 表示。1 美分等于 100,000,000 ticks,因此 1 美元等于 10,000,000,000 ticks。 - - 来自 xAI 的已生成视频 + + 已完成的生成结果。与轮询文档不同,此处为必填:没有 `video.url` 的终端结果会以 Comfy Router 错误的形式返回,因此 `200` 始终会携带它。 @@ -248,8 +249,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video-1.5/requests/$REQUES 模型生成的视频是否符合审核规则 - - 已生成视频的下载 URL。Router 会将视频重新托管到 Comfy 存储并重写此字段,因此它通常是 Comfy 签名的 URL,有效期最长 24 小时:签发时按 24 小时签名,并从 23 小时的备忘中重放,因此后续轮询可能返回仅剩一小时有效期的 URL。当无法执行重新托管时,该字段会保留 xAI 自身的短时效 URL。可空:`url` 为空的成功并不代表生成已完成。无论哪种情况,链接都会过期,因此请下载视频,而不要保存该 URL。 + + 在此文档中非空。仅当此叶子字段有值时,Router 才报告成功;它是上文所述的重新托管的 Comfy 签名 URL,或者在无法执行重新托管时,为 xAI 自身的短时效 URL。 ## 示例 diff --git a/zh/development/comfy-router/models/xai/grok-imagine-video/code.mdx b/zh/development/comfy-router/models/xai/grok-imagine-video/code.mdx index 2cccdfafb9..fcd9f62eaf 100644 --- a/zh/development/comfy-router/models/xai/grok-imagine-video/code.mdx +++ b/zh/development/comfy-router/models/xai/grok-imagine-video/code.mdx @@ -2,17 +2,18 @@ title: "搭配 Comfy Router 使用 Grok Imagine Video" description: "通过 Comfy Router 调用 xai/grok-imagine-video:端点、请求形状以及 Router 返回的响应。" sidebarTitle: "Grok Imagine Video" -translationSourceHash: 5f5a2915 +translationSourceHash: 5e191b3a translationFrom: development/comfy-router/models/xai/grok-imagine-video/code.mdx translationBlockHashes: "_intro": 343db6d5 "Quick start": 1c8fb26d - "Schema": a80ca991 + "Schema": d4d12d6e "Examples": 1085f4b8 --- + {/* GENERATED FILE. 由 `pnpm code-pages:gen` 从 router-schemas/xai/grok-imagine-video.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -179,7 +180,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID - 要使用的模型。支持:grok-imagine-video(默认)、grok-imagine-video-1.5-preview、grok-imagine-video-1.5、grok-imagine-video-1.5-lite。已弃用的 grok-imagine-video-beta ID 会别名到 grok-imagine-video。 + 要使用的模型。支持:grok-imagine-video(默认)、grok-imagine-video-1.5-preview、grok-imagine-video-1.5、grok-imagine-video-1.5-lite。已弃用的 grok-imagine-video-beta ID 会作为别名指向 grok-imagine-video。 @@ -195,7 +196,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID - 参考图像的 URL。支持 HTTPS URL(公开)或 base64 编码的 data URL(例如:data:image/jpeg;base64,...)。 + 参考图像的 URL。支持 HTTPS URL(公开)或 base64 编码的 data URL(例如 data:image/jpeg;base64,...)。 @@ -215,7 +216,7 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID ### 输出 - 如果请求被输入内容审核拦截,则包含拦截原因 + 本文档中从不会携带原因:非空的 block reason 属于输入审核拒绝,Router 会以 Comfy Router 错误的形式作答,而不是返回此响应体。此处为缺失、null 或空。 @@ -223,9 +224,9 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID - 延迟请求的状态:"pending" 或 "done" + 本文档中为缺失或 `done`。`pending` 是 Router 尚未完成的轮询响应体,绝不会作为 `200` 返回;当 `video.url` 已填充时,Router 接受缺失的 status,因此调用方不得要求该字段存在。 - 可选值:`pending`、`done` + 可选值:`done` @@ -236,8 +237,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID 本次请求的成本,以 USD ticks 表示。1 美分等于 100,000,000 ticks,因此 1 美元等于 10,000,000,000 ticks。 - - 来自 xAI 的已生成视频 + + 已完成的生成结果。与轮询文档不同,此处为必填:没有 `video.url` 的终端结果会以 Comfy Router 错误的形式作答,因此 `200` 总是携带该字段。 @@ -248,8 +249,8 @@ curl https://api.comfy.org/v2/models/xai/grok-imagine-video/requests/$REQUEST_ID 模型生成的视频是否符合审核规则 - - 已生成视频的下载 URL。Router 会将视频重新托管到 Comfy 存储并重写此字段,因此它通常是 Comfy 签名的 URL,有效期最长 24 小时:签发时按 24 小时签名,并从 23 小时的缓存中重放,因此稍后的轮询可能返回有效期仅剩一小时的 URL。当无法执行重新托管时,该字段会保留 xAI 自己的短期 URL。可为空:`url` 为空的成功响应并不代表生成已完成。无论哪种情况,链接都会过期,因此请下载视频,而不要存储 URL。 + + 本文档中非空。仅当此叶子字段已填充时,Router 才报告成功;它即上文所述重新托管后的 Comfy 签名 URL,或在无法执行重新托管时使用 xAI 自己的短期 URL。 ## 示例 From 5f26029f725d78984dd59773e2ffc50c08c74463 Mon Sep 17 00:00:00 2001 From: lin-bot23 Date: Tue, 13 Oct 2026 11:30:31 +0800 Subject: [PATCH 3/6] i18n: sync Router model code pages (meshy, pika, openai) and localized Router nav with upstream/main (2026-10-13) --- docs.json | 21 ++ .../models/meshy/meshy-5/code.mdx | 9 +- .../models/meshy/meshy-6/code.mdx | 11 +- .../models/meshy/meshy-7-1/code.mdx | 9 +- .../models/meshy/meshy-7/code.mdx | 9 +- .../models/openai/gpt-image-1-5/code.mdx | 30 +- .../models/openai/gpt-image-1/code.mdx | 1 + .../openai/gpt-image-2-5-flare/code.mdx | 33 +- .../openai/gpt-image-2-5-sunburst/code.mdx | 26 +- .../models/openai/gpt-image-2/code.mdx | 23 +- .../pika/pika-2-5-image-to-video/code.mdx | 332 ++++++++++++++++++ .../pika/pika-2-5-text-to-video/code.mdx | 323 +++++++++++++++++ .../models/meshy/meshy-5/code.mdx | 11 +- .../models/meshy/meshy-6/code.mdx | 9 +- .../models/meshy/meshy-7-1/code.mdx | 11 +- .../models/meshy/meshy-7/code.mdx | 17 +- .../models/openai/gpt-image-1-5/code.mdx | 6 +- .../models/openai/gpt-image-1/code.mdx | 29 +- .../openai/gpt-image-2-5-flare/code.mdx | 1 + .../openai/gpt-image-2-5-sunburst/code.mdx | 1 + .../models/openai/gpt-image-2/code.mdx | 32 +- .../pika/pika-2-5-image-to-video/code.mdx | 332 ++++++++++++++++++ .../pika/pika-2-5-text-to-video/code.mdx | 323 +++++++++++++++++ .../models/meshy/meshy-5/code.mdx | 61 ++-- .../models/meshy/meshy-6/code.mdx | 89 ++--- .../models/meshy/meshy-7-1/code.mdx | 9 +- .../models/meshy/meshy-7/code.mdx | 99 +++--- .../models/openai/gpt-image-1-5/code.mdx | 75 ++-- .../models/openai/gpt-image-1/code.mdx | 67 ++-- .../openai/gpt-image-2-5-flare/code.mdx | 70 ++-- .../openai/gpt-image-2-5-sunburst/code.mdx | 71 ++-- .../models/openai/gpt-image-2/code.mdx | 74 ++-- .../pika/pika-2-5-image-to-video/code.mdx | 332 ++++++++++++++++++ .../pika/pika-2-5-text-to-video/code.mdx | 323 +++++++++++++++++ 34 files changed, 2439 insertions(+), 430 deletions(-) create mode 100644 ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx create mode 100644 ja/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx create mode 100644 ko/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx create mode 100644 ko/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx create mode 100644 zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx create mode 100644 zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx diff --git a/docs.json b/docs.json index 9f536ffd95..906f481b42 100644 --- a/docs.json +++ b/docs.json @@ -7340,6 +7340,13 @@ "zh/development/comfy-router/models/openai/o4-mini/code" ] }, + { + "group": "Pika", + "pages": [ + "zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code", + "zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code" + ] + }, { "group": "Pruna", "pages": [ @@ -11212,6 +11219,13 @@ "ja/development/comfy-router/models/openai/o4-mini/code" ] }, + { + "group": "Pika", + "pages": [ + "ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code", + "ja/development/comfy-router/models/pika/pika-2-5-text-to-video/code" + ] + }, { "group": "Pruna", "pages": [ @@ -15005,6 +15019,13 @@ "ko/development/comfy-router/models/openai/o4-mini/code" ] }, + { + "group": "Pika", + "pages": [ + "ko/development/comfy-router/models/pika/pika-2-5-image-to-video/code", + "ko/development/comfy-router/models/pika/pika-2-5-text-to-video/code" + ] + }, { "group": "Pruna", "pages": [ diff --git a/ja/development/comfy-router/models/meshy/meshy-5/code.mdx b/ja/development/comfy-router/models/meshy/meshy-5/code.mdx index 19b10e736a..795185b988 100644 --- a/ja/development/comfy-router/models/meshy/meshy-5/code.mdx +++ b/ja/development/comfy-router/models/meshy/meshy-5/code.mdx @@ -2,16 +2,17 @@ title: "Comfy Router で Meshy 5 を使用する" description: "Comfy Router 経由で meshy/meshy-5 を呼び出します: エンドポイント、リクエスト形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Meshy 5" -translationSourceHash: 93a7e08c +translationSourceHash: 7f6f26e7 translationFrom: development/comfy-router/models/meshy/meshy-5/code.mdx translationBlockHashes: "_intro": 237f6506 "Quick start": 7bc21724 - "Schema": 0f9b14f9 + "Schema": 8d7621e1 "Examples": e2bc6209 --- + {/* 生成済みファイル。`pnpm code-pages:gen` により router-schemas/meshy/meshy-5.json から生成されています。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -168,7 +169,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 生成されるメッシュのジオメトリ解像度。2kと4kは、より細かい表面ディテールのためにUltraパスを実行します。2kには ai_model meshy-7、meshy-7.1 または latest が必要です。4kには meshy-7.1 または latest が必要です。 + 生成されるメッシュのジオメトリ解像度。2k と 4k は、より細かい表面ディテールのために Ultra パスを実行します。2k と 4k には ai_model meshy-7.1 または latest が必要です。 指定可能な値: `standard`、`2k`、`4k` @@ -220,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 非推奨。代わりに geometry_resolution を使用してください。true は geometry_resolution 2k と同等です。ai_model が meshy-7、meshy-7.1 または latest の場合にのみサポートされます。 + 非推奨。代わりに geometry_resolution を使用してください。true は geometry_resolution 2k と同等です。ai_model が meshy-7、meshy-7.1 または latest の場合にのみサポートされます。例外は meshy-7 です。geometry_resolution 2k には meshy-7.1 または latest が必要なため、meshy-7 では ultra_mode の true が Ultra パスを要求する方法となります。 #### `refine` バリアント diff --git a/ja/development/comfy-router/models/meshy/meshy-6/code.mdx b/ja/development/comfy-router/models/meshy/meshy-6/code.mdx index 169eb0aab1..813b248acc 100644 --- a/ja/development/comfy-router/models/meshy/meshy-6/code.mdx +++ b/ja/development/comfy-router/models/meshy/meshy-6/code.mdx @@ -2,16 +2,17 @@ title: "Comfy Router で Meshy 6 を使う" description: "Comfy Router 経由で meshy/meshy-6 を呼び出します。エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Meshy 6" -translationSourceHash: 32e3a99d +translationSourceHash: d03275d2 translationFrom: development/comfy-router/models/meshy/meshy-6/code.mdx translationBlockHashes: "_intro": a12edda1 "Quick start": 4cef8af8 - "Schema": f89aaaeb + "Schema": c7195145 "Examples": e2bc6209 --- + {/* GENERATED FILE. Generated from router-schemas/meshy/meshy-6.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -168,7 +169,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 生成されるメッシュのジオメトリ解像度。2kと4kは、より細かい表面ディテールのためにUltraパスを実行します。2kには ai_model meshy-7、meshy-7.1 または latest が必要です。4kには meshy-7.1 または latest が必要です。 + 生成されるメッシュのジオメトリ解像度。2k と 4k は、より細かい表面ディテールのために Ultra パスを実行します。2k と 4k には ai_model meshy-7.1 または latest が必要です。 指定可能な値: `standard`、`2k`、`4k` @@ -220,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 非推奨。代わりに geometry_resolution を使用してください。true は geometry_resolution 2k と同等です。ai_model が meshy-7、meshy-7.1 または latest の場合にのみサポートされます。 + 非推奨。代わりに geometry_resolution を使用してください。true は geometry_resolution 2k と同等です。ai_model が meshy-7、meshy-7.1 または latest の場合にのみサポートされます。例外は meshy-7 です。geometry_resolution 2k には meshy-7.1 または latest が必要なため、meshy-7 では ultra_mode を true にすることが Ultra パスを要求する方法です。 #### `refine` バリアント @@ -388,7 +389,7 @@ Router が `GET /v2/models/meshy/meshy-6/openapi.json` で提供するスキー - プレビュー動画のダウンロード URL を返す非推奨のフィールド。 + プレビュービデオのダウンロード URL を返す非推奨のフィールド。 ## 例 diff --git a/ja/development/comfy-router/models/meshy/meshy-7-1/code.mdx b/ja/development/comfy-router/models/meshy/meshy-7-1/code.mdx index 2495f9da8d..7f9d91b67a 100644 --- a/ja/development/comfy-router/models/meshy/meshy-7-1/code.mdx +++ b/ja/development/comfy-router/models/meshy/meshy-7-1/code.mdx @@ -2,16 +2,17 @@ title: "Meshy 7.1 を Comfy Router で使用する" description: "Comfy Router 経由で meshy/meshy-7.1 を呼び出します: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Meshy 7.1" -translationSourceHash: b7ac2b6f +translationSourceHash: dbb370d8 translationFrom: development/comfy-router/models/meshy/meshy-7-1/code.mdx translationBlockHashes: "_intro": d8eb7cb3 "Quick start": dd5c470d - "Schema": 93541104 + "Schema": 213fd0e4 "Examples": e2bc6209 --- + {/* 生成済みファイル。router-schemas/meshy/meshy-7.1.json から `pnpm code-pages:gen` により生成。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -168,7 +169,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 生成されるメッシュのジオメトリ解像度。2kと4kは、より細かい表面ディテールのためにUltraパスを実行します。2kには ai_model meshy-7、meshy-7.1 または latest が必要です。4kには meshy-7.1 または latest が必要です。 + 生成されるメッシュのジオメトリ解像度。2k と 4k は、より細かい表面ディテールのために Ultra パスを実行します。2k と 4k には ai_model meshy-7.1 または latest が必要です。 指定可能な値: `standard`、`2k`、`4k` @@ -220,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 非推奨。代わりに geometry_resolution を使用してください。true は geometry_resolution 2k と同等です。ai_model が meshy-7、meshy-7.1 または latest の場合にのみサポートされます。 + 非推奨。代わりに geometry_resolution を使用してください。true は geometry_resolution 2k と同等です。ai_model が meshy-7、meshy-7.1 または latest の場合にのみサポートされます。例外は meshy-7 です。geometry_resolution 2k には meshy-7.1 または latest が必要なため、meshy-7 では ultra_mode を true にすることが Ultra パスを要求する方法です。 #### `refine` バリアント diff --git a/ja/development/comfy-router/models/meshy/meshy-7/code.mdx b/ja/development/comfy-router/models/meshy/meshy-7/code.mdx index 76dce2f67a..23b8434cf5 100644 --- a/ja/development/comfy-router/models/meshy/meshy-7/code.mdx +++ b/ja/development/comfy-router/models/meshy/meshy-7/code.mdx @@ -2,16 +2,17 @@ title: "Meshy 7 を Comfy Router で使用する" description: "Comfy Router 経由で meshy/meshy-7 を呼び出す: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "Meshy 7" -translationSourceHash: 3475319a +translationSourceHash: 1214bb2a translationFrom: development/comfy-router/models/meshy/meshy-7/code.mdx translationBlockHashes: "_intro": d8d3391c "Quick start": 136306f5 - "Schema": abec2fb4 + "Schema": de7fd56b "Examples": e2bc6209 --- + {/* GENERATED FILE. Generated from router-schemas/meshy/meshy-7.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -168,7 +169,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 生成されるメッシュのジオメトリ解像度。2kと4kは、より細かい表面ディテールのためにUltraパスを実行します。2kには ai_model meshy-7、meshy-7.1 または latest が必要です。4kには meshy-7.1 または latest が必要です。 + 生成されるメッシュのジオメトリ解像度。2kと4kは、より細かい表面ディテールのためにUltraパスを実行します。2kと4kには ai_model meshy-7.1 または latest が必要です。 指定可能な値: `standard`、`2k`、`4k` @@ -220,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 非推奨。代わりに geometry_resolution を使用してください。true は geometry_resolution 2k と同等です。ai_model が meshy-7、meshy-7.1 または latest の場合にのみサポートされます。 + 非推奨。代わりに geometry_resolution を使用してください。true は geometry_resolution 2k と同等です。ai_model が meshy-7、meshy-7.1 または latest の場合にのみサポートされます。例外は meshy-7 です。geometry_resolution 2k には meshy-7.1 または latest が必要なため、meshy-7 では ultra_mode を true にすることが Ultra パスを要求する方法になります。 #### `refine` バリアント diff --git a/ja/development/comfy-router/models/openai/gpt-image-1-5/code.mdx b/ja/development/comfy-router/models/openai/gpt-image-1-5/code.mdx index 35c44ded2e..d4936f0c68 100644 --- a/ja/development/comfy-router/models/openai/gpt-image-1-5/code.mdx +++ b/ja/development/comfy-router/models/openai/gpt-image-1-5/code.mdx @@ -2,18 +2,19 @@ title: "Comfy Router で GPT Image 1.5 を使用する" description: "Comfy Router 経由で openai/gpt-image-1.5 を呼び出します: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "GPT Image 1.5" -translationSourceHash: b9579a35 +translationSourceHash: 38ba43fc translationFrom: development/comfy-router/models/openai/gpt-image-1-5/code.mdx translationBlockHashes: "_intro": 7a84676f "Quick start": f364e3f2 - "Schema": f8fd74f0 + "Schema": 43008228 "Examples": c73859ec --- + {/* GENERATED FILE. Generated from router-schemas/openai/gpt-image-1.5.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -178,18 +179,17 @@ URL は認証情報なしで解決できる必要があります。Router はサ 2 つの拡張が展開中で、どちらも現在はデフォルトで無効です。これらは 1 つの切り替えの背後で提供され、一緒に有効化されます。したがって以下はすべて今後に予定されているものとして扱い、まだそれに依存した実装はしないでください。どちらかに依存する前に確認してください。 1 つ目は `POST /customers/storage` がアップロード先として署名するバケットです。展開がお使いの環境に到達するまで、このエンドポイントから得たアップロード URL はここで拒否されます。バケットは Comfy 自身のものでホストも同じであるにもかかわらずです。そのため「Comfy にアップロードしてから URL を渡す」方法はまだ機能せず、機能するのは `/api/assets/{id}/content` がリダイレクトする署名付き URL です。 2 つ目は全員に一度にではなくアカウント単位で有効化されます。これらのホストの背後にあるバケットは当社のものではなくお客様のものであるためです。上の切り替えがオンになっていても、サードパーティの受信メディアが有効になっていないアカウントは拒否され、ホストがサポート対象外であるとは告げられず、その文言で通知されます。お使いのアカウントで有効化するよう Comfy の担当者に依頼してください。これにより、バケットがお客様のもので Router が所有権を主張しない以下のサードパーティ オブジェクトストレージ ホストも追加で許可されます: Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` および `s3..amazonaws.com`、パス形式または `.` を先頭に付ける形式のいずれか)、Azure Blob Storage(`.blob.core.windows.net`)、Alibaba Cloud OSS(`.oss-.aliyuncs.com`、`oss-accelerate` エンドポイントを含む)。これらは具体的にはオブジェクトストレージのエンドポイントです。同じプロバイダーのドメイン上の汎用エンドポイント、たとえば Alibaba Function Compute のトリガーはリストに含まれず拒否されます。 -照合されるのはプロバイダーではなくホスト名の形式です。したがって上でプロバイダーを挙げたからといって、そのプロバイダーが発行しうるすべての URL が受け入れられるわけではありません。呼び出し元がそれぞれに到達するのは自然なことなので、紛らわしい 3 つのケースを明示しておきます。R2 のカスタムドメイン(`cdn.example.com`)は受け入れられません。Cloudflare は `pub-.r2.dev` をレート制限のあるデバッグ用ホスト名として文書化し、本番トラフィックはカスタムドメインに向けるよう案内していますが、カスタムドメインのホスト名には R2 であることを示す情報がないため、Router は他のホストと区別できず拒否します。`.r2.cloudflarestorage.com` エンドポイントに署名するか、`pub-.r2.dev` 形式を使用してください。S3 の IPv6 dualstack エンドポイント(`s3.dualstack..amazonaws.com`)も受け入れられません。通常のリージョナルエンドポイントを使用してください。Azure Blob の代替 DNS ゾーン(`.z.blob.storage.azure.net`)も同様です。`.blob.core.windows.net` を使用してください。返される拒否メッセージにはこれと同じ形式が記載されているため、それらを読むためにここに来る必要はありません。 -上記の `` と `pub-` は、通常その形で受け取るプレースホルダーを示したものであり、階層の深さを制限するものではありません。マッチングはオブジェクトストレージのドメインサフィックスに対して行われるため、同じ名前空間の下にあるより深い名前(`a.b.pub-.r2.dev`)も受け入れられます。ただし、それによって広がるのは名前空間自体ではありません。サフィックスは依然として列挙されたもののいずれかでなければなりません。 -以下の例は形状のみを示しています。実際の値には署名用のクエリパラメータも含まれますが、ここでは意図的に省略しています。公開された例は仕様の中に永久に残るため、また実際の署名は漏洩した認証情報であると同時に、いずれ機能しなくなるリンクでもあるためです。 -各画像は 25 MiB、1 回のリクエストの画像は合計 64 MiB に制限されます。 +照合されるのはプロバイダーではなくホスト名の形式です。したがって上でプロバイダーを挙げたからといって、そのプロバイダーが発行しうるすべての URL が受け入れられるわけではありません。呼び出し元がそれぞれに到達するのは自然なことなので、紛らわしい 3 つのケースを明示しておきます。R2 のカスタムドメイン(`cdn.example.com`)は受け入れられません。Cloudflare は `pub-.r2.dev` をレート制限のあるデバッグ用ホスト名として文書化し、本番トラフィックはカスタムドメインに向けるよう案内していますが、カスタムドメインのホスト名には R2 であることを示す情報がないため、Router は他のホストと区別できず拒否します。`.r2.cloudflarestorage.com` エンドポイントに署名するか、`pub-.r2.dev` 形式を使用してください。S3 の IPv6 dualstack エンドポイント(`s3.dualstack..amazonaws.com`)も受け入れられません。通常のリージョナルエンドポイントを使用してください。Azure Blob の代替 DNS ゾーン(`.z.blob.storage.azure.net`)も同様です。`.blob.core.windows.net` を使用してください。返される拒否メッセージにはこれと同じ形式が記載されているため、それらを読むためにここに来る必要はありません。上記の `` と `pub-` というプレースホルダーは、通常アクセスする際の形式を示すものであり、階層の制限ではありません。マッチングはオブジェクトストレージのドメインサフィックスに対して行われるため、同じ名前空間の下にあるより深い名前(`a.b.pub-.r2.dev`)も受け入れられます。ただし、それによって広がるわけではないのは名前空間そのものです。サフィックスは依然として列挙されたもののいずれかでなければなりません。 +以下の例は形状のみを示しています。実際の値には署名用のクエリパラメータも含まれますが、ここでは意図的に省略しています。公開された例は仕様の中に永久に残り、実際の署名は漏えいした認証情報であると同時に、やがて機能しなくなるリンクでもあるためです。 +各画像は 25 MiB、1 つのリクエストの画像は合計 64 MiB に制限されます。 - 実行する gpt-image モデル。Router はアドレス指定されたモデル id を差し込むため、/v2/models/openai/gpt-image-2 をアドレス指定する呼び出し元はこれを送信しません。 + 実行する gpt-image モデル。Router がアドレス指定されたモデル id を差し込むため、/v2/models/openai/gpt-image-2 をアドレス指定する呼び出し元はこれを送信しません。 - コンテンツモデレーション設定 + コンテンツモデレーションの設定 指定可能な値: `low`, `auto` @@ -197,13 +197,13 @@ URL は認証情報なしで解決できる必要があります。Router はサ 生成する画像の数(1〜10)。 - 範囲: `1` から `10` + 範囲: `1` 〜 `10` JPEG または WebP の圧縮レベル(0〜100) - 範囲: `0` から `100` + 範囲: `0` 〜 `100` @@ -213,9 +213,9 @@ URL は認証情報なしで解決できる必要があります。Router はサ - ライブストリームと併用する場合にのみ意味を持ちますが、このサーフェスはそれを提供できません。送信しても `stream` は `false` に確定されます。生成では、`0` または `null` 以外の値は、リクエストが `stream: true` も送信するかどうかに関わらず 400 で拒否されます。`image` を含むリクエストではこのフィールドは転送されず破棄されます。省略してください。 + ライブストリームと併用する場合にのみ意味を持ちますが、このサーフェスではそれを提供できません。`stream` は送信しても `false` に確定されます。生成時、`0` または `null` 以外の値は、リクエストが `stream: true` も送信しているかどうかに関わらず、400 で拒否されます。`image` を含むリクエストでは、このフィールドは転送されずに破棄されます。省略してください。 - 範囲: `0` から `3` + 範囲: `0` 〜 `3` @@ -223,7 +223,7 @@ URL は認証情報なしで解決できる必要があります。Router はサ - 生成または編集された画像の品質。`xhigh` と `max` は gpt-image-2.5-flare と gpt-image-2.5-sunburst のために追加された 2 つの階層です。`standard` と `hd` は dall-e 時代の表記であり、受け入れられているどのモデルも読み取りません。 + 生成または編集された画像の品質。`xhigh` と `max` は gpt-image-2.5-flare と gpt-image-2.5-sunburst が追加された 2 つのティアです。`standard` と `hd` は dall-e 時代の表記であり、採用されているどのモデルも読み取りません。 指定可能な値: `auto`, `low`, `medium`, `high`, `xhigh`, `max`, `standard`, `hd` @@ -233,7 +233,7 @@ URL は認証情報なしで解決できる必要があります。Router はサ - 送信した呼び出し元が拒否されないように宣言されていますが、このサーフェスでは無効です。Router はディスパッチ前にこれを `false` に確定します。Router は `text/event-stream` を中継するのではなくプロバイダーのレスポンスをキャプチャするためです(`image` を含むリクエストでは、編集がそれを含めずに再エンコードされるため、このフィールドは代わりに破棄されます)。Comfy のどのサーフェスも gpt-image の部分画像ストリーミングを提供していません。v1 の `POST /proxy/openai/images/generations` 入口は `stream: true` を 400 で拒否し、リクエストを上流に転送しません。したがってこのフィールドは省略し、完了したレスポンスを 1 つの JSON ボディとして読んでください。ストリームが開かないため、`stream: true` と 1 より大きい `n` を組み合わせることに関する OpenAI の制限はここでは適用されません。`n` は送信されたまま転送されます。 + これを送信する呼び出し元が拒否されないように宣言されていますが、このサーフェスでは無効です。Router はディスパッチ前にこれを `false` に確定します。これは `text/event-stream` を中継するのではなく、プロバイダーのレスポンスを取得するためです(`image` を含むリクエストでは、編集がそれを含めずに再エンコードされるため、代わりにフィールドが破棄されます)。どの Comfy サーフェスも gpt-image の partial-image ストリーミングを提供していません。v1 の `POST /proxy/openai/images/generations` イングレスは `stream: true` を 400 で拒否し、リクエストを上流に転送することはありません。そのため、フィールドを省略し、完了したレスポンスを 1 つの JSON ボディとして読み取ってください。ストリームが開かれることはないため、`stream: true` と 1 より大きい `n` の組み合わせに対する OpenAI の制限はここでは適用されません。`n` は送信されたまま転送されます。 @@ -305,7 +305,7 @@ URL は認証情報なしで解決できる必要があります。Router はサ - 生成が完了した時刻の Unix タイムスタンプ(秒)。これは OpenAI が画像生成レスポンスで REQUIRED として宣言している唯一のメンバーであるため、OpenAI が生成元である場合は常に存在します。fal、wavespeed、runware が提供する、alt 対応 ID のいずれかのレスポンスでは、他の 4 つの解決済みパラメータのメンバーと同様に、これは完全に省略されます。現代の epoch 値は 2^31 に十分近く、未フォーマットの `integer` は多くの SDK ジェネレータで 32 ビットフィールドを生成するため、`int64` と宣言されています。 + 生成が完了した時刻の Unix タイムスタンプ(秒)。これは OpenAI が画像生成レスポンスで REQUIRED として宣言している唯一のメンバーであるため、OpenAI が生成元である場合は常に存在します。fal、pika、wavespeed、runware が提供する、alt 対応 ID のいずれかのレスポンスでは、他の 4 つの解決済みパラメータのメンバーと同様に、これは完全に省略されます。現代の epoch 値は 2^31 に十分近く、未フォーマットの `integer` は多くの SDK ジェネレータで 32 ビットフィールドを生成するため、`int64` と宣言されています。 フォーマット: `int64` diff --git a/ja/development/comfy-router/models/openai/gpt-image-1/code.mdx b/ja/development/comfy-router/models/openai/gpt-image-1/code.mdx index bc5b4b7db1..2a1ebf12e3 100644 --- a/ja/development/comfy-router/models/openai/gpt-image-1/code.mdx +++ b/ja/development/comfy-router/models/openai/gpt-image-1/code.mdx @@ -14,6 +14,7 @@ translationBlockHashes: + {/* 生成済みファイル。`pnpm code-pages:gen` により router-schemas/openai/gpt-image-1.json から生成されました。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; diff --git a/ja/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx b/ja/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx index 2a2bb41615..beead5fb94 100644 --- a/ja/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx +++ b/ja/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx @@ -2,19 +2,20 @@ title: "GPT Image 2.5 Flare を Comfy Router で使う" description: "Comfy Router 経由で openai/gpt-image-2.5-flare を呼び出します: endpoint、リクエスト形状、Router が返すレスポンスについて説明します。" sidebarTitle: "GPT Image 2.5 Flare" -translationSourceHash: 2c87d7fe +translationSourceHash: 48fb6d21 translationFrom: development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx translationBlockHashes: "_intro": 1e1ed044 "Quick start": c9749309 "Serving providers": ef0e9384 - "Schema": 8754ad3a + "Schema": 122f72c5 "Examples": c73859ec --- + {/* 生成済みファイル。`pnpm code-pages:gen` により router-schemas/openai/gpt-image-2.5-flare.json から生成されています。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -197,47 +198,47 @@ URL は認証情報なしで解決できる必要があります。Router はサ - 実行する gpt-image モデル。Router がアドレス指定されたモデル ID を挿入するため、/v2/models/openai/gpt-image-2 をアドレス指定する呼び出し元はこれを送信しません。 + 実行する gpt-image モデル。Router がアドレス指定されたモデル id を挿入するため、/v2/models/openai/gpt-image-2 をアドレス指定する呼び出し元はこれを送信しません。 - コンテンツモデレーションの設定 + コンテンツモデレーション設定 - 指定可能な値: `low`, `auto` + 取り得る値: `low`, `auto` - 生成する画像の数 (1-10)。 + 生成する画像の数(1〜10)。 範囲: `1` から `10` - JPEG または WebP の圧縮レベル (0-100) + JPEG または WebP の圧縮レベル(0〜100) 範囲: `0` から `100` - 出力画像の形式 + 出力画像のフォーマット - 指定可能な値: `png`, `webp`, `jpeg` + 取り得る値: `png`, `webp`, `jpeg` - ライブストリームと併用する場合にのみ意味を持ちますが、このサーフェスはそれを提供できません。送信しても `stream` は `false` に確定されます。生成では、`0` または `null` 以外の値は、リクエストが `stream: true` も送信するかどうかに関わらず 400 で拒否されます。`image` を含むリクエストではこのフィールドは転送されず破棄されます。省略してください。 + ライブストリームと併用する場合にのみ意味を持ちますが、このサーフェスはそれを提供できません。`stream` は送信した場合でも `false` に確定されます。生成時には、リクエストが `stream: true` も送信しているかどうかに関わらず、`0` または `null` 以外の値は 400 で拒否されます。`image` を含むリクエストでは、このフィールドは転送されずに破棄されます。このフィールドは省略してください。 範囲: `0` から `3` - 生成する画像、または `image` に対して行う編集の内容を説明するテキスト。 + 生成する画像の、または `image` に対して行う編集のテキスト記述。 - 生成または編集された画像の品質。`xhigh` と `max` は gpt-image-2.5-flare と gpt-image-2.5-sunburst のために追加された 2 つの階層です。`standard` と `hd` は dall-e 時代の表記であり、受け入れられているどのモデルも読み取りません。 + 生成または編集された画像の品質。`xhigh` と `max` は、gpt-image-2.5-flare と gpt-image-2.5-sunburst が追加された 2 つのティアです。`standard` と `hd` は dall-e 時代の表記であり、受け入れられているどのモデルも解釈しません。 - 指定可能な値: `auto`, `low`, `medium`, `high`, `xhigh`, `max`, `standard`, `hd` + 取り得る値: `auto`, `low`, `medium`, `high`, `xhigh`, `max`, `standard`, `hd` @@ -245,7 +246,7 @@ URL は認証情報なしで解決できる必要があります。Router はサ - 送信した呼び出し元が拒否されないように宣言されていますが、このサーフェスでは無効です。Router はディスパッチ前にこれを `false` に確定します。Router は `text/event-stream` を中継するのではなくプロバイダーのレスポンスをキャプチャするためです(`image` を含むリクエストでは、編集がそれを含めずに再エンコードされるため、このフィールドは代わりに破棄されます)。Comfy のどのサーフェスも gpt-image の部分画像ストリーミングを提供していません。v1 の `POST /proxy/openai/images/generations` 入口は `stream: true` を 400 で拒否し、リクエストを上流に転送しません。したがってこのフィールドは省略し、完了したレスポンスを 1 つの JSON ボディとして読んでください。ストリームが開かないため、`stream: true` と 1 より大きい `n` を組み合わせることに関する OpenAI の制限はここでは適用されません。`n` は送信されたまま転送されます。 + 送信した呼び出し元が拒否されないように宣言されていますが、このサーフェスでは無効です。Router はディスパッチ前にこれを `false` に確定します。これは、`text/event-stream` を中継するのではなくプロバイダーの応答をキャプチャするためです(`image` を含むリクエストでは、編集がそれを付けずに再エンコードされるため、代わりにこのフィールドが破棄されます)。どの Comfy サーフェスも gpt-image の partial-image ストリーミングを提供していません。v1 の `POST /proxy/openai/images/generations` イングレスは `stream: true` を 400 で拒否し、リクエストを上流へ転送することはありません。したがって、このフィールドは省略し、完了した応答を 1 つの JSON ボディとして読み取ってください。ストリームが開かれることはないため、`stream: true` と 1 より大きい `n` の併用に関する OpenAI の制限はここでは適用されません。`n` は送信されたとおりに転送されます。 @@ -313,11 +314,11 @@ Router が `GET /v2/models/openai/gpt-image-2.5-flare/openapi.json` で提供す - 生成された画像の背景が `opaque` か `transparent` か。OpenAI がこの生成に対して解決した値です。リクエストパラメータのデフォルトは `auto` なので、値を指定しなかった呼び出し元はここでどちらが生成されたかを知ることができます。 + 生成された画像の背景が `opaque` か `transparent` か。OpenAI がこの生成に対して解決した値です。リクエストパラメータのデフォルトは `auto` なので、ピン留めしなかった呼び出し元はここでどちらが生成されたかを知ることができます。 - 生成が完了した時刻の Unix タイムスタンプ(秒)。OpenAI が画像生成レスポンスで必須(REQUIRED)として宣言している唯一のメンバーであるため、OpenAI が生成元である場合は常に存在します。alt ベースの ID で fal、wavespeed、runware が処理したレスポンスでは、他の 4 つの解決済みパラメータのメンバーと同様に完全に省略されます。現在のエポック値は 2^31 に十分近いため `int64` として宣言されています。整形されていない `integer` では、多くの SDK ジェネレータが 32 ビットのフィールドを生成してしまうためです。 + 生成が完了した時刻の Unix タイムスタンプ(秒)。OpenAI が画像生成レスポンスで必須(REQUIRED)として宣言している唯一のメンバーであるため、OpenAI が生成元である場合は常に存在します。alt ベースの ID で fal、pika、wavespeed、runware が処理したレスポンスでは、他の 4 つの解決済みパラメータのメンバーと同様に完全に省略されます。現在のエポック値は 2^31 に十分近いため `int64` として宣言されています。整形されていない `integer` では、多くの SDK ジェネレータが 32 ビットのフィールドを生成してしまうためです。 形式: `int64` diff --git a/ja/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx b/ja/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx index 79af7d8fd5..b527893aa2 100644 --- a/ja/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx +++ b/ja/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx @@ -2,19 +2,20 @@ title: "Comfy Router で GPT Image 2.5 Sunburst を使う" description: "Comfy Router 経由で openai/gpt-image-2.5-sunburst を呼び出します: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "GPT Image 2.5 Sunburst" -translationSourceHash: 64b8ca81 +translationSourceHash: 21e3a50f translationFrom: development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx translationBlockHashes: "_intro": 84874630 "Quick start": 8da85011 "Serving providers": 58af0c87 - "Schema": 1dd323aa + "Schema": 8eff0738 "Examples": c73859ec --- + {/* 生成済みファイル。`pnpm code-pages:gen` により router-schemas/openai/gpt-image-2.5-sunburst.json から生成されています。 */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -190,14 +191,13 @@ URL は認証情報なしで解決できなければなりません。Router は 2 つの拡張が展開中で、どちらも現時点ではデフォルトで無効です。それらは 1 つの切り替えの背後で提供され、まとめて有効になります。そのため、以下はすべて近日提供されるものとして扱い、まだ依存して構築する対象とは考えないでください。どちらかに依存する前に問い合わせてください。 1 つ目は、`POST /customers/storage` がアップロード先として署名するバケットです。展開がお使いの環境に届くまで、そのエンドポイントから得たアップロード URL はここで拒否されます。バケットは Comfy 自身のものでホストも同じであるにもかかわらずです。したがって「Comfy にアップロードしてから URL を渡す」はまだ機能せず、機能する形式は `/api/assets/{id}/content` がリダイレクトする署名付き URL です。 2 つ目は、全員に対して一度にではなくアカウントごとに有効化されます。これらのホストの背後にあるバケットは弊社のものではなくお客様のものであるためです。上記の切り替えがオンになっていても、サードパーティの受信メディアが有効化されていないアカウントは拒否され、ホストがサポートされていないと告げられるのではなくその旨の文言で通知されます。お使いのアカウントで有効にするよう Comfy の担当者に依頼してください。これにより、以下のサードパーティのオブジェクトストレージホストも許可されます。そこではバケットはお客様のものであり、Router はその所有権を主張しません: Cloudflare R2 (`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3 (`s3.amazonaws.com` および `s3..amazonaws.com`、パス形式または `.` を前に付ける形式のいずれか)、Azure Blob Storage (`.blob.core.windows.net`)、Alibaba Cloud OSS (`.oss-.aliyuncs.com`、`oss-accelerate` エンドポイントを含む)。これらは具体的にはオブジェクトストレージのエンドポイントです。同じプロバイダードメイン上の汎用エンドポイント、たとえば Alibaba Function Compute のトリガーは、リストに含まれず拒否されます。 -照合されるのはプロバイダーではなくホスト名の形式です。そのため、上にプロバイダー名を挙げたからといって、そのプロバイダーが発行しうるすべての URL が受け入れられるわけではありません。呼び出し元がそれぞれに妥当にたどり着きうる 3 つの惜しい例は、はっきり述べておく価値があります。R2 のカスタムドメイン (`cdn.example.com`) は受け入れられません。Cloudflare は `pub-.r2.dev` をレート制限のあるデバッグ用ホスト名として文書化し、本番トラフィックは代わりにカスタムドメインに向けるよう案内しています。しかしカスタムドメインのホスト名には R2 であることを示すものが何も含まれないため、Router は他のホストと区別できず拒否します。`.r2.cloudflarestorage.com` エンドポイントに署名するか、`pub-.r2.dev` 形式を使用してください。S3 の IPv6 dualstack エンドポイント (`s3.dualstack..amazonaws.com`) も受け入れられません。通常のリージョナルエンドポイントを使用してください。Azure Blob の代替 DNS ゾーン (`.z.blob.storage.azure.net`) も同様です。`.blob.core.windows.net` を使用してください。返される拒否メッセージにはこれらの同じ形式が記載されているので、それらを読むためにここに来る必要はありません。 -上記の `` と `pub-` のプレースホルダーは、通常その形式で受け取ることになる形を示したものであり、階層の深さを制限するものではありません。マッチングはオブジェクトストレージのドメインサフィックスに対して行われるため、同じ名前空間の下にあるより深い名前(`a.b.pub-.r2.dev`)も受け付けられます。ただし、それによって名前空間そのものが広がるわけではありません。サフィックスは依然として一覧に記載されたいずれかでなければなりません。 -以下の例は形状のみを示しています。実際の値には署名用のクエリパラメータも付きますが、ここでは意図的に省略しています。公開された例は仕様の中に永久に残り、実際の署名は漏洩した認証情報であると同時に、やがて機能しなくなるリンクでもあるためです。 -各画像は 25 MiB、1 回のリクエストの画像は合計 64 MiB に制限されます。 +照合されるのはプロバイダーではなくホスト名の形式です。そのため、上にプロバイダー名を挙げたからといって、そのプロバイダーが発行しうるすべての URL が受け入れられるわけではありません。呼び出し元がそれぞれに妥当にたどり着きうる 3 つの惜しい例は、はっきり述べておく価値があります。R2 のカスタムドメイン (`cdn.example.com`) は受け入れられません。Cloudflare は `pub-.r2.dev` をレート制限のあるデバッグ用ホスト名として文書化し、本番トラフィックは代わりにカスタムドメインに向けるよう案内しています。しかしカスタムドメインのホスト名には R2 であることを示すものが何も含まれないため、Router は他のホストと区別できず拒否します。`.r2.cloudflarestorage.com` エンドポイントに署名するか、`pub-.r2.dev` 形式を使用してください。S3 の IPv6 dualstack エンドポイント (`s3.dualstack..amazonaws.com`) も受け入れられません。通常のリージョナルエンドポイントを使用してください。Azure Blob の代替 DNS ゾーン (`.z.blob.storage.azure.net`) も同様です。`.blob.core.windows.net` を使用してください。返される拒否メッセージにはこれらの同じ形式が記載されているので、それらを読むためにここに来る必要はありません。上記の `` と `pub-` プレースホルダーは、通常たどり着く形式を示したものであり、深さの制限ではありません。マッチングはオブジェクトストレージのドメインサフィックスに対して行われるため、同じ名前空間配下のより深い名前(`a.b.pub-.r2.dev`)も受け入れられます。ただし、それによって広がるわけではないのは名前空間そのものです。サフィックスは依然として列挙されたもののいずれかでなければなりません。 +下の例は形状のみを示しています。実際の値には署名クエリパラメータも含まれますが、ここでは意図的に省略しています。公開された例はスペックに永遠に残り、実際の署名は漏洩した認証情報であると同時に機能しなくなるリンクでもあるためです。 +各画像は 25 MiB に制限され、1 回のリクエストの画像は合計で 64 MiB に制限されます。 - 実行する gpt-image モデル。Router がアドレス指定されたモデル id を差し込むため、/v2/models/openai/gpt-image-2 を指定する呼び出し元はこれを送信しません。 + 実行する gpt-image モデル。Router がアドレス指定されたモデル ID を組み込むため、/v2/models/openai/gpt-image-2 をアドレス指定する呼び出し元はこれを送信しません。 @@ -219,23 +219,23 @@ URL は認証情報なしで解決できなければなりません。Router は - 出力画像のフォーマット + 出力画像の形式 指定可能な値: `png`, `webp`, `jpeg` - ライブストリームと併用する場合にのみ意味を持ちますが、このサーフェスはそれを提供できません。送信しても `stream` は `false` に確定されます。生成では、`0` または `null` 以外の値は、リクエストが `stream: true` も送信するかどうかに関わらず 400 で拒否されます。`image` を含むリクエストではこのフィールドは転送されず破棄されます。省略してください。 + ライブストリームと併用する場合にのみ意味を持ちますが、このサーフェスはそれを提供できません。`stream` は送信した場合でも `false` に確定されます。生成時には、`0` または `null` 以外の値は 400 で拒否されます。これはリクエストが `stream: true` も送信しているかどうかに関係ありません。`image` を含むリクエストでは、このフィールドは転送されずに破棄されます。省略してください。 範囲: `0` から `3` - 生成する画像、または `image` に対して行う編集のテキストによる説明。 + 生成する画像の説明、または `image` に対して行う編集の説明となるテキスト。 - 生成または編集された画像の品質。`xhigh` と `max` は gpt-image-2.5-flare と gpt-image-2.5-sunburst のために追加された 2 つの階層です。`standard` と `hd` は dall-e 時代の表記で、採用されているどのモデルも読み取りません。 + 生成または編集された画像の品質。`xhigh` と `max` は gpt-image-2.5-flare と gpt-image-2.5-sunburst が追加された 2 つのティアです。`standard` と `hd` は dall-e 時代の表記であり、採用されているどのモデルも読み取りません。 指定可能な値: `auto`, `low`, `medium`, `high`, `xhigh`, `max`, `standard`, `hd` @@ -313,11 +313,11 @@ URL は認証情報なしで解決できなければなりません。Router は - 生成された画像の背景が `opaque` か `transparent` かを、OpenAI がこの生成のために解決したとおりに示します。リクエストパラメータのデフォルトは `auto` なので、明示的に指定しなかった呼び出し元はここでどちらが生成されたのかを知ることになります。 + 生成された画像の背景が `opaque` か `transparent` かを、OpenAI がこの生成のために解決したとおりに示します。リクエストパラメータのデフォルトは `auto` なので、ピンしなかった呼び出し元はここでどちらが生成されたのかを知ることになります。 - 生成が完了した時刻の Unix タイムスタンプ(秒)。これは OpenAI が画像生成レスポンスで必須(REQUIRED)と宣言している唯一のメンバーであるため、OpenAI が生成元である場合は常に存在します。alt ベースの id のいずれかで fal、wavespeed、runware が提供するレスポンスでは、他の 4 つの解決済みパラメータのメンバーと同様に完全に省略されます。現在のエポック値は 2^31 に十分近く、フォーマットされていない `integer` は多くの SDK ジェネレータで 32 ビットフィールドを生成してしまうため、`int64` として宣言されています。 + 生成が完了した時刻の Unix タイムスタンプ(秒)。これは OpenAI が画像生成レスポンスで必須(REQUIRED)と宣言している唯一のメンバーであるため、OpenAI が生成元である場合は常に存在します。alt ベースの id のいずれかに対して fal、pika、wavespeed、runware のいずれかが提供するレスポンスでは、他の 4 つの解決済みパラメータのメンバーと同様に完全に省略されます。現在のエポック値は 2^31 に十分近く、フォーマットされていない `integer` は多くの SDK ジェネレータで 32 ビットフィールドを生成してしまうため、`int64` として宣言されています。 フォーマット: `int64` diff --git a/ja/development/comfy-router/models/openai/gpt-image-2/code.mdx b/ja/development/comfy-router/models/openai/gpt-image-2/code.mdx index 364dde01c6..8516159f08 100644 --- a/ja/development/comfy-router/models/openai/gpt-image-2/code.mdx +++ b/ja/development/comfy-router/models/openai/gpt-image-2/code.mdx @@ -2,19 +2,20 @@ title: "Comfy Router で GPT Image 2 を使用する" description: "Comfy Router 経由で openai/gpt-image-2 を呼び出す方法: エンドポイント、リクエストの形状、Router が返すレスポンスについて説明します。" sidebarTitle: "GPT Image 2" -translationSourceHash: 76d11c22 +translationSourceHash: 6437f5f1 translationFrom: development/comfy-router/models/openai/gpt-image-2/code.mdx translationBlockHashes: "_intro": ff220f7e "Quick start": 7ec2e3b6 - "Serving providers": 5a41369d - "Schema": 1d94d9e6 + "Serving providers": 56df172f + "Schema": 0ebd1b14 "Examples": c73859ec --- + {/* GENERATED FILE. Generated from router-schemas/openai/gpt-image-2.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; @@ -160,6 +161,7 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2/requests/$REQUEST_ID \ - **Comfy**(デフォルト): `POST https://api.comfy.org/v2/models/openai/gpt-image-2` - **fal**(`fal/fal-gpt-image-2` として): `POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=fal` +- **Pika**(`pika/pika-gpt-image-2` として): `POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=pika` - **Runware**(`runware/runware-gpt-image-2` として): `POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=runware` - **WaveSpeed**(`wavespeed/wavespeed-gpt-image-2` として): `POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=wavespeed` @@ -191,9 +193,6 @@ URL は認証情報なしで解決できなければなりません。Router は 1 つ目は、`POST /customers/storage` がアップロード先として署名するバケットです。展開がお使いの環境に到達するまでは、そのエンドポイントから得たアップロード URL はここで拒否されます。バケットは Comfy 自身のものでホストも同じであるにもかかわらずです。そのため「Comfy にアップロードしてから URL を渡す」方法はまだ機能せず、機能するのは `/api/assets/{id}/content` がリダイレクトする署名付き URL です。 2 つ目は、全員に対して一度にではなく、アカウントごとに有効になります。これらのホストの背後にあるバケットは当社のものではなくお客様のものであるためです。上記の切り替えがオンになっていても、サードパーティの受信メディアが有効化されていないアカウントは拒否され、ホストが未サポートだと言われるのではなく、その旨の文言で通知されます。お使いのアカウントで有効にするよう Comfy の担当者に依頼してください。これはさらに、以下のサードパーティのオブジェクトストレージホストを許可します。ここではバケットはお客様のものであり、Router はその所有権を主張しません: Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` および `s3..amazonaws.com`、path-style 形式または `.` プレフィックス形式のいずれか)、Azure Blob Storage(`.blob.core.windows.net`)、Alibaba Cloud OSS(`.oss-.aliyuncs.com`、`oss-accelerate` エンドポイントを含む)。これらは特にオブジェクトストレージのエンドポイントです。同じプロバイダードメイン上の汎用エンドポイント、たとえば Alibaba Function Compute のトリガーはリストに含まれず、拒否されます。 照合されるのはプロバイダーではなくホスト名の形式です。したがって、上でプロバイダーを挙げたからといって、そのプロバイダーが発行できるすべての URL が受け入れられるわけではありません。呼び出し元がこれらのいずれかを使ってしまうのはもっともなことなので、紛らわしい 3 つのケースを明示しておきます。R2 のカスタムドメイン(`cdn.example.com`)は受け入れられません。Cloudflare は `pub-.r2.dev` をレート制限のあるデバッグ用ホスト名として文書化し、本番トラフィックはカスタムドメインに向けるよう案内していますが、カスタムドメインのホスト名には R2 であることを示す情報がないため、Router は他のホストと区別できず拒否します。`.r2.cloudflarestorage.com` エンドポイントの署名付き URL を生成するか、`pub-.r2.dev` 形式を使用してください。S3 の IPv6 dualstack エンドポイント(`s3.dualstack..amazonaws.com`)も受け入れられません。通常のリージョナルエンドポイントを使用してください。Azure Blob の代替 DNS ゾーン(`.z.blob.storage.azure.net`)も同様です。`.blob.core.windows.net` を使用してください。返される拒否メッセージにはこれらの同じ形式が記載されているので、それらを読むためにここに来る必要はありません。 -上記の `` と `pub-` プレースホルダーは、通常たどり着く形式を示しているだけであり、階層の深さの制限ではありません。マッチングはオブジェクトストレージのドメインサフィックスに対して行われるため、同じ名前空間の下でより深い名前(`a.b.pub-.r2.dev`)も受け付けられます。ただし、これによって広がるのは名前空間そのものではありません。サフィックスは依然として、列挙されているもののいずれかでなければなりません。 -以下の例は形状のみを示しています。実際の値には署名用のクエリパラメータも含まれますが、ここでは意図的に省略しています。公開された例は仕様の中に永久に残り、実際の署名は漏えいした認証情報であると同時に、いずれ機能しなくなるリンクでもあるためです。 -各画像は 25 MiB、1 回のリクエストの画像は合計 64 MiB に制限されます。 @@ -219,23 +218,23 @@ URL は認証情報なしで解決できなければなりません。Router は - 出力画像のフォーマット + 出力画像の形式 指定可能な値: `png`, `webp`, `jpeg` - ライブストリームと併用する場合にのみ意味を持ちますが、このサーフェスはそれを提供できません。送信しても `stream` は `false` に確定されます。生成では、`0` または `null` 以外の値は、リクエストが `stream: true` も送信するかどうかに関わらず 400 で拒否されます。`image` を含むリクエストではこのフィールドは転送されず破棄されます。省略してください。 + ライブストリームと併用する場合にのみ意味を持ちますが、このサーフェスはそれを提供できません。`stream` は送信した場合でも `false` に確定されます。生成時には、`0` または `null` 以外の値は、リクエストが `stream: true` も送信するかどうかに関わらず 400 で拒否されます。`image` を含むリクエストでは、このフィールドは転送されずに破棄されます。省略してください。 範囲: `0` から `3` - 生成する画像、または `image` に加える編集のテキスト記述。 + `image` に対して生成する画像、または加える編集のテキスト記述。 - 生成または編集された画像の品質。`xhigh` と `max` は gpt-image-2.5-flare と gpt-image-2.5-sunburst のために追加された 2 つの階層です。`standard` と `hd` は dall-e 時代の表記であり、受け入れられているどのモデルも読み取りません。 + 生成または編集された画像の品質。`xhigh` と `max` は gpt-image-2.5-flare と gpt-image-2.5-sunburst が追加された 2 つのティアです。`standard` と `hd` は dall-e 時代の表記であり、認められたどのモデルも解釈しません。 指定可能な値: `auto`, `low`, `medium`, `high`, `xhigh`, `max`, `standard`, `hd` @@ -317,9 +316,9 @@ Router が `GET /v2/models/openai/gpt-image-2/openapi.json` で提供するス - 生成が完了した時刻の Unix タイムスタンプ(秒)。これは OpenAI が画像生成レスポンスにおいて REQUIRED(必須)と宣言している唯一のメンバーであるため、OpenAI が生成元である場合は常に存在します。alt 系の id で fal、wavespeed、runware が提供するレスポンスでは、他の 4 つの解決済みパラメータのメンバーと同様に、これは完全に省略されます。現在のエポック値は 2^31 に十分近いため、書式指定のない `integer` は多くの SDK ジェネレータで 32 ビットフィールドを生成してしまいます。そのため `int64` として宣言されています。 + 生成が完了した時刻の Unix タイムスタンプ(秒)。これは OpenAI が画像生成レスポンスにおいて REQUIRED(必須)と宣言している唯一のメンバーであるため、OpenAI が生成元である場合は常に存在します。alt 系の id で fal、pika、wavespeed、runware が提供するレスポンスでは、他の 4 つの解決済みパラメータのメンバーと同様に、これは完全に省略されます。現在のエポック値は 2^31 に十分近いため、書式指定のない `integer` は多くの SDK ジェネレータで 32 ビットフィールドを生成してしまいます。そのため `int64` として宣言されています。 - Format: `int64` + フォーマット: `int64` diff --git a/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx b/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx new file mode 100644 index 0000000000..4d71da9df9 --- /dev/null +++ b/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx @@ -0,0 +1,332 @@ +--- +title: "Comfy Router で Pika 2.5 Image To Video を使用する" +description: "Comfy Router 経由で pika/pika-2.5-image-to-video を呼び出します: エンドポイント、リクエストの形状、Router が返すレスポンス。" +sidebarTitle: "Pika 2.5 Image To Video" +translationSourceHash: b87c0be4 +translationFrom: development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx +translationBlockHashes: + "_intro": 118f246d + "Quick start": 37a0238c + "Schema": ed2761dc + "Examples": 848844cf +--- +{/* GENERATED FILE. Generated from router-schemas/pika/pika-2.5-image-to-video.json by `pnpm code-pages:gen`. */} + +import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; + +`pika/pika-2.5-image-to-video` の API リファレンスです。Comfy Router が Pika から提供しています。 + +**入力:** テキスト、画像 · **出力:** ビデオ + +## クイックスタート + +[Comfy ワークスペース](https://platform.comfy.org/profile/api-keys?onboarding=router)でキーを作成し、`COMFY_API_KEY` としてエクスポートします。Python と TypeScript のスニペットは Comfy SDK(`pip install comfy-sdk` と `npm install @comfyorg/sdk`)を使用します。cURL のスニペットは、同じ呼び出しを生の HTTP で行うものです。 + +**Model ID:** `pika/pika-2.5-image-to-video` + +**Endpoint:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video` + + + + +```python Python +from comfy_sdk import Comfy + +# 環境変数から COMFY_API_KEY を読み取ります。 +# SDK は自動的に冪等性キーを作成し、自動リトライのために再利用します。 +with Comfy() as client: + result = client.models.run( + "pika/pika-2.5-image-to-video", + { + "duration_s": 5, + "image": "https://example.invalid/pika/source.png", + "prompt": "The camera slowly pushes in as the leaves begin to sway", + "resolution": "720p", + }, + ) + +print(result) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 環境変数から COMFY_API_KEY を読み取ります。 +// SDK は自動的に冪等性キーを作成し、自動リトライのために再利用します。 +const { data } = await comfy.models.run("pika/pika-2.5-image-to-video", { + duration_s: 5, + image: "https://example.invalid/pika/source.png", + prompt: "The camera slowly pushes in as the leaves begin to sway", + resolution: "720p", +}); + +console.log(data); +``` + +```bash cURL +curl https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"image\": \"https://example.invalid/pika/source.png\", \"prompt\": \"The camera slowly pushes in as the leaves begin to sway\", \"resolution\": \"720p\"}" +``` + + + +同じボディを `POST https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests` に送信します。Router は実行が受け付けられるとすぐに `201` と `request_id` を返し、結果は準備ができ次第、このプロセスからでも別のプロセスからでも収集できます。[キューの配信](/ja/development/comfy-router/queue)では、ステータス、キャンセル、収集について説明します。 + + +```python Python +import asyncio +from comfy_sdk import AsyncComfy + +# 環境変数から COMFY_API_KEY を読み取ります。 +# submit() を呼び出すたびに独自の Idempotency-Key を発行し、自動リトライのために再利用します。 +async def main(): + async with AsyncComfy() as client: + handle = await client.models.submit( + "pika/pika-2.5-image-to-video", + { + "duration_s": 5, + "image": "https://example.invalid/pika/source.png", + "prompt": "The camera slowly pushes in as the leaves begin to sway", + "resolution": "720p", + }, + ) + print("request_id:", handle.request_id) # モデル ID と合わせて、別のプロセスが必要とするすべての情報 + + # リクエストが完了するまでポーリングし、サーバーが指定する Retry-After だけ待機します。 + async for update in handle.iter_events(): + print(update.status, update.queue_position) + + # プロバイダー自身のペイロードで、models.run() が返す値と同じです。 + # 失敗またはキャンセルされたリクエストは、ここで型付きの Router エラーを発生させます。 + result = await handle.get() + + print(result) + +asyncio.run(main()) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 環境変数から COMFY_API_KEY を読み取ります。 +// submit() を呼び出すたびに独自の Idempotency-Key を発行し、自動リトライのために再利用します。 +const handle = await comfy.models.submit("pika/pika-2.5-image-to-video", { + duration_s: 5, + image: "https://example.invalid/pika/source.png", + prompt: "The camera slowly pushes in as the leaves begin to sway", + resolution: "720p", +}); +console.log("requestId:", handle.requestId); // モデル ID と合わせて、別のプロセスが必要とするすべての情報 + +// リクエストが完了するまでポーリングし、サーバーが指定する Retry-After だけ待機します。 +for await (const update of handle.events()) { + console.log(update.status, update.queuePosition); +} + +// models.run() が返すのと同じ結果です。失敗またはキャンセルされたリクエストは、ここで reject されます。 +const result = await handle.get(); + +console.log(result.data); +``` + +```bash cURL +# 1. 送信。Router は 201 と request_id、status_url、response_url、cancel_url を返します。 +curl https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"image\": \"https://example.invalid/pika/source.png\", \"prompt\": \"The camera slowly pushes in as the leaves begin to sway\", \"resolution\": \"720p\"}" + +# 2. status が COMPLETED になるまでポーリングし、各レスポンスが指定する Retry-After 秒だけ待機します。 +REQUEST_ID="" +curl -i https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests/$REQUEST_ID/status \ + -H "X-API-Key: $COMFY_API_KEY" + +# 3. 収集。モデルのネイティブ出力付きの 200、まだ実行中はステータスボディ付きの 202 を返します。 +curl https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests/$REQUEST_ID \ + -H "X-API-Key: $COMFY_API_KEY" +``` + + + + +## スキーマ + +### 入力 + + + ビデオの長さ(秒)。 + + 指定可能な値: `5`、`10` + + + + アニメートするソース画像の公開 https URL。この画像が被写体を担います。平文の `http://` は拒否されます。Pika は Comfy のキーで送信されたリクエストで URL を取得します。 + + + + ビデオで避けたい内容を記述したテキスト。 + + + + 動きを導くテキストプロンプト。 + + + + 出力解像度。 + + 指定可能な値: `720p`、`1080p` + + + + 再現可能な生成のためのシード。ランダムなシードを得るには省略します(または null を送信します)。 + + +Router が `GET /v2/models/pika/pika-2.5-image-to-video/openapi.json` で提供するスキーマから生成されています。これは、リクエストがプロバイダーに到達する前に Router が呼び出しを検証する対象となるドキュメントと同じものです。 + +### 出力 + + + Pika の構造化された失敗記録で、`failed` ジョブに設定されます。Router は失敗したジョブに対して独自のエラー応答を返すため、Router が返すボディにこれが含まれることはありません。これは Pika のジョブドキュメントの一部であるため宣言されています。 + + + + 指定可能な値: `invalid_input`、`content_moderation`、`provider_error`、`provider_timeout`、`provider_unavailable`、`rate_limited`、`insufficient_balance`、`membership_required`、`cycle_limit_exceeded`、`admission_suspended`、`usage_limit_exceeded`、`timed_out`、`internal` + + + + + + + + Pika のジョブID。 + + + + ジョブが実行した Pika カタログのエントリ。 + + + + 完了したジョブのメディアで、`status` が `completed` のときに設定されます。`media_type` はどのフィールドにメディアが入るかを示します。`image` なら `images`、`video` なら `video`、`videos` なら `videos` です。 + + + + 画像モデルの場合の、生成済みの画像。 + + + + ファイルの MIME タイプ。 + + + + 高さ(ピクセル単位)。 + + + + 生成済みファイルのダウンロード URL。 + + + + 幅(ピクセル単位)。 + + + + 指定可能な値: `image`、`video`、`videos` + + + + ビデオジョブが実際に使用したシード(報告された場合)。 + + + + 生成されたメディアファイル1つ。 + + + + ファイルの MIME タイプ。 + + + + 高さ(ピクセル単位)。 + + + + 生成済みファイルのダウンロード URL。 + + + + 幅(ピクセル単位)。 + + + + 複数ビデオの配信の場合の、生成済みのビデオ。 + + + + ファイルの MIME タイプ。 + + + + 高さ(ピクセル単位)。 + + + + 生成済みファイルのダウンロード URL。 + + + + 幅(ピクセル単位)。 + + + + 生成にかかった秒数(ディスパッチから終端まで)。ベストエフォートであり、null になる場合があります。 + + + + ライフサイクルの状態。Router が返すボディは常に `completed` です。`failed` のジョブには代わりに Router のエラー応答が返されます。 + + 指定可能な値: `queued`、`running`、`completed`、`failed` + + + + ジョブについてプロバイダーが報告した単位。キーは疎で、ジョブが報告する単位のみが存在します。 + + +## 例 + +### 入力 + +```json +{ + "duration_s": 5, + "image": "https://example.invalid/pika/source.png", + "prompt": "The camera slowly pushes in as the leaves begin to sway", + "resolution": "720p" +} +``` + +### 出力 + +```json +{ + "id": "2d8e4b71-9c05-4f3a-b6d2-81e7a5c09f44", + "model_id": "pika/pika-2.5/image-to-video", + "output": { + "media_type": "video", + "seed": 42, + "video": { + "content_type": "video/mp4", + "height": 720, + "url": "https://example.invalid/pika/pika-2.5-image-to-video/generated.mp4", + "width": 1280 + } + }, + "status": "completed" +} +``` + + + diff --git a/ja/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx b/ja/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx new file mode 100644 index 0000000000..4899437cbd --- /dev/null +++ b/ja/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx @@ -0,0 +1,323 @@ +--- +title: "Comfy Router で Pika 2.5 テキストから動画へを使用する" +description: "Comfy Router 経由で pika/pika-2.5-text-to-video を呼び出します: エンドポイント、リクエストの形状、Router が返すレスポンス。" +sidebarTitle: "Pika 2.5 テキストから動画へ" +translationSourceHash: 65ba9bbc +translationFrom: development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx +translationBlockHashes: + "_intro": eb00317a + "Quick start": bce002f0 + "Schema": 347237ec + "Examples": fc131a5f +--- +{/* GENERATED FILE. Generated from router-schemas/pika/pika-2.5-text-to-video.json by `pnpm code-pages:gen`. */} + +import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; + +`pika/pika-2.5-text-to-video` の API リファレンスです。Pika から Comfy Router によって提供されます。 + +**入力:** テキスト · **出力:** ビデオ + +## クイックスタート + +[Comfy ワークスペース](https://platform.comfy.org/profile/api-keys?onboarding=router)でキーを作成し、`COMFY_API_KEY` としてエクスポートします。Python と TypeScript のスニペットは Comfy SDK(`pip install comfy-sdk` と `npm install @comfyorg/sdk`)を使用しています。cURL のスニペットは同じ呼び出しを生の HTTP で行うものです。 + +**モデル ID:** `pika/pika-2.5-text-to-video` + +**エンドポイント:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video` + + + + +```python Python +from comfy_sdk import Comfy + +# 環境変数から COMFY_API_KEY を読み取ります。 +# SDK は自動的に冪等キーを作成し、自動リトライのために再利用します。 +with Comfy() as client: + result = client.models.run( + "pika/pika-2.5-text-to-video", + { + "duration_s": 5, + "prompt": "A paper boat drifting down a rain-soaked city street at dusk", + "resolution": "720p", + }, + ) + +print(result) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 環境変数から COMFY_API_KEY を読み取ります。 +// SDK は自動的に冪等キーを作成し、自動リトライのために再利用します。 +const { data } = await comfy.models.run("pika/pika-2.5-text-to-video", { + duration_s: 5, + prompt: "A paper boat drifting down a rain-soaked city street at dusk", + resolution: "720p", +}); + +console.log(data); +``` + +```bash cURL +curl https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"prompt\": \"A paper boat drifting down a rain-soaked city street at dusk\", \"resolution\": \"720p\"}" +``` + + + +同じボディを `POST https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests` に送信します。Router は実行が受け付けられるとすぐに `201` と `request_id` を返し、結果は準備ができ次第、このプロセスからでも別のプロセスからでも収集できます。[キューの配信](/ja/development/comfy-router/queue)では、ステータス、キャンセル、収集について説明しています。 + + +```python Python +import asyncio +from comfy_sdk import AsyncComfy + +# 環境変数から COMFY_API_KEY を読み取ります。 +# 各 submit() 呼び出しは独自の Idempotency-Key を発行し、自動リトライのために再利用します。 +async def main(): + async with AsyncComfy() as client: + handle = await client.models.submit( + "pika/pika-2.5-text-to-video", + { + "duration_s": 5, + "prompt": "A paper boat drifting down a rain-soaked city street at dusk", + "resolution": "720p", + }, + ) + print("request_id:", handle.request_id) # モデル ID と合わせれば、別のプロセスが必要とするものはすべて揃います + + # リクエストが完了するまでポーリングし、サーバーが指定する Retry-After の時間だけ待機します。 + async for update in handle.iter_events(): + print(update.status, update.queue_position) + + # プロバイダー自身のペイロードで、models.run() が返すのと同じ値です。 + # 失敗またはキャンセル済みのリクエストでは、ここで型付きの Router エラーが発生します。 + result = await handle.get() + + print(result) + +asyncio.run(main()) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 環境変数から COMFY_API_KEY を読み取ります。 +// 各 submit() 呼び出しは独自の Idempotency-Key を発行し、自動リトライのために再利用します。 +const handle = await comfy.models.submit("pika/pika-2.5-text-to-video", { + duration_s: 5, + prompt: "A paper boat drifting down a rain-soaked city street at dusk", + resolution: "720p", +}); +console.log("requestId:", handle.requestId); // モデル ID と合わせれば、別のプロセスが必要とするものはすべて揃います + +// リクエストが完了するまでポーリングし、サーバーが指定する Retry-After の時間だけ待機します。 +for await (const update of handle.events()) { + console.log(update.status, update.queuePosition); +} + +// models.run() が返すのと同じ結果です。失敗またはキャンセル済みのリクエストでは、ここで reject されます。 +const result = await handle.get(); + +console.log(result.data); +``` + +```bash cURL +# 1. 送信します。Router は request_id、status_url、response_url、cancel_url とともに 201 を返します。 +curl https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"prompt\": \"A paper boat drifting down a rain-soaked city street at dusk\", \"resolution\": \"720p\"}" + +# 2. ステータスが COMPLETED になるまでポーリングし、各レスポンスが指定する Retry-After の秒数だけ待機します。 +REQUEST_ID="" +curl -i https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests/$REQUEST_ID/status \ + -H "X-API-Key: $COMFY_API_KEY" + +# 3. 収集します。まだ実行中であればステータスボディとともに 202、完了していればモデルのネイティブ出力とともに 200 を返します。 +curl https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests/$REQUEST_ID \ + -H "X-API-Key: $COMFY_API_KEY" +``` + + + + +## スキーマ + +### 入力 + + + ビデオの長さ(秒単位)。テキストから動画へは5秒のクリップのみを生成します。 + + 指定可能な値: `5` + + + + ビデオで避けたい内容を記述したテキスト。 + + + + 生成するビデオを記述したテキストプロンプト。 + + + + 出力解像度。 + + 指定可能な値: `720p`, `1080p` + + + + 再現可能な生成のためのシード。ランダムなシードにするには省略するか、null を送信します。 + + +Router が `GET /v2/models/pika/pika-2.5-text-to-video/openapi.json` で提供するスキーマから生成されています。これは、リクエストがプロバイダーに届く前に Router が呼び出しを検証する対象となるドキュメントと同じものです。 + +### 出力 + + + Pika の構造化された失敗記録で、`failed` のジョブに設定されます。Router は失敗したジョブに対して Router 自身のエラー応答を返すため、Router が返すボディにはこれが含まれません。Pika のジョブドキュメントの一部であるため宣言されています。 + + + + 指定可能な値: `invalid_input`, `content_moderation`, `provider_error`, `provider_timeout`, `provider_unavailable`, `rate_limited`, `insufficient_balance`, `membership_required`, `cycle_limit_exceeded`, `admission_suspended`, `usage_limit_exceeded`, `timed_out`, `internal` + + + + + + + + Pika のジョブID。 + + + + ジョブが実行した Pika カタログのエントリ。 + + + + 完了したジョブのメディアで、`status` が `completed` のときに設定されます。`media_type` はどのフィールドがそれを保持するかを示します。`image` は `images` に、`video` は `video` に、`videos` は `videos` に格納されます。 + + + + 生成された画像。画像モデル用です。 + + + + ファイルの MIME タイプ。 + + + + 高さ(ピクセル単位)。 + + + + 生成されたファイルのダウンロード URL。 + + + + 幅(ピクセル単位)。 + + + + 指定可能な値: `image`, `video`, `videos` + + + + ビデオジョブが実際に使用したシード(報告された場合)。 + + + + 生成されたメディアファイル1つ。 + + + + ファイルの MIME タイプ。 + + + + 高さ(ピクセル単位)。 + + + + 生成されたファイルのダウンロード URL。 + + + + 幅(ピクセル単位)。 + + + + 生成されたビデオ。複数ビデオの配信向けです。 + + + + ファイルの MIME タイプ。 + + + + 高さ(ピクセル単位)。 + + + + 生成されたファイルのダウンロード URL。 + + + + 幅(ピクセル単位)。 + + + + 生成にかかった秒数(ディスパッチから終了まで)。ベストエフォートであり、null の場合があります。 + + + + ライフサイクル状態。Router が返すボディは常に `completed` と表示されます。`failed` のジョブは代わりに Router のエラー応答で返されます。 + + 指定可能な値: `queued`, `running`, `completed`, `failed` + + + + ジョブについてプロバイダーが報告する単位。キーは疎で、ジョブが報告する単位のみが存在します。 + + +## 例 + +### 入力 + +```json +{ + "duration_s": 5, + "prompt": "A paper boat drifting down a rain-soaked city street at dusk", + "resolution": "720p" +} +``` + +### 出力 + +```json +{ + "id": "6f1c2a9e-3b47-4d8a-9e21-7c5b0f4d8a13", + "model_id": "pika/pika-2.5/text-to-video", + "output": { + "media_type": "video", + "seed": 42, + "video": { + "content_type": "video/mp4", + "height": 720, + "url": "https://example.invalid/pika/pika-2.5-text-to-video/generated.mp4", + "width": 1280 + } + }, + "status": "completed" +} +``` + + + diff --git a/ko/development/comfy-router/models/meshy/meshy-5/code.mdx b/ko/development/comfy-router/models/meshy/meshy-5/code.mdx index 276d29be88..0c0c62c4fb 100644 --- a/ko/development/comfy-router/models/meshy/meshy-5/code.mdx +++ b/ko/development/comfy-router/models/meshy/meshy-5/code.mdx @@ -2,16 +2,17 @@ title: "Comfy Router로 Meshy 5 사용하기" description: "Comfy Router를 통해 meshy/meshy-5를 호출하는 방법: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답." sidebarTitle: "Meshy 5" -translationSourceHash: 93a7e08c +translationSourceHash: 7f6f26e7 translationFrom: development/comfy-router/models/meshy/meshy-5/code.mdx translationBlockHashes: "_intro": 237f6506 "Quick start": 7bc21724 - "Schema": 0f9b14f9 + "Schema": 8d7621e1 "Examples": e2bc6209 --- + {/* GENERATED FILE. Generated from router-schemas/meshy/meshy-5.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -168,7 +169,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 생성된 메시의 지오메트리 해상도입니다. 2k와 4k는 더 세밀한 표면 디테일을 위해 Ultra 패스를 실행합니다. 2k는 ai_model이 meshy-7, meshy-7.1 또는 latest여야 하고, 4k는 meshy-7.1 또는 latest여야 합니다. + 생성된 메시의 지오메트리 해상도입니다. 2k와 4k는 더 세밀한 표면 디테일을 위해 Ultra 패스를 실행합니다. 2k와 4k는 ai_model이 meshy-7.1 또는 latest여야 합니다. 가능한 값: `standard`, `2k`, `4k` @@ -220,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. + 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다. geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode 참이 Ultra 패스를 요청하는 방법입니다. #### `refine` 변형 @@ -378,7 +379,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 모델 파일의 썸네일 이미지에 대한 다운로드 가능한 URL입니다. + 모델 파일의 썸네일 이미지의 다운로드 가능한 URL입니다. diff --git a/ko/development/comfy-router/models/meshy/meshy-6/code.mdx b/ko/development/comfy-router/models/meshy/meshy-6/code.mdx index cae790b0a0..31569e3a23 100644 --- a/ko/development/comfy-router/models/meshy/meshy-6/code.mdx +++ b/ko/development/comfy-router/models/meshy/meshy-6/code.mdx @@ -2,16 +2,17 @@ title: "Comfy Router로 Meshy 6 사용하기" description: "Comfy Router를 통해 meshy/meshy-6를 호출하는 방법: endpoint, 요청 형태, Router가 반환하는 응답." sidebarTitle: "Meshy 6" -translationSourceHash: 32e3a99d +translationSourceHash: d03275d2 translationFrom: development/comfy-router/models/meshy/meshy-6/code.mdx translationBlockHashes: "_intro": a12edda1 "Quick start": 4cef8af8 - "Schema": f89aaaeb + "Schema": c7195145 "Examples": e2bc6209 --- + {/* 생성된 파일. `pnpm code-pages:gen`에 의해 router-schemas/meshy/meshy-6.json에서 생성되었습니다. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -168,7 +169,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 생성된 메시의 지오메트리 해상도입니다. 2k와 4k는 더 세밀한 표면 디테일을 위해 Ultra 패스를 실행합니다. 2k는 ai_model이 meshy-7, meshy-7.1 또는 latest여야 하고, 4k는 meshy-7.1 또는 latest여야 합니다. + 생성된 메시의 지오메트리 해상도입니다. 2k와 4k는 더 세밀한 표면 디테일을 위해 Ultra 패스를 실행합니다. 2k와 4k는 ai_model이 meshy-7.1 또는 latest여야 합니다. 가능한 값: `standard`, `2k`, `4k` @@ -220,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. + 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다. geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode 참이 Ultra 패스를 요청하는 방법입니다. #### `refine` 변형 diff --git a/ko/development/comfy-router/models/meshy/meshy-7-1/code.mdx b/ko/development/comfy-router/models/meshy/meshy-7-1/code.mdx index b55cc9135e..bf9df0045c 100644 --- a/ko/development/comfy-router/models/meshy/meshy-7-1/code.mdx +++ b/ko/development/comfy-router/models/meshy/meshy-7-1/code.mdx @@ -2,16 +2,17 @@ title: "Comfy Router로 Meshy 7.1 사용하기" description: "Comfy Router를 통해 meshy/meshy-7.1을 호출하는 방법: endpoint, 요청 형태, 그리고 Router가 반환하는 응답을 설명합니다." sidebarTitle: "Meshy 7.1" -translationSourceHash: b7ac2b6f +translationSourceHash: dbb370d8 translationFrom: development/comfy-router/models/meshy/meshy-7-1/code.mdx translationBlockHashes: "_intro": d8eb7cb3 "Quick start": dd5c470d - "Schema": 93541104 + "Schema": 213fd0e4 "Examples": e2bc6209 --- + {/* 생성된 파일. `pnpm code-pages:gen`으로 router-schemas/meshy/meshy-7.1.json에서 생성됨. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -168,7 +169,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 생성된 메시의 지오메트리 해상도입니다. 2k와 4k는 더 세밀한 표면 디테일을 위해 Ultra 패스를 실행합니다. 2k는 ai_model이 meshy-7, meshy-7.1 또는 latest여야 하고, 4k는 meshy-7.1 또는 latest여야 합니다. + 생성된 메시의 지오메트리 해상도입니다. 2k와 4k는 더 세밀한 표면 디테일을 위해 Ultra 패스를 실행합니다. 2k와 4k는 ai_model이 meshy-7.1 또는 latest여야 합니다. 가능한 값: `standard`, `2k`, `4k` @@ -198,7 +199,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 리메시 단계를 활성화할지 여부를 제어합니다. false이면 최고 정밀도의 삼각형 메시를 반환합니다. Meshy 5는 true, Meshy 6 및 7은 false가 기본값입니다. + 리메시 단계를 활성화할지 여부를 제어합니다. 거짓이면 최고 정밀도의 삼각형 메시를 반환합니다. 기본값은 Meshy 5의 경우 참이고 Meshy 6 및 7의 경우 거짓입니다. @@ -220,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. + 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다: geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode를 참으로 설정하는 것이 Ultra 패스를 요청하는 방법입니다. #### `refine` 변형 diff --git a/ko/development/comfy-router/models/meshy/meshy-7/code.mdx b/ko/development/comfy-router/models/meshy/meshy-7/code.mdx index 2a4030b0eb..93d4a81343 100644 --- a/ko/development/comfy-router/models/meshy/meshy-7/code.mdx +++ b/ko/development/comfy-router/models/meshy/meshy-7/code.mdx @@ -2,16 +2,17 @@ title: "Comfy Router로 Meshy 7 사용하기" description: "Comfy Router를 통해 meshy/meshy-7을 호출하는 방법: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답." sidebarTitle: "Meshy 7" -translationSourceHash: 3475319a +translationSourceHash: 1214bb2a translationFrom: development/comfy-router/models/meshy/meshy-7/code.mdx translationBlockHashes: "_intro": d8d3391c "Quick start": 136306f5 - "Schema": abec2fb4 + "Schema": de7fd56b "Examples": e2bc6209 --- + {/* GENERATED FILE. Generated from router-schemas/meshy/meshy-7.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -158,7 +159,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ #### `preview` 변형 - 실행할 Meshy 모델입니다. Comfy Router 경로에서는 경로(`/v2/models/meshy/{model}`)로 제공되며 생략하거나 null로 보낼 수 있습니다. Router는 검증 후 경로의 모델을 여기에 기록합니다. v1 /proxy 경로에서는 MeshyTextTo3DPreviewRequest를 참조하세요. 이는 이를 MeshyAiModel로 제한합니다. + 실행할 Meshy 모델입니다. Comfy Router 경로에서는 경로(`/v2/models/meshy/{model}`)로 제공되며 생략하거나 null로 보낼 수 있습니다. Router는 검증 후 경로의 모델을 여기에 기록합니다. v1 /proxy 경로에서는 MeshyTextTo3DPreviewRequest를 참조하세요. 이는 이 필드를 MeshyAiModel로 제한합니다. @@ -168,7 +169,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 생성된 메시의 지오메트리 해상도입니다. 2k와 4k는 더 세밀한 표면 디테일을 위해 Ultra 패스를 실행합니다. 2k는 ai_model이 meshy-7, meshy-7.1 또는 latest여야 하고, 4k는 meshy-7.1 또는 latest여야 합니다. + 생성된 메시의 지오메트리 해상도입니다. 2k와 4k는 더 세밀한 표면 디테일을 위해 Ultra 패스를 실행합니다. 2k와 4k는 ai_model meshy-7.1 또는 latest가 필요합니다. 가능한 값: `standard`, `2k`, `4k` @@ -184,7 +185,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 참일 때 입력 콘텐츠에서 잠재적으로 유해한 콘텐츠를 검사합니다. + 참일 때 입력 콘텐츠가 잠재적으로 유해한 콘텐츠인지 검사됩니다. @@ -220,13 +221,13 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. + 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다. geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode를 참으로 설정하는 것이 Ultra 패스를 요청하는 방법입니다. #### `refine` 변형 - 실행할 Meshy 모델입니다. Comfy Router 경로에서는 경로(`/v2/models/meshy/{model}`)로 제공되며 생략하거나 null로 보낼 수 있습니다. Router는 검증 후 경로의 모델을 여기에 기록합니다. v1 /proxy 경로에서는 MeshyTextTo3DRefineRequest를 참조하세요. 이는 이를 MeshyAiModel로 제한합니다. + 실행할 Meshy 모델입니다. Comfy Router 경로에서는 경로(`/v2/models/meshy/{model}`)로 제공되며 생략하거나 null로 보낼 수 있습니다. Router는 검증 후 경로의 모델을 여기에 기록합니다. v1 /proxy 경로에서는 MeshyTextTo3DRefineRequest를 참조하세요. 이는 이 필드를 MeshyAiModel로 제한합니다. @@ -240,7 +241,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 참일 때 입력 콘텐츠에서 잠재적으로 유해한 콘텐츠를 검사합니다. + 참일 때 입력 콘텐츠가 잠재적으로 유해한 콘텐츠인지 검사됩니다. diff --git a/ko/development/comfy-router/models/openai/gpt-image-1-5/code.mdx b/ko/development/comfy-router/models/openai/gpt-image-1-5/code.mdx index f24affe875..bb52ee0b13 100644 --- a/ko/development/comfy-router/models/openai/gpt-image-1-5/code.mdx +++ b/ko/development/comfy-router/models/openai/gpt-image-1-5/code.mdx @@ -2,12 +2,12 @@ title: "Comfy Router로 GPT Image 1.5 사용하기" description: "Comfy Router를 통해 openai/gpt-image-1.5를 호출합니다: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답입니다." sidebarTitle: "GPT Image 1.5" -translationSourceHash: b9579a35 +translationSourceHash: 38ba43fc translationFrom: development/comfy-router/models/openai/gpt-image-1-5/code.mdx translationBlockHashes: "_intro": 7a84676f "Quick start": f364e3f2 - "Schema": f8fd74f0 + "Schema": 43008228 "Examples": c73859ec --- @@ -305,7 +305,7 @@ Router가 `GET /v2/models/openai/gpt-image-1.5/openapi.json`에서 제공하는 - 생성이 완료된 시각의 Unix 타임스탬프(초)입니다. OpenAI가 이미지 생성 응답에서 필수로 선언한 유일한 멤버이므로, OpenAI가 생성자일 때는 항상 존재합니다. alt 기반 id에서 fal, wavespeed 또는 runware가 제공하는 응답은 다른 네 개의 확정 파라미터 멤버와 마찬가지로 이 필드를 완전히 생략합니다. 현재 시점의 epoch 값이 2^31에 충분히 가까워, 포맷을 지정하지 않은 `integer`가 많은 SDK 생성기에서 32비트 필드를 만들기 때문에 `int64`로 선언되었습니다. + 생성이 완료된 시각의 Unix 타임스탬프(초)입니다. OpenAI가 이미지 생성 응답에서 필수로 선언한 유일한 멤버이므로, OpenAI가 생성자일 때는 항상 존재합니다. alt 기반 id에서 fal, pika, wavespeed 또는 runware가 제공하는 응답은 다른 네 개의 확정 파라미터 멤버와 마찬가지로 이 필드를 완전히 생략합니다. 현재 시점의 epoch 값이 2^31에 충분히 가까워, 포맷을 지정하지 않은 `integer`가 많은 SDK 생성기에서 32비트 필드를 만들기 때문에 `int64`로 선언되었습니다. 형식: `int64` diff --git a/ko/development/comfy-router/models/openai/gpt-image-1/code.mdx b/ko/development/comfy-router/models/openai/gpt-image-1/code.mdx index 881dd24e5a..7f151c4a46 100644 --- a/ko/development/comfy-router/models/openai/gpt-image-1/code.mdx +++ b/ko/development/comfy-router/models/openai/gpt-image-1/code.mdx @@ -2,18 +2,19 @@ title: "Comfy Router에서 GPT Image 1 사용하기" description: "Comfy Router를 통해 openai/gpt-image-1을 호출합니다: 엔드포인트, 요청 형태, Router가 반환하는 응답을 설명합니다." sidebarTitle: "GPT Image 1" -translationSourceHash: bb5aa5c1 +translationSourceHash: 02331b72 translationFrom: development/comfy-router/models/openai/gpt-image-1/code.mdx translationBlockHashes: "_intro": 410036c3 "Quick start": b83102e7 - "Schema": bb51ceed + "Schema": 8be561c9 "Examples": c73859ec --- + {/* GENERATED FILE. Generated from router-schemas/openai/gpt-image-1.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -179,13 +180,13 @@ URL은 여러분의 자격 증명 없이 해석되어야 합니다. Router는 첫 번째는 `POST /customers/storage`가 업로드를 서명해 넣는 버킷입니다. 롤아웃이 여러분의 환경에 도달하기 전까지는 그 엔드포인트에서 나온 업로드 URL이 여기에서 거부됩니다. 버킷이 Comfy 소유이고 호스트도 동일한데도 그렇습니다. 따라서 "Comfy에 업로드한 다음 URL을 전달"하는 방식은 아직 동작하지 않으며, 동작하는 형식은 `/api/assets/{id}/content`가 리다이렉트하는 서명된 URL입니다. 두 번째는 모든 사람에게 한 번에 적용되는 것이 아니라 계정별로 활성화됩니다. 이 호스트들 뒤의 버킷이 우리 것이 아니라 여러분의 것이기 때문입니다. 위 전환이 켜져 있더라도 제3자 인바운드 미디어가 활성화되지 않은 계정은 거부되며, 호스트가 지원되지 않는다는 것이 아니라 바로 그 문구로 그렇게 안내됩니다. Comfy 담당자에게 계정에 대해 활성화를 요청하세요. 이 확장은 다음의 제3자 오브젝트 스토리지 호스트를 추가로 허용하며, 여기서 버킷은 여러분의 것이고 Router는 이에 대한 소유권을 주장하지 않습니다: Cloudflare R2 (`.r2.cloudflarestorage.com`, `pub-.r2.dev`), Amazon S3 (`s3.amazonaws.com` 및 `s3..amazonaws.com`, 경로 스타일 또는 `.` 접두사 형식 모두), Azure Blob Storage (`.blob.core.windows.net`) 그리고 Alibaba Cloud OSS (`.oss-.aliyuncs.com`, `oss-accelerate` 엔드포인트 포함). 이들은 특별히 오브젝트 스토리지 엔드포인트입니다. 같은 공급자 도메인의 범용 엔드포인트, 예를 들어 Alibaba Function Compute 트리거는 목록에 없으며 거부됩니다. 일치되는 것은 공급자가 아니라 호스트 이름 형식입니다. 따라서 위에서 공급자를 언급했다고 해서 그 공급자가 발급할 수 있는 모든 URL이 허용된다는 뜻은 아니며, 호출자가 각각을 합리적으로 사용할 수 있으므로 세 가지 유사 사례를 분명히 밝힐 필요가 있습니다. R2 사용자 지정 도메인(`cdn.example.com`)은 허용되지 않습니다. Cloudflare는 `pub-.r2.dev`를 속도 제한이 있는 디버그 호스트 이름으로 문서화하고 프로덕션 트래픽은 대신 사용자 지정 도메인으로 보내지만, 사용자 지정 도메인은 호스트 이름에 R2임을 나타내는 정보가 없으므로 Router는 이를 다른 호스트와 구별할 수 없어 거부합니다. `.r2.cloudflarestorage.com` 엔드포인트에 presign하거나 `pub-.r2.dev` 형식을 사용하세요. S3의 IPv6 dualstack 엔드포인트(`s3.dualstack..amazonaws.com`) 역시 허용되지 않습니다. 일반 리전 엔드포인트를 사용하세요. Azure Blob의 대체 DNS 영역(`.z.blob.storage.azure.net`)도 마찬가지입니다. `.blob.core.windows.net`을 사용하세요. 돌려받는 거부 메시지에는 이와 동일한 형식이 명시되므로, 이를 읽기 위해 여기까지 올 필요가 없습니다. -위의 ``와 `pub-` 자리 표시자는 일반적으로 도착하게 되는 형태를 보여줄 뿐이며, 깊이 제한이 아닙니다. 일치는 객체 스토리지 도메인 접미사를 기준으로 하므로, 같은 네임스페이스 아래의 더 깊은 이름(`a.b.pub-.r2.dev`)도 허용됩니다. 다만 그것으로 인해 넓어지지 않는 것은 네임스페이스 자체입니다. 접미사는 여전히 나열된 것 중 하나여야 합니다. -아래 예시는 형태만 보여줍니다. 실제 값에는 서명 쿼리 파라미터도 함께 포함되는데, 여기서는 이를 의도적으로 생략했습니다. 한 번 공개된 예시는 스펙에 영원히 남고, 실제 서명은 유출된 자격 증명이자 곧 작동을 멈출 링크이기 때문입니다. +위의 `` 및 `pub-` 자리 표시자는 일반적으로 사용하게 될 형태를 보여줄 뿐, 깊이 제한이 아닙니다. 일치는 객체 스토리지 도메인 접미사를 기준으로 하므로, 동일한 네임스페이스 아래의 더 깊은 이름(`a.b.pub-.r2.dev`)도 허용됩니다. 다만 그것으로 인해 넓어지지 않는 것은 네임스페이스 자체입니다. 접미사는 여전히 나열된 것 중 하나여야 합니다. +아래 예시는 형태만 보여줍니다. 실제 값에는 서명 쿼리 파라미터도 함께 포함되는데, 게시된 예시는 스펙에 영원히 남고 실제 서명은 유출된 자격 증명이자 작동을 멈추는 링크이므로 여기서는 의도적으로 생략했습니다. 각 이미지는 25 MiB로 제한되며, 한 요청의 이미지는 총 64 MiB로 제한됩니다. - 실행할 gpt-image 모델입니다. Router가 주소로 지정된 model id를 끼워 넣으므로, /v2/models/openai/gpt-image-2로 주소를 지정하는 호출자는 이 값을 보내지 않습니다. + 실행할 gpt-image 모델입니다. Router가 주소 지정된 모델 id를 끼워 넣으므로, /v2/models/openai/gpt-image-2로 주소를 지정하는 호출자는 이 필드를 보내지 않습니다. @@ -195,15 +196,15 @@ URL은 여러분의 자격 증명 없이 해석되어야 합니다. Router는 - 생성할 이미지 수(1-10). + 생성할 이미지 수(1-10)입니다. - 범위: `1`부터 `10`까지 + 범위: `1` ~ `10` - JPEG 또는 WebP의 압축 수준(0-100) + JPEG 또는 WebP의 압축 수준(0-100)입니다. - 범위: `0`부터 `100`까지 + 범위: `0` ~ `100` @@ -213,17 +214,17 @@ URL은 여러분의 자격 증명 없이 해석되어야 합니다. Router는 - 라이브 스트림과 함께일 때만 의미가 있지만 이 표면은 이를 제공할 수 없습니다. 보내더라도 `stream`은 `false`로 고정됩니다. 생성에서는 `0` 또는 `null`이 아닌 값이면 요청이 `stream: true`도 함께 보내는지와 관계없이 400으로 거부됩니다. `image`를 포함한 요청에서는 이 필드가 전달되지 않고 버려집니다. 생략하세요. + 라이브 스트림과 함께 사용할 때만 의미가 있으며, 이 표면은 라이브 스트림을 제공할 수 없습니다. `stream`을 보내더라도 `false`로 고정됩니다. 생성 시에는 `0` 또는 `null`이 아닌 모든 값이 400으로 거부되며, 요청이 `stream: true`도 함께 보내는지와는 무관합니다. `image`를 포함한 요청에서는 이 필드가 전달되지 않고 버려집니다. 이 필드는 생략하세요. - 범위: `0`부터 `3`까지 + 범위: `0` ~ `3` - 생성할 이미지에 대한 설명 텍스트이거나, `image`에 적용할 편집에 대한 설명 텍스트입니다. + 생성할 이미지 또는 `image`에 수행할 편집에 대한 텍스트 설명입니다. - 생성 또는 편집된 이미지의 품질입니다. `xhigh`와 `max`는 gpt-image-2.5-flare와 gpt-image-2.5-sunburst가 추가된 두 등급이며, `standard`와 `hd`는 어떤 허용된 모델도 읽지 않는 dall-e 시대의 표기입니다. + 생성되거나 편집된 이미지의 품질입니다. `xhigh`와 `max`는 gpt-image-2.5-flare와 gpt-image-2.5-sunburst가 추가된 두 등급이며, `standard`와 `hd`는 허용된 어떤 모델도 읽지 않는 dall-e 시대의 표기입니다. 가능한 값: `auto`, `low`, `medium`, `high`, `xhigh`, `max`, `standard`, `hd` @@ -305,7 +306,7 @@ Router가 `GET /v2/models/openai/gpt-image-1/openapi.json`에서 제공하는 - 생성이 완료된 시각의 Unix 타임스탬프(초)입니다. OpenAI가 이미지 생성 응답에서 REQUIRED로 선언하는 유일한 멤버이므로, OpenAI가 생성자인 경우에는 항상 존재합니다. alt 기반 id에서 fal, wavespeed 또는 runware가 응답을 제공하는 경우에는 나머지 네 개의 확정 파라미터 멤버와 마찬가지로 이 필드가 완전히 생략됩니다. 현재 시점의 epoch 값이 2^31에 충분히 가까워서 서식을 지정하지 않은 `integer`가 많은 SDK 생성기에서 32비트 필드를 만들어내기 때문에 `int64`로 선언되었습니다. + 생성이 완료된 시각의 Unix 타임스탬프(초)입니다. OpenAI가 이미지 생성 응답에서 REQUIRED로 선언하는 유일한 멤버이므로, OpenAI가 생성자인 경우에는 항상 존재합니다. alt 기반 id에서 fal, pika, wavespeed 또는 runware가 응답을 제공하는 경우에는 나머지 네 개의 확정 파라미터 멤버와 마찬가지로 이 필드가 완전히 생략됩니다. 현재 시점의 epoch 값이 2^31에 충분히 가까워서 서식을 지정하지 않은 `integer`가 많은 SDK 생성기에서 32비트 필드를 만들어내기 때문에 `int64`로 선언되었습니다. 형식: `int64` diff --git a/ko/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx b/ko/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx index 2a09d710cb..a054019e3f 100644 --- a/ko/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx +++ b/ko/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx @@ -15,6 +15,7 @@ translationBlockHashes: + {/* 생성된 파일. `pnpm code-pages:gen`이 router-schemas/openai/gpt-image-2.5-flare.json에서 생성했습니다. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; diff --git a/ko/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx b/ko/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx index 686e3cf509..0b099e829e 100644 --- a/ko/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx +++ b/ko/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx @@ -15,6 +15,7 @@ translationBlockHashes: + {/* GENERATED FILE. Generated from router-schemas/openai/gpt-image-2.5-sunburst.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; diff --git a/ko/development/comfy-router/models/openai/gpt-image-2/code.mdx b/ko/development/comfy-router/models/openai/gpt-image-2/code.mdx index 780b81de27..2df64f3cd7 100644 --- a/ko/development/comfy-router/models/openai/gpt-image-2/code.mdx +++ b/ko/development/comfy-router/models/openai/gpt-image-2/code.mdx @@ -2,19 +2,20 @@ title: "Comfy Router에서 GPT Image 2 사용하기" description: "Comfy Router를 통해 openai/gpt-image-2를 호출합니다: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답을 설명합니다." sidebarTitle: "GPT Image 2" -translationSourceHash: 76d11c22 +translationSourceHash: 6437f5f1 translationFrom: development/comfy-router/models/openai/gpt-image-2/code.mdx translationBlockHashes: "_intro": ff220f7e "Quick start": 7ec2e3b6 - "Serving providers": 5a41369d - "Schema": 1d94d9e6 + "Serving providers": 56df172f + "Schema": 0ebd1b14 "Examples": c73859ec --- + {/* GENERATED FILE. Generated from router-schemas/openai/gpt-image-2.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; @@ -154,16 +155,17 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2/requests/$REQUEST_ID \ -## 모델 제공 공급자 +## 제공 공급자 -이 모델은 요청이 다른 공급자를 지정하지 않는 한 Comfy Router가 직접 제공합니다. 아래 공급자들도 동일한 엔드포인트와 동일한 모델 ID로 이 모델을 제공하며, `model_provider` 쿼리 파라미터로 선택됩니다. +이 모델은 요청에서 다른 공급자를 지정하지 않는 한 Comfy Router가 직접 제공합니다. 아래 공급자들도 동일한 엔드포인트와 동일한 모델 ID로 이 모델을 제공하며, `model_provider` 쿼리 파라미터로 선택됩니다. - **Comfy** (기본값): `POST https://api.comfy.org/v2/models/openai/gpt-image-2` - **fal**, `fal/fal-gpt-image-2`로: `POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=fal` +- **Pika**, `pika/pika-gpt-image-2`로: `POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=pika` - **Runware**, `runware/runware-gpt-image-2`로: `POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=runware` - **WaveSpeed**, `wavespeed/wavespeed-gpt-image-2`로: `POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=wavespeed` -`strict_mode`의 기본값은 false이므로, Router는 이 페이지에 문서화된 네이티브 요청 본문을 공급자 자체의 스키마로 변환하고 응답을 다시 변환합니다. API 레퍼런스의 [`model_provider`, `strict_mode` 및 `fallback_provider`](/ko/development/comfy-router/reference#post-v2modelsprovidermodel)와, 이렇게 라우팅되는 모든 모델에 대해서는 [모델 제공 공급자](/ko/development/comfy-router/providers)를 참조하세요. +`strict_mode`의 기본값은 거짓이므로, Router는 이 페이지에 문서화된 네이티브 요청 본문을 공급자 자체의 스키마로 변환하고 응답을 다시 변환합니다. API 레퍼런스의 [`model_provider`, `strict_mode` 및 `fallback_provider`](/ko/development/comfy-router/reference#post-v2modelsprovidermodel)와, 이렇게 라우팅되는 모든 모델에 대해서는 [제공 공급자](/ko/development/comfy-router/providers)를 참조하세요. ## 스키마 @@ -191,19 +193,17 @@ URL은 자격 증명 없이 해석되어야 합니다. Router는 서버 측에 첫 번째는 `POST /customers/storage`가 업로드에 서명해 넣는 버킷입니다. 배포가 귀하의 환경에 도달할 때까지 해당 엔드포인트의 업로드 URL은 여기에서 거부됩니다. 버킷이 Comfy 소유이고 호스트도 동일한데도 그렇습니다. 따라서 "Comfy에 업로드한 뒤 URL을 전달"하는 방식은 아직 동작하지 않으며, 동작하는 형식은 `/api/assets/{id}/content`가 리다이렉트하는 서명 URL입니다. 두 번째는 모든 계정에 한 번에 적용되는 것이 아니라 계정별로 활성화됩니다. 이 호스트 뒤의 버킷이 우리 것이 아니라 귀하의 것이기 때문입니다. 위 전환을 켠 뒤에도 서드파티 인바운드 미디어가 활성화되지 않은 계정은 거부되며, 호스트가 지원되지 않는다는 안내 대신 그 취지의 문구를 받습니다. Comfy 담당자에게 계정에 대해 활성화해 달라고 요청하세요. 또한 버킷이 귀하의 것이고 Router가 이에 대한 소유권을 주장하지 않는 다음 서드파티 오브젝트 스토리지 호스트를 허용합니다: Cloudflare R2 (`.r2.cloudflarestorage.com`, `pub-.r2.dev`), Amazon S3 (`s3.amazonaws.com` 및 `s3..amazonaws.com`, 경로 스타일 또는 `.` 접두 형식 모두), Azure Blob Storage (`.blob.core.windows.net`), Alibaba Cloud OSS (`.oss-.aliyuncs.com`, `oss-accelerate` 엔드포인트 포함). 이는 특히 오브젝트 스토리지 엔드포인트입니다. 같은 공급자 도메인의 일반 목적 엔드포인트, 예컨대 Alibaba Function Compute 트리거는 목록에 없으며 거부됩니다. 일치되는 것은 공급자가 아니라 호스트명 형식입니다. 따라서 위에서 공급자를 언급했다고 해서 그 공급자가 발급할 수 있는 모든 URL이 허용된다는 뜻은 아니며, 호출자가 합리적으로 각각을 가지고 올 수 있으므로 세 가지 유사 사례를 분명히 밝힐 필요가 있습니다. R2 사용자 지정 도메인(`cdn.example.com`)은 허용되지 않습니다. Cloudflare는 `pub-.r2.dev`를 속도 제한이 있는 디버그 호스트명으로 문서화하고 프로덕션 트래픽은 대신 사용자 지정 도메인으로 보냅니다. 그러나 사용자 지정 도메인은 호스트명에 R2임을 식별할 정보가 없으므로 Router는 다른 호스트와 구분할 수 없어 거부합니다. `.r2.cloudflarestorage.com` 엔드포인트를 presign하거나 `pub-.r2.dev` 형식을 사용하세요. S3의 IPv6 dualstack 엔드포인트(`s3.dualstack..amazonaws.com`)도 허용되지 않습니다. 일반 리전 엔드포인트를 사용하세요. Azure Blob의 대체 DNS 영역(`.z.blob.storage.azure.net`)도 마찬가지입니다. `.blob.core.windows.net`을 사용하세요. 반환되는 거부 메시지에 이와 동일한 형식이 명시되므로, 이를 읽기 위해 여기까지 올 필요는 없습니다. -위의 `` 및 `pub-` 자리 표시자는 일반적으로 사용하게 되는 형태를 보여줄 뿐이며, 깊이 제한이 아닙니다. 일치는 객체 스토리지 도메인 접미사를 기준으로 이루어지므로, 동일한 네임스페이스 아래의 더 깊은 이름(`a.b.pub-.r2.dev`)도 허용됩니다. 다만 이것으로 확장되지 않는 것은 네임스페이스 자체입니다. 접미사는 여전히 나열된 것 중 하나여야 합니다. - -아래 예시는 형태만 보여줍니다. 실제 값에는 서명 쿼리 파라미터도 함께 포함되지만, 여기서는 의도적으로 생략했습니다. 공개된 예시는 스펙에 영원히 남고, 실제 서명은 유출된 자격 증명인 동시에 작동을 멈추는 링크이기 때문입니다. - -각 이미지는 25 MiB로 제한되며, 한 요청의 이미지 전체는 64 MiB로 제한됩니다. +위의 `` 및 `pub-` 자리 표시자는 일반적으로 사용하게 될 형태를 보여줄 뿐이며, 깊이 제한이 아닙니다. 일치는 객체 스토리지 도메인 접미사를 기준으로 이루어지므로, 같은 네임스페이스 아래의 더 깊은 이름(`a.b.pub-.r2.dev`)도 허용됩니다. 다만 이것으로 넓어지지 않는 것은 네임스페이스 자체입니다. 접미사는 여전히 나열된 것 중 하나여야 합니다. +아래 예시는 형태만 보여줍니다. 실제 값에는 서명 쿼리 파라미터도 함께 포함되는데, 게시된 예시는 스펙에 영원히 남고 실제 서명은 유출된 자격 증명이자 더 이상 작동하지 않는 링크이므로 여기서는 의도적으로 생략했습니다. +각 이미지는 25 MiB로 제한되며, 한 요청의 이미지들은 총 64 MiB로 제한됩니다. - 실행할 gpt-image 모델입니다. Router가 주소 지정된 모델 id를 끼워 넣으므로, /v2/models/openai/gpt-image-2로 주소를 지정하는 호출자는 이 값을 보내지 않습니다. + 실행할 gpt-image 모델입니다. Router가 주소 지정된 모델 id를 끼워 넣으므로, /v2/models/openai/gpt-image-2로 주소를 지정하는 호출자는 이 필드를 보내지 않습니다. - 콘텐츠 모더레이션 설정 + 콘텐츠 검열 설정 가능한 값: `low`, `auto` @@ -227,7 +227,7 @@ URL은 자격 증명 없이 해석되어야 합니다. Router는 서버 측에 - 라이브 스트림과 함께일 때만 의미가 있지만 이 표면은 이를 제공할 수 없습니다. 보내더라도 `stream`은 `false`로 고정됩니다. 생성에서는 `0` 또는 `null`이 아닌 값이면 요청이 `stream: true`도 함께 보내는지와 관계없이 400으로 거부됩니다. `image`를 포함한 요청에서는 이 필드가 전달되지 않고 버려집니다. 생략하세요. + 라이브 스트림과 함께일 때만 의미가 있는데, 이 표면은 라이브 스트림을 제공할 수 없습니다. `stream`은 보내더라도 `false`로 고정됩니다. 생성 시에는 `0` 또는 `null`이 아닌 모든 값이 400으로 거부되며, 요청이 `stream: true`도 함께 보내는지 여부는 상관없습니다. `image`를 포함한 요청에서는 이 필드가 전달되지 않고 대신 버려집니다. 생략하세요. 범위: `0` ~ `3` @@ -237,7 +237,7 @@ URL은 자격 증명 없이 해석되어야 합니다. Router는 서버 측에 - 생성 또는 편집된 이미지의 품질입니다. `xhigh`와 `max`는 gpt-image-2.5-flare와 gpt-image-2.5-sunburst가 추가된 두 등급이며, `standard`와 `hd`는 허용된 어떤 모델도 읽지 않는 dall-e 시대의 표기입니다. + 생성되거나 편집된 이미지의 품질입니다. `xhigh`와 `max`는 gpt-image-2.5-flare 및 gpt-image-2.5-sunburst가 추가된 두 등급이며, `standard`와 `hd`는 허용된 어떤 모델도 읽지 않는 dall-e 시대의 표기입니다. 가능한 값: `auto`, `low`, `medium`, `high`, `xhigh`, `max`, `standard`, `hd` @@ -319,7 +319,7 @@ Router가 `GET /v2/models/openai/gpt-image-2/openapi.json`에서 제공하는 - 생성이 완료된 시점의 Unix 타임스탬프(초)입니다. OpenAI가 이미지 생성 응답에서 REQUIRED로 선언하는 유일한 멤버이므로, OpenAI가 생성자인 경우에는 항상 존재합니다. alt 기반 id 중 하나를 fal, wavespeed 또는 runware가 제공하는 응답에서는 다른 네 개의 확정된 매개변수 멤버와 마찬가지로 이 필드가 완전히 생략됩니다. 현재 시점의 epoch 값이 2^31에 충분히 가까워서, 포맷을 지정하지 않은 `integer`는 많은 SDK 생성기에서 32비트 필드를 만들어 내기 때문에 `int64`로 선언되었습니다. + 생성이 완료된 시점의 Unix 타임스탬프(초)입니다. OpenAI가 이미지 생성 응답에서 REQUIRED로 선언하는 유일한 멤버이므로, OpenAI가 생성자인 경우에는 항상 존재합니다. alt 기반 id 중 하나에 대해 fal, pika, wavespeed 또는 runware가 제공하는 응답에서는 다른 네 개의 확정된 매개변수 멤버와 마찬가지로 이 필드가 완전히 생략됩니다. 현재 시점의 epoch 값이 2^31에 충분히 가까워서, 포맷을 지정하지 않은 `integer`는 많은 SDK 생성기에서 32비트 필드를 만들어 내기 때문에 `int64`로 선언되었습니다. 형식: `int64` diff --git a/ko/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx b/ko/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx new file mode 100644 index 0000000000..92e8a885ca --- /dev/null +++ b/ko/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx @@ -0,0 +1,332 @@ +--- +title: "Comfy Router로 Pika 2.5 이미지 기반 비디오 생성 사용하기" +description: "Comfy Router를 통해 pika/pika-2.5-image-to-video를 호출합니다: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답입니다." +sidebarTitle: "Pika 2.5 이미지 기반 비디오 생성" +translationSourceHash: b87c0be4 +translationFrom: development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx +translationBlockHashes: + "_intro": 118f246d + "Quick start": 37a0238c + "Schema": ed2761dc + "Examples": 848844cf +--- +{/* 생성된 파일입니다. `pnpm code-pages:gen`에 의해 router-schemas/pika/pika-2.5-image-to-video.json에서 생성되었습니다. */} + +import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; + +`pika/pika-2.5-image-to-video`에 대한 API 레퍼런스이며, Pika가 Comfy Router를 통해 제공합니다. + +**입력:** 텍스트, 이미지 · **출력:** 비디오 + +## 빠른 시작 + +[Comfy 워크스페이스](https://platform.comfy.org/profile/api-keys?onboarding=router)에서 키를 생성하고 `COMFY_API_KEY`로 내보내세요. Python과 TypeScript 스니펫은 Comfy SDK(`pip install comfy-sdk`, `npm install @comfyorg/sdk`)를 사용하며, cURL 스니펫은 동일한 호출을 raw HTTP로 전송합니다. + +**모델 ID:** `pika/pika-2.5-image-to-video` + +**엔드포인트:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video` + + + + +```python Python +from comfy_sdk import Comfy + +# 환경 변수에서 COMFY_API_KEY를 읽습니다. +# SDK는 자동으로 idempotency key를 생성하고 자동 재시도에 재사용합니다. +with Comfy() as client: + result = client.models.run( + "pika/pika-2.5-image-to-video", + { + "duration_s": 5, + "image": "https://example.invalid/pika/source.png", + "prompt": "The camera slowly pushes in as the leaves begin to sway", + "resolution": "720p", + }, + ) + +print(result) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 환경 변수에서 COMFY_API_KEY를 읽습니다. +// SDK는 자동으로 idempotency key를 생성하고 자동 재시도에 재사용합니다. +const { data } = await comfy.models.run("pika/pika-2.5-image-to-video", { + duration_s: 5, + image: "https://example.invalid/pika/source.png", + prompt: "The camera slowly pushes in as the leaves begin to sway", + resolution: "720p", +}); + +console.log(data); +``` + +```bash cURL +curl https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"image\": \"https://example.invalid/pika/source.png\", \"prompt\": \"The camera slowly pushes in as the leaves begin to sway\", \"resolution\": \"720p\"}" +``` + + + +동일한 본문을 `POST https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests`로 전송합니다. Router는 실행이 접수되는 즉시 `request_id`와 함께 `201`로 응답하며, 결과는 준비되면 이 프로세스 또는 다른 프로세스에서 수집합니다. [대기열 전달](/ko/development/comfy-router/queue)에서 상태, 취소, 수집 과정을 안내합니다. + + +```python Python +import asyncio +from comfy_sdk import AsyncComfy + +# 환경 변수에서 COMFY_API_KEY를 읽습니다. +# 각 submit() 호출은 자체 Idempotency-Key를 생성하고 자동 재시도에 재사용합니다. +async def main(): + async with AsyncComfy() as client: + handle = await client.models.submit( + "pika/pika-2.5-image-to-video", + { + "duration_s": 5, + "image": "https://example.invalid/pika/source.png", + "prompt": "The camera slowly pushes in as the leaves begin to sway", + "resolution": "720p", + }, + ) + print("request_id:", handle.request_id) # 모델 ID와 함께라면 다른 프로세스에 필요한 전부입니다 + + # 요청이 완료될 때까지 폴링하며, 서버가 지정한 Retry-After만큼 대기합니다. + async for update in handle.iter_events(): + print(update.status, update.queue_position) + + # 공급자 자체의 payload이며, models.run()이 반환하는 것과 동일한 값입니다. + # 실패했거나 취소된 요청은 여기서 타입이 지정된 Router 오류를 발생시킵니다. + result = await handle.get() + + print(result) + +asyncio.run(main()) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 환경 변수에서 COMFY_API_KEY를 읽습니다. +// 각 submit() 호출은 자체 Idempotency-Key를 생성하고 자동 재시도에 재사용합니다. +const handle = await comfy.models.submit("pika/pika-2.5-image-to-video", { + duration_s: 5, + image: "https://example.invalid/pika/source.png", + prompt: "The camera slowly pushes in as the leaves begin to sway", + resolution: "720p", +}); +console.log("requestId:", handle.requestId); // 모델 ID와 함께라면 다른 프로세스에 필요한 전부입니다 + +// 요청이 완료될 때까지 폴링하며, 서버가 지정한 Retry-After만큼 대기합니다. +for await (const update of handle.events()) { + console.log(update.status, update.queuePosition); +} + +// models.run()이 반환하는 것과 동일한 결과입니다. 실패했거나 취소된 요청은 여기서 거부됩니다. +const result = await handle.get(); + +console.log(result.data); +``` + +```bash cURL +# 1. 제출합니다. Router는 request_id, status_url, response_url, cancel_url과 함께 201로 응답합니다. +curl https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"image\": \"https://example.invalid/pika/source.png\", \"prompt\": \"The camera slowly pushes in as the leaves begin to sway\", \"resolution\": \"720p\"}" + +# 2. 상태가 COMPLETED가 될 때까지 폴링하며, 각 응답이 지정한 Retry-After 초만큼 대기합니다. +REQUEST_ID="" +curl -i https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests/$REQUEST_ID/status \ + -H "X-API-Key: $COMFY_API_KEY" + +# 3. 수집합니다. 모델의 네이티브 출력과 함께 200, 아직 실행 중이면 상태 본문과 함께 202입니다. +curl https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests/$REQUEST_ID \ + -H "X-API-Key: $COMFY_API_KEY" +``` + + + + +## 스키마 + +### 입력 + + + 비디오 길이(초)입니다. + + 가능한 값: `5`, `10` + + + + 애니메이트할 소스 이미지의 공개 https URL입니다. 이미지가 주체를 담고 있습니다. 일반 `http://`는 거부됩니다. Pika는 Comfy의 키로 전송된 요청에서 URL을 가져옵니다. + + + + 비디오에서 피해야 할 내용을 설명하는 텍스트입니다. + + + + 모션을 안내하는 텍스트 프롬프트입니다. + + + + 출력 해상도입니다. + + 가능한 값: `720p`, `1080p` + + + + 재현 가능한 생성을 위한 시드입니다. 무작위 시드를 사용하려면 생략하거나 null을 보내세요. + + +Router가 `GET /v2/models/pika/pika-2.5-image-to-video/openapi.json`에서 제공하는 스키마에서 생성되었으며, 요청이 공급자에 도달하기 전에 호출을 검증하는 데 사용하는 것과 동일한 문서입니다. + +### 출력 + + + `failed` 작업에 설정되는 Pika의 구조화된 실패 기록입니다. Router는 실패한 작업에 자체 오류 응답으로 답하므로, Router가 반환하는 본문에는 이 필드가 포함되지 않습니다. Pika의 작업 문서에 포함되어 있기 때문에 선언되어 있습니다. + + + + 가능한 값: `invalid_input`, `content_moderation`, `provider_error`, `provider_timeout`, `provider_unavailable`, `rate_limited`, `insufficient_balance`, `membership_required`, `cycle_limit_exceeded`, `admission_suspended`, `usage_limit_exceeded`, `timed_out`, `internal` + + + + + + + + Pika의 작업 ID입니다. + + + + 작업이 실행한 Pika 카탈로그 항목입니다. + + + + `status`가 `completed`일 때 설정되는 완료된 작업의 미디어입니다. `media_type`은 어느 필드가 이를 담는지 나타냅니다. `image`는 `images`를 채우고, `video`는 `video`를, `videos`는 `videos`를 채웁니다. + + + + 이미지 모델의 생성된 이미지입니다. + + + + 파일의 MIME 유형입니다. + + + + 높이(픽셀)입니다. + + + + 생성된 파일의 다운로드 URL입니다. + + + + 너비(픽셀)입니다. + + + + 가능한 값: `image`, `video`, `videos` + + + + 보고된 경우, 비디오 작업이 실제로 사용한 시드입니다. + + + + 생성된 미디어 파일 하나입니다. + + + + 파일의 MIME 유형입니다. + + + + 높이(픽셀)입니다. + + + + 생성된 파일의 다운로드 URL입니다. + + + + 너비(픽셀)입니다. + + + + 여러 비디오 전달을 위한 생성된 비디오입니다. + + + + 파일의 MIME 유형입니다. + + + + 높이(픽셀)입니다. + + + + 생성된 파일의 다운로드 URL입니다. + + + + 너비(픽셀)입니다. + + + + 디스패치부터 터미널까지 생성에 걸린 시간(초)입니다. 최선 노력 기준이며 null일 수 있습니다. + + + + 수명 주기 상태입니다. Router가 반환하는 본문은 항상 `completed`로 표시됩니다. `failed` 작업은 대신 Router의 오류 응답으로 답변됩니다. + + 가능한 값: `queued`, `running`, `completed`, `failed` + + + + 작업에 대해 공급자가 보고한 단위입니다. 키는 일부만 존재하며, 작업이 보고한 단위만 포함됩니다. + + +## 예제 + +### 입력 + +```json +{ + "duration_s": 5, + "image": "https://example.invalid/pika/source.png", + "prompt": "The camera slowly pushes in as the leaves begin to sway", + "resolution": "720p" +} +``` + +### 출력 + +```json +{ + "id": "2d8e4b71-9c05-4f3a-b6d2-81e7a5c09f44", + "model_id": "pika/pika-2.5/image-to-video", + "output": { + "media_type": "video", + "seed": 42, + "video": { + "content_type": "video/mp4", + "height": 720, + "url": "https://example.invalid/pika/pika-2.5-image-to-video/generated.mp4", + "width": 1280 + } + }, + "status": "completed" +} +``` + + + diff --git a/ko/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx b/ko/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx new file mode 100644 index 0000000000..dc53bf8897 --- /dev/null +++ b/ko/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx @@ -0,0 +1,323 @@ +--- +title: "Comfy Router로 Pika 2.5 텍스트 기반 비디오 생성 사용하기" +description: "Comfy Router를 통해 pika/pika-2.5-text-to-video를 호출합니다: 엔드포인트, 요청 형태, 그리고 Router가 반환하는 응답." +sidebarTitle: "Pika 2.5 텍스트 기반 비디오 생성" +translationSourceHash: 65ba9bbc +translationFrom: development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx +translationBlockHashes: + "_intro": eb00317a + "Quick start": bce002f0 + "Schema": 347237ec + "Examples": fc131a5f +--- +{/* GENERATED FILE. Generated from router-schemas/pika/pika-2.5-text-to-video.json by `pnpm code-pages:gen`. */} + +import RouterCodeFooter from "/snippets/ko/comfy-router/model-code-footer.mdx"; + +`pika/pika-2.5-text-to-video`의 API 레퍼런스로, Pika에서 Comfy Router를 통해 제공됩니다. + +**입력:** 텍스트 · **출력:** 비디오 + +## 빠른 시작 + +[Comfy 워크스페이스](https://platform.comfy.org/profile/api-keys?onboarding=router)에서 키를 생성하고 `COMFY_API_KEY`로 내보내세요. Python 및 TypeScript 스니펫은 Comfy SDK(`pip install comfy-sdk` 및 `npm install @comfyorg/sdk`)를 사용하며, cURL 스니펫은 동일한 호출을 원시 HTTP로 보낸 것입니다. + +**모델 ID:** `pika/pika-2.5-text-to-video` + +**엔드포인트:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video` + + + + +```python Python +from comfy_sdk import Comfy + +# 환경 변수에서 COMFY_API_KEY를 읽습니다. +# SDK는 자동으로 멱등성 키를 생성하고 자동 재시도에 재사용합니다. +with Comfy() as client: + result = client.models.run( + "pika/pika-2.5-text-to-video", + { + "duration_s": 5, + "prompt": "A paper boat drifting down a rain-soaked city street at dusk", + "resolution": "720p", + }, + ) + +print(result) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 환경 변수에서 COMFY_API_KEY를 읽습니다. +// SDK는 자동으로 멱등성 키를 생성하고 자동 재시도에 재사용합니다. +const { data } = await comfy.models.run("pika/pika-2.5-text-to-video", { + duration_s: 5, + prompt: "A paper boat drifting down a rain-soaked city street at dusk", + resolution: "720p", +}); + +console.log(data); +``` + +```bash cURL +curl https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"prompt\": \"A paper boat drifting down a rain-soaked city street at dusk\", \"resolution\": \"720p\"}" +``` + + + +동일한 본문을 `POST https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests`로 전송합니다. Router는 실행이 접수되는 즉시 `201`과 함께 `request_id`를 응답하며, 결과는 준비가 완료되면 이 프로세스 또는 다른 프로세스에서 수집합니다. [대기 중 전달](/ko/development/comfy-router/queue)에서 상태, 취소, 수집 과정을 살펴봅니다. + + +```python Python +import asyncio +from comfy_sdk import AsyncComfy + +# 환경 변수에서 COMFY_API_KEY를 읽습니다. +# 각 submit() 호출은 자체 Idempotency-Key를 발급하고 자동 재시도에 재사용합니다. +async def main(): + async with AsyncComfy() as client: + handle = await client.models.submit( + "pika/pika-2.5-text-to-video", + { + "duration_s": 5, + "prompt": "A paper boat drifting down a rain-soaked city street at dusk", + "resolution": "720p", + }, + ) + print("request_id:", handle.request_id) # 모델 ID와 함께라면 다른 프로세스에 필요한 전부입니다 + + # 요청이 완료될 때까지 폴링하며, 서버가 지정한 Retry-After만큼 대기합니다. + async for update in handle.iter_events(): + print(update.status, update.queue_position) + + # 공급자의 자체 페이로드로, models.run()이 반환하는 것과 동일한 값입니다. + # 실패했거나 취소된 요청은 여기에서 타입이 지정된 Router 오류를 발생시킵니다. + result = await handle.get() + + print(result) + +asyncio.run(main()) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 환경 변수에서 COMFY_API_KEY를 읽습니다. +// 각 submit() 호출은 자체 Idempotency-Key를 발급하고 자동 재시도에 재사용합니다. +const handle = await comfy.models.submit("pika/pika-2.5-text-to-video", { + duration_s: 5, + prompt: "A paper boat drifting down a rain-soaked city street at dusk", + resolution: "720p", +}); +console.log("requestId:", handle.requestId); // 모델 ID와 함께라면 다른 프로세스에 필요한 전부입니다 + +// 요청이 완료될 때까지 폴링하며, 서버가 지정한 Retry-After만큼 대기합니다. +for await (const update of handle.events()) { + console.log(update.status, update.queuePosition); +} + +// models.run()이 반환하는 것과 동일한 결과입니다. 실패했거나 취소된 요청은 여기에서 거부됩니다. +const result = await handle.get(); + +console.log(result.data); +``` + +```bash cURL +# 1. 제출합니다. Router는 request_id, status_url, response_url, cancel_url과 함께 201을 응답합니다. +curl https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"prompt\": \"A paper boat drifting down a rain-soaked city street at dusk\", \"resolution\": \"720p\"}" + +# 2. 상태가 COMPLETED가 될 때까지 폴링하며, 각 응답이 명시한 Retry-After 초만큼 대기합니다. +REQUEST_ID="" +curl -i https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests/$REQUEST_ID/status \ + -H "X-API-Key: $COMFY_API_KEY" + +# 3. 수집합니다. 모델의 네이티브 출력과 함께 200, 아직 실행 중이면 상태 본문과 함께 202를 반환합니다. +curl https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests/$REQUEST_ID \ + -H "X-API-Key: $COMFY_API_KEY" +``` + + + + +## 스키마 + +### 입력 + + + 비디오 길이(초)입니다. 텍스트 기반 비디오 생성은 5초 클립만 생성합니다. + + 가능한 값: `5` + + + + 비디오에서 피해야 할 내용을 설명하는 텍스트입니다. + + + + 생성할 비디오를 설명하는 텍스트 프롬프트입니다. + + + + 출력 해상도입니다. + + 가능한 값: `720p`, `1080p` + + + + 재현 가능한 생성을 위한 시드입니다. 무작위 시드를 사용하려면 생략하거나 null을 전송하세요. + + +Router가 `GET /v2/models/pika/pika-2.5-text-to-video/openapi.json`에서 제공하는 스키마에서 생성되었으며, 요청이 공급자에게 도달하기 이전에 호출을 검증할 때 사용하는 문서와 동일합니다. + +### 출력 + + + `failed` 작업에 설정되는 Pika의 구조화된 실패 기록입니다. Router는 실패한 작업에 자체 오류 응답으로 답하므로, Router가 반환하는 본문에는 이 필드가 포함되지 않습니다. Pika의 작업 문서에 속하기 때문에 선언되어 있습니다. + + + + 가능한 값: `invalid_input`, `content_moderation`, `provider_error`, `provider_timeout`, `provider_unavailable`, `rate_limited`, `insufficient_balance`, `membership_required`, `cycle_limit_exceeded`, `admission_suspended`, `usage_limit_exceeded`, `timed_out`, `internal` + + + + + + + + Pika의 작업 ID입니다. + + + + 작업이 실행한 Pika 카탈로그 항목입니다. + + + + 완료된 작업의 미디어로, `status`가 `completed`일 때 설정됩니다. `media_type`은 어떤 필드가 이를 담는지 나타냅니다. `image`는 `images`를, `video`는 `video`를, `videos`는 `videos`를 채웁니다. + + + + 이미지 모델의 경우 생성된 이미지입니다. + + + + 파일의 MIME 타입입니다. + + + + 높이(픽셀)입니다. + + + + 생성된 파일의 다운로드 URL입니다. + + + + 너비(픽셀)입니다. + + + + 가능한 값: `image`, `video`, `videos` + + + + 보고된 경우, 비디오 작업이 실제로 사용한 시드입니다. + + + + 생성된 미디어 파일 하나입니다. + + + + 파일의 MIME 타입입니다. + + + + 높이(픽셀)입니다. + + + + 생성된 파일의 다운로드 URL입니다. + + + + 너비(픽셀)입니다. + + + + 여러 비디오를 전달하는 경우의 생성된 비디오입니다. + + + + 파일의 MIME 타입입니다. + + + + 높이(픽셀)입니다. + + + + 생성된 파일의 다운로드 URL입니다. + + + + 너비(픽셀)입니다. + + + + 디스패치부터 터미널 상태까지 생성에 걸린 시간(초)입니다. 최선의 추정치이며 null일 수 있습니다. + + + + 수명 주기 상태입니다. Router가 반환하는 본문은 항상 `completed`로 표시됩니다. `failed` 작업은 대신 Router의 오류 응답으로 답변됩니다. + + 가능한 값: `queued`, `running`, `completed`, `failed` + + + + 작업에 대해 공급자가 보고한 단위입니다. 키는 일부만 존재하며, 작업이 보고하는 단위만 포함됩니다. + + +## 예시 + +### 입력 + +```json +{ + "duration_s": 5, + "prompt": "A paper boat drifting down a rain-soaked city street at dusk", + "resolution": "720p" +} +``` + +### 출력 + +```json +{ + "id": "6f1c2a9e-3b47-4d8a-9e21-7c5b0f4d8a13", + "model_id": "pika/pika-2.5/text-to-video", + "output": { + "media_type": "video", + "seed": 42, + "video": { + "content_type": "video/mp4", + "height": 720, + "url": "https://example.invalid/pika/pika-2.5-text-to-video/generated.mp4", + "width": 1280 + } + }, + "status": "completed" +} +``` + + + diff --git a/zh/development/comfy-router/models/meshy/meshy-5/code.mdx b/zh/development/comfy-router/models/meshy/meshy-5/code.mdx index 1d5557cfae..bf24b00ac4 100644 --- a/zh/development/comfy-router/models/meshy/meshy-5/code.mdx +++ b/zh/development/comfy-router/models/meshy/meshy-5/code.mdx @@ -2,16 +2,17 @@ title: "将 Meshy 5 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 meshy/meshy-5:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "Meshy 5" -translationSourceHash: 93a7e08c +translationSourceHash: 7f6f26e7 translationFrom: development/comfy-router/models/meshy/meshy-5/code.mdx translationBlockHashes: "_intro": 237f6506 "Quick start": 7bc21724 - "Schema": 0f9b14f9 + "Schema": 8d7621e1 "Examples": e2bc6209 --- + {/* GENERATED FILE. Generated from router-schemas/meshy/meshy-5.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -158,47 +159,47 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ #### `preview` 变体 - 要运行的 Meshy 模型。在 Comfy Router 路由上,该值由路径(`/v2/models/meshy/{model}`)提供,可以省略或传为 null;Router 会在验证之后将路径中的模型写入此处。在 v1 /proxy 路由上请参见 MeshyTextTo3DPreviewRequest,它将该字段限制为 MeshyAiModel。 + 要运行的 Meshy 模型。在 Comfy Router 路由上,该值由路径(`/v2/models/meshy/{model}`)提供,可以省略或发送为 null;Router 会在验证之后将路径中的模型写入此处。在 v1 /proxy 路由上,请参见 MeshyTextTo3DPreviewRequest,它将此值约束为 MeshyAiModel。 - 描述你所期望的对象艺术风格。 + 描述你希望该物体呈现的艺术风格。 可选值:`realistic`、`sculpture` - 已生成网格的几何分辨率。2k 和 4k 会运行 Ultra 通道以获得更精细的表面细节。2k 需要 ai_model 为 meshy-7、meshy-7.1 或 latest;4k 需要 meshy-7.1 或 latest。 + 已生成网格的几何分辨率。2k 和 4k 会运行 Ultra 通道,以获得更精细的表面细节。2k 和 4k 要求 ai_model 为 meshy-7.1 或 latest。 可选值:`standard`、`2k`、`4k` - 弃用。请改用 pose_mode。是否以 A/T 姿态生成模型。 + 弃用。请改用 pose_mode。是否以 A/T 姿势生成模型。 - 创建预览任务时,该字段应设置为 "preview"。 + 创建预览任务时,此字段应设为 "preview"。 可选值:`preview` - 当为 true 时,输入内容将被筛查是否存在可能有害的内容。 + 当为 true 时,输入内容会被筛查,以识别可能有害的内容。 - 指定已生成模型的姿态模式。 + 指定已生成模型的姿势模式。 可选值:`a-pose`、`t-pose`、`` - 描述该3D模型是什么类型的对象。最多 800 个字符。 + 描述该 3D 模型是什么类型的物体。最多 800 个字符。 - 控制是否启用重网格化阶段。当为 false 时,返回最高精度的三角网格。Meshy 5 默认为 true,Meshy 6 和 7 默认为 false。 + 控制是否启用重网格(remesh)阶段。为 false 时,返回最高精度的三角网格。Meshy 5 默认为 true,Meshy 6 和 7 默认为 false。 @@ -220,48 +221,48 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 已弃用。请改用 geometry_resolution;`true` 等同于 geometry_resolution 2k。仅当 ai_model 为 meshy-7、meshy-7.1 或 latest 时受支持。 + 弃用。请改用 geometry_resolution;true 等效于 geometry_resolution 2k。仅在 ai_model 为 meshy-7、meshy-7.1 或 latest 时受支持。meshy-7 是例外:geometry_resolution 2k 要求 meshy-7.1 或 latest,因此在 meshy-7 上,将 ultra_mode 设为 true 才是请求 Ultra 通道的方式。 #### `refine` 变体 - 要运行的 Meshy 模型。在 Comfy Router 路由上,该值由路径(`/v2/models/meshy/{model}`)提供,可以省略或传为 null;Router 会在验证之后将路径中的模型写入此处。在 v1 /proxy 路由上请参见 MeshyTextTo3DRefineRequest,它将该字段限制为 MeshyAiModel。 + 要运行的 Meshy 模型。在 Comfy Router 路由上,该值由路径(`/v2/models/meshy/{model}`)提供,可以省略或发送为 null;Router 会在验证之后将路径中的模型写入此处。在 v1 /proxy 路由上,请参见 MeshyTextTo3DRefineRequest,它将此值约束为 MeshyAiModel。 - 除基础颜色外,还生成 PBR 贴图(金属度、粗糙度、法线)。注意,使用 Sculpture 风格时,enable_pbr 应设置为 false。 + 在基础颜色之外,额外生成 PBR 贴图(金属度、粗糙度、法线)。注意,使用 Sculpture 风格时,enable_pbr 应设为 false。 - 创建精修任务时,该字段应设置为 "refine"。 + 创建 refine 任务时,此字段应设为 "refine"。 可选值:`refine` - 当为 true 时,输入内容将被筛查是否存在可能有害的内容。 + 当为 true 时,输入内容会被筛查,以识别可能有害的内容。 - 对应的预览任务 id。给定预览任务的状态必须为 SUCCEEDED。 + 对应的预览任务 ID。指定的预览任务状态必须为 SUCCEEDED。 - 提供一个 2D 图像来引导纹理生成过程。支持 .jpg、.jpeg、.png 格式或 base64 编码的数据 URI。 + 提供一张 2D 图像来引导贴图生成过程。支持 .jpg、.jpeg、.png 格式,或 base64 编码的 data URI。 - 提供一个额外的文本提示来引导纹理生成过程。最多 800 个字符。 + 提供一个额外的文本提示词来引导贴图生成过程。最多 800 个字符。 - 已生成纹理的纹理分辨率。为 2k、4k 或 8k 之一。4k 和 8k 需要 ai_model 为 meshy-6、meshy-7、meshy-7.1 或 latest。 + 已生成纹理的纹理分辨率。可取 2k、4k 或 8k 之一。4k 和 8k 要求 ai_model 为 meshy-6、meshy-7、meshy-7.1 或 latest。 可选值:`2k`、`4k`、`8k` -由 Router 在 `GET /v2/models/meshy/meshy-5/openapi.json` 处提供的 schema 生成,与请求到达提供商之前用于验证调用的文档相同。 +本文档根据 Router 在 `GET /v2/models/meshy/meshy-5/openapi.json` 提供的 schema 生成,Router 在请求到达提供商之前,正是依据同一份文档对调用进行验证。 ### 输出 @@ -286,7 +287,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 由 Meshy 生成的带纹理 3D 模型文件的可下载 URL。 + Meshy 生成的带纹理 3D 模型文件的可下载 URL。 @@ -314,7 +315,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 前置任务的数量。仅在状态为 PENDING 时有意义。 + 前置使用例的数量。仅在 status 为 PENDING 时有意义。 @@ -324,11 +325,11 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 用于创建任务的未经修改的 prompt。 + 用于创建任务的未经修改的提示词。 - 任务启动时的时间戳,单位为毫秒。未启动时为 0。 + 任务开始时的时间戳,单位为毫秒。未开始时为 0。 格式:`int64` @@ -338,7 +339,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 错误对象,包含任务失败时的报错信息。 + 错误对象,在任务失败时包含报错信息。 @@ -346,11 +347,11 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 用于引导纹理化过程的纹理图像的可下载 URL。 + 用于指导纹理贴图过程的纹理图像的可下载 URL。 - 在 refine 阶段提供的、用于引导纹理化过程的附加文本 prompt。 + 在精修阶段为指导纹理贴图过程而提供的额外文本提示词。 @@ -358,7 +359,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 由该任务生成的纹理 URL 对象组成的数组。 + 由该任务生成的纹理 URL 对象数组。 @@ -388,7 +389,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 弃用字段,返回预览视频的可下载 URL。 + 返回预览视频可下载 URL 的弃用字段。 ## 示例 diff --git a/zh/development/comfy-router/models/meshy/meshy-6/code.mdx b/zh/development/comfy-router/models/meshy/meshy-6/code.mdx index 2a17f94569..82efa74d62 100644 --- a/zh/development/comfy-router/models/meshy/meshy-6/code.mdx +++ b/zh/development/comfy-router/models/meshy/meshy-6/code.mdx @@ -2,16 +2,17 @@ title: "搭配 Comfy Router 使用 Meshy 6" description: "通过 Comfy Router 调用 meshy/meshy-6:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "Meshy 6" -translationSourceHash: 32e3a99d +translationSourceHash: d03275d2 translationFrom: development/comfy-router/models/meshy/meshy-6/code.mdx translationBlockHashes: "_intro": a12edda1 "Quick start": 4cef8af8 - "Schema": f89aaaeb + "Schema": c7195145 "Examples": e2bc6209 --- + {/* 已生成的文件。由 `pnpm code-pages:gen` 从 router-schemas/meshy/meshy-6.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -158,47 +159,47 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ #### `preview` 变体 - 要运行的 Meshy 模型。在 Comfy Router 路由上,此项由路径(`/v2/models/meshy/{model}`)提供,可以省略或以 null 发送;Router 会在验证后将路径中的模型写入此处。在 v1 /proxy 路由上请参阅 MeshyTextTo3DPreviewRequest,它将其限制为 MeshyAiModel。 + 要运行的 Meshy 模型。在 Comfy Router 路由上,该值由路径(`/v2/models/meshy/{model}`)提供,可以省略或发送为 null;验证之后,Router 会将路径中的模型写入此处。在 v1 /proxy 路由上参见 MeshyTextTo3DPreviewRequest,它将其约束为 MeshyAiModel。 - 描述你期望的物体艺术风格。 + 描述你期望的对象艺术风格。 可选值:`realistic`、`sculpture` - 已生成网格的几何分辨率。2k 和 4k 会运行 Ultra 通道以获得更精细的表面细节。2k 需要 ai_model 为 meshy-7、meshy-7.1 或 latest;4k 需要 meshy-7.1 或 latest。 + 已生成网格的几何分辨率。2k 和 4k 会运行 Ultra 通道,以获得更精细的表面细节。2k 和 4k 要求 ai_model 为 meshy-7.1 或最新。 可选值:`standard`、`2k`、`4k` - 已弃用。请改用 pose_mode。是否以 A/T 姿势生成模型。 + 弃用。请改用 pose_mode。是否以 A/T 姿势生成模型。 - 创建预览任务时,此字段应设置为 "preview"。 + 创建预览任务时,该字段应设置为 "preview"。 可选值:`preview` - 当为 true 时,输入内容将被筛查是否存在潜在有害内容。 + 当为是时,输入内容将被筛查是否存在潜在有害内容。 - 指定生成模型的姿势模式。 + 指定已生成模型的姿势模式。 可选值:`a-pose`、`t-pose`、`` - 描述该 3D 模型是什么类型的物体。最多 800 个字符。 + 描述该 3D模型 是什么类型的对象。最多 800 个字符。 - 控制是否启用重网格化阶段。当为 false 时,返回最高精度的三角网格。Meshy 5 默认为 true,Meshy 6 和 7 默认为 false。 + 控制是否启用重网格化阶段。当为否时,返回最高精度的三角网格。Meshy 5 默认为是,Meshy 6 和 7 默认为否。 @@ -208,43 +209,43 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 指定生成模型的目标多边形数量。有效范围为 100 到 300,000。 + 指定已生成模型的目标多边形数量。有效范围是 100 到 300,000。 范围:`100` 到 `300000` - 指定生成模型的拓扑结构。 + 指定已生成模型的拓扑。 可选值:`quad`、`triangle` - 已弃用。请改用 geometry_resolution;`true` 等同于 geometry_resolution 2k。仅当 ai_model 为 meshy-7、meshy-7.1 或 latest 时受支持。 + 弃用。请改用 geometry_resolution;取值为是时等价于 geometry_resolution 2k。仅当 ai_model 为 meshy-7、meshy-7.1 或最新时才受支持。meshy-7 是例外:geometry_resolution 2k 要求 meshy-7.1 或最新,因此在 meshy-7 上,要请求 Ultra 通道需将 ultra_mode 设为是。 #### `refine` 变体 - 要运行的 Meshy 模型。在 Comfy Router 路由上,此项由路径(`/v2/models/meshy/{model}`)提供,可以省略或以 null 发送;Router 会在验证后将路径中的模型写入此处。在 v1 /proxy 路由上请参阅 MeshyTextTo3DRefineRequest,它将其限制为 MeshyAiModel。 + 要运行的 Meshy 模型。在 Comfy Router 路由上,该值由路径(`/v2/models/meshy/{model}`)提供,可以省略或发送为 null;验证之后,Router 会将路径中的模型写入此处。在 v1 /proxy 路由上参见 MeshyTextTo3DRefineRequest,它将其约束为 MeshyAiModel。 - 除基础颜色外,还生成 PBR 贴图(金属度、粗糙度、法线)。注意,使用 Sculpture 风格时,enable_pbr 应设置为 false。 + 除基础颜色外,还生成 PBR 贴图(金属度、粗糙度、法线)。注意,使用 Sculpture 风格时,enable_pbr 应设置为否。 - 创建 refine 任务时,此字段应设置为 "refine"。 + 创建 refine 任务时,该字段应设置为 "refine"。 可选值:`refine` - 当为 true 时,输入内容将被筛查是否存在潜在有害内容。 + 当为是时,输入内容将被筛查是否存在潜在有害内容。 - 对应的预览任务 ID。给定预览任务的状态必须为 SUCCEEDED。 + 对应的预览任务 id。给定预览任务的状态必须为 SUCCEEDED。 @@ -252,21 +253,21 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 提供一个额外的文本提示来引导纹理生成过程。最多 800 个字符。 + 提供额外的文本提示来引导纹理生成过程。最多 800 个字符。 - 已生成纹理的纹理分辨率。为 2k、4k 或 8k 之一。4k 和 8k 需要 ai_model 为 meshy-6、meshy-7、meshy-7.1 或 latest。 + 已生成纹理的纹理分辨率。可选 2k、4k 或 8k 之一。4k 和 8k 要求 ai_model 为 meshy-6、meshy-7、meshy-7.1 或最新。 可选值:`2k`、`4k`、`8k` -根据 Router 在 `GET /v2/models/meshy/meshy-6/openapi.json` 提供的 schema 生成,这与它在请求到达提供商之前用于验证调用的文档相同。 +根据 Router 在 `GET /v2/models/meshy/meshy-6/openapi.json` 提供的 schema 生成,该文档与请求到达提供商之前 Router 用来验证调用的文档相同。 ### 输出 - 用于创建预览任务的未经修改的 art_style。 + 用于创建预览任务时所用未经修改的 art_style。 @@ -276,7 +277,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 任务完成时的时间戳,单位为毫秒。如果未完成则为 0。 + 任务完成时的时间戳,单位为毫秒。若未完成则为 0。 格式:`int64` @@ -286,27 +287,27 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 指向 Meshy 生成的带纹理 3D模型文件的可下载 URL。 + Meshy 生成的带纹理 3D 模型文件的可下载链接。 - FBX 文件的可下载 URL。 + FBX 文件的可下载链接。 - GLB 文件的可下载 URL。 + GLB 文件的可下载链接。 - MTL 文件的可下载 URL。 + MTL 文件的可下载链接。 - OBJ 文件的可下载 URL。 + OBJ 文件的可下载链接。 - USDZ 文件的可下载 URL。 + USDZ 文件的可下载链接。 @@ -314,21 +315,21 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 前序任务的数量。仅当状态为 PENDING 时才有意义。 + 前置任务的数量。仅在状态为 PENDING 时有意义。 - 任务进度。未开始为 0,成功时为 100。 + 任务的进度。未开始时为 0,成功时为 100。 范围:`0` 到 `100` - 用于创建任务的未经修改的提示词。 + 用于创建任务时所用未经修改的提示词。 - 任务启动时的时间戳,单位为毫秒。如果未启动则为 0。 + 任务开始时的时间戳,单位为毫秒。若未开始则为 0。 格式:`int64` @@ -338,7 +339,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 错误对象,在任务失败时包含报错信息。 + 任务失败时包含报错信息的错误对象。 @@ -346,11 +347,11 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 用于引导纹理处理过程的纹理图像的可下载 URL。 + 用于指导纹理化过程的纹理图像的可下载链接。 - 在细化阶段提供用于引导纹理处理过程的附加文本提示词。 + 在细化阶段为指导纹理化过程而提供的附加文本提示词。 @@ -358,27 +359,27 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 由该任务生成的纹理 URL 对象数组。 + 由该任务生成的纹理 URL 对象组成的数组。 - 基础颜色贴图图像的可下载 URL。 + 基础颜色贴图图像的可下载链接。 - 金属度贴图图像的可下载 URL。 + 金属度贴图图像的可下载链接。 - 法线贴图图像的可下载 URL。 + 法线贴图图像的可下载链接。 - 粗糙度贴图图像的可下载 URL。 + 粗糙度贴图图像的可下载链接。 - 模型文件缩略图图像的可下载 URL。 + 模型文件缩略图的可下载链接。 @@ -388,7 +389,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 返回预览视频可下载 URL 的弃用字段。 + 弃用字段,返回预览视频的可下载链接。 ## 示例 diff --git a/zh/development/comfy-router/models/meshy/meshy-7-1/code.mdx b/zh/development/comfy-router/models/meshy/meshy-7-1/code.mdx index eb14b3b817..c06ed39b92 100644 --- a/zh/development/comfy-router/models/meshy/meshy-7-1/code.mdx +++ b/zh/development/comfy-router/models/meshy/meshy-7-1/code.mdx @@ -2,16 +2,17 @@ title: "将 Meshy 7.1 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 meshy/meshy-7.1:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "Meshy 7.1" -translationSourceHash: b7ac2b6f +translationSourceHash: dbb370d8 translationFrom: development/comfy-router/models/meshy/meshy-7-1/code.mdx translationBlockHashes: "_intro": d8eb7cb3 "Quick start": dd5c470d - "Schema": 93541104 + "Schema": 213fd0e4 "Examples": e2bc6209 --- + {/* 已生成文件。由 `pnpm code-pages:gen` 从 router-schemas/meshy/meshy-7.1.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -168,7 +169,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 已生成网格的几何分辨率。2k 和 4k 会运行 Ultra 通道以获得更精细的表面细节。2k 需要 ai_model 为 meshy-7、meshy-7.1 或 latest;4k 需要 meshy-7.1 或 latest。 + 已生成网格的几何分辨率。2k 和 4k 会运行 Ultra 通道以获得更精细的表面细节。2k 和 4k 需要 ai_model 为 meshy-7.1 或 latest。 可选值:`standard`、`2k`、`4k` @@ -220,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 已弃用。请改用 geometry_resolution;`true` 等同于 geometry_resolution 2k。仅当 ai_model 为 meshy-7、meshy-7.1 或 latest 时受支持。 + 已弃用。请改用 geometry_resolution;`true` 等同于 geometry_resolution 2k。仅当 ai_model 为 meshy-7、meshy-7.1 或 latest 时受支持。例外情况是 meshy-7:geometry_resolution 2k 需要 meshy-7.1 或 latest,因此在 meshy-7 上 ultra_mode 为 true 才是请求 Ultra 通道的方式。 #### `refine` 变体 diff --git a/zh/development/comfy-router/models/meshy/meshy-7/code.mdx b/zh/development/comfy-router/models/meshy/meshy-7/code.mdx index b8847be453..123d25bcf6 100644 --- a/zh/development/comfy-router/models/meshy/meshy-7/code.mdx +++ b/zh/development/comfy-router/models/meshy/meshy-7/code.mdx @@ -2,16 +2,17 @@ title: "将 Meshy 7 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 meshy/meshy-7:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "Meshy 7" -translationSourceHash: 3475319a +translationSourceHash: 1214bb2a translationFrom: development/comfy-router/models/meshy/meshy-7/code.mdx translationBlockHashes: "_intro": d8d3391c "Quick start": 136306f5 - "Schema": abec2fb4 + "Schema": de7fd56b "Examples": e2bc6209 --- + {/* GENERATED FILE. Generated from router-schemas/meshy/meshy-7.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -158,29 +159,29 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ #### `preview` 变体 - 要运行的 Meshy 模型。在 Comfy Router 路由上,该值由路径(`/v2/models/meshy/{model}`)提供,可以省略或传 null;Router 会在验证通过后将路径中的模型写入此处。在 v1 /proxy 路由上请参见 MeshyTextTo3DPreviewRequest,其中该项被限制为 MeshyAiModel。 + 要运行的 Meshy 模型。在 Comfy Router 路由上,该值由路径(`/v2/models/meshy/{model}`)提供,可以省略或传为 null;Router 会在验证之后将路径中的模型写入此处。在 v1 /proxy 路由上,请参阅 MeshyTextTo3DPreviewRequest,它将此字段限制为 MeshyAiModel。 - 描述你期望的对象艺术风格。 + 描述你希望物体呈现的艺术风格。 - 可能的值:`realistic`、`sculpture` + 可选值:`realistic`、`sculpture` - 已生成网格的几何分辨率。2k 和 4k 会运行 Ultra 通道以获得更精细的表面细节。2k 需要 ai_model 为 meshy-7、meshy-7.1 或 latest;4k 需要 meshy-7.1 或 latest。 + 已生成网格的几何分辨率。2k 和 4k 会运行 Ultra 通道以获得更精细的表面细节。2k 和 4k 要求 ai_model 为 meshy-7.1 或 latest。 可选值:`standard`、`2k`、`4k` - 弃用。请改用 pose_mode。是否以 A/T 姿态生成模型。 + 弃用。请改用 pose_mode。是否以 A/T 姿势生成模型。 - 创建预览任务时,该字段应设置为 "preview"。 + 创建预览任务时,该字段应设置为 “preview”。 - 可能的值:`preview` + 可选值:`preview` @@ -188,27 +189,27 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 指定已生成模型的姿态模式。 + 指定已生成模型的姿势模式。 - 可能的值:`a-pose`、`t-pose`、`` + 可选值:`a-pose`、`t-pose`、`` - 描述 3D 模型是什么类型的对象。最多 800 个字符。 + 描述该 3D 模型是什么物体。最多 800 个字符。 - 控制是否启用重网格化阶段。当为 false 时,返回最高精度的三角网格。Meshy 5 默认为 true,Meshy 6 和 7 默认为 false。 + 控制是否启用 remesh 阶段。为 false 时,返回最高精度的三角网格。Meshy 5 默认为 true,Meshy 6 和 7 默认为 false。 控制模型生成过程中的对称行为。 - 可能的值:`off`、`auto`、`on` + 可选值:`off`、`auto`、`on` - 指定已生成模型的目标多边形数量。有效范围为 100 到 300,000。 + 指定已生成模型的目标多边形数量。有效范围是 100 到 300,000。 范围:`100` 到 `300000` @@ -216,27 +217,27 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ 指定已生成模型的拓扑结构。 - 可能的值:`quad`、`triangle` + 可选值:`quad`、`triangle` - 已弃用。请改用 geometry_resolution;`true` 等同于 geometry_resolution 2k。仅当 ai_model 为 meshy-7、meshy-7.1 或 latest 时受支持。 + 弃用。请改用 geometry_resolution;true 等同于 geometry_resolution 2k。仅在 ai_model 为 meshy-7、meshy-7.1 或 latest 时受支持。例外情况是 meshy-7:geometry_resolution 2k 要求 meshy-7.1 或 latest,因此在 meshy-7 上,ultra_mode true 才是请求 Ultra 通道的方式。 #### `refine` 变体 - 要运行的 Meshy 模型。在 Comfy Router 路由上,该值由路径(`/v2/models/meshy/{model}`)提供,可以省略或传 null;Router 会在验证通过后将路径中的模型写入此处。在 v1 /proxy 路由上请参见 MeshyTextTo3DRefineRequest,其中该项被限制为 MeshyAiModel。 + 要运行的 Meshy 模型。在 Comfy Router 路由上,该值由路径(`/v2/models/meshy/{model}`)提供,可以省略或传为 null;Router 会在验证之后将路径中的模型写入此处。在 v1 /proxy 路由上,请参阅 MeshyTextTo3DRefineRequest,它将此字段限制为 MeshyAiModel。 - 在基础颜色之外生成 PBR 贴图(金属度、粗糙度、法线)。注意,使用 Sculpture 风格时 enable_pbr 应设为 false。 + 在基础颜色之外额外生成 PBR 贴图(metallic、roughness、normal)。请注意,使用 Sculpture 风格时应将 enable_pbr 设置为 false。 - 创建 refine 任务时,该字段应设置为 "refine"。 + 创建 refine 任务时,该字段应设置为 “refine”。 - 可能的值:`refine` + 可选值:`refine` @@ -244,24 +245,24 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 对应的预览任务 ID。所指定的预览任务的状态必须为 SUCCEEDED。 + 对应的预览任务 id。所提供预览任务的状态必须为 SUCCEEDED。 - 提供一张 2D 图像以指导贴图过程。支持 .jpg、.jpeg、.png 格式或 base64 编码的 data URI。 + 提供一张 2D 图像来引导纹理生成过程。支持 .jpg、.jpeg、.png 格式或 base64 编码的 data URI。 - 提供额外的文本提示词以指导贴图过程。最多 800 个字符。 + 提供一个额外的文本提示词来引导纹理生成过程。最多 800 个字符。 - 已生成纹理的纹理分辨率。为 2k、4k 或 8k 之一。4k 和 8k 需要 ai_model 为 meshy-6、meshy-7、meshy-7.1 或 latest。 + 已生成纹理的纹理分辨率。取值为 2k、4k 或 8k 之一。4k 和 8k 要求 ai_model 为 meshy-6、meshy-7、meshy-7.1 或 latest。 可选值:`2k`、`4k`、`8k` -根据 Router 在 `GET /v2/models/meshy/meshy-7/openapi.json` 提供的 schema 生成,该文档与请求到达提供商之前 Router 用于验证调用的文档相同。 +由 Router 在 `GET /v2/models/meshy/meshy-7/openapi.json` 提供的 Schema 生成,这也是请求到达提供商之前 Router 用于验证调用的同一份文档。 ### 输出 @@ -272,13 +273,13 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ 任务创建时的时间戳,单位为毫秒。 - 格式:`int64` + Format: `int64` - 任务完成时的时间戳,单位为毫秒。如果未完成则为 0。 + 任务完成时的时间戳,单位为毫秒。未完成时为 0。 - 格式:`int64` + Format: `int64` @@ -286,27 +287,27 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 由 Meshy 生成的带纹理 3D模型文件的可下载 URL。 + 由 Meshy 生成的带纹理 3D 模型文件的可下载链接。 - FBX 文件的可下载 URL。 + FBX 文件的可下载链接。 - GLB 文件的可下载 URL。 + GLB 文件的可下载链接。 - MTL 文件的可下载 URL。 + MTL 文件的可下载链接。 - OBJ 文件的可下载 URL。 + OBJ 文件的可下载链接。 - USDZ 文件的可下载 URL。 + USDZ 文件的可下载链接。 @@ -314,13 +315,13 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 前置任务的数量。仅当状态为 PENDING 时才有意义。 + 前面排队的任务数量。仅当 status 为 PENDING 时才有意义。 任务的进度。未开始时为 0,成功时为 100。 - 范围:`0` 到 `100` + Range: `0` to `100` @@ -328,9 +329,9 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 任务启动时的时间戳,单位为毫秒。如果未启动则为 0。 + 任务开始时的时间戳,单位为毫秒。未开始时为 0。 - 格式:`int64` + Format: `int64` @@ -338,7 +339,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 错误对象,当任务失败时包含报错信息。 + 任务失败时包含报错信息的错误对象。 @@ -346,11 +347,11 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 用于指导纹理生成过程的纹理图像的可下载 URL。 + 用于指导纹理贴图过程的纹理图像的可下载链接。 - 在细化阶段为指导纹理生成过程而提供的附加文本提示词。 + 在精修阶段用于指导纹理贴图过程的附加文本提示词。 @@ -358,27 +359,27 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 由该任务生成的纹理 URL 对象数组。 + 由该任务生成的纹理 URL 对象的数组。 - 基础颜色贴图图像的可下载 URL。 + 基础颜色贴图图像的可下载链接。 - 金属度贴图图像的可下载 URL。 + 金属度贴图图像的可下载链接。 - 法线贴图图像的可下载 URL。 + 法线贴图图像的可下载链接。 - 粗糙度贴图图像的可下载 URL。 + 粗糙度贴图图像的可下载链接。 - 模型文件缩略图图像的可下载 URL。 + 模型文件缩略图图像的可下载链接。 @@ -388,7 +389,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 弃用字段,返回预览视频的可下载 URL。 + 返回预览视频可下载链接的弃用字段。 ## 示例 diff --git a/zh/development/comfy-router/models/openai/gpt-image-1-5/code.mdx b/zh/development/comfy-router/models/openai/gpt-image-1-5/code.mdx index 15f65c8ea2..1090634211 100644 --- a/zh/development/comfy-router/models/openai/gpt-image-1-5/code.mdx +++ b/zh/development/comfy-router/models/openai/gpt-image-1-5/code.mdx @@ -2,18 +2,19 @@ title: "将 GPT Image 1.5 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 openai/gpt-image-1.5:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "GPT Image 1.5" -translationSourceHash: b9579a35 +translationSourceHash: 38ba43fc translationFrom: development/comfy-router/models/openai/gpt-image-1-5/code.mdx translationBlockHashes: "_intro": 7a84676f "Quick start": f364e3f2 - "Schema": f8fd74f0 + "Schema": 43008228 "Examples": c73859ec --- + {/* GENERATED FILE. Generated from router-schemas/openai/gpt-image-1.5.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -158,42 +159,40 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-1.5/requests/$REQUEST_ID \ ### 输入 - 背景透明度。`auto` 表示由模型自行选择。 + 背景透明度。`auto` 由模型自行选择。 可选值:`transparent`、`opaque`、`auto` - 要编辑的源图像。该字段的存在即选择了编辑操作:进行文生图生成时请完全省略它。 -模型公布的示例是生成调用,其中省略了该字段。添加 `image` 就是两种模式之间的全部差异:相同的端点、相同的模型 id;不同之处在于,编辑提示词描述的是你想要的变更,而不是场景,因此下面的编辑请求体读起来与生成示例不同,尽管结构上新增的只有这一个字段。 -它可以按原样复制:`{"prompt": "give the rocketship rainbow coloring", "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="], "size": "1024x1024"}`:该 payload 是一个完整的 1x1 PNG,而不是缩写,并且该请求体在 Router 自身的请求验证测试中被固定为一种可接受的用例。请替换为你自己图像的字节。 -接受单张图像或图像数组;gpt-image-1 及更高版本最多接受 16 张,Router 会在派发之前依据此 schema 强制执行。 + 要编辑的来源图像。此字段是否出现即决定选择编辑操作:若要文生图,请完全省略该字段。 +模型公布的示例是生成调用,其中省略了此字段。添加 `image` 就是两种模式之间的全部差异,端点相同、模型 ID 也相同;唯一的区别是编辑提示词描述的是你想要的更改而不是场景,因此下面的编辑请求体读起来与生成示例不同,尽管在结构上只有这一个字段是新增的。 +它可以原封不动地照抄使用:`{"prompt": "give the rocketship rainbow coloring", "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="], "size": "1024x1024"}`,其中的 payload 是一个完整的 1x1 PNG,并非缩写,而且这个请求体在 Router 自身的请求验证测试中被固定为可接受的用例。请替换为你自己图像的字节。 +接受单张图像或由它们组成的数组;gpt-image-1 及更高版本最多接受 16 张,Router 会在派发前依据此 schema 强制执行该限制。 - 一张图像,形式为 Router 代表调用方抓取的 https URL,或以内联方式携带字节的 `data:image/;base64,` URI。可接受的图像类型为 png、webp 和 jpeg,该集合在解析时即被强制执行,而不是留给提供商处理;svg、gif、avif 或 tiff 会在此处被拒绝,并在错误中指出你发送的图像,而不会变成与原因相隔两跳的合作伙伴错误。 -优先使用 URL 形式。base64 payload 大约会膨胀到 4/3,而整个请求体上限为 100 MiB,因此内联形式的上限约为 75 MB 的源图像;URL 则完全绕过这一点。本描述末尾给出的单图像与单请求媒体上限比请求体上限更严格,因此对于任何实际尺寸的图像,你首先遇到的会是这些上限。 -该 URL 必须在不使用你的凭证的情况下可解析。Router 在服务器端抓取它,且随请求不发送任何调用方凭证,因此受支持的形式是预签名 URL,即签名位于查询字符串中的 URL。诸如 `/api/assets/{id}/content` 这类需要认证的端点会向 Router 返回 401 而不是图像;请你自己请求该 URL,并传入它重定向到的已签名 URL。 -抓取被限制在一组具名主机之内,而非开放的互联网,并且同一列表会重新应用于你发送的 URL 以及每一次重定向跳转;因此,位于任何其他主机上的 URL,或重定向离开该列表的 URL,都会在联系任何提供商之前被拒绝。目前该列表仅包含 Comfy 自己的资产投递:Comfy 资产桶下已签名的 `storage.googleapis.com` URL,这正是 `/api/assets/{id}/content` 重定向到的形式。合作伙伴 CDN 或普通 https 主机不在该列表中。 -两项放宽正在逐步推出,且目前默认均处于关闭状态。它们由同一个切换开关控制并一起启用,因此请将以下所有内容视为即将推出,而不是现在就可以据以开发的内容;在依赖其中任何一项之前请先咨询。 -第一项是 `POST /customers/storage` 为你的上传签发到的桶。在该推出到达你的环境之前,来自该端点的上传 URL 会在此处被拒绝,即使该桶属于 Comfy 自己且主机相同;因此“先上传到 Comfy,再传入 URL”目前并不奏效,可行的形式是 `/api/assets/{id}/content` 重定向到的已签名 URL。 -第二项按账户启用,而不是一次性对所有人生效,因为这些主机背后的桶属于你而不是我们:即使上面的切换开关已打开,未启用第三方入站媒体的账户仍会被拒绝,并且收到的提示会明确说明这一点,而不是告知该主机不受支持。请联系你的 Comfy 联系人,为你的账户启用它。它还额外接纳以下第三方对象存储主机,这些主机的桶属于你,Router 对其不作任何所属声明:Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` 和 `s3..amazonaws.com`,路径风格或加 `.` 前缀的形式均可)、Azure Blob Storage(`.blob.core.windows.net`)以及阿里云 OSS(`.oss-.aliyuncs.com`,包括 `oss-accelerate` 端点)。这些特指对象存储端点:同一提供商域名上的通用端点,例如阿里云函数计算的触发器,不在列表中,会被拒绝。 -匹配的是主机名形式,而不是提供商;因此上文列出某个提供商并不意味着该提供商能签发的每个 URL 都会被接受,有三种近似情形值得直接说明,因为调用方有理由带着其中任何一种来到这里。R2 自定义域名(`cdn.example.com`)不被接受:Cloudflare 将 `pub-.r2.dev` 记录为受速率限制的调试主机名,并建议将生产流量指向自定义域名,但自定义域名的主机名中不含任何表明它是 R2 的信息,因此 Router 无法将其与其他任何主机区分开来并会拒绝它;请对 `.r2.cloudflarestorage.com` 端点做预签名,或使用 `pub-.r2.dev` 形式。S3 的 IPv6 dualstack 端点(`s3.dualstack..amazonaws.com`)也不被接受;请使用普通的区域端点。Azure Blob 的备用 DNS 区域(`.z.blob.storage.azure.net`)同样不被接受;请使用 `.blob.core.windows.net`。你收到的拒绝信息会列出这些相同的形式,因此你不必特意来这里阅读它们。 -上面的 `` 和 `pub-` 占位符展示的是你通常会带来的形式,它们并不是对层级的限制。匹配针对的是对象存储的域名后缀,因此同一命名空间下更深层的名称(`a.b.pub-.r2.dev`)也会被接受。这里并没有放宽命名空间本身:后缀仍然必须是所列出的其中之一。 - -下面的示例仅展示形状:真实值还带有签名的查询参数,此处刻意省略,因为发布出去的示例会永远留在规范中,而真实的签名既是泄露的凭据,也是一个会失效的链接。 - -每张图像上限为 25 MiB,单个请求的图像总量上限为 64 MiB。 + 一张图像,既可以是 Router 代表调用方抓取的 https URL,也可以是内联携带字节的 `data:image/;base64,` URI。接受的图像类型为 png、webp 和 jpeg,该集合在解析时就会被强制执行,而不是交由提供商处理:svg、gif、avif 或 tiff 会在这里被拒绝,并指出你发送的是哪张图像,而不是在两跳之外变成一个远离起因的合作伙伴错误。 +优先使用 URL 形式。base64 payload 大约会膨胀 4/3,而整个请求体上限为 100 MiB,因此内联形式的上限约为 75 MB 的来源图像;使用 URL 则完全避开这一问题。本描述末尾说明的单张图像与单次请求的媒体上限比请求体上限更严格,因此对于任何实际大小的图像,你会先触及这些上限。 +该 URL 必须无需你的凭证即可解析。Router 会在服务器端抓取它,且请求中不携带任何调用方凭证,因此支持的形式是预签名 URL,也就是签名位于查询字符串中的那种。诸如 `/api/assets/{id}/content` 这类需要认证的端点会向 Router 返回 401 而不是图像;请你自己请求该 URL,并传入它重定向到的已签名 URL。 +抓取范围被限定在一组指名的主机上,而不是整个开放互联网,并且同一份列表会重新应用到每一次重定向跳转以及你发送的 URL 上:因此位于任何其他主机上的 URL,或重定向到列表之外主机的 URL,都会在任何提供商被联系之前被拒绝。目前该列表仅包含 Comfy 自身的资产交付:Comfy 资产桶下已签名的 `storage.googleapis.com` URL,这正是 `/api/assets/{id}/content` 重定向你到达的形式。合作伙伴 CDN 或普通 https 主机不在该列表上。 +有两项放宽正在逐步推出,目前两者默认均处于关闭状态。它们通过同一个切换项发布并一起启用,因此请把下面所有内容视为即将推出,而不是现在就据此开发:在依赖其中任何一项之前请先咨询。 +第一项是 `POST /customers/storage` 为你上传签名所用的桶。在推出到达你的环境之前,来自该端点的上传 URL 会在这里被拒绝,即便该桶属于 Comfy 自身且主机也相同,因此“上传到 Comfy,再传入 URL”目前并不奏效,而可行的形式是 `/api/assets/{id}/content` 重定向到的已签名 URL。 +第二项是按账户启用,而不是对所有账户同时开放,因为这些主机背后的桶属于你而不是我们:即便上面的切换项已打开,未启用第三方入站媒体的账户仍会被拒绝,并且返回的提示就是这些字眼,而不是告诉你该主机不受支持。请联系你的 Comfy 对接人为此账户启用。它还会额外允许以下第三方对象存储主机,这些主机的桶属于你,Router 不对其主张所属权:Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` 和 `s3..amazonaws.com`,路径式或带 `.` 前缀的形式均可)、Azure Blob Storage(`.blob.core.windows.net`)以及阿里云 OSS(`.oss-.aliyuncs.com`,包括 `oss-accelerate` 端点)。这些专门是对象存储端点:同一提供商域名上的常规端点,例如阿里云函数计算触发器,不在该列表上,会被拒绝。 +匹配的是主机名的形式,而不是提供商:因此上面提到某个提供商,并不意味着该提供商能签发的每个 URL 都会被接受,而有三种近似情况值得直接说明,因为调用方完全可能带着其中任何一种出现。R2 自定义域(`cdn.example.com`)不被接受:Cloudflare 将 `pub-.r2.dev` 记录为限速的调试主机名,并让生产流量改指自定义域,但自定义域的主机名中没有任何能标识它是 R2 的信息,因此 Router 无法把它与其他任何主机区分开来,只能拒绝它;请对 `.r2.cloudflarestorage.com` 端点做预签名,或使用 `pub-.r2.dev` 形式。S3 的 IPv6 dualstack 端点(`s3.dualstack..amazonaws.com`)同样不被接受;请使用普通的区域端点。Azure Blob 的备用 DNS 区域(`.z.blob.storage.azure.net`)也不被接受;请使用 `.blob.core.windows.net`。你收到的拒绝信息中会列出这些相同的形式,因此你不必到这里来阅读它们。 +上面的 `` 和 `pub-` 占位符展示的是你通常会传入的形式,它们并不是深度限制。匹配针对的是对象存储的域名后缀,因此同一命名空间下更深层的名称(`a.b.pub-.r2.dev`)同样会被接受。这并不会放宽命名空间本身:后缀仍然必须是所列出的后缀之一。 +下面的示例只展示形状:真实值还会带上签名查询参数,这里刻意省略了这些参数,因为发布出去的示例会永远留在规范中,而真实签名既是泄露的凭据,也是一个会失效的链接。 +每张图像上限为 25 MiB,单个请求的图像总计上限为 64 MiB。 - 要运行的 gpt-image 模型。Router 会把所寻址的模型 id 拼接进去,因此寻址 /v2/models/openai/gpt-image-2 的调用方不会发送此项。 + 要运行的 gpt-image 模型。Router 会把所寻址的模型 id 拼接进来,因此寻址 `/v2/models/openai/gpt-image-2` 的调用方不会发送该字段。 内容审核设置 - 可能的值:`low`、`auto` + 可选值:`low`、`auto` @@ -211,38 +210,38 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-1.5/requests/$REQUEST_ID \ 输出图像的格式 - 可能的值:`png`、`webp`、`jpeg` + 可选值:`png`、`webp`、`jpeg` - 仅在配合实时流时才有意义,而本接口无法提供该功能:即使你传入,`stream` 也会被固定为 `false`。在生成调用中,任何非 `0` 或 `null` 的值都会被以 400 拒绝,无论请求是否同时发送 `stream: true`;在携带 `image` 的请求中,该字段会被丢弃而不是转发。请省略它。 + 仅在配合实时流时才有意义,而本接口无法提供实时流:即使你发送了 `stream`,它也会被固定为 `false`。在生成请求中,任何不是 `0` 或 `null` 的值都会被以 400 拒绝,无论该请求是否同时发送 `stream: true`;在携带 `image` 的请求中,该字段会被丢弃而不是被转发。请省略它。 范围:`0` 到 `3` - 对要生成的图像,或要对 `image` 进行的编辑的文本描述。 + 要生成的图像的文字描述,或要对 `image` 执行的编辑的描述。 - 生成或编辑图像的质量。`xhigh` 和 `max` 是为 gpt-image-2.5-flare 和 gpt-image-2.5-sunburst 新增的两个档位;`standard` 和 `hd` 是 dall-e 时代的写法,没有任何被接受的模型会读取它们。 + 已生成或已编辑图像的质量。`xhigh` 和 `max` 是为 gpt-image-2.5-flare 和 gpt-image-2.5-sunburst 新增的两个档位;`standard` 和 `hd` 是 dall-e 时代的写法,没有任何被接纳的模型会读取它们。 - 可能的值:`auto`、`low`、`medium`、`high`、`xhigh`、`max`、`standard`、`hd` + 可选值:`auto`、`low`、`medium`、`high`、`xhigh`、`max`、`standard`、`hd` - 图像尺寸(例如 1024x1024、1536x1024、auto) + 图像的尺寸(例如 1024x1024、1536x1024、auto) - 声明该字段是为了让发送它的调用方不被拒绝,但它在本接口上是无效的:Router 会在派发前将其固定为 `false`,因为 Router 捕获提供商的响应,而不是转发 `text/event-stream`(携带 `image` 的请求会改为丢弃该字段,因为编辑请求在重新编码时会去掉它)。Comfy 的任何接口都不提供 gpt-image 的部分图像流式传输:v1 的 `POST /proxy/openai/images/generations` 入口会以 400 拒绝 `stream: true`,并且从不把请求转发到上游,因此请省略该字段,将完成的响应当作单个 JSON 响应体读取。由于流从未开启,OpenAI 关于 `stream: true` 不得与大于 1 的 `n` 组合的限制在这里并不适用;`n` 会按传入的值转发。 + 声明该字段是为了让发送它的调用方不被拒绝,但它在当前接口上是无效的:Router 会在派发之前将其固定为 `false`,因为它捕获的是提供商响应,而不是转发 `text/event-stream`(携带 `image` 的请求则会丢弃该字段,因为编辑结果会在不包含它的情况下重新编码)。没有任何 Comfy 接口提供 gpt-image 的部分图像流式传输:v1 `POST /proxy/openai/images/generations` 入口会以 400 拒绝 `stream: true`,并且绝不会把请求转发到上游,因此请省略该字段,将已完成响应作为单个 JSON 主体读取。由于流从未开启,OpenAI 关于将 `stream: true` 与大于 1 的 `n` 组合使用的限制在这里并不适用;`n` 会按发送的内容原样转发。 - 用于终端用户监控的唯一标识符 + 用于终端用户监测的唯一标识符 -由 Router 在 `GET /v2/models/openai/gpt-image-1.5/openapi.json` 提供的 schema 生成,该文档与它在请求到达提供商之前用于验证调用的文档相同。 +由 Router 在 `GET /v2/models/openai/gpt-image-1.5/openapi.json` 提供的 schema 生成,这也是它在请求到达提供商之前用于校验调用的同一份文档。 ### 输出 @@ -255,7 +254,7 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-1.5/requests/$REQUEST_ID \ - 改写后的提示词 + 修订后的提示词 @@ -303,25 +302,25 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-1.5/requests/$REQUEST_ID \ - 生成的图像背景是 `opaque` 还是 `transparent`,即 OpenAI 为本次生成所判定的结果。请求参数默认值为 `auto`,因此未固定该参数的调用方可以由此得知实际生成的是哪一种。 + 已生成图像的背景是 `opaque` 还是 `transparent`,以 OpenAI 为本次生成解析的结果为准。请求参数默认值为 `auto`,因此未固定该参数的调用方可以由此得知实际生成的是哪一种。 - 生成完成时的 Unix 时间戳(以秒为单位)。它是 OpenAI 在图像生成响应上声明为 REQUIRED 的唯一成员,因此只要生成方是 OpenAI,它就一定存在;而在任何 alt-backed id 上由 fal、wavespeed 或 runware 提供的响应会完全省略它,与其他四个已解析参数成员一样。声明为 `int64`,因为当今的 epoch 值已接近 2^31,未格式化的 `integer` 会在许多 SDK 生成器中生成 32 位字段。 + 生成完成时的 Unix 时间戳,以秒为单位。它是 OpenAI 在图像生成响应中声明为 REQUIRED 的唯一成员,因此只要由 OpenAI 生成就一定存在;而在任何 alt 后端 id 上由 fal、pika、wavespeed 或 runware 提供的响应会完全省略它,与其他四个已解析参数成员一样。声明为 `int64`,是因为当前的纪元值已经足够接近 2^31,若不加格式说明,`integer` 在许多 SDK 生成器中会生成 32 位字段。 - Format: `int64` + 格式:`int64` - `data[].b64_json` 中字节的编码:`png`、`webp` 或 `jpeg`。它是 OpenAI 实际编码所用的格式,发送了该参数时即等于请求中的 `output_format`,未发送时为 `png`,因此解码器可以据此判断,而不必再从请求中重新推导格式。 + `data[].b64_json` 中字节的编码格式:`png`、`webp` 或 `jpeg`。它是 OpenAI 实际编码所用的格式,即发送了请求中的 `output_format` 时采用该值,未发送时为 `png`,因此解码器可以据此判断,而不必再从请求中推导格式。 - 本次生成实际运行的 quality 层级:OpenAI 会报告 `low`、`medium`、`high`、`xhigh` 或 `max` 之一。它是已解析的层级,而不是对请求的回显,请求自身的 `quality` 默认值为 `auto`。 + 本次生成实际运行的质量档位:OpenAI 会报告 `low`、`medium`、`high`、`xhigh` 或 `max` 之一。它是已解析的档位,而不是对请求的回显;请求自身的 `quality` 默认值为 `auto`。 - 本次生成实际运行的像素尺寸,格式为 `x`。它是已解析的尺寸:请求的 `size` 默认值为 `auto`,并且显式接受 `auto`,因此这里是唯一报告实际所用尺寸的地方。 + 本次生成实际运行的像素尺寸,格式为 `x`。它是已解析的尺寸:请求中的 `size` 默认值为 `auto`,并且明确接受 `auto`,因此这里是唯一报告实际所用尺寸的地方。 ## 示例 diff --git a/zh/development/comfy-router/models/openai/gpt-image-1/code.mdx b/zh/development/comfy-router/models/openai/gpt-image-1/code.mdx index 68b78ad748..2f2bf54c7d 100644 --- a/zh/development/comfy-router/models/openai/gpt-image-1/code.mdx +++ b/zh/development/comfy-router/models/openai/gpt-image-1/code.mdx @@ -2,18 +2,19 @@ title: "将 GPT Image 1 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 openai/gpt-image-1:端点、请求形状以及 Router 返回的响应。" sidebarTitle: "GPT Image 1" -translationSourceHash: bb5aa5c1 +translationSourceHash: 02331b72 translationFrom: development/comfy-router/models/openai/gpt-image-1/code.mdx translationBlockHashes: "_intro": 410036c3 "Quick start": b83102e7 - "Schema": bb51ceed + "Schema": 8be561c9 "Examples": c73859ec --- + {/* GENERATED FILE. Generated from router-schemas/openai/gpt-image-1.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -155,7 +156,7 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-1/requests/$REQUEST_ID \ ## Schema -### 输入 +### Input 背景透明度。`auto` 让模型自行选择。 @@ -164,28 +165,28 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-1/requests/$REQUEST_ID \ - 要编辑的来源图像。出现此字段即选择了编辑操作:完全省略该字段则进行文生图。 -模型发布的示例是生成(GENERATION)调用,它省略了此字段。添加 `image` 就是两种模式之间的全部差别:相同的端点、相同的模型 id,只不过编辑提示词描述的是你想要的改动,而不是场景,所以下面的编辑请求体读起来与生成示例不同,尽管结构上新增的只有这一个字段。 -它可以完全按原样复制:`{"prompt": "give the rocketship rainbow coloring", "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="], "size": "1024x1024"}`:该载荷是一个完整的 1x1 PNG,并非缩写,而且这个请求体在 Router 自身的请求验证测试中被固定为可接受的用例。请替换为你自己图像的字节。 -接受一张图像或图像数组;gpt-image-1 及更高版本最多接受 16 张,Router 会在派发之前依据此 schema 强制执行。 + 待编辑的来源图像。该字段的存在即选定编辑操作,若要文生图生成则完全省略它。 +模型公布的示例是 GENERATION 调用,它省略了该字段。添加 `image` 就是两种模式之间的全部差异:相同的端点、相同的模型 ID,区别只在于编辑提示词描述的是你想要的改变,而不是场景,因此下面的编辑请求体读起来与生成示例不同,尽管结构上新增的只有这一个字段。 +它可以按原样照抄:`{"prompt": "give the rocketship rainbow coloring", "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="], "size": "1024x1024"}`:其中的 payload 是一个完整的 1x1 PNG,并非缩写,而且该请求体在 Router 自身的请求验证测试中已顶固为可接受用例。请替换为你自己图像的字节。 +接受一张图像或图像数组;gpt-image-1 及更高版本最多接受 16 张,Router 会在派发之前依据此 schema 强制执行该限制。 - 一张图像,可以是 Router 代表调用方获取的 https URL,也可以是内联携带字节的 `data:image/;base64,` URI。可接受的图像类型为 png、webp 和 jpeg,并且在解析时就会对这一集合强制执行,而不是留给提供商处理:svg、gif、avif 或 tiff 会在这里被拒绝,并指出你发送的图像,而不会变成距离原因两跳之遥的合作伙伴错误。 -优先使用 URL 形式。base64 载荷大约会膨胀 4/3,而整个请求体上限为 100 MiB,因此内联形式在来源图像接近 75 MB 时就会触顶;使用 URL 可以完全绕开这一点。本描述末尾给出的单张图像与单次请求的媒体上限比请求体上限更严格,所以对于任何有实际大小的图像,你先遇到的都是这些上限。 -该 URL 必须在不带你的凭据的情况下可解析。Router 在服务器端获取它,并且不会随请求发送任何调用方凭据,因此受支持的形式是预签名 URL,即签名位于查询字符串中的 URL。像 `/api/assets/{id}/content` 这样需要认证的端点会向 Router 返回 401 而不是图像;请自行请求该 URL,并传递它重定向到的已签名 URL。 -抓取被限制在一组已列明的主机内,而不是开放的互联网,并且同一份列表既适用于你发送的 URL,也适用于每一次重定向跳转:因此位于任何其他主机上的 URL,或者重定向到列表之外主机的 URL,都会在联系任何提供商之前被拒绝。目前该列表仅包含 Comfy 自己的资产分发:Comfy 资产桶下的已签名 `storage.googleapis.com` URL,也就是 `/api/assets/{id}/content` 重定向你前往的形式。合作伙伴 CDN 或普通的 https 主机不在此列表中。 -有两项放宽正在逐步推出,而且目前都默认关闭。它们位于同一个切换开关之后并一起启用,因此请把下面所有内容视为即将推出,而不是现在就能依赖的东西:在依赖其中任何一项之前请先询问。 -第一项是 `POST /customers/storage` 为你的上传签名的桶。在该推出到达你的环境之前,来自该端点的上传 URL 会在这里被拒绝,即使该桶属于 Comfy 自己、主机也完全相同:因此「先上传到 Comfy,再传递 URL」目前行不通,可行的形式是 `/api/assets/{id}/content` 重定向到的已签名 URL。 -第二项是按账号启用,而不是一次性对所有人启用,因为这些主机背后的桶是你的而不是我们的:即使上面的切换开关已打开,未启用第三方入站媒体的账号仍会被拒绝,并且收到的提示会明确这么说,而不是说该主机不受支持。请联系你的 Comfy 联系人,为你的账号启用它。它还额外接受以下第三方对象存储主机,在这些主机上桶属于你,Router 不对其主张所属权:Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` 以及 `s3..amazonaws.com`,路径样式或带 `.` 前缀的形式均可)、Azure Blob Storage(`.blob.core.windows.net`)和阿里云 OSS(`.oss-.aliyuncs.com`,包括 `oss-accelerate` 端点)。这些特指对象存储端点:同一提供商域名上的常规端点,例如阿里云函数计算的触发器,不在列表中,会被拒绝。 -匹配的是主机名形式,而不是提供商:因此上面提到某个提供商,并不意味着该提供商能签发的每个 URL 都被接受;有三个近似情形值得直接说明,因为调用方很可能带着它们中的每一个到来。R2 自定义域名(`cdn.example.com`)不被接受:Cloudflare 将 `pub-.r2.dev` 记录为限速的调试主机名,并把生产流量指向自定义域名,但自定义域名的主机名中没有任何信息表明它是 R2,因此 Router 无法把它与任何其他主机区分开来,只能拒绝它:请对 `.r2.cloudflarestorage.com` 端点做预签名,或者使用 `pub-.r2.dev` 形式。S3 的 IPv6 dualstack 端点(`s3.dualstack..amazonaws.com`)也不被接受;请使用普通的区域端点。Azure Blob 的备用 DNS 区域(`.z.blob.storage.azure.net`)同样不被接受;请使用 `.blob.core.windows.net`。你收到的拒绝信息会列出这些相同的形式,因此你不必专门到这里来阅读它们。 -上面的 `` 和 `pub-` 占位符展示的是你通常会使用的形式;它们并不是对层级的限制。匹配针对的是对象存储的域名后缀,因此同一命名空间下更深层的名称(`a.b.pub-.r2.dev`)也会被接受。而命名空间本身并不会因此被放宽:后缀仍然必须是所列出的后缀之一。 -下面的示例只展示形状:真实的值还会携带签名查询参数,这里有意将其省略,因为已发布的示例会永远留在规范中,而真实的签名既是被泄露的凭证,也是一个会失效的链接。 -每张图像的上限为 25 MiB,单个请求的所有图像总计上限为 64 MiB。 + 一张图像,可以是 Router 代调用方抓取的 https URL,也可以是内联携带字节的 `data:image/;base64,` URI。接受的图像类型为 png、webp 和 jpeg,并且该集合在解析时就被强制执行,而不是留给提供商处理:svg、gif、avif 或 tiff 会在此处被拒绝,并指明你发送的是哪张图像,而不会变成距离根因两跳之外的合作伙伴错误。 +优先使用 URL 形式。base64 payload 大约会膨胀 4/3,而整个请求体上限为 100 MiB,因此内联形式大约在 75 MB 的来源图像处达到上限;URL 则完全绕开这一点。本描述末尾给出的单张图像和单次请求媒体上限比请求体上限更严格,所以对于任何真实尺寸的图像,你首先遇到的是它们。 +该 URL 必须在不携带你的凭据的情况下可解析。Router 在服务器端抓取它,且请求中不发送任何调用方凭据,因此受支持的形式是预签名 URL,即签名位于查询字符串中的 URL。诸如 `/api/assets/{id}/content` 这类需要认证的端点会向 Router 返回 401 而不是图像;请自行请求该 URL,并传入它重定向到的已签名 URL。 +抓取被限制在一组具名主机之内,而不是开放的互联网,并且同一份列表会同时应用于你发送的 URL 以及每一次重定向跳转:因此位于任何其他主机上的 URL,或重定向到列表之外的 URL,都会在联系任何提供商之前被拒绝。目前该列表仅包含 Comfy 自家的资产分发:Comfy 资产桶下的已签名 `storage.googleapis.com` URL,这正是 `/api/assets/{id}/content` 重定向你到的形式。合作伙伴 CDN 或普通 https 主机不在列表内。 +有两项放宽正在逐步推出,且目前均默认关闭。它们位于同一个切换开关之后并一同启用,因此请把下面所有内容视为即将推出,而不是现在就赖以构建的功能:在依赖其中任何一项之前请先咨询。 +第一项是 `POST /customers/storage` 为你的上传签名所指向的桶。在推出覆盖到你的环境之前,来自该端点的上传 URL 会在此处被拒绝,即便该桶是 Comfy 自家的、主机也是同一个:因此“上传到 Comfy,再传入该 URL”目前并不可行,可行的形式是 `/api/assets/{id}/content` 重定向到的已签名 URL。 +第二项是按账号启用的,而不是一次性对所有人开放,因为这些主机背后的桶是你自己的,而不是我们的:即便上面的切换开关已打开,未启用第三方入站媒体的账号仍会被拒绝,并且反馈给你的就是这句话,而不是告知该主机不受支持。请联系你的 Comfy 对接人,为你的账号启用它。它还额外接纳以下第三方对象存储主机,这些桶归你所有,Router 不主张任何所属权:Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` 与 `s3..amazonaws.com`,路径式或带 `.` 前缀的形式均可)、Azure Blob Storage(`.blob.core.windows.net`)以及阿里云 OSS(`.oss-.aliyuncs.com`,包括 `oss-accelerate` 端点)。这些特指对象存储端点:同一提供商域名上的常规端点,例如阿里云函数计算的触发器,不在列表内并会被拒绝。 +匹配的是主机名形式,而不是提供商:因此上面点名某个提供商并不意味着该提供商能签发的每个 URL 都会被接受,有三种近似但不符合的形式值得直接说明,因为调用方很可能正好带着它们而来。R2 的自定义域名(`cdn.example.com`)不被接受:Cloudflare 将 `pub-.r2.dev` 记录为受速率限制的调试主机名,并把生产流量导向自定义域名,但自定义域名的主机名中没有任何内容标识它是 R2,因此 Router 无法将其与其他主机区分开来并会拒绝它:请对 `.r2.cloudflarestorage.com` 端点做预签名,或使用 `pub-.r2.dev` 形式。S3 的 IPv6 双栈端点(`s3.dualstack..amazonaws.com`)也不被接受;请使用普通的区域端点。Azure Blob 的备用 DNS 区域(`.z.blob.storage.azure.net`)同样不被接受;请使用 `.blob.core.windows.net`。你收到的拒绝信息会点明这些形式,因此你不必特意来这里查阅。 +上面的 `` 和 `pub-` 占位符展示的是你通常会提交的形式;它们并不是层级限制。匹配针对的是对象存储域名后缀,因此同一命名空间下更深层的名称(`a.b.pub-.r2.dev`)同样会被接受。这并不会放宽命名空间本身:后缀仍然必须是所列出的其中之一。 +下面的示例只展示形状:真实值还会带有签名查询参数,这里特意省略了它们,因为公开的示例会永远留在规范中,而真实的签名既是泄露的凭据,也是一个会失效的链接。 +每张图像上限为 25 MiB,单个请求的图像总计上限为 64 MiB。 - 要运行的 gpt-image 模型。Router 会拼接所寻址的模型 id,因此寻址 /v2/models/openai/gpt-image-2 的调用方不会发送此参数。 + 要运行的 gpt-image 模型。Router 会把所寻址的模型 id 拼接进去,因此寻址 /v2/models/openai/gpt-image-2 的调用方不会发送该字段。 @@ -197,13 +198,13 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-1/requests/$REQUEST_ID \ 要生成的图像数量(1-10)。 - 范围:`1` 至 `10` + 范围:`1` 到 `10` JPEG 或 WebP 的压缩级别(0-100) - 范围:`0` 至 `100` + 范围:`0` 到 `100` @@ -213,34 +214,34 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-1/requests/$REQUEST_ID \ - 仅在配合实时流时才有意义,而本接口无法提供该功能:即使你传入,`stream` 也会被固定为 `false`。在生成调用中,任何非 `0` 或 `null` 的值都会被以 400 拒绝,无论请求是否同时发送 `stream: true`;在携带 `image` 的请求中,该字段会被丢弃而不是转发。请省略它。 + 仅在与实时流配合使用时才有意义,而本接口无法提供实时流:即使你发送 `stream`,它也会被固定为 `false`。在生成请求中,任何不是 `0` 或 `null` 的值都会被以 400 拒绝,无论该请求是否同时发送 `stream: true`;在携带 `image` 的请求中,该字段会被丢弃而不是转发。请省略它。 - 范围:`0` 至 `3` + 范围:`0` 到 `3` - 要生成的图像的文本描述,或要对 `image` 进行的编辑的文本描述。 + 对要生成的图像的文字描述,或要对 `image` 所做的编辑的描述。 - 生成或编辑后的图像的质量。`xhigh` 和 `max` 是为 gpt-image-2.5-flare 和 gpt-image-2.5-sunburst 新增的两个层级;`standard` 和 `hd` 是 dall-e 时代的拼写,任何已接纳的模型都不会读取它们。 + 生成或编辑后图像的质量。`xhigh` 和 `max` 是 gpt-image-2.5-flare 与 gpt-image-2.5-sunburst 专门新增的两个档位;`standard` 和 `hd` 是 dall-e 时代的写法,任何已接纳的模型都不会读取它们。 可能的值:`auto`、`low`、`medium`、`high`、`xhigh`、`max`、`standard`、`hd` - 图像的尺寸(例如 1024x1024、1536x1024、auto) + 图像的大小(例如 1024x1024、1536x1024、auto) - 声明该字段是为了让发送它的调用方不被拒绝,但它在本接口上是无效的:Router 会在派发前将其固定为 `false`,因为 Router 捕获提供商的响应,而不是转发 `text/event-stream`(携带 `image` 的请求会改为丢弃该字段,因为编辑请求在重新编码时会去掉它)。Comfy 的任何接口都不提供 gpt-image 的部分图像流式传输:v1 的 `POST /proxy/openai/images/generations` 入口会以 400 拒绝 `stream: true`,并且从不把请求转发到上游,因此请省略该字段,将完成的响应当作单个 JSON 响应体读取。由于流从未开启,OpenAI 关于 `stream: true` 不得与大于 1 的 `n` 组合的限制在这里并不适用;`n` 会按传入的值转发。 + 声明该字段是为了让发送它的调用方不被拒绝,但它在本次接口上不起作用:Router 会在派发之前将其固定为 `false`,因为它捕获的是提供商响应,而不是中继 `text/event-stream`(携带 `image` 的请求则会丢弃该字段,因为编辑结果会在没有该字段的情况下重新编码)。没有任何 Comfy 接口提供 gpt-image 的部分图像流式传输:v1 的 `POST /proxy/openai/images/generations` 入口会以 400 拒绝 `stream: true`,并且绝不会把请求转发到上游,因此请省略该字段,并把已完成的响应作为单个 JSON 体读取。由于流从未打开,OpenAI 关于将 `stream: true` 与大于 1 的 `n` 组合使用的限制在这里并不适用;`n` 会按发送时的原样转发。 用于最终用户监控的唯一标识符 -由 Router 在 `GET /v2/models/openai/gpt-image-1/openapi.json` 提供的 schema 生成,它也是请求到达提供商之前用于校验调用的同一份文档。 +由 Router 在 `GET /v2/models/openai/gpt-image-1/openapi.json` 提供的 schema 生成,它与 Router 在请求到达提供商之前用于校验调用的文档是同一份。 ### 输出 @@ -301,25 +302,25 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-1/requests/$REQUEST_ID \ - 已生成图像的背景是 `opaque` 还是 `transparent`,以 OpenAI 为本次生成所解析的结果为准。请求参数默认为 `auto`,因此没有固定该参数的调用方可以在这里得知实际生成的是哪一种。 + 已生成图像的背景是 `opaque` 还是 `transparent`,即 OpenAI 为本次生成所判定的结果。请求参数默认为 `auto`,因此未将其固定的调用方可以在这里得知实际生成的是哪一种。 - 生成完成时的 Unix 时间戳,单位为秒。它是 OpenAI 在图像生成响应中声明为必填的唯一成员,因此只要生产者是 OpenAI 它就会出现;在任何 alt-backed id 上由 fal、wavespeed 或 runware 提供的响应都会完全省略它,与另外四个已解析参数成员一样。声明为 `int64`,因为当前时代的 epoch 值已接近 2^31,在许多 SDK 生成器中未格式化的 `integer` 会生成 32 位字段。 + 生成完成时的 Unix 时间戳,单位为秒。它是 OpenAI 在图像生成响应中声明为 REQUIRED 的唯一成员,因此只要由 OpenAI 生成就会存在;而在任何由 alt 支持的 id 上,由 fal、pika、wavespeed 或 runware 提供的响应会完全省略它,就像其他四个已解析参数成员一样。之所以声明为 `int64`,是因为当下的 epoch 值已接近 2^31,未格式化的 `integer` 在许多 SDK 生成器中会生成 32 位字段。 格式:`int64` - `data[].b64_json` 中字节的编码:`png`、`webp` 或 `jpeg`。它是 OpenAI 实际编码所用的格式,即发送了请求中的 `output_format` 时就是该值、未发送时就是 `png`,因此解码器可以直接以它为依据,而不必从请求中重新推导格式。 + `data[].b64_json` 中字节的编码:`png`、`webp` 或 `jpeg`。它是 OpenAI 实际编码使用的格式,即发送了请求的 `output_format` 时取该值,未发送时取 `png`,因此解码器可以据此判断,而不必从请求中重新推导格式。 - 生成实际运行所用的质量档位:OpenAI 会报告 `low`、`medium`、`high`、`xhigh` 或 `max` 之一。它是已解析(RESOLVED)的档位,而不是对请求的回显,请求自身的 `quality` 默认为 `auto`。 + 本次生成实际使用的质量档位:OpenAI 会报告 `low`、`medium`、`high`、`xhigh` 或 `max` 之一。它是已解析的档位,而不是对请求的回显,因为请求自身的 `quality` 默认为 `auto`。 - 生成实际运行所用的像素尺寸,格式为 `x`。它是已解析(RESOLVED)的尺寸:请求的 `size` 默认为 `auto` 且显式接受 `auto`,因此这里是唯一报告实际所用尺寸的地方。 + 本次生成实际使用的像素尺寸,格式为 `x`。它是已解析的尺寸:请求的 `size` 默认为 `auto` 且明确接受 `auto`,因此这里是唯一报告实际所用尺寸的地方。 ## 示例 diff --git a/zh/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx b/zh/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx index 3656b4ccdb..6d6f8dd068 100644 --- a/zh/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx +++ b/zh/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx @@ -2,19 +2,20 @@ title: "将 GPT Image 2.5 Flare 与 Comfy Router 搭配使用" description: "通过 Comfy Router 调用 openai/gpt-image-2.5-flare:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "GPT Image 2.5 Flare" -translationSourceHash: 2c87d7fe +translationSourceHash: 48fb6d21 translationFrom: development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx translationBlockHashes: "_intro": 1e1ed044 "Quick start": c9749309 "Serving providers": ef0e9384 - "Schema": 8754ad3a + "Schema": 122f72c5 "Examples": c73859ec --- + {/* 已生成文件。由 `pnpm code-pages:gen` 从 router-schemas/openai/gpt-image-2.5-flare.json 生成。 */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -167,37 +168,40 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2.5-flare/requests/$REQUES ## Schema -### 输入 +### Input - 背景透明度。`auto` 让模型自行选择。 + 背景透明度。`auto` 表示由模型自行选择。 可选值:`transparent`、`opaque`、`auto` - 要编辑的来源图像。此字段是否存在即表明选择了编辑操作:要进行文生图,就完全省略它。 -模型公布的示例是生成调用,其中省略了此字段。添加 `image` 就是两种模式之间的全部差异(相同的端点、相同的模型 ID),只不过编辑提示词描述的是你想要的更改,而不是场景本身,因此下面的编辑请求体读起来与生成示例不同,尽管从结构上看新增的只有这一个字段。 -它可以按打印出的样子原样复制:`{"prompt": "give the rocketship rainbow coloring", "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="], "size": "1024x1024"}`:其中的载荷是一个完整的 1x1 PNG,并非缩写形式,而且这个请求体在 Router 自身的请求验证测试中被固定为可接受的用例。请替换为你自己图像的字节。 -接受一张图像或一个图像数组;gpt-image-1 及更高版本最多接受 16 张,Router 会在派发之前依据此 schema 强制执行该限制。 + 要编辑的来源图像。存在此字段即选择编辑操作;若要执行文生图生成,则完全省略此字段。 +模型公开的示例是生成调用,其中省略了此字段。添加 `image` 就是两种模式之间的全部差异(相同的端点、相同的模型 id),只不过编辑提示词描述的是你想要的更改,而不是场景,因此下面的编辑请求体读起来与生成示例不同,尽管结构上新增的只有这一个字段。 +它可以完全按所印内容原样复制:`{"prompt": "give the rocketship rainbow coloring", "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="], "size": "1024x1024"}`。其中 payload 是一个完整的 1x1 PNG,而不是缩写,并且该请求体在 Router 自身的请求验证测试中被固定为可接受的用例。请替换为你自己图像的字节。 +接受一张图像或其数组;gpt-image-1 及后续版本最多接受 16 张,Router 会在分发前根据此 schema 强制执行该限制。 - 一张图像,可以是 Router 代表调用方获取的 https URL,也可以是内联携带字节的 `data:image/;base64,` URI。可接受的图像类型为 png、webp 和 jpeg,并且该集合是在解析时强制执行的,而不是交给提供商判断:svg、gif、avif 或 tiff 会在这里被拒绝,并指出你发送的图像,而不会变成与根因相隔两跳的合作伙伴错误。 -优先使用 URL 形式。base64 载荷大约会膨胀到 4/3,而整个请求体上限为 100 MiB,因此内联形式在来源图像接近 75 MB 时就会到顶;使用 URL 则可以完全避开这一点。本描述末尾给出的单张图像与单次请求的媒体上限比请求体上限更严格,因此对于任何实际尺寸的图像,你首先遇到的会是这些上限。 -该 URL 必须在没有你的凭据的情况下也能解析。Router 在服务器端获取它,并且不会随请求发送任何调用方凭据,因此受支持的形式是预签名 URL,即签名位于查询字符串中的 URL。像 `/api/assets/{id}/content` 这样的需要认证的端点会向 Router 返回 401,而不是图像;请你自己请求该 URL,并传入它重定向到的已签名 URL。 -该获取操作被限定在一组指定的主机之内,而不是开放的互联网,并且同一份列表既会应用于你发送的 URL,也会重新应用于每一个重定向跳转:因此位于任何其他主机上的 URL,或者重定向到列表之外的主机的 URL,都会在任何提供商被联系之前就被拒绝。目前该列表仅包含 Comfy 自己的资产分发:Comfy 资产存储桶下已签名的 `storage.googleapis.com` URL,也就是 `/api/assets/{id}/content` 重定向你到的形式。合作伙伴 CDN 或普通 https 主机不在此列表中。 -两项放宽正在逐步推出,而且目前默认都处于关闭状态。它们由同一个切换开关控制并一同启用,因此请将下面的所有内容视为即将推出,而不是现在就能依赖的东西:在你依赖其中任何一项之前,请先咨询。 -第一项是 `POST /customers/storage` 为你的上传签名所指向的存储桶。在推出覆盖到你的环境之前,来自该端点的上传 URL 在这里会被拒绝,即使该存储桶属于 Comfy 自己、主机也是同一个:所以“先上传到 Comfy,再传入 URL”目前尚不可行,可行的形式是 `/api/assets/{id}/content` 重定向到的那个已签名 URL。 -第二项是按账户启用的,而不是一次性对所有人启用,因为这些主机背后的存储桶属于你而不是我们:即使上面的开关已经打开,未启用第三方入站媒体的账户仍会被拒绝,并且会明确告知这一点,而不是被告知该主机不受支持。请联系你的 Comfy 对接人,为你的账户启用它。它还额外允许以下第三方对象存储主机,其中存储桶属于你,Router 不对其主张所属权:Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` 和 `s3..amazonaws.com`,路径风格或带 `.` 前缀的形式均可)、Azure Blob Storage(`.blob.core.windows.net`)以及阿里云 OSS(`.oss-.aliyuncs.com`,包括 `oss-accelerate` 端点)。这些特指对象存储端点:同一提供商域名上的常规用途端点,例如阿里云函数计算的触发器,不在列表中,会被拒绝。 -匹配的是主机名形式,而不是提供商:因此上面列出某个提供商,并不意味着该提供商能签发的每个 URL 都可接受,有三种近似情况值得直接说明,因为调用方有理由带着它们中的每一种到来。R2 的自定义域名(`cdn.example.com`)不被接受:Cloudflare 将 `pub-.r2.dev` 记录为受速率限制的调试主机名,并把生产流量指向自定义域名,但自定义域名的主机名中没有任何内容能表明它属于 R2,因此 Router 无法将其与其他主机区分开来,于是拒绝它:请对 `.r2.cloudflarestorage.com` 端点做预签名,或使用 `pub-.r2.dev` 形式。S3 的 IPv6 dualstack 端点(`s3.dualstack..amazonaws.com`)同样不被接受;请使用普通的区域端点。Azure Blob 的备用 DNS 区域(`.z.blob.storage.azure.net`)也不被接受;请使用 `.blob.core.windows.net`。你收到的拒绝信息中会列出这些同样的形式,因此你不必特意来这里阅读它们。 -上面的 `` 和 `pub-` 占位符展示的是你通常提交的形式;它们并不是对层级的限制。匹配依据的是对象存储的域名后缀,因此同一命名空间下更深的名称(`a.b.pub-.r2.dev`)也会被接受。这并未放宽命名空间本身:后缀仍然必须是所列出的其中之一。 -下面的示例只展示形状:真实值还带有签名查询参数,这里有意省略,因为已发布的示例会永远留在规范中,而真实的签名既是泄露的凭据,也是一个会失效的链接。 -每张图像的上限为 25 MiB,单个请求的图像总量上限为 64 MiB。 + 单张图像,可以是 Router 代调用方抓取的 https URL,也可以是内联携带字节的 `data:image/;base64,` URI。接受的图像类型为 png、webp 和 jpeg,该集合在解析时即被强制执行,而不是交由提供商决定:svg、gif、avif 或 tiff 会在此处被拒绝,并指明你发送的那张图像,而不会变成距原因两跳之外的合作伙伴错误。 +优先使用 URL 形式。base64 payload 大约会膨胀到 4/3,而整个请求体上限为 100 MiB,因此内联形式对来源图像的上限约为 75 MB;使用 URL 则可完全避开这一点。本描述末尾所述的每张图像与每次请求的媒体上限比请求体上限更严格,因此对于任何实际大小的图像,你首先遇到的会是这些上限。 +该 URL 必须在无需你的凭证的情况下可解析。Router 在服务器端抓取它,并且不会随请求发送任何调用方凭证,因此受支持的形式是预签名 URL,即签名位于查询字符串中的 URL。诸如 `/api/assets/{id}/content` 这样需要认证的端点会向 Router 返回 401 而不是图像;请自行请求该 URL,并传入它重定向到的已签名 URL。 +抓取仅限于一组命名的主机,而不是开放的互联网,并且同一份列表会重新应用于每一个重定向跳转以及你发送的 URL,因此在任何其他主机上的 URL,或者会重定向到列表之外的主机,都会在联系任何提供商之前被拒绝。目前该列表仅包含 Comfy 自身的资产交付:Comfy 资产桶下的已签名 `storage.googleapis.com` URL,也就是 `/api/assets/{id}/content` 将你重定向到的形式。合作伙伴 CDN 或普通的 https 主机不在此列表中。 +有两项放宽正在逐步推出,并且目前默认均为关闭状态。它们位于同一个切换开关之后并一同启用,因此请将以下内容视为即将推出,而不是现在就可以针对其进行开发:在依赖其中任何一项之前请先询问。 +第一项是 `POST /customers/storage` 为你的上传签名写入的桶。在推出到达你的环境之前,来自该端点的上传 URL 会在此处被拒绝,即使该桶是 Comfy 自己的、主机也相同,因此“上传到 Comfy,然后传入该 URL”目前并不可行,可行的形式是 `/api/assets/{id}/content` 重定向到的已签名 URL。 +第二项是按帐户启用,而不是一次性对所有人生效,因为这些主机背后的桶属于你而不是我们:即使上面的开关已打开,未启用第三方入站媒体的帐户仍会被拒绝,并且会以这些措辞告知,而不是告知该主机不受支持。请联系你的 Comfy 对接人以在你的帐户上启用它。它还会接纳以下第三方对象存储主机,这些主机上的桶属于你,Router 对其不作任何所属声明:Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` 和 `s3..amazonaws.com`,路径样式或带 `.` 前缀的形式均可)、Azure Blob Storage(`.blob.core.windows.net`)以及阿里云 OSS(`.oss-.aliyuncs.com`,包括 `oss-accelerate` 端点)。这些具体是对象存储端点:同一提供商域上的通用端点,例如阿里云函数计算触发器,不在列表中,会被拒绝。 +匹配的是主机名形式,而不是提供商,因此上面提到某个提供商并不意味着该提供商能发出的每个 URL 都被接受;有三种近似情形值得明确指出,因为调用方完全可能以其中每一种形式到来。R2 自定义域(`cdn.example.com`)不被接受:Cloudflare 将 `pub-.r2.dev` 记录为受速率限制的调试主机名,并建议生产流量改用自定义域,但自定义域的主机名中没有任何内容表明它属于 R2,因此 Router 无法将其与其他任何主机区分开来,只会拒绝它:请对 `.r2.cloudflarestorage.com` 端点进行预签名,或使用 `pub-.r2.dev` 形式。S3 的 IPv6 dualstack 端点(`s3.dualstack..amazonaws.com`)同样不被接受,请使用普通的区域端点。Azure Blob 的备用 DNS 区(`.z.blob.storage.azure.net`)也不被接受,请使用 `.blob.core.windows.net`。你收到的拒绝信息会指明这些相同的形式,因此你不必来这里阅读它们。 +上面的 `` 和 `pub-` 占位符展示的是你通常会传入的形式;它们并不是对深度的限制。匹配针对的是对象存储的域名后缀,因此同一命名空间下更深的名称(`a.b.pub-.r2.dev`)同样会被接受。但命名空间本身并不会因此放宽:后缀仍必须是所列出的后缀之一。 + +下面的示例只展示形状:真实的值还会携带签名查询参数,这里有意省略,因为发布出来的示例会永远留在规范中,而真实的签名既是被泄露的凭据,也是一个会失效的链接。 + +每张图像的上限为 25 MiB,单个请求中的图像总量上限为 64 MiB。 + - 要运行的 gpt-image 模型。Router 会拼接所寻址的模型 id,因此寻址 /v2/models/openai/gpt-image-2 的调用方不会发送此项。 + 要运行的 gpt-image 模型。Router 会把所寻址的模型 id 拼接进来,因此寻址 /v2/models/openai/gpt-image-2 的调用方不会发送该字段。 @@ -225,34 +229,34 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2.5-flare/requests/$REQUES - 仅在配合实时流时才有意义,而本接口无法提供该功能:即使你传入,`stream` 也会被固定为 `false`。在生成调用中,任何非 `0` 或 `null` 的值都会被以 400 拒绝,无论请求是否同时发送 `stream: true`;在携带 `image` 的请求中,该字段会被丢弃而不是转发。请省略它。 + 仅在配合实时流时才有意义,而本接口无法提供实时流:即使你发送了 `stream`,它也会被固定为 `false`。在生成请求中,任何不是 `0` 或 `null` 的值都会被以 400 拒绝,无论该请求是否同时发送 `stream: true`;在携带 `image` 的请求中,该字段会被丢弃,而不是被转发。请省略该字段。 范围:`0` 到 `3` - 对要生成的图像的文本描述,或要对 `image` 所做的编辑。 + 要生成的图像或要对 `image` 所做编辑的文本描述。 - 生成或编辑图像的质量。`xhigh` 和 `max` 是 gpt-image-2.5-flare 与 gpt-image-2.5-sunburst 为之新增的两个层级;`standard` 和 `hd` 是 dall-e 时代的拼写,没有任何已收录的模型会读取它们。 + 已生成或已编辑图像的质量。`xhigh` 和 `max` 是新增 gpt-image-2.5-flare 与 gpt-image-2.5-sunburst 时所针对的两个档位;`standard` 和 `hd` 是 dall-e 时代的写法,没有任何已准入的模型会读取它们。 可能的值:`auto`、`low`、`medium`、`high`、`xhigh`、`max`、`standard`、`hd` - 图像尺寸(例如 1024x1024、1536x1024、auto) + 图像的尺寸(例如 1024x1024、1536x1024、auto) - 声明该字段是为了让发送它的调用方不被拒绝,但它在本接口上是无效的:Router 会在派发前将其固定为 `false`,因为 Router 捕获提供商的响应,而不是转发 `text/event-stream`(携带 `image` 的请求会改为丢弃该字段,因为编辑请求在重新编码时会去掉它)。Comfy 的任何接口都不提供 gpt-image 的部分图像流式传输:v1 的 `POST /proxy/openai/images/generations` 入口会以 400 拒绝 `stream: true`,并且从不把请求转发到上游,因此请省略该字段,将完成的响应当作单个 JSON 响应体读取。由于流从未开启,OpenAI 关于 `stream: true` 不得与大于 1 的 `n` 组合的限制在这里并不适用;`n` 会按传入的值转发。 + 声明该字段是为了让发送它的调用方不被拒绝,但它在接口上是惰性的(INERT):Router 会在分发之前将其固定为 `false`,因为它捕获的是提供商的响应,而不是转发 `text/event-stream`(携带 `image` 的请求则会改为丢弃该字段,因为编辑会在不包含该字段的情况下重新编码)。没有任何 Comfy 接口提供 gpt-image 的部分图像流式传输:v1 的 `POST /proxy/openai/images/generations` 入口会以 400 拒绝 `stream: true`,并且绝不会把请求转发到上游,因此请省略该字段,并将已完成的响应作为一个 JSON 主体来读取。由于流从未打开,OpenAI 关于将 `stream: true` 与大于 1 的 `n` 组合使用的限制在这里并不适用;`n` 会按发送时的原样转发。 - 用于终端用户监控的唯一标识符 + 用于最终用户监控的唯一标识符 -由 Router 在 `GET /v2/models/openai/gpt-image-2.5-flare/openapi.json` 提供的 schema 生成,该文档也是它在请求到达提供商之前用于校验调用的同一份文档。 +由 Router 在 `GET /v2/models/openai/gpt-image-2.5-flare/openapi.json` 提供的 schema 生成,这也是在请求到达提供商之前它用来校验调用的同一份文档。 ### 输出 @@ -313,25 +317,25 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2.5-flare/requests/$REQUES - 已生成图像的背景是 `opaque` 还是 `transparent`,即 OpenAI 为本次生成所解析的结果。请求参数默认为 `auto`,因此未固定该参数的调用方可以在这里得知实际生成的是哪一种。 + 已生成图像的背景是 `opaque` 还是 `transparent`,即 OpenAI 为本次生成解析出的结果。该请求参数默认为 `auto`,因此没有将它固定下来的调用方可以在这里得知实际生成的是哪一种。 - 生成完成时的 Unix 时间戳,单位为秒。它是 OpenAI 在图像生成响应中声明为 REQUIRED 的唯一成员,因此只要由 OpenAI 生成就一定存在;而在任何由 alt 支持的 id 上,由 fal、wavespeed 或 runware 提供的响应会将它完全省略,就像其他四个已解析参数成员一样。声明为 `int64`,因为当今的 epoch 值已足够接近 2^31,未格式化的 `integer` 在许多 SDK 生成器中会生成 32 位字段。 + 生成完成时的 Unix 时间戳,单位为秒。它是 OpenAI 在图像生成响应中声明为 REQUIRED(必填)的唯一成员,因此只要生产者是 OpenAI 就一定会出现;而在任何 alt 后端的 id 上,由 fal、pika、wavespeed 或 runware 提供的响应会完全省略它,与另外四个已解析参数成员一样。声明为 `int64`,因为当今的 epoch 值已足够接近 2^31,未格式化的 `integer` 在许多 SDK 生成器中会生成 32 位字段。 - 格式:`int64` + 格式: `int64` - `data[].b64_json` 中字节的编码格式,即 `png`、`webp` 或 `jpeg`。它是 OpenAI 实际编码所用的格式:当请求中发送了 `output_format` 时即为该值,未发送时则为 `png`。因此解码器可以直接依据它,而不必从请求中重新推导格式。 + `data[].b64_json` 中字节的编码格式,可为 `png`、`webp` 或 `jpeg`。它是 OpenAI 实际完成编码所用的格式:发送了请求的 `output_format` 时即为该值,未发送时为 `png`,因此解码器可以直接依据它,而不必从请求中重新推导格式。 - 本次生成实际运行的质量档位,OpenAI 会报告 `low`、`medium`、`high`、`xhigh` 或 `max` 之一。这是已解析(RESOLVED)的档位,而不是对请求的回显,请求自身的 `quality` 默认为 `auto`。 + 本次生成实际运行的质量层级:OpenAI 会报告 `low`、`medium`、`high`、`xhigh` 或 `max` 之一。它是已解析(RESOLVED)的层级,而不是对请求的回显,请求自身的 `quality` 默认为 `auto`。 - 本次生成实际运行的像素尺寸,格式为 `x`。这是已解析(RESOLVED)的尺寸:请求的 `size` 默认为 `auto` 且明确允许 `auto`,因此这里是唯一报告实际所用尺寸的地方。 + 本次生成实际运行的像素尺寸,格式为 `x`。它是已解析(RESOLVED)的尺寸:请求的 `size` 默认为 `auto` 且明确接受 `auto`,因此这里是唯一会报告实际所用尺寸的地方。 ## 示例 diff --git a/zh/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx b/zh/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx index 9e244b6beb..c35bc0e02b 100644 --- a/zh/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx +++ b/zh/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx @@ -2,19 +2,20 @@ title: "通过 Comfy Router 使用 GPT Image 2.5 Sunburst" description: "通过 Comfy Router 调用 openai/gpt-image-2.5-sunburst:端点、请求结构以及 Router 返回的响应。" sidebarTitle: "GPT Image 2.5 Sunburst" -translationSourceHash: 64b8ca81 +translationSourceHash: 21e3a50f translationFrom: development/comfy-router/models/openai/gpt-image-2-5-sunburst/code.mdx translationBlockHashes: "_intro": 84874630 "Quick start": 8da85011 "Serving providers": 58af0c87 - "Schema": 1dd323aa + "Schema": 8eff0738 "Examples": c73859ec --- + {/* GENERATED FILE. Generated from router-schemas/openai/gpt-image-2.5-sunburst.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -170,40 +171,40 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2.5-sunburst/requests/$REQ ### 输入 - 背景透明度。`auto` 由模型自行选择。 + 背景透明度。`auto` 表示由模型自行选择。 - 可能的值:`transparent`、`opaque`、`auto` + 可选值:`transparent`、`opaque`、`auto` - 要编辑的来源图像。此字段的出现即选择编辑操作:若要进行文生图生成,请完全省略该字段。 -模型公布的示例是生成调用,该调用省略了此字段。添加 `image` 就是两种模式之间的全部差异:相同的端点、相同的模型 id。区别仅在于编辑提示词描述的是你想要的变化而非场景,因此下面的编辑请求体读起来与生成示例不同,尽管在结构上只有这个字段是新增的。 -它可以按原样直接复制:`{"prompt": "give the rocketship rainbow coloring", "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="], "size": "1024x1024"}`:其中的 payload 是一个完整的 1x1 PNG,而不是缩写,并且该请求体在 Router 自身的请求验证测试中被顶固为可接受的用例。请替换为你自己图像的字节。 -接受单张图像或图像数组;gpt-image-1 及更高版本最多接受 16 张,Router 会在分发之前依据此 schema 强制执行该限制。 + 要编辑的来源图像。该字段是否出现即决定是否选用编辑操作:完全省略它,就是文生图生成。 +模型公布的示例是生成调用,其中省略了该字段。添加 `image` 就是两种模式之间的全部差异:端点相同、模型 id 相同;区别仅在于编辑提示词描述的是你想要的改动而不是场景,因此下面给出的编辑请求体读起来与生成示例不同,尽管结构上新增的只有这一个字段。 +它可以按打印出来的样子直接复制:`{"prompt": "give the rocketship rainbow coloring", "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="], "size": "1024x1024"}`;其中的 payload 是一张完整的 1x1 PNG,并不是缩写形式,而且该请求体在 Router 自身的请求验证测试中被固定为一个被接受的用例。请替换为你自己图像的字节。 +可接受单张图像或图像数组;gpt-image-1 及之后的模型最多接受 16 张,Router 会在派发之前依据此 schema 强制执行该上限。 - 单张图像,形式为 Router 代表调用方抓取的 https URL,或内联携带字节的 `data:image/;base64,` URI。接受的图像类型为 png、webp 和 jpeg,该集合在解析时即被强制执行,而不是留给提供商判断:svg、gif、avif 或 tiff 会在此处被拒绝,并指出你发送的图像,而不会变成距离根因两跳之外的合作伙伴错误。 -请优先使用 URL 形式。base64 payload 大约会膨胀 4/3,而整个请求体上限为 100 MiB,因此内联形式的上限约为 75 MB 的来源图像;使用 URL 则可完全避开这一限制。本描述末尾给出的单图像和单请求媒体上限比请求体上限更严格,因此对于任何实际尺寸的图像,你会先触碰到它们。 -该 URL 必须在不使用你的凭据的情况下即可解析。Router 在服务器端抓取它,并且不会随请求发送调用方凭据,因此受支持的形式是预签名 URL,也就是签名位于查询字符串中的那种 URL。诸如 `/api/assets/{id}/content` 这类需要认证的端点会给 Router 返回 401 而不是图像;请自行请求该 URL,并传入它重定向到的已签名 URL。 -抓取被限制在一组具名主机上,而不是整个开放互联网,并且同一份列表会同样应用于你发送的 URL 以及每一次重定向跳转。因此,位于任何其他主机上的 URL,或重定向到列表之外主机的 URL,都会在联系任何提供商之前被拒绝。目前该列表仅包含 Comfy 自己的资产分发:Comfy 资产桶下的已签名 `storage.googleapis.com` URL,也就是 `/api/assets/{id}/content` 会把你重定向到的形式。合作伙伴 CDN 或普通 https 主机不在该列表上。 -两项放宽正在逐步推出,且今天都默认关闭。它们由同一个切换项控制并一起启用,因此请把下面的内容都视为即将推出的特性,而不是现在就能据以开发的东西:在依赖其中任何一项之前请先咨询。 -第一项放宽的是 `POST /customers/storage` 为你的上传签发目标所在的桶。在推出覆盖到你的环境之前,来自该端点的上传 URL 会在此处被拒绝,即便该桶属于 Comfy 自己、主机也是同一个;因此“先上传到 Comfy,再传入 URL”目前并不可行,可行的形式是 `/api/assets/{id}/content` 重定向到的已签名 URL。 -第二项是按账户启用,而不是一次性对所有人生效,因为这些主机背后的桶属于你而不是我们:即使上面的切换项已开启,未启用第三方入站媒体的账户仍会被拒绝,并且收到的提示就是这层含义,而不是被告知该主机不受支持。请联系你的 Comfy 对接人,为你的账户启用该功能。它还会额外允许以下第三方对象存储主机,在这些主机上桶属于你,Router 不对其主张所属权:Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` 和 `s3..amazonaws.com`,路径风格或 `.` 前缀形式均可)、Azure Blob Storage(`.blob.core.windows.net`)以及阿里云 OSS(`.oss-.aliyuncs.com`,包括 `oss-accelerate` 端点)。这些特指对象存储端点:同一提供商域名上的常规用途端点,例如阿里云函数计算的触发器,不在列表上,会被拒绝。 -匹配的是主机名形式,而不是提供商,因此上面点名某个提供商并不意味着该提供商能签发的每个 URL 都会被接受;有三种近似情况值得直接说明,因为调用方很可能带着其中任何一种前来。R2 的自定义域名(`cdn.example.com`)不被接受:Cloudflare 将 `pub-.r2.dev` 记录为受速率限制的调试主机名,并引导生产流量改走自定义域名,但自定义域名的主机名中没有任何标识表明它属于 R2,因此 Router 无法将它与其他主机区分开来,会予以拒绝。请对 `.r2.cloudflarestorage.com` 端点进行预签名,或使用 `pub-.r2.dev` 形式。S3 的 IPv6 dualstack 端点(`s3.dualstack..amazonaws.com`)也不被接受;请使用普通的区域端点。Azure Blob 的备用 DNS 区域(`.z.blob.storage.azure.net`)同样不被接受;请使用 `.blob.core.windows.net`。你收到的拒绝信息中会列出这些同样的形式,因此你不必到这里来查阅。 -上面的 `` 和 `pub-` 占位符展示的是你通常会遇到的形式,它们并不是深度限制。匹配针对的是对象存储的域名后缀,因此同一命名空间下更深的名称(`a.b.pub-.r2.dev`)也会被接受。但这并不会放宽命名空间本身:后缀仍然必须是所列出的其中之一。 -下面的示例只展示形状:真实值还会携带签名查询参数,这里有意省略了它们,因为已发布的示例会永远留在规范中,而真实的签名既是被泄露的凭据,也是会失效的链接。 -每张图像上限为 25 MiB,单个请求的所有图像总计上限为 64 MiB。 + 一张图像,可以是 Router 代表调用方抓取的 https URL,也可以是内联携带字节的 `data:image/;base64,` URI。可接受的图像类型为 png、webp 和 jpeg,这一集合在解析时就强制执行,而不是留给提供商;svg、gif、avif 或 tiff 会在这里被拒绝,并指明你发送的图像,而不会变成距离根因两个跳转的合作伙伴错误。 +优先使用 URL 形式。base64 payload 大约会膨胀 4/3,而整个请求体上限为 100 MiB,因此内联形式在来源图像接近 75 MB 时就会触顶;URL 则完全避开这一点。本描述末尾给出的单张图像与单次请求的媒体上限比请求体上限更严格,所以对于任何有实际体积的图像,你先遇到的会是它们。 +该 URL 必须在不使用你的凭据的情况下完成解析。Router 在服务器端抓取它,并且不会随请求发送任何调用方凭据,因此受支持的形式是预签名 URL,即签名位于查询字符串中的 URL。诸如 `/api/assets/{id}/content` 这类需要认证的端点会向 Router 返回 401 而不是图像;请你自己请求该 URL,然后传它重定向到的签名 URL。 +抓取被限制在一组具名主机之内,而不是整个开放互联网;同一份列表会重新应用于你发送的 URL,也会应用于每一次重定向跳转;因此位于其他任何主机上的 URL,或者重定向到列表之外的主机,都会在联系任何提供商之前就被拒绝。目前该列表仅包含 Comfy 自己的资产分发:Comfy 资产桶下的签名 `storage.googleapis.com` URL,也就是 `/api/assets/{id}/content` 将你重定向到的形式。合作伙伴 CDN 或普通的 https 主机不在该列表上。 +有两项放宽正在逐步推出,并且二者今天默认都是关闭的。它们位于同一个切换开关之后并一起启用,因此请把下面的一切视为即将推出,而不是现在就可以依据它来构建的东西;在依赖其中任何一项之前请先询问。 +第一项是 `POST /customers/storage` 为你的上传签发到的桶。在推出覆盖到你的环境之前,来自该端点的上传 URL 会在这里被拒绝,即使该桶属于 Comfy 自己、主机也是同一个;因此“先上传到 Comfy,再传 URL”目前并不奏效,可行的形式是 `/api/assets/{id}/content` 重定向到的签名 URL。 +第二项是按账户启用的,而不是一次性对所有人启用,因为这些主机背后的桶属于你而不是我们:即使上面的开关已经打开,未启用第三方入站媒体的账户仍会被拒绝,并且收到的提示就是这句话,而不是被告知主机不受支持。请联系你的 Comfy 对接人,为你的账户启用它。它还会额外允许以下第三方对象存储主机,在这些主机上桶属于你,Router 不对其主张所属权:Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` 以及 `s3..amazonaws.com`,路径式或带 `.` 前缀的形式均可)、Azure Blob Storage(`.blob.core.windows.net`)和阿里云 OSS(`.oss-.aliyuncs.com`,包括 `oss-accelerate` 端点)。这些具体是对象存储端点:同一提供商域名上的通用端点,例如阿里云函数计算的触发器,不在该列表上,会被拒绝。 +匹配的是主机名形式,而不是提供商;因此上面提到某个提供商,并不意味着该提供商能签发的每个 URL 都会被接受,其中有三个近似形式值得直接说明,因为调用方很可能带着其中的每一个前来。R2 的自定义域名(`cdn.example.com`)不被接受:Cloudflare 将 `pub-.r2.dev` 记录为有限速的调试主机名,并把生产流量引向自定义域名,但自定义域名的主机名中没有任何能表明它是 R2 的信息,因此 Router 无法把它与其他主机区分开来,只能拒绝;请对 `.r2.cloudflarestorage.com` 端点进行预签名,或者使用 `pub-.r2.dev` 形式。S3 的 IPv6 dualstack 端点(`s3.dualstack..amazonaws.com`)同样不被接受;请使用普通的区域端点。Azure Blob 的备用 DNS 区域(`.z.blob.storage.azure.net`)也不被接受;请使用 `.blob.core.windows.net`。你收到的拒绝信息会列出这些相同的形式,因此你不必特意来这里阅读它们。 +上方的 `` 和 `pub-` 占位符展示的是你通常会用到的形式,它们并不是对深度的限制。匹配针对的是对象存储域名后缀,因此同一命名空间下更深的名称(`a.b.pub-.r2.dev`)也会被接受。但这并不会放宽命名空间本身:后缀仍然必须是所列出的后缀之一。 +下面的示例仅展示形状:真实值还会携带签名查询参数,这里有意省略了它们,因为已发布的示例会永久留在规范中,而真实签名既是被泄露的凭据,也是一条会失效的链接。 +每张图像上限为 25 MiB,单个请求的图像总量上限为 64 MiB。 - 要运行的 gpt-image 模型。Router 会将所寻址的模型 id 拼接进去,因此寻址 /v2/models/openai/gpt-image-2 的调用方无需发送此项。 + 要运行的 gpt-image 模型。Router 会拼接所寻址的模型 id,因此调用方在寻址 /v2/models/openai/gpt-image-2 时不会发送该字段。 内容审核设置 - 可选值:`low`、`auto` + 可能的值:`low`、`auto` @@ -221,38 +222,38 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2.5-sunburst/requests/$REQ 输出图像的格式 - 可选值:`png`、`webp`、`jpeg` + 可能的值:`png`、`webp`、`jpeg` - 仅在配合实时流时才有意义,而本接口无法提供该功能:即使你传入,`stream` 也会被固定为 `false`。在生成调用中,任何非 `0` 或 `null` 的值都会被以 400 拒绝,无论请求是否同时发送 `stream: true`;在携带 `image` 的请求中,该字段会被丢弃而不是转发。请省略它。 + 仅在与实时流一起使用时才有意义,而本接口无法提供实时流:即使你发送了 `stream`,它也会被置为 `false`。在生成请求中,任何不是 `0` 或 `null` 的值都会以 400 被拒绝,无论该请求是否同时发送 `stream: true`;对于携带 `image` 的请求,该字段会被丢弃而不是转发。请省略它。 范围:`0` 到 `3` - 要生成的图像的文本描述,或要对 `image` 进行的编辑的文本描述。 + 要生成的图像的文本描述,或要对 `image` 所做的编辑的文本描述。 - 生成或编辑后图像的质量。`xhigh` 和 `max` 是新增 gpt-image-2.5-flare 和 gpt-image-2.5-sunburst 时所针对的两个档位;`standard` 和 `hd` 是 dall-e 时代的拼写,任何已被接纳的模型都不会读取。 + 生成或编辑后图像的质量。`xhigh` 和 `max` 是 gpt-image-2.5-flare 与 gpt-image-2.5-sunburst 新增支持的两个档位;`standard` 和 `hd` 是 dall-e 时代的写法,没有任何已接纳的模型会读取它们。 - 可选值:`auto`、`low`、`medium`、`high`、`xhigh`、`max`、`standard`、`hd` + 可能的值:`auto`、`low`、`medium`、`high`、`xhigh`、`max`、`standard`、`hd` - 图像尺寸(例如 1024x1024、1536x1024、auto) + 图像的尺寸(例如 1024x1024、1536x1024、auto) - 声明该字段是为了让发送它的调用方不被拒绝,但它在本接口上是无效的:Router 会在派发前将其固定为 `false`,因为 Router 捕获提供商的响应,而不是转发 `text/event-stream`(携带 `image` 的请求会改为丢弃该字段,因为编辑请求在重新编码时会去掉它)。Comfy 的任何接口都不提供 gpt-image 的部分图像流式传输:v1 的 `POST /proxy/openai/images/generations` 入口会以 400 拒绝 `stream: true`,并且从不把请求转发到上游,因此请省略该字段,将完成的响应当作单个 JSON 响应体读取。由于流从未开启,OpenAI 关于 `stream: true` 不得与大于 1 的 `n` 组合的限制在这里并不适用;`n` 会按传入的值转发。 + 声明该字段,是为了让发送它的调用方不会被拒绝,但它在当前接口上是无效的:Router 会在分发之前将其置为 `false`,因为它捕获的是提供商响应,而不是转发 `text/event-stream`(携带 `image` 的请求则会丢弃该字段,因为编辑会在没有它的情况下重新编码)。没有任何 Comfy 接口提供 gpt-image 部分图像流式传输:v1 的 `POST /proxy/openai/images/generations` 入口会以 400 拒绝 `stream: true`,并且绝不会将该请求转发到上游,因此请省略该字段,将已完成的响应作为单个 JSON 正文读取。由于流从未打开,OpenAI 关于将 `stream: true` 与大于 1 的 `n` 组合使用的限制在这里并不适用;`n` 会按发送时的值转发。 - 用于终端用户监控的唯一标识符 + 用于最终用户监控的唯一标识符 -本文档由 Router 在 `GET /v2/models/openai/gpt-image-2.5-sunburst/openapi.json` 提供的 schema 生成,这也是它在请求到达提供商之前用于校验调用的同一份文档。 +由 Router 在 `GET /v2/models/openai/gpt-image-2.5-sunburst/openapi.json` 提供的 schema 生成,它也是请求到达提供商之前用于校验调用的同一份文档。 ### 输出 @@ -313,25 +314,25 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2.5-sunburst/requests/$REQ - 已生成图像的背景是 `opaque` 还是 `transparent`,即 OpenAI 为本次生成实际判定的结果。请求参数默认为 `auto`,因此没有固定该参数的调用方可以在此得知最终生成的是哪一种。 + 已生成图像的背景是 `opaque` 还是 `transparent`,以 OpenAI 在本次生成中解析的结果为准。该请求参数默认为 `auto`,因此未固定该参数的调用方可以在这里得知实际生成的是哪一种。 - 生成完成时的 Unix 时间戳(以秒为单位)。它是 OpenAI 在图像生成响应中声明为必填的唯一成员,因此只要生成方是 OpenAI,该字段就一定存在;而在任何由 alt 后端支持的 id 上,由 fal、wavespeed 或 runware 提供的响应会完全省略该字段,与其他四个已解析参数成员一样。声明为 `int64`,因为当今的 epoch 数值已足够接近 2^31,若使用未指定格式的 `integer`,许多 SDK 生成器会生成 32 位字段。 + 生成完成时的 Unix 时间戳(以秒为单位)。它是 OpenAI 在图像生成响应中声明为必填的唯一成员,因此只要生产者是 OpenAI,它就会出现;在任意 alt 支撑的 id 上,由 fal、pika、wavespeed 或 runware 提供的响应会完全省略它,就像其他四个已解析参数成员一样。声明为 `int64`,因为当今的 epoch 值已足够接近 2^31,未做格式限定的 `integer` 会在许多 SDK 生成器中产生 32 位字段。 格式:`int64` - `data[].b64_json` 中字节的编码格式:`png`、`webp` 或 `jpeg`。它是 OpenAI 实际编码所用的格式,即发送了请求中的 `output_format` 时使用该值,未发送时为 `png`,因此解码器可以直接依据它,而不必从请求中重新推断格式。 + `data[].b64_json` 中字节的编码:`png`、`webp` 或 `jpeg`。它是 OpenAI 实际编码所用的格式,即发送了请求的 `output_format` 时为该值,未发送时为 `png`,因此解码器可以直接依据它,而不必从请求中重新推导格式。 - 本次生成实际使用的质量档位。OpenAI 会报告 `low`、`medium`、`high`、`xhigh` 或 `max` 之一。它是已解析的档位,而不是对请求的回显,因为请求自身的 `quality` 默认为 `auto`。 + 生成实际运行时所处的质量档位:OpenAI 会报告 `low`、`medium`、`high`、`xhigh` 或 `max` 之一。它是已解析的档位,而不是对请求的回显,请求自身的 `quality` 默认为 `auto`。 - 本次生成实际使用的像素尺寸,格式为 `x`。它是已解析的尺寸:请求中的 `size` 默认为 `auto`,并且明确允许 `auto`,因此这里是唯一报告实际所用尺寸的地方。 + 生成实际运行时的像素尺寸,格式为 `x`。它是已解析的尺寸:请求的 `size` 默认为 `auto`,并且显式接受 `auto`,因此这里是唯一报告实际使用尺寸的地方。 ## 示例 diff --git a/zh/development/comfy-router/models/openai/gpt-image-2/code.mdx b/zh/development/comfy-router/models/openai/gpt-image-2/code.mdx index 6abd303df2..76a34a3944 100644 --- a/zh/development/comfy-router/models/openai/gpt-image-2/code.mdx +++ b/zh/development/comfy-router/models/openai/gpt-image-2/code.mdx @@ -2,19 +2,20 @@ title: "将 GPT Image 2 与 Comfy Router 配合使用" description: "通过 Comfy Router 调用 openai/gpt-image-2:端点、请求结构,以及 Router 返回的响应。" sidebarTitle: "GPT Image 2" -translationSourceHash: 76d11c22 +translationSourceHash: 6437f5f1 translationFrom: development/comfy-router/models/openai/gpt-image-2/code.mdx translationBlockHashes: "_intro": ff220f7e "Quick start": 7ec2e3b6 - "Serving providers": 5a41369d - "Schema": 1d94d9e6 + "Serving providers": 56df172f + "Schema": 0ebd1b14 "Examples": c73859ec --- + {/* GENERATED FILE. Generated from router-schemas/openai/gpt-image-2.json by `pnpm code-pages:gen`. */} import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; @@ -160,6 +161,7 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2/requests/$REQUEST_ID \ - **Comfy**(默认):`POST https://api.comfy.org/v2/models/openai/gpt-image-2` - **fal**,以 `fal/fal-gpt-image-2` 的形式:`POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=fal` +- **Pika**,以 `pika/pika-gpt-image-2` 的形式:`POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=pika` - **Runware**,以 `runware/runware-gpt-image-2` 的形式:`POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=runware` - **WaveSpeed**,以 `wavespeed/wavespeed-gpt-image-2` 的形式:`POST https://api.comfy.org/v2/models/openai/gpt-image-2?model_provider=wavespeed` @@ -170,74 +172,74 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2/requests/$REQUEST_ID \ ### 输入 - 背景透明度。`auto` 由模型自行选择。 + 背景透明度。`auto` 表示由模型自行选择。 可选值:`transparent`、`opaque`、`auto` - 要编辑的来源图像。存在此字段即选择编辑操作:进行文生图生成时请完全省略它。 -模型公布的示例是生成调用,其中省略了此字段。添加 `image` 就是两种模式之间的全部差异:端点相同、模型 id 相同,区别在于编辑提示词描述的是你想要的变化,而不是场景,因此下面的编辑请求体读起来与生成示例不同,即使结构上只有这一个字段是新增的。 -它可以按原样直接复制:`{"prompt": "give the rocketship rainbow coloring", "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="], "size": "1024x1024"}`:该 payload 是一个完整的 1x1 PNG,而不是缩写,并且此请求体在 Router 自身的请求验证测试中被顶固为可接受用例。请替换为你自己图像的字节。 -接受一张图像或图像数组;gpt-image-1 及更高版本最多接受 16 张,Router 会在派发前依据此 schema 强制执行。 + 要编辑的来源图像。此字段一旦出现即选定编辑操作:若要执行文生图,请将其完全省略。 +模型公布的示例是生成调用,它省略了此字段。添加 `image` 就是两种模式之间的全部差异:相同的端点、相同的模型 id,只不过编辑提示词描述的是你想要的改动,而不是场景,所以下面的编辑请求体读起来与生成示例不同,尽管结构上新出现的只有这一个字段。 +它可以按原样直接复制:`{"prompt": "give the rocketship rainbow coloring", "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="], "size": "1024x1024"}`。其中的 payload 是一个完整的 1x1 PNG,而不是缩写占位,并且这个请求体在 Router 自身的请求验证测试中被顶固为一个被接受的用例。请替换成你自己图像的字节。 +接受一张图像,或一个图像数组;gpt-image-1 及更高版本最多接受 16 张,Router 会在派发之前依据此 schema 强制执行该限制。 - 一张图像,可以是 Router 代表调用方抓取的 https URL,也可以是内联携带字节的 `data:image/;base64,` URI。接受的图像类型为 png、webp 和 jpeg,该集合在解析时强制执行,而不是留给提供商:svg、gif、avif 或 tiff 会在此处被拒绝,并指出你发送的图像,而不是变成距原因两步之遥的合作伙伴错误。 -优先使用 URL 形式。base64 payload 大约会膨胀 4/3,而整个请求体上限为 100 MiB,因此内联形式的上限大约对应 75 MB 的来源图像;使用 URL 则完全绕开这一点。本描述末尾说明的单张图像与单次请求的媒体上限比请求体上限更严格,因此对于任何实际尺寸的图像,你会先碰到这些限制。 -该 URL 必须无需你的凭据即可解析。Router 在服务器端抓取它,并且不会随请求发送调用方凭据,因此受支持的形式是预签名 URL,即签名位于查询字符串中的 URL。诸如 `/api/assets/{id}/content` 这类需要认证的端点会向 Router 返回 401,而不是图像;请自行请求该 URL,并传入它重定向到的已签名 URL。 -抓取被限制在一组指定主机内,而不是开放互联网,并且同一列表会同时应用于你发送的 URL 以及每一个重定向跳转:因此位于任何其他主机的 URL,或重定向离开该列表的 URL,都会在联系任何提供商之前被拒绝。目前该列表仅包含 Comfy 自己的资产分发:Comfy 资产桶下已签名的 `storage.googleapis.com` URL,这正是 `/api/assets/{id}/content` 将你重定向到的形式。合作伙伴 CDN 或普通 https 主机不在该列表中。 -两项放宽正在逐步推出,目前均默认关闭。它们通过同一个切换项发布并一起启用,因此请将以下所有内容视为即将推出,而不是目前可以据此构建的功能:在依赖其中任何一项之前请先咨询。 -第一项是 `POST /customers/storage` 将你的上传签名到的桶。在该推出到达你的环境之前,来自该端点的上传 URL 会在此处被拒绝,即使该桶属于 Comfy 且主机相同:因此“上传到 Comfy,然后传入 URL”目前并不奏效,可行的形式是 `/api/assets/{id}/content` 重定向到的已签名 URL。 -第二项按账户启用,而不是对所有人一次性启用,因为这些主机背后的桶属于你而不是我们:即使上面的切换项已开启,未启用第三方入站媒体的账户仍会被拒绝,并且会用这些措辞告知你,而不是告知你不支持该主机。请联系你的 Comfy 对接人,为你的账户启用它。它还额外允许以下第三方对象存储主机,此处的桶属于你,Router 不对其主张所属:Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` 和 `s3..amazonaws.com`,路径样式或带 `.` 前缀的形式均可)、Azure Blob Storage(`.blob.core.windows.net`)以及阿里云 OSS(`.oss-.aliyuncs.com`,包括 `oss-accelerate` 端点)。这些具体是对象存储端点:同一提供商域名上的常规端点(例如阿里云函数计算触发器)不在列表中,会被拒绝。 -匹配的是主机名形式,而不是提供商:因此上面提到某个提供商,并不意味着该提供商能签发的每个 URL 都会被接受,有三种近似但不匹配的情况值得直接说明,因为调用方完全可能带着其中每一种前来。R2 自定义域名(`cdn.example.com`)不被接受:Cloudflare 将 `pub-.r2.dev` 记录为有速率限制的调试主机名,并把生产流量指向自定义域名,但自定义域名的主机名中不携带任何标识其为 R2 的信息,因此 Router 无法将其与其他主机区分开来,会拒绝它:请对 `.r2.cloudflarestorage.com` 端点进行预签名,或使用 `pub-.r2.dev` 形式。S3 的 IPv6 dualstack 端点(`s3.dualstack..amazonaws.com`)也不被接受;请使用普通的区域端点。Azure Blob 的备用 DNS 区域(`.z.blob.storage.azure.net`)同样不被接受;请使用 `.blob.core.windows.net`。你收到的拒绝信息会列出这些同样的形式,因此你不必回到这里来阅读它们。 -上面的 `` 和 `pub-` 占位符展示的是你通常会使用的形式,它们并不是深度限制。匹配针对的是对象存储域后缀,因此同一命名空间下更深的名称(`a.b.pub-.r2.dev`)也会被接受。这一点并不会放宽命名空间本身:后缀仍然必须是列出的其中之一。 -下面的示例仅展示形状:真实值还会带有签名查询参数,这里特意省略了这些参数,因为已发布的示例会永久留在规范中,而真实的签名既是被泄露的凭据,也是一个会失效的链接。 + 单张图像,可以是 Router 代表调用方抓取的 https URL,也可以是内联携带字节的 `data:image/;base64,` URI。可接受的图像类型为 png、webp 和 jpeg,并且该集合是在解析时强制执行的,而不是交给提供商去判断:svg、gif、avif 或 tiff 会在这里被拒绝,并指出你发送的是哪张图像,而不会变成距离起因两跳之外的合作伙伴错误。 +优先使用 URL 形式。base64 payload 大约会膨胀 4/3,而整个请求体上限为 100 MiB,因此内联形式的上限大约是 75 MB 的来源图像;使用 URL 则可以完全避开这一点。本描述末尾给出的单张图像与单次请求的媒体上限比请求体上限更严格,所以对于任何真实尺寸的图像,你会先触碰到这些上限。 +该 URL 必须在不使用你的凭据的情况下可解析。Router 在服务器端抓取它,且请求中不携带任何调用方凭据,因此受支持的形式是预签名 URL,也就是签名位于查询字符串中的 URL。像 `/api/assets/{id}/content` 这样需要认证的端点会向 Router 返回 401,而不是图像;请自行请求该 URL,并传入它重定向到的已签名 URL。 +抓取被限制在一个具名主机集合内,而不是开放的互联网,并且同一份列表会同时重新应用于你发送的 URL 以及每一次重定向跳转。因此,位于任何其他主机上的 URL,或重定向到列表之外主机的 URL,都会在任何提供商被联系之前被拒绝。目前该列表仅包含 Comfy 自己的资产分发:Comfy 资产桶下的已签名 `storage.googleapis.com` URL,也就是 `/api/assets/{id}/content` 将你重定向到的形式。合作伙伴 CDN 或普通的 https 主机不在该列表上。 +有两项放宽正在逐步推出,而且今天两者默认都是关闭的。它们由同一个开关控制并一起启用,因此请把下面所有内容视为即将到来,而不是现在就可以依赖的东西:在依赖其中任何一项之前请先咨询。 +第一项是 `POST /customers/storage` 为你的上传签发所属的桶。在该推出到达你的环境之前,来自该端点的上传 URL 会在这里被拒绝,即使该桶属于 Comfy 自己、主机也相同。所以“上传到 Comfy,然后传入该 URL”目前仍然行不通,可行的形式是 `/api/assets/{id}/content` 重定向到的已签名 URL。 +第二项是按账户启用,而不是一次性对所有人启用,因为这些主机背后的桶属于你而不是我们:即使上面的开关已经打开,仍未启用第三方入站媒体的账户也会被拒绝,并且收到的提示就是这些字眼,而不是被告知该主机不受支持。请联系你的 Comfy 联系人以为你的账户启用它。它还会额外允许以下第三方对象存储主机,这些桶属于你,Router 不对其主张任何所属权:Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` 和 `s3..amazonaws.com`,路径风格或带 `.` 前缀的形式均可)、Azure Blob Storage(`.blob.core.windows.net`)以及阿里云 OSS(`.oss-.aliyuncs.com`,包括 `oss-accelerate` 端点)。这些具体是对象存储端点:同一提供商域名下的通用端点,例如阿里云函数计算的触发器,不在该列表上,会被拒绝。 +匹配的是主机名形式,而不是提供商。因此上面提到某个提供商,并不意味着该提供商能签发的每个 URL 都会被接受;有三个近似但不通过的情形值得直接说明,因为调用方很有可能会带着其中任何一个过来。R2 的自定义域名(`cdn.example.com`)不被接受:Cloudflare 将 `pub-.r2.dev` 记录为受速率限制的调试主机名,并让生产流量改用自定义域名,但自定义域名的主机名中没有任何可识别其为 R2 的信息,所以 Router 无法将它与其他任何主机区分开来,从而拒绝它。请对 `.r2.cloudflarestorage.com` 端点做预签名,或使用 `pub-.r2.dev` 形式。S3 的 IPv6 dualstack 端点(`s3.dualstack..amazonaws.com`)也不被接受;请使用普通的区域端点。Azure Blob 的备用 DNS 区域(`.z.blob.storage.azure.net`)同样不被接受;请使用 `.blob.core.windows.net`。你收到的拒绝信息中会点明这些相同的形式,因此不必特地来这里查阅。 +上面的 `` 和 `pub-` 占位符展示的是你通常会带来的形式;它们并不是对深度的限制。匹配依据的是对象存储的域名后缀,因此同一命名空间下更深的名称(`a.b.pub-.r2.dev`)也会被接受。但由此并未放宽的是命名空间本身:后缀仍必须是所列出的后缀之一。 +下面的示例只展示形状:真实的值还会携带签名查询参数,这里有意省略了它们,因为已发布的示例会永远留在规范中,而真实的签名既是被泄露的凭据,也是一个会失效的链接。 每张图像的上限为 25 MiB,单个请求的图像总计上限为 64 MiB。 - 要运行的 gpt-image 模型。Router 会将寻址到的模型 id 拼接进去,因此寻址 /v2/models/openai/gpt-image-2 的调用方不需要发送此项。 + 要运行的 gpt-image 模型。Router 会将所寻址的模型 id 拼接进去,因此寻址 /v2/models/openai/gpt-image-2 的调用方不会发送此字段。 内容审核设置 - Possible values: `low`, `auto` + 可能的值:`low`、`auto` 要生成的图像数量(1-10)。 - Range: `1` to `10` + 范围:`1` 到 `10` JPEG 或 WebP 的压缩级别(0-100) - Range: `0` to `100` + 范围:`0` 到 `100` 输出图像的格式 - Possible values: `png`, `webp`, `jpeg` + 可能的值:`png`、`webp`、`jpeg` - 仅在配合实时流时才有意义,而本接口无法提供该功能:即使你传入,`stream` 也会被固定为 `false`。在生成调用中,任何非 `0` 或 `null` 的值都会被以 400 拒绝,无论请求是否同时发送 `stream: true`;在携带 `image` 的请求中,该字段会被丢弃而不是转发。请省略它。 + 仅在与实时流配合时才有意义,而本接口无法提供实时流:即使你发送 `stream`,它也会被固定为 `false`。在生成请求中,任何不是 `0` 或 `null` 的值都会被拒绝并返回 400,无论该请求是否同时发送 `stream: true`;在携带 `image` 的请求中,该字段会被丢弃,而不会被转发。请省略它。 - Range: `0` to `3` + 范围:`0` 到 `3` - 要生成的图像的文本描述,或要对 `image` 所做的编辑的文本描述。 + 对要生成的图像的文本描述,或对 `image` 要进行的编辑的文本描述。 - 生成或编辑后图像的质量。`xhigh` 和 `max` 正是为 gpt-image-2.5-flare 和 gpt-image-2.5-sunburst 新增的两个档位;`standard` 和 `hd` 是 dall-e 时代的写法,任何已采纳的模型都不会读取。 + 生成或编辑后图像的质量。`xhigh` 和 `max` 正是为 gpt-image-2.5-flare 与 gpt-image-2.5-sunburst 新增的两个层级;`standard` 和 `hd` 是 dall-e 时代的写法,没有任何已准入的模型会读取它们。 - Possible values: `auto`, `low`, `medium`, `high`, `xhigh`, `max`, `standard`, `hd` + 可能的值:`auto`、`low`、`medium`、`high`、`xhigh`、`max`、`standard`、`hd` @@ -245,14 +247,14 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2/requests/$REQUEST_ID \ - 声明该字段是为了让发送它的调用方不被拒绝,但它在本接口上是无效的:Router 会在派发前将其固定为 `false`,因为 Router 捕获提供商的响应,而不是转发 `text/event-stream`(携带 `image` 的请求会改为丢弃该字段,因为编辑请求在重新编码时会去掉它)。Comfy 的任何接口都不提供 gpt-image 的部分图像流式传输:v1 的 `POST /proxy/openai/images/generations` 入口会以 400 拒绝 `stream: true`,并且从不把请求转发到上游,因此请省略该字段,将完成的响应当作单个 JSON 响应体读取。由于流从未开启,OpenAI 关于 `stream: true` 不得与大于 1 的 `n` 组合的限制在这里并不适用;`n` 会按传入的值转发。 + 声明该字段是为了让发送它的调用方不被拒绝,但它在本接口上不起作用:Router 会在派发之前将其固定为 `false`,因为它捕获的是提供商的响应,而不是转发 `text/event-stream`(携带 `image` 的请求则会丢弃该字段,因为编辑结果会被重新编码且不含该字段)。没有任何 Comfy 接口提供 gpt-image 的部分图像流式传输:v1 `POST /proxy/openai/images/generations` 入口会以 400 拒绝 `stream: true`,并且绝不会将请求转发到上游,因此请省略该字段,并将已完成的响应作为单个 JSON 主体读取。由于该流从不会开启,OpenAI 关于将 `stream: true` 与大于 1 的 `n` 组合使用的限制在此并不适用;`n` 会按发送时的原样转发。 - 用于终端用户监控的唯一标识符 + 用于最终用户监控的唯一标识符 -由 Router 在 `GET /v2/models/openai/gpt-image-2/openapi.json` 提供的 schema 生成,这也是它在请求到达提供商之前用于校验调用的同一份文档。 +本文档由 Router 在 `GET /v2/models/openai/gpt-image-2/openapi.json` 提供的 schema 生成,这也是它在请求到达提供商之前用于校验调用的同一份文档。 ### 输出 @@ -313,25 +315,25 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2/requests/$REQUEST_ID \ - 生成图像的背景是 `opaque` 还是 `transparent`,以 OpenAI 为本次生成解析出的结果为准。请求参数默认为 `auto`,因此未固定该参数的调用方可以在此处得知实际生成的是哪一种。 + 已生成图像的背景是 `opaque` 还是 `transparent`,以 OpenAI 本次生成所解析的结果为准。请求参数默认值为 `auto`,因此对于未固定该参数的调用方来说,这里就是得知实际生成的是哪一种背景的地方。 - 生成完成时的 Unix 时间戳,单位为秒。它是 OpenAI 在图像生成响应中声明为 REQUIRED 的唯一成员,因此只要由 OpenAI 生成就一定存在;对于任何由 alt 支持的 id,由 fal、wavespeed 或 runware 提供的响应会完全省略它,与其他四个已解析参数成员一样。声明为 `int64`,因为当今的 epoch 值已接近 2^31,未格式化的 `integer` 会在许多 SDK 生成器中生成 32 位字段。 + Unix 时间戳,单位为秒,表示生成完成的时间。它是 OpenAI 在图像生成响应中声明的唯一 REQUIRED 成员,因此只要由 OpenAI 作为生产者,它就一定存在;而在任何 alt 后端的 id 上由 fal、pika、wavespeed 或 runware 提供的响应会完全省略它,就像其他四个已解析参数成员一样。声明为 `int64`,是因为当前的 epoch 值已接近 2^31,在许多 SDK 生成器中,未格式化的 `integer` 会生成 32 位字段。 Format: `int64` - `data[].b64_json` 中字节的编码格式:`png`、`webp` 或 `jpeg`。它是 OpenAI 实际编码所用的格式,即发送了请求参数 `output_format` 时采用该值,未发送时为 `png`,因此解码器可以直接依据它,而无需从请求中重新推断格式。 + `data[].b64_json` 中字节的编码格式,为 `png`、`webp` 或 `jpeg`。它是 OpenAI 实际编码所用的格式:当请求中发送了 `output_format` 时即为该值,未发送时则为 `png`。因此解码器可以直接依据它判断,而无需从请求中重新推导格式。 - 本次生成实际使用的质量档位:OpenAI 会报告 `low`、`medium`、`high`、`xhigh` 或 `max` 之一。它是已解析的档位,而不是对请求的回显,因为请求自身的 `quality` 默认为 `auto`。 + 本次生成实际运行的质量档位。OpenAI 会报告 `low`、`medium`、`high`、`xhigh` 或 `max` 之一。它是已解析的档位,而不是对请求的回显,因为请求自身的 `quality` 默认值为 `auto`。 - 本次生成实际使用的像素尺寸,格式为 `x`。它是已解析的尺寸:请求的 `size` 默认为 `auto` 且明确接受 `auto`,因此这里是唯一报告实际所用尺寸的地方。 + 本次生成实际运行的像素尺寸,格式为 `x`。它是已解析的尺寸:请求中的 `size` 默认值为 `auto`,并且明确接受 `auto`,因此这里是唯一报告实际使用尺寸的地方。 ## 示例 diff --git a/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx b/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx new file mode 100644 index 0000000000..5e371eeec5 --- /dev/null +++ b/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx @@ -0,0 +1,332 @@ +--- +title: "使用 Pika 2.5 图生视频与 Comfy Router" +description: "通过 Comfy Router 调用 pika/pika-2.5-image-to-video:端点、请求结构以及 Router 返回的响应。" +sidebarTitle: "Pika 2.5 图生视频" +translationSourceHash: b87c0be4 +translationFrom: development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx +translationBlockHashes: + "_intro": 118f246d + "Quick start": 37a0238c + "Schema": ed2761dc + "Examples": 848844cf +--- +{/* GENERATED FILE. Generated from router-schemas/pika/pika-2.5-image-to-video.json by `pnpm code-pages:gen`. */} + +import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; + +`pika/pika-2.5-image-to-video` 的 API 参考,由 Pika 通过 Comfy Router 提供服务。 + +**输入:** 文本、图像 · **输出:** 视频 + +## 快速开始 + +在 [你的 Comfy 工作区](https://platform.comfy.org/profile/api-keys?onboarding=router) 中创建密钥,并将其导出为 `COMFY_API_KEY`。Python 和 TypeScript 代码片段使用 Comfy SDK(`pip install comfy-sdk` 和 `npm install @comfyorg/sdk`);cURL 代码片段是通过原始 HTTP 发出的同一调用。 + +**模型 ID:** `pika/pika-2.5-image-to-video` + +**端点:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video` + + + + +```python Python +from comfy_sdk import Comfy + +# 从环境中读取 COMFY_API_KEY。 +# SDK 会自动创建幂等键,并在自动重试时复用它。 +with Comfy() as client: + result = client.models.run( + "pika/pika-2.5-image-to-video", + { + "duration_s": 5, + "image": "https://example.invalid/pika/source.png", + "prompt": "The camera slowly pushes in as the leaves begin to sway", + "resolution": "720p", + }, + ) + +print(result) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 从环境中读取 COMFY_API_KEY。 +// SDK 会自动创建幂等键,并在自动重试时复用它。 +const { data } = await comfy.models.run("pika/pika-2.5-image-to-video", { + duration_s: 5, + image: "https://example.invalid/pika/source.png", + prompt: "The camera slowly pushes in as the leaves begin to sway", + resolution: "720p", +}); + +console.log(data); +``` + +```bash cURL +curl https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"image\": \"https://example.invalid/pika/source.png\", \"prompt\": \"The camera slowly pushes in as the leaves begin to sway\", \"resolution\": \"720p\"}" +``` + + + +相同的请求体,发送到 `POST https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests`。运行一旦被接纳,Router 就会返回 `201` 和 `request_id`,结果在就绪后收集,可由当前进程或另一个进程完成。[队列投递](/zh/development/comfy-router/queue) 介绍了状态、取消和收集的完整流程。 + + +```python Python +import asyncio +from comfy_sdk import AsyncComfy + +# 从环境中读取 COMFY_API_KEY。 +# 每次调用 submit() 都会生成自己的 Idempotency-Key,并在自动重试时复用它。 +async def main(): + async with AsyncComfy() as client: + handle = await client.models.submit( + "pika/pika-2.5-image-to-video", + { + "duration_s": 5, + "image": "https://example.invalid/pika/source.png", + "prompt": "The camera slowly pushes in as the leaves begin to sway", + "resolution": "720p", + }, + ) + print("request_id:", handle.request_id) # 配合模型 ID,另一个进程只需这些即可 + + # 轮询直到请求完成,等待服务器指定的 Retry-After。 + async for update in handle.iter_events(): + print(update.status, update.queue_position) + + # 提供商自身的负载,与 models.run() 返回的值相同。 + # 失败或已取消的请求会在此处抛出带类型的 Router 错误。 + result = await handle.get() + + print(result) + +asyncio.run(main()) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 从环境中读取 COMFY_API_KEY。 +// 每次调用 submit() 都会生成自己的 Idempotency-Key,并在自动重试时复用它。 +const handle = await comfy.models.submit("pika/pika-2.5-image-to-video", { + duration_s: 5, + image: "https://example.invalid/pika/source.png", + prompt: "The camera slowly pushes in as the leaves begin to sway", + resolution: "720p", +}); +console.log("requestId:", handle.requestId); // 配合模型 ID,另一个进程只需这些即可 + +// 轮询直到请求完成,等待服务器指定的 Retry-After。 +for await (const update of handle.events()) { + console.log(update.status, update.queuePosition); +} + +// 与 models.run() 返回的结果相同。失败或已取消的请求会在此处被拒绝。 +const result = await handle.get(); + +console.log(result.data); +``` + +```bash cURL +# 1. 提交。Router 返回 201,以及 request_id、status_url、response_url 和 cancel_url。 +curl https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"image\": \"https://example.invalid/pika/source.png\", \"prompt\": \"The camera slowly pushes in as the leaves begin to sway\", \"resolution\": \"720p\"}" + +# 2. 轮询直到状态为 COMPLETED,每次响应会指定需要等待的 Retry-After 秒数。 +REQUEST_ID="" +curl -i https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests/$REQUEST_ID/status \ + -H "X-API-Key: $COMFY_API_KEY" + +# 3. 收集。200 返回模型的原生输出,仍在运行时 202 返回状态正文。 +curl https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video/requests/$REQUEST_ID \ + -H "X-API-Key: $COMFY_API_KEY" +``` + + + + +## Schema + +### 输入 + + + 视频长度,单位为秒。 + + 可能的值:`5`、`10` + + + + 用于生成动画的来源图像的公开 https URL。图像承载主体。纯 `http://` 会被拒绝:Pika 会使用 Comfy 的密钥发送请求并抓取该 URL。 + + + + 描述视频中应避免出现的内容的文本。 + + + + 引导运动的文本提示词。 + + + + 输出分辨率。 + + 可能的值:`720p`、`1080p` + + + + 用于可复现生成的种子。省略它(或传入 null)即可使用随机种子。 + + +本页面根据 Router 在 `GET /v2/models/pika/pika-2.5-image-to-video/openapi.json` 提供的 schema 生成,该文档与 Router 在请求到达提供商之前用来校验调用的文档相同。 + +### 输出 + + + Pika 的结构化失败记录,在 `failed` 任务上设置。Router 会用自己的错误响应来应答失败的任务,因此 Router 返回的响应体不会包含它;之所以声明它,是因为它属于 Pika 的任务文档。 + + + + 可能的值:`invalid_input`、`content_moderation`、`provider_error`、`provider_timeout`、`provider_unavailable`、`rate_limited`、`insufficient_balance`、`membership_required`、`cycle_limit_exceeded`、`admission_suspended`、`usage_limit_exceeded`、`timed_out`、`internal` + + + + + + + + Pika 的任务ID。 + + + + 该任务运行的 Pika 目录条目。 + + + + 已完成任务的媒体,在 `status` 为 `completed` 时设置。`media_type` 指明由哪个字段承载它:`image` 填充 `images`,`video` 填充 `video`,`videos` 填充 `videos`。 + + + + 已生成的图像,用于图像模型。 + + + + 文件的 MIME 类型。 + + + + 高度,单位为像素。 + + + + 已生成文件的下载 URL。 + + + + 宽度,单位为像素。 + + + + 可能的值:`image`、`video`、`videos` + + + + 该视频任务实际使用的种子(若会上报)。 + + + + 一个已生成的媒体文件。 + + + + 文件的 MIME 类型。 + + + + 高度,单位为像素。 + + + + 已生成文件的下载 URL。 + + + + 宽度,单位为像素。 + + + + 已生成的视频,用于多视频交付。 + + + + 文件的 MIME 类型。 + + + + 高度,单位为像素。 + + + + 已生成文件的下载 URL。 + + + + 宽度,单位为像素。 + + + + 生成所花费的秒数,从派发到终态。尽力提供;可能为 null。 + + + + 生命周期状态。Router 返回的响应体始终为 `completed`;`failed` 任务则改由 Router 的错误响应来应答。 + + 可能的值:`queued`、`running`、`completed`、`failed` + + + + 提供商为该任务报告的单位。键并不齐全;仅包含任务所报告的单位。 + + +## 示例 + +### 输入 + +```json +{ + "duration_s": 5, + "image": "https://example.invalid/pika/source.png", + "prompt": "The camera slowly pushes in as the leaves begin to sway", + "resolution": "720p" +} +``` + +### 输出 + +```json +{ + "id": "2d8e4b71-9c05-4f3a-b6d2-81e7a5c09f44", + "model_id": "pika/pika-2.5/image-to-video", + "output": { + "media_type": "video", + "seed": 42, + "video": { + "content_type": "video/mp4", + "height": 720, + "url": "https://example.invalid/pika/pika-2.5-image-to-video/generated.mp4", + "width": 1280 + } + }, + "status": "completed" +} +``` + + + diff --git a/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx b/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx new file mode 100644 index 0000000000..e0f6571b8c --- /dev/null +++ b/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx @@ -0,0 +1,323 @@ +--- +title: "使用 Pika 2.5 文生视频与 Comfy Router" +description: "通过 Comfy Router 调用 pika/pika-2.5-text-to-video:endpoint、请求形状以及 Router 返回的响应。" +sidebarTitle: "Pika 2.5 文生视频" +translationSourceHash: 65ba9bbc +translationFrom: development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx +translationBlockHashes: + "_intro": eb00317a + "Quick start": bce002f0 + "Schema": 347237ec + "Examples": fc131a5f +--- +{/* GENERATED FILE. Generated from router-schemas/pika/pika-2.5-text-to-video.json by `pnpm code-pages:gen`. */} + +import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; + +`pika/pika-2.5-text-to-video` 的 API 参考,由 Comfy Router 从 Pika 提供。 + +**输入:** 文本 · **输出:** 视频 + +## 快速开始 + +在[你的 Comfy 工作区](https://platform.comfy.org/profile/api-keys?onboarding=router)中创建密钥,并将其导出为 `COMFY_API_KEY`。Python 和 TypeScript 代码片段使用 Comfy SDK(`pip install comfy-sdk` 和 `npm install @comfyorg/sdk`);cURL 代码片段是通过原始 HTTP 进行的同一调用。 + +**模型 ID:** `pika/pika-2.5-text-to-video` + +**端点:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video` + + + + +```python Python +from comfy_sdk import Comfy + +# 从环境中读取 COMFY_API_KEY。 +# SDK 会自动创建幂等键,并在自动重试时复用它。 +with Comfy() as client: + result = client.models.run( + "pika/pika-2.5-text-to-video", + { + "duration_s": 5, + "prompt": "A paper boat drifting down a rain-soaked city street at dusk", + "resolution": "720p", + }, + ) + +print(result) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 从环境中读取 COMFY_API_KEY。 +// SDK 会自动创建幂等键,并在自动重试时复用它。 +const { data } = await comfy.models.run("pika/pika-2.5-text-to-video", { + duration_s: 5, + prompt: "A paper boat drifting down a rain-soaked city street at dusk", + resolution: "720p", +}); + +console.log(data); +``` + +```bash cURL +curl https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"prompt\": \"A paper boat drifting down a rain-soaked city street at dusk\", \"resolution\": \"720p\"}" +``` + + + +相同的请求体,发送到 `POST https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests`。运行一经接纳,Router 便会返回 `201` 和 `request_id`,结果就绪后即可收集,无论是从当前进程还是其他进程。[队列投递](/zh/development/comfy-router/queue) 介绍了状态、取消和结果收集。 + + +```python Python +import asyncio +from comfy_sdk import AsyncComfy + +# 从环境中读取 COMFY_API_KEY。 +# 每次 submit() 调用都会生成自己的 Idempotency-Key,并在自动重试时复用它。 +async def main(): + async with AsyncComfy() as client: + handle = await client.models.submit( + "pika/pika-2.5-text-to-video", + { + "duration_s": 5, + "prompt": "A paper boat drifting down a rain-soaked city street at dusk", + "resolution": "720p", + }, + ) + print("request_id:", handle.request_id) # 与模型 ID 一起,就是另一个进程所需的全部信息 + + # 轮询直到请求完成,等待服务器指定的 Retry-After。 + async for update in handle.iter_events(): + print(update.status, update.queue_position) + + # 提供商自己的 payload,与 models.run() 返回的值相同。 + # 失败或已取消的请求会在此处抛出类型化的 Router 错误。 + result = await handle.get() + + print(result) + +asyncio.run(main()) +``` + +```typescript TypeScript +import { comfy } from "@comfyorg/sdk"; + +// 从环境中读取 COMFY_API_KEY。 +// 每次 submit() 调用都会生成自己的 Idempotency-Key,并在自动重试时复用它。 +const handle = await comfy.models.submit("pika/pika-2.5-text-to-video", { + duration_s: 5, + prompt: "A paper boat drifting down a rain-soaked city street at dusk", + resolution: "720p", +}); +console.log("requestId:", handle.requestId); // 与模型 ID 一起,就是另一个进程所需的全部信息 + +// 轮询直到请求完成,等待服务器指定的 Retry-After。 +for await (const update of handle.events()) { + console.log(update.status, update.queuePosition); +} + +// 与 models.run() 返回的结果相同。失败或已取消的请求会在此处拒绝。 +const result = await handle.get(); + +console.log(result.data); +``` + +```bash cURL +# 1. 提交。Router 返回 201,并包含 request_id、status_url、response_url 和 cancel_url。 +curl https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests \ + -H "X-API-Key: $COMFY_API_KEY" \ + -H "Idempotency-Key: $(uuidgen)" \ + -H "Content-Type: application/json" \ + -d "{\"duration_s\": 5, \"prompt\": \"A paper boat drifting down a rain-soaked city street at dusk\", \"resolution\": \"720p\"}" + +# 2. 轮询直到状态为 COMPLETED,每次响应中等待其指定的 Retry-After 秒数。 +REQUEST_ID="" +curl -i https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests/$REQUEST_ID/status \ + -H "X-API-Key: $COMFY_API_KEY" + +# 3. 收集。200 表示模型的原始输出,202 表示仍在运行时返回状态正文。 +curl https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video/requests/$REQUEST_ID \ + -H "X-API-Key: $COMFY_API_KEY" +``` + + + + +## Schema + +### 输入 + + + 视频长度,以秒为单位。文生视频仅生成五秒的片段。 + + 可能的值:`5` + + + + 描述视频中应避免出现的内容的文本。 + + + + 描述要生成的视频的文本提示词。 + + + + 输出分辨率。 + + 可能的值:`720p`、`1080p` + + + + 用于可复现生成的种子。省略它(或发送 null)即可使用随机种子。 + + +该内容由 Router 在 `GET /v2/models/pika/pika-2.5-text-to-video/openapi.json` 提供的 schema 生成,也是它在请求到达提供商之前用于校验调用的同一份文档。 + +### 输出 + + + Pika 的结构化失败记录,在 `failed` 任务上设置。Router 会以自己的错误响应作答失败任务,因此 Router 返回的响应体不会携带它;之所以声明它,是因为它是 Pika 任务文档的一部分。 + + + + 可能的值:`invalid_input`、`content_moderation`、`provider_error`、`provider_timeout`、`provider_unavailable`、`rate_limited`、`insufficient_balance`、`membership_required`、`cycle_limit_exceeded`、`admission_suspended`、`usage_limit_exceeded`、`timed_out`、`internal` + + + + + + + + Pika 的任务ID。 + + + + 该任务所运行的 Pika 目录条目。 + + + + 已完成任务的媒体,在 `status` 为 `completed` 时设置。`media_type` 指明由哪个字段承载它:`image` 填充 `images`,`video` 填充 `video`,`videos` 填充 `videos`。 + + + + 已生成的图像,适用于图像模型。 + + + + 文件的 MIME 类型。 + + + + 高度,以像素为单位。 + + + + 已生成文件的下载 URL。 + + + + 宽度,以像素为单位。 + + + + 可能的值:`image`、`video`、`videos` + + + + 视频任务实际使用的种子(在有报告时提供)。 + + + + 一个已生成的媒体文件。 + + + + 文件的 MIME 类型。 + + + + 高度,以像素为单位。 + + + + 已生成文件的下载 URL。 + + + + 宽度,以像素为单位。 + + + + 已生成的视频,用于多视频交付。 + + + + 文件的 MIME 类型。 + + + + 高度,以像素为单位。 + + + + 已生成文件的下载 URL。 + + + + 宽度,以像素为单位。 + + + + 生成所耗的秒数,从派发到终态。为尽力估算;可能为 null。 + + + + 生命周期状态。Router 返回的响应体中该值始终为 `completed`;`failed` 任务则以 Router 的错误响应作答。 + + 可能的值:`queued`、`running`、`completed`、`failed` + + + + 提供商报告的任务用量单位。键是稀疏的;只包含任务所报告的单位。 + + +## 示例 + +### 输入 + +```json +{ + "duration_s": 5, + "prompt": "A paper boat drifting down a rain-soaked city street at dusk", + "resolution": "720p" +} +``` + +### 输出 + +```json +{ + "id": "6f1c2a9e-3b47-4d8a-9e21-7c5b0f4d8a13", + "model_id": "pika/pika-2.5/text-to-video", + "output": { + "media_type": "video", + "seed": 42, + "video": { + "content_type": "video/mp4", + "height": 720, + "url": "https://example.invalid/pika/pika-2.5-text-to-video/generated.mp4", + "width": 1280 + } + }, + "status": "completed" +} +``` + + + From 2b4d8a5d7103ad25f8f8bfb7ee61f5fc84eadf0f Mon Sep 17 00:00:00 2001 From: lin-bot23 Date: Tue, 13 Oct 2026 11:30:39 +0800 Subject: [PATCH 4/6] i18n: fix glued list items, restore localized anchors in Router guide pages (2026-10-13) --- ja/development/comfy-router/limitations.mdx | 2 +- ja/development/comfy-router/models.mdx | 13 +++++++++---- ja/development/comfy-router/quickstart.mdx | 21 +++++++++++---------- ko/development/comfy-router/models.mdx | 12 ++++++++---- zh/development/comfy-router/limitations.mdx | 2 +- zh/development/comfy-router/models.mdx | 12 ++++++++---- zh/development/comfy-router/quickstart.mdx | 21 +++++++++++---------- 7 files changed, 49 insertions(+), 34 deletions(-) diff --git a/ja/development/comfy-router/limitations.mdx b/ja/development/comfy-router/limitations.mdx index b6b0d2b84e..66a08c4873 100644 --- a/ja/development/comfy-router/limitations.mdx +++ b/ja/development/comfy-router/limitations.mdx @@ -100,7 +100,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` の読み取り方については、[Pre-flight cost estimates](/ja/development/comfy-router/reference#pre-flight-cost-estimates) を参照してください。 +実行前に価格を確認するには、`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` の読み取り方については、[Pre-flight cost estimates](/ja/development/comfy-router/reference#事前のコスト見積もり) を参照してください。 ## Routerはすべてのパートナー操作をカバーしていない diff --git a/ja/development/comfy-router/models.mdx b/ja/development/comfy-router/models.mdx index ae33c631ce..8523bb864d 100644 --- a/ja/development/comfy-router/models.mdx +++ b/ja/development/comfy-router/models.mdx @@ -109,7 +109,8 @@ translationBlockHashes: - [HappyHorse 1.0 R2V](/ja/development/comfy-router/models/wan/happyhorse-1-0-r2v/code): `wan/happyhorse-1.0-r2v` - [HappyHorse 1.0 T2V](/ja/development/comfy-router/models/wan/happyhorse-1-0-t2v/code): `wan/happyhorse-1.0-t2v` - [HappyHorse 1.0 Video Edit](/ja/development/comfy-router/models/wan/happyhorse-1-0-video-edit/code): `wan/happyhorse-1.0-video-edit` -- [HappyHorse 1.1 I2V](/ja/development/comfy-router/models/wan/happyhorse-1-1-i2v/code): `wan/happyhorse-1.1-i2v`- [HappyHorse 1.1 R2V](/ja/development/comfy-router/models/wan/happyhorse-1-1-r2v/code): `wan/happyhorse-1.1-r2v` +- [HappyHorse 1.1 I2V](/ja/development/comfy-router/models/wan/happyhorse-1-1-i2v/code): `wan/happyhorse-1.1-i2v` +- [HappyHorse 1.1 R2V](/ja/development/comfy-router/models/wan/happyhorse-1-1-r2v/code): `wan/happyhorse-1.1-r2v` - [HappyHorse 1.1 T2V](/ja/development/comfy-router/models/wan/happyhorse-1-1-t2v/code): `wan/happyhorse-1.1-t2v` - [Wan 2.5 I2V Preview](/ja/development/comfy-router/models/wan/wan2-5-i2v-preview/code): `wan/wan2.5-i2v-preview` - [Wan 2.5 T2V Preview](/ja/development/comfy-router/models/wan/wan2-5-t2v-preview/code): `wan/wan2.5-t2v-preview` @@ -163,7 +164,8 @@ translationBlockHashes: - [Crystal Upscaler](/ja/development/comfy-router/models/fal/crystal-upscaler/code): `fal/crystal-upscaler` - [Patina](/ja/development/comfy-router/models/fal/patina/code): `fal/patina` - [AI Image Upscaler Precision V2](/ja/development/comfy-router/models/freepik/ai-image-upscaler-precision-v2/code): `freepik/ai-image-upscaler-precision-v2` -- [AI Skin Enhancer Creative](/ja/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code): `freepik/ai-skin-enhancer-creative`- [AI Skin Enhancer Faithful](/ja/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code): `freepik/ai-skin-enhancer-faithful` +- [AI Skin Enhancer Creative](/ja/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code): `freepik/ai-skin-enhancer-creative` +- [AI Skin Enhancer Faithful](/ja/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code): `freepik/ai-skin-enhancer-faithful` - [AI Skin Enhancer Flexible](/ja/development/comfy-router/models/freepik/ai-skin-enhancer-flexible/code): `freepik/ai-skin-enhancer-flexible` - [Gemini Omni 1.1 Flash](/ja/development/comfy-router/models/gemini-interactions/gemini-omni-1-1-flash/code): `gemini-interactions/gemini-omni-1.1-flash` - [Gemini Omni Flash Preview](/ja/development/comfy-router/models/gemini-interactions/gemini-omni-flash-preview/code): `gemini-interactions/gemini-omni-flash-preview` @@ -214,7 +216,8 @@ translationBlockHashes: - [Wan 2.5 T2I Preview](/ja/development/comfy-router/models/wan/wan2-5-t2i-preview/code): `wan/wan2.5-t2i-preview` - [Seedvr 2](/ja/development/comfy-router/models/wavespeed/seedvr2/code): `wavespeed/seedvr2` - [Ultimate Image Upscaler](/ja/development/comfy-router/models/wavespeed/ultimate-image-upscaler/code): `wavespeed/ultimate-image-upscaler` -- [Grok Imagine Image 2.0](/ja/development/comfy-router/models/xai/grok-imagine-image-2-0/code): `xai/grok-imagine-image-2.0`- [Grok Imagine Image Pro](/ja/development/comfy-router/models/xai/grok-imagine-image-pro/code): `xai/grok-imagine-image-pro` +- [Grok Imagine Image 2.0](/ja/development/comfy-router/models/xai/grok-imagine-image-2-0/code): `xai/grok-imagine-image-2.0` +- [Grok Imagine Image Pro](/ja/development/comfy-router/models/xai/grok-imagine-image-pro/code): `xai/grok-imagine-image-pro` - [Grok Imagine Image Quality](/ja/development/comfy-router/models/xai/grok-imagine-image-quality/code): `xai/grok-imagine-image-quality` - [Grok Imagine Image](/ja/development/comfy-router/models/xai/grok-imagine-image/code): `xai/grok-imagine-image` @@ -276,7 +279,9 @@ translationBlockHashes: - [Claude Fable 5.1](/ja/development/comfy-router/models/anthropic/claude-fable-5-1/code): `anthropic/claude-fable-5-1` -- [Claude Fable 5](/ja/development/comfy-router/models/anthropic/claude-fable-5/code): `anthropic/claude-fable-5`- [Claude Opus 4.6](/ja/development/comfy-router/models/anthropic/claude-opus-4-6/code): `anthropic/claude-opus-4-6` +- [Claude Fable 5](/ja/development/comfy-router/models/anthropic/claude-fable-5/code): `anthropic/claude-fable-5` +- [Claude Haiku 4.5 20251001](/ja/development/comfy-router/models/anthropic/claude-haiku-4-5-20251001/code): `anthropic/claude-haiku-4-5-20251001` +- [Claude Opus 4.6](/ja/development/comfy-router/models/anthropic/claude-opus-4-6/code): `anthropic/claude-opus-4-6` - [Claude Opus 4.7](/ja/development/comfy-router/models/anthropic/claude-opus-4-7/code): `anthropic/claude-opus-4-7` - [Claude Opus 4.8](/ja/development/comfy-router/models/anthropic/claude-opus-4-8/code): `anthropic/claude-opus-4-8` - [Claude Opus 5.5](/ja/development/comfy-router/models/anthropic/claude-opus-5-5/code): `anthropic/claude-opus-5-5` diff --git a/ja/development/comfy-router/quickstart.mdx b/ja/development/comfy-router/quickstart.mdx index 1766f459b2..b33df01149 100644 --- a/ja/development/comfy-router/quickstart.mdx +++ b/ja/development/comfy-router/quickstart.mdx @@ -2,10 +2,11 @@ title: "Comfy Router クイックスタート" sidebarTitle: "クイックスタート" description: "最新のフロンティアメディアモデルを使って、数分で画像とビデオを生成します。" -translationSourceHash: 8e5bb6d6 +translationSourceHash: fd6c0aee translationFrom: development/comfy-router/quickstart.mdx translationBlockHashes: "_intro": f2205e95 + "Image-to-video and reference-to-video": 8ac90191 "Next steps": ed466781 ---
@@ -135,18 +136,18 @@ Comfy Router は、`https://api.comfy.org` でホスト型の画像モデルと -## Image-to-video and reference-to-video +## 画像から動画と参照から動画 -The same Seedance request takes image, video, and audio inputs. Add items to `content` and set each one's `role`. The roles you send decide the operation Router runs. Pricing follows the media kinds in `content`, not the roles: a request with any video input bills as video-to-video, otherwise one with any image bills as image-to-video, and a text-only request bills as text-to-video. Some models charge the same rate for text-to-video and image-to-video. +同じ Seedance リクエストが画像、動画、音声の入力を受け取ります。`content` に項目を追加し、それぞれに `role` を設定します。送信する role が Router の実行する操作を決定します。課金は role ではなく `content` 内のメディア種別に従います。動画入力が 1 つでもあるリクエストは動画から動画として課金され、そうでなければ画像が 1 つでもあるリクエストは画像から動画として課金され、テキストのみのリクエストはテキストから動画として課金されます。テキストから動画と画像から動画に同じ料金を課すモデルもあります。 -| Operation | `content` items | +| 操作 | `content` の項目 | |---|---| -| Text-to-video | one `text` item | -| Image-to-video | a `text` item plus an `image_url` item with `role: first_frame` | -| First-and-last-frame | the above plus a second `image_url` item with `role: last_frame` | -| Reference-to-video | a `text` item plus `image_url` items with `role: reference_image`, and on Seedance 2.0 and 2.5, `video_url` items with `role: reference_video` and `audio_url` items with `role: reference_audio` | +| テキストから動画 | `text` 項目を 1 つ | +| 画像から動画 | `text` 項目 1 つと `role: first_frame` の `image_url` 項目 | +| 最初と最後のフレーム | 上記に加えて `role: last_frame` の 2 つ目の `image_url` 項目 | +| 参照から動画 | `text` 項目 1 つと `role: reference_image` の `image_url` 項目群、さらに Seedance 2.0 と 2.5 では `role: reference_video` の `video_url` 項目群と `role: reference_audio` の `audio_url` 項目群 | -An image `url` can be a public URL or a `data:image/;base64,` string. Submit, poll, and collect exactly as in the quickstart above. Only the body changes. +画像の `url` には公開 URL か `data:image/;base64,` 文字列を使用できます。送信、ポーリング、収集は上記のクイックスタートとまったく同じです。変わるのはボディだけです。 ```bash Image-to-video curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \ @@ -180,7 +181,7 @@ curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/reque }' ``` -On Seedance 2.5, first-frame and first-and-last-frame requests take the output aspect ratio from the first frame. Leave `ratio` out or send `adaptive`, because a concrete ratio is refused with a `400`. The request schema is shared across the Seedance family and can list roles a model ignores, so check the `x-comfy-router-input-modalities` field in each model's [input schema](/development/comfy-router/models) for the input kinds that model accepts. For example, `reference_video` and `reference_audio` need a model that lists `video` or `audio` there. +Seedance 2.5 では、最初のフレームと最初と最後のフレームのリクエストは、出力のアスペクト比を最初のフレームから取得します。具体的な比率は `400` で拒否されるため、`ratio` を省略するか `adaptive` を送信してください。リクエストスキーマは Seedance ファミリーで共有されており、モデルが無視する role が含まれることがあるため、各モデルの[入力スキーマ](/ja/development/comfy-router/models) の `x-comfy-router-input-modalities` フィールドで、そのモデルが受け付ける入力種別を確認してください。たとえば、`reference_video` と `reference_audio` には、そこで `video` または `audio` を列挙しているモデルが必要です。 ## 次のステップ diff --git a/ko/development/comfy-router/models.mdx b/ko/development/comfy-router/models.mdx index 55ec90a251..33944ae4cc 100644 --- a/ko/development/comfy-router/models.mdx +++ b/ko/development/comfy-router/models.mdx @@ -109,7 +109,8 @@ translationBlockHashes: - [HappyHorse 1.0 R2V](/ko/development/comfy-router/models/wan/happyhorse-1-0-r2v/code): `wan/happyhorse-1.0-r2v` - [HappyHorse 1.0 T2V](/ko/development/comfy-router/models/wan/happyhorse-1-0-t2v/code): `wan/happyhorse-1.0-t2v` - [HappyHorse 1.0 Video Edit](/ko/development/comfy-router/models/wan/happyhorse-1-0-video-edit/code): `wan/happyhorse-1.0-video-edit` -- [HappyHorse 1.1 I2V](/ko/development/comfy-router/models/wan/happyhorse-1-1-i2v/code): `wan/happyhorse-1.1-i2v`- [HappyHorse 1.1 R2V](/ko/development/comfy-router/models/wan/happyhorse-1-1-r2v/code): `wan/happyhorse-1.1-r2v` +- [HappyHorse 1.1 I2V](/ko/development/comfy-router/models/wan/happyhorse-1-1-i2v/code): `wan/happyhorse-1.1-i2v` +- [HappyHorse 1.1 R2V](/ko/development/comfy-router/models/wan/happyhorse-1-1-r2v/code): `wan/happyhorse-1.1-r2v` - [HappyHorse 1.1 T2V](/ko/development/comfy-router/models/wan/happyhorse-1-1-t2v/code): `wan/happyhorse-1.1-t2v` - [Wan 2.5 I2V Preview](/ko/development/comfy-router/models/wan/wan2-5-i2v-preview/code): `wan/wan2.5-i2v-preview` - [Wan 2.5 T2V Preview](/ko/development/comfy-router/models/wan/wan2-5-t2v-preview/code): `wan/wan2.5-t2v-preview` @@ -163,7 +164,8 @@ translationBlockHashes: - [Crystal Upscaler](/ko/development/comfy-router/models/fal/crystal-upscaler/code): `fal/crystal-upscaler` - [Patina](/ko/development/comfy-router/models/fal/patina/code): `fal/patina` - [AI Image Upscaler Precision V2](/ko/development/comfy-router/models/freepik/ai-image-upscaler-precision-v2/code): `freepik/ai-image-upscaler-precision-v2` -- [AI Skin Enhancer Creative](/ko/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code): `freepik/ai-skin-enhancer-creative`- [AI Skin Enhancer Faithful](/ko/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code): `freepik/ai-skin-enhancer-faithful` +- [AI Skin Enhancer Creative](/ko/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code): `freepik/ai-skin-enhancer-creative` +- [AI Skin Enhancer Faithful](/ko/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code): `freepik/ai-skin-enhancer-faithful` - [AI Skin Enhancer Flexible](/ko/development/comfy-router/models/freepik/ai-skin-enhancer-flexible/code): `freepik/ai-skin-enhancer-flexible` - [Gemini Omni 1.1 Flash](/ko/development/comfy-router/models/gemini-interactions/gemini-omni-1-1-flash/code): `gemini-interactions/gemini-omni-1.1-flash` - [Gemini Omni Flash Preview](/ko/development/comfy-router/models/gemini-interactions/gemini-omni-flash-preview/code): `gemini-interactions/gemini-omni-flash-preview` @@ -214,7 +216,8 @@ translationBlockHashes: - [Wan 2.5 T2I Preview](/ko/development/comfy-router/models/wan/wan2-5-t2i-preview/code): `wan/wan2.5-t2i-preview` - [Seedvr 2](/ko/development/comfy-router/models/wavespeed/seedvr2/code): `wavespeed/seedvr2` - [Ultimate Image Upscaler](/ko/development/comfy-router/models/wavespeed/ultimate-image-upscaler/code): `wavespeed/ultimate-image-upscaler` -- [Grok Imagine Image 2.0](/ko/development/comfy-router/models/xai/grok-imagine-image-2-0/code): `xai/grok-imagine-image-2.0`- [Grok Imagine Image Pro](/ko/development/comfy-router/models/xai/grok-imagine-image-pro/code): `xai/grok-imagine-image-pro` +- [Grok Imagine Image 2.0](/ko/development/comfy-router/models/xai/grok-imagine-image-2-0/code): `xai/grok-imagine-image-2.0` +- [Grok Imagine Image Pro](/ko/development/comfy-router/models/xai/grok-imagine-image-pro/code): `xai/grok-imagine-image-pro` - [Grok Imagine Image Quality](/ko/development/comfy-router/models/xai/grok-imagine-image-quality/code): `xai/grok-imagine-image-quality` - [Grok Imagine Image](/ko/development/comfy-router/models/xai/grok-imagine-image/code): `xai/grok-imagine-image` @@ -277,7 +280,8 @@ translationBlockHashes: - [Claude Fable 5.1](/ko/development/comfy-router/models/anthropic/claude-fable-5-1/code): `anthropic/claude-fable-5-1` - [Claude Fable 5](/ko/development/comfy-router/models/anthropic/claude-fable-5/code): `anthropic/claude-fable-5` -- [Claude Haiku 4.5 20251001](/ko/development/comfy-router/models/anthropic/claude-haiku-4-5-20251001/code): `anthropic/claude-haiku-4-5-20251001`- [Claude Opus 4.6](/ko/development/comfy-router/models/anthropic/claude-opus-4-6/code): `anthropic/claude-opus-4-6` +- [Claude Haiku 4.5 20251001](/ko/development/comfy-router/models/anthropic/claude-haiku-4-5-20251001/code): `anthropic/claude-haiku-4-5-20251001` +- [Claude Opus 4.6](/ko/development/comfy-router/models/anthropic/claude-opus-4-6/code): `anthropic/claude-opus-4-6` - [Claude Opus 4.7](/ko/development/comfy-router/models/anthropic/claude-opus-4-7/code): `anthropic/claude-opus-4-7` - [Claude Opus 4.8](/ko/development/comfy-router/models/anthropic/claude-opus-4-8/code): `anthropic/claude-opus-4-8` - [Claude Opus 5.5](/ko/development/comfy-router/models/anthropic/claude-opus-5-5/code): `anthropic/claude-opus-5-5` diff --git a/zh/development/comfy-router/limitations.mdx b/zh/development/comfy-router/limitations.mdx index 76cef4a86a..364567c690 100644 --- a/zh/development/comfy-router/limitations.mdx +++ b/zh/development/comfy-router/limitations.mdx @@ -100,7 +100,7 @@ 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#pre-flight-cost-estimates)。 +要在运行之前查看价格,可以调用 `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 并不覆盖每个合作伙伴操作 diff --git a/zh/development/comfy-router/models.mdx b/zh/development/comfy-router/models.mdx index 4749838a32..eb66688fa4 100644 --- a/zh/development/comfy-router/models.mdx +++ b/zh/development/comfy-router/models.mdx @@ -109,7 +109,8 @@ translationBlockHashes: - [HappyHorse 1.0 R2V](/zh/development/comfy-router/models/wan/happyhorse-1-0-r2v/code):`wan/happyhorse-1.0-r2v` - [HappyHorse 1.0 T2V](/zh/development/comfy-router/models/wan/happyhorse-1-0-t2v/code):`wan/happyhorse-1.0-t2v` - [HappyHorse 1.0 Video Edit](/zh/development/comfy-router/models/wan/happyhorse-1-0-video-edit/code):`wan/happyhorse-1.0-video-edit` -- [HappyHorse 1.1 I2V](/zh/development/comfy-router/models/wan/happyhorse-1-1-i2v/code):`wan/happyhorse-1.1-i2v`- [HappyHorse 1.1 R2V](/zh/development/comfy-router/models/wan/happyhorse-1-1-r2v/code):`wan/happyhorse-1.1-r2v` +- [HappyHorse 1.1 I2V](/zh/development/comfy-router/models/wan/happyhorse-1-1-i2v/code):`wan/happyhorse-1.1-i2v` +- [HappyHorse 1.1 R2V](/zh/development/comfy-router/models/wan/happyhorse-1-1-r2v/code):`wan/happyhorse-1.1-r2v` - [HappyHorse 1.1 T2V](/zh/development/comfy-router/models/wan/happyhorse-1-1-t2v/code):`wan/happyhorse-1.1-t2v` - [Wan 2.5 I2V Preview](/zh/development/comfy-router/models/wan/wan2-5-i2v-preview/code):`wan/wan2.5-i2v-preview` - [Wan 2.5 T2V Preview](/zh/development/comfy-router/models/wan/wan2-5-t2v-preview/code):`wan/wan2.5-t2v-preview` @@ -163,7 +164,8 @@ translationBlockHashes: - [Crystal Upscaler](/zh/development/comfy-router/models/fal/crystal-upscaler/code):`fal/crystal-upscaler` - [Patina](/zh/development/comfy-router/models/fal/patina/code):`fal/patina` - [AI Image Upscaler Precision V2](/zh/development/comfy-router/models/freepik/ai-image-upscaler-precision-v2/code):`freepik/ai-image-upscaler-precision-v2` -- [AI Skin Enhancer Creative](/zh/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code):`freepik/ai-skin-enhancer-creative`- [AI Skin Enhancer Faithful](/zh/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code):`freepik/ai-skin-enhancer-faithful` +- [AI Skin Enhancer Creative](/zh/development/comfy-router/models/freepik/ai-skin-enhancer-creative/code):`freepik/ai-skin-enhancer-creative` +- [AI Skin Enhancer Faithful](/zh/development/comfy-router/models/freepik/ai-skin-enhancer-faithful/code):`freepik/ai-skin-enhancer-faithful` - [AI Skin Enhancer Flexible](/zh/development/comfy-router/models/freepik/ai-skin-enhancer-flexible/code):`freepik/ai-skin-enhancer-flexible` - [Gemini Omni 1.1 Flash](/zh/development/comfy-router/models/gemini-interactions/gemini-omni-1-1-flash/code):`gemini-interactions/gemini-omni-1.1-flash` - [Gemini Omni Flash Preview](/zh/development/comfy-router/models/gemini-interactions/gemini-omni-flash-preview/code):`gemini-interactions/gemini-omni-flash-preview` @@ -214,7 +216,8 @@ translationBlockHashes: - [Wan 2.5 T2I Preview](/zh/development/comfy-router/models/wan/wan2-5-t2i-preview/code):`wan/wan2.5-t2i-preview` - [Seedvr 2](/zh/development/comfy-router/models/wavespeed/seedvr2/code):`wavespeed/seedvr2` - [Ultimate Image Upscaler](/zh/development/comfy-router/models/wavespeed/ultimate-image-upscaler/code):`wavespeed/ultimate-image-upscaler` -- [Grok Imagine Image 2.0](/zh/development/comfy-router/models/xai/grok-imagine-image-2-0/code):`xai/grok-imagine-image-2.0`- [Grok Imagine Image Pro](/zh/development/comfy-router/models/xai/grok-imagine-image-pro/code):`xai/grok-imagine-image-pro` +- [Grok Imagine Image 2.0](/zh/development/comfy-router/models/xai/grok-imagine-image-2-0/code):`xai/grok-imagine-image-2.0` +- [Grok Imagine Image Pro](/zh/development/comfy-router/models/xai/grok-imagine-image-pro/code):`xai/grok-imagine-image-pro` - [Grok Imagine Image Quality](/zh/development/comfy-router/models/xai/grok-imagine-image-quality/code):`xai/grok-imagine-image-quality` - [Grok Imagine Image](/zh/development/comfy-router/models/xai/grok-imagine-image/code):`xai/grok-imagine-image` @@ -277,7 +280,8 @@ translationBlockHashes: - [Claude Fable 5.1](/zh/development/comfy-router/models/anthropic/claude-fable-5-1/code):`anthropic/claude-fable-5-1` - [Claude Fable 5](/zh/development/comfy-router/models/anthropic/claude-fable-5/code):`anthropic/claude-fable-5` -- [Claude Haiku 4.5 20251001](/zh/development/comfy-router/models/anthropic/claude-haiku-4-5-20251001/code):`anthropic/claude-haiku-4-5-20251001`- [Claude Opus 4.6](/zh/development/comfy-router/models/anthropic/claude-opus-4-6/code):`anthropic/claude-opus-4-6` +- [Claude Haiku 4.5 20251001](/zh/development/comfy-router/models/anthropic/claude-haiku-4-5-20251001/code):`anthropic/claude-haiku-4-5-20251001` +- [Claude Opus 4.6](/zh/development/comfy-router/models/anthropic/claude-opus-4-6/code):`anthropic/claude-opus-4-6` - [Claude Opus 4.7](/zh/development/comfy-router/models/anthropic/claude-opus-4-7/code):`anthropic/claude-opus-4-7` - [Claude Opus 4.8](/zh/development/comfy-router/models/anthropic/claude-opus-4-8/code):`anthropic/claude-opus-4-8` - [Claude Opus 5.5](/zh/development/comfy-router/models/anthropic/claude-opus-5-5/code):`anthropic/claude-opus-5-5` diff --git a/zh/development/comfy-router/quickstart.mdx b/zh/development/comfy-router/quickstart.mdx index 2f8af54943..13ba784821 100644 --- a/zh/development/comfy-router/quickstart.mdx +++ b/zh/development/comfy-router/quickstart.mdx @@ -2,10 +2,11 @@ title: "Comfy Router 快速入门" sidebarTitle: "快速入门" description: "在几分钟内使用最新前沿媒体模型生成图像和视频。" -translationSourceHash: 8e5bb6d6 +translationSourceHash: fd6c0aee translationFrom: development/comfy-router/quickstart.mdx translationBlockHashes: "_intro": f2205e95 + "Image-to-video and reference-to-video": 8ac90191 "Next steps": ed466781 ---
@@ -135,18 +136,18 @@ Comfy Router 为你提供一套用于托管图像和视频模型的 API,地址 -## Image-to-video and reference-to-video +## 图生视频与参考生视频 -The same Seedance request takes image, video, and audio inputs. Add items to `content` and set each one's `role`. The roles you send decide the operation Router runs. Pricing follows the media kinds in `content`, not the roles: a request with any video input bills as video-to-video, otherwise one with any image bills as image-to-video, and a text-only request bills as text-to-video. Some models charge the same rate for text-to-video and image-to-video. +同一个 Seedance 请求可以接受图像、视频和音频输入。向 `content` 添加条目,并为每个条目设置 `role`。你发送的 role 决定 Router 执行哪种操作。计费依据 `content` 中的媒体种类,而不是 role:只要包含视频输入,就按视频到视频计费;否则只要包含图像,就按图生视频计费;只有文本的请求按文生视频计费。有些模型对文生视频和图生视频收取相同的费用。 -| Operation | `content` items | +| 操作 | `content` 条目 | |---|---| -| Text-to-video | one `text` item | -| Image-to-video | a `text` item plus an `image_url` item with `role: first_frame` | -| First-and-last-frame | the above plus a second `image_url` item with `role: last_frame` | -| Reference-to-video | a `text` item plus `image_url` items with `role: reference_image`, and on Seedance 2.0 and 2.5, `video_url` items with `role: reference_video` and `audio_url` items with `role: reference_audio` | +| 文生视频 | 一个 `text` 条目 | +| 图生视频 | 一个 `text` 条目,加上一个 `role: first_frame` 的 `image_url` 条目 | +| 首尾帧 | 上述内容再加上一个 `role: last_frame` 的 `image_url` 条目 | +| 参考生视频 | 一个 `text` 条目,加上若干个 `role: reference_image` 的 `image_url` 条目;在 Seedance 2.0 和 2.5 上还包括 `role: reference_video` 的 `video_url` 条目和 `role: reference_audio` 的 `audio_url` 条目 | -An image `url` can be a public URL or a `data:image/;base64,` string. Submit, poll, and collect exactly as in the quickstart above. Only the body changes. +图像 `url` 可以是公开 URL,也可以是 `data:image/;base64,` 字符串。提交、轮询和收集结果的方式与上面的快速上手完全一致,只有请求体不同。 ```bash Image-to-video curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/requests \ @@ -180,7 +181,7 @@ curl https://api.comfy.org/v2/models/byteplus/dreamina-seedance-2-5-260628/reque }' ``` -On Seedance 2.5, first-frame and first-and-last-frame requests take the output aspect ratio from the first frame. Leave `ratio` out or send `adaptive`, because a concrete ratio is refused with a `400`. The request schema is shared across the Seedance family and can list roles a model ignores, so check the `x-comfy-router-input-modalities` field in each model's [input schema](/development/comfy-router/models) for the input kinds that model accepts. For example, `reference_video` and `reference_audio` need a model that lists `video` or `audio` there. +在 Seedance 2.5 上,首帧请求和首尾帧请求会从首帧获取输出的宽高比。请省略 `ratio` 或传入 `adaptive`,因为传入具体比例会被拒绝并返回 `400`。请求 schema 在 Seedance 系列之间共用,可能会列出模型忽略的 role,因此请查看每个模型的[输入 schema](/zh/development/comfy-router/models) 中的 `x-comfy-router-input-modalities` 字段,了解该模型接受哪些输入种类。例如,`reference_video` 和 `reference_audio` 需要模型在其中列出 `video` 或 `audio`。 ## 下一步 From 36232aca459cd01e3b93a3f2bf5af4c1056444bf Mon Sep 17 00:00:00 2001 From: lin-bot23 Date: Tue, 13 Oct 2026 11:31:20 +0800 Subject: [PATCH 5/6] i18n: regenerate localized Router pricing pages and fix ko anchor after sync (2026-10-13) --- ja/development/comfy-router/pricing.mdx | 8 ++++---- ko/development/comfy-router/limitations.mdx | 2 +- ko/development/comfy-router/pricing.mdx | 8 ++++---- zh/development/comfy-router/pricing.mdx | 8 ++++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ja/development/comfy-router/pricing.mdx b/ja/development/comfy-router/pricing.mdx index c46edc95ca..4fe6f4608d 100644 --- a/ja/development/comfy-router/pricing.mdx +++ b/ja/development/comfy-router/pricing.mdx @@ -371,8 +371,8 @@ Comfy の使用量ベース料金は GPU 秒単位です。実際の料金は GP | 名前 | モデル ID | クレジット | | --- | --- | ---: | | [Grok Imagine Video 1.5 Lite](/ja/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code) | `xai/grok-imagine-video-1.5-lite` | 未公開 | -| [Pika 2.5 Image To Video](/ja/development/comfy-router/models) | `pika/pika-2.5-image-to-video` | 未公開 | -| [Pika 2.5 Text To Video](/ja/development/comfy-router/models) | `pika/pika-2.5-text-to-video` | 未公開 | +| [Pika 2.5 Image To Video](/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code) | `pika/pika-2.5-image-to-video` | 未公開 | +| [Pika 2.5 Text To Video](/ja/development/comfy-router/models/pika/pika-2-5-text-to-video/code) | `pika/pika-2.5-text-to-video` | 未公開 | | [Video To Video Resize](/ja/development/comfy-router/models/moonvalley/video-to-video-resize/code) | `moonvalley/video-to-video-resize` | 未公開 | #### Kling クレジットあたりの料金 @@ -996,8 +996,8 @@ Comfy の使用量ベース料金は GPU 秒単位です。実際の料金は GP | 名前 | モデル ID | USD | | --- | --- | ---: | | [Grok Imagine Video 1.5 Lite](/ja/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code) | `xai/grok-imagine-video-1.5-lite` | 未公開 | -| [Pika 2.5 Image To Video](/ja/development/comfy-router/models) | `pika/pika-2.5-image-to-video` | 未公開 | -| [Pika 2.5 Text To Video](/ja/development/comfy-router/models) | `pika/pika-2.5-text-to-video` | 未公開 | +| [Pika 2.5 Image To Video](/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code) | `pika/pika-2.5-image-to-video` | 未公開 | +| [Pika 2.5 Text To Video](/ja/development/comfy-router/models/pika/pika-2-5-text-to-video/code) | `pika/pika-2.5-text-to-video` | 未公開 | | [Video To Video Resize](/ja/development/comfy-router/models/moonvalley/video-to-video-resize/code) | `moonvalley/video-to-video-resize` | 未公開 | #### Kling クレジットあたりの料金 diff --git a/ko/development/comfy-router/limitations.mdx b/ko/development/comfy-router/limitations.mdx index 661865daad..89c405dc3e 100644 --- a/ko/development/comfy-router/limitations.mdx +++ b/ko/development/comfy-router/limitations.mdx @@ -100,7 +100,7 @@ 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는 모든 파트너 작업을 다루지 않습니다 diff --git a/ko/development/comfy-router/pricing.mdx b/ko/development/comfy-router/pricing.mdx index fe288ca8f1..53e680d0fc 100644 --- a/ko/development/comfy-router/pricing.mdx +++ b/ko/development/comfy-router/pricing.mdx @@ -371,8 +371,8 @@ Comfy 사용량 기반 요금은 GPU 초당 요금입니다. 실제 청구액은 | 이름 | 모델 ID | 크레딧 | | --- | --- | ---: | | [Grok Imagine Video 1.5 Lite](/ko/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code) | `xai/grok-imagine-video-1.5-lite` | 게시되지 않음 | -| [Pika 2.5 Image To Video](/ko/development/comfy-router/models) | `pika/pika-2.5-image-to-video` | 게시되지 않음 | -| [Pika 2.5 Text To Video](/ko/development/comfy-router/models) | `pika/pika-2.5-text-to-video` | 게시되지 않음 | +| [Pika 2.5 Image To Video](/ko/development/comfy-router/models/pika/pika-2-5-image-to-video/code) | `pika/pika-2.5-image-to-video` | 게시되지 않음 | +| [Pika 2.5 Text To Video](/ko/development/comfy-router/models/pika/pika-2-5-text-to-video/code) | `pika/pika-2.5-text-to-video` | 게시되지 않음 | | [Video To Video Resize](/ko/development/comfy-router/models/moonvalley/video-to-video-resize/code) | `moonvalley/video-to-video-resize` | 게시되지 않음 | #### Kling 크레딧당 요금 @@ -996,8 +996,8 @@ Comfy 사용량 기반 요금은 GPU 초당 요금입니다. 실제 청구액은 | 이름 | 모델 ID | USD | | --- | --- | ---: | | [Grok Imagine Video 1.5 Lite](/ko/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code) | `xai/grok-imagine-video-1.5-lite` | 게시되지 않음 | -| [Pika 2.5 Image To Video](/ko/development/comfy-router/models) | `pika/pika-2.5-image-to-video` | 게시되지 않음 | -| [Pika 2.5 Text To Video](/ko/development/comfy-router/models) | `pika/pika-2.5-text-to-video` | 게시되지 않음 | +| [Pika 2.5 Image To Video](/ko/development/comfy-router/models/pika/pika-2-5-image-to-video/code) | `pika/pika-2.5-image-to-video` | 게시되지 않음 | +| [Pika 2.5 Text To Video](/ko/development/comfy-router/models/pika/pika-2-5-text-to-video/code) | `pika/pika-2.5-text-to-video` | 게시되지 않음 | | [Video To Video Resize](/ko/development/comfy-router/models/moonvalley/video-to-video-resize/code) | `moonvalley/video-to-video-resize` | 게시되지 않음 | #### Kling 크레딧당 요금 diff --git a/zh/development/comfy-router/pricing.mdx b/zh/development/comfy-router/pricing.mdx index 68f7b324a9..e93e019f5d 100644 --- a/zh/development/comfy-router/pricing.mdx +++ b/zh/development/comfy-router/pricing.mdx @@ -371,8 +371,8 @@ Comfy 的按用量计费费率按 GPU 秒计算。实际费用取决于 GPU 运 | 名称 | 模型 ID | 积分 | | --- | --- | ---: | | [Grok Imagine Video 1.5 Lite](/zh/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code) | `xai/grok-imagine-video-1.5-lite` | 未发布 | -| [Pika 2.5 Image To Video](/zh/development/comfy-router/models) | `pika/pika-2.5-image-to-video` | 未发布 | -| [Pika 2.5 Text To Video](/zh/development/comfy-router/models) | `pika/pika-2.5-text-to-video` | 未发布 | +| [Pika 2.5 Image To Video](/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code) | `pika/pika-2.5-image-to-video` | 未发布 | +| [Pika 2.5 Text To Video](/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code) | `pika/pika-2.5-text-to-video` | 未发布 | | [Video To Video Resize](/zh/development/comfy-router/models/moonvalley/video-to-video-resize/code) | `moonvalley/video-to-video-resize` | 未发布 | #### 每 Kling 积分费率 @@ -996,8 +996,8 @@ Comfy 的按用量计费费率按 GPU 秒计算。实际费用取决于 GPU 运 | 名称 | 模型 ID | USD | | --- | --- | ---: | | [Grok Imagine Video 1.5 Lite](/zh/development/comfy-router/models/xai/grok-imagine-video-1-5-lite/code) | `xai/grok-imagine-video-1.5-lite` | 未发布 | -| [Pika 2.5 Image To Video](/zh/development/comfy-router/models) | `pika/pika-2.5-image-to-video` | 未发布 | -| [Pika 2.5 Text To Video](/zh/development/comfy-router/models) | `pika/pika-2.5-text-to-video` | 未发布 | +| [Pika 2.5 Image To Video](/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code) | `pika/pika-2.5-image-to-video` | 未发布 | +| [Pika 2.5 Text To Video](/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code) | `pika/pika-2.5-text-to-video` | 未发布 | | [Video To Video Resize](/zh/development/comfy-router/models/moonvalley/video-to-video-resize/code) | `moonvalley/video-to-video-resize` | 未发布 | #### 每 Kling 积分费率 From 0b784e9b04e9ef3980674a41d5a1154246fb687b Mon Sep 17 00:00:00 2001 From: "Daxiong (Lin)" Date: Tue, 13 Oct 2026 17:11:35 +0800 Subject: [PATCH 6/6] i18n: fix MDX ResponseField glue and CodeRabbit nits on sync PR Unstick same-line openings in zh/ja/ko Router reference pages that broke mint broken-links. Also align CodeRabbit findings: ko providers matrix for Dreamina Seedance 2.5, Pika label/colon polish, zh Input headings and Meshy literal identifiers, ko true/false wording, and ja gpt-image-2 prompt/mask clarifications. --- .../models/openai/gpt-image-2/code.mdx | 5 ++++- .../models/pika/pika-2-5-image-to-video/code.mdx | 4 ++-- ja/development/comfy-router/reference.mdx | 3 ++- .../comfy-router/models/meshy/meshy-5/code.mdx | 2 +- .../comfy-router/models/meshy/meshy-6/code.mdx | 6 +++--- .../comfy-router/models/meshy/meshy-7-1/code.mdx | 8 ++++---- .../comfy-router/models/meshy/meshy-7/code.mdx | 2 +- .../models/veo/veo-3-1-lite-generate-001/code.mdx | 4 ++-- ko/development/comfy-router/providers.mdx | 2 +- ko/development/comfy-router/reference.mdx | 3 ++- .../comfy-router/models/meshy/meshy-5/code.mdx | 2 +- .../comfy-router/models/meshy/meshy-6/code.mdx | 14 +++++++------- .../models/openai/gpt-image-1/code.mdx | 2 +- .../models/openai/gpt-image-2-5-flare/code.mdx | 2 +- .../models/pika/pika-2-5-image-to-video/code.mdx | 4 ++-- .../models/pika/pika-2-5-text-to-video/code.mdx | 4 ++-- zh/development/comfy-router/reference.mdx | 3 ++- 17 files changed, 38 insertions(+), 32 deletions(-) diff --git a/ja/development/comfy-router/models/openai/gpt-image-2/code.mdx b/ja/development/comfy-router/models/openai/gpt-image-2/code.mdx index 8516159f08..c52eba0e3c 100644 --- a/ja/development/comfy-router/models/openai/gpt-image-2/code.mdx +++ b/ja/development/comfy-router/models/openai/gpt-image-2/code.mdx @@ -193,6 +193,9 @@ URL は認証情報なしで解決できなければなりません。Router は 1 つ目は、`POST /customers/storage` がアップロード先として署名するバケットです。展開がお使いの環境に到達するまでは、そのエンドポイントから得たアップロード URL はここで拒否されます。バケットは Comfy 自身のものでホストも同じであるにもかかわらずです。そのため「Comfy にアップロードしてから URL を渡す」方法はまだ機能せず、機能するのは `/api/assets/{id}/content` がリダイレクトする署名付き URL です。 2 つ目は、全員に対して一度にではなく、アカウントごとに有効になります。これらのホストの背後にあるバケットは当社のものではなくお客様のものであるためです。上記の切り替えがオンになっていても、サードパーティの受信メディアが有効化されていないアカウントは拒否され、ホストが未サポートだと言われるのではなく、その旨の文言で通知されます。お使いのアカウントで有効にするよう Comfy の担当者に依頼してください。これはさらに、以下のサードパーティのオブジェクトストレージホストを許可します。ここではバケットはお客様のものであり、Router はその所有権を主張しません: Cloudflare R2(`.r2.cloudflarestorage.com`、`pub-.r2.dev`)、Amazon S3(`s3.amazonaws.com` および `s3..amazonaws.com`、path-style 形式または `.` プレフィックス形式のいずれか)、Azure Blob Storage(`.blob.core.windows.net`)、Alibaba Cloud OSS(`.oss-.aliyuncs.com`、`oss-accelerate` エンドポイントを含む)。これらは特にオブジェクトストレージのエンドポイントです。同じプロバイダードメイン上の汎用エンドポイント、たとえば Alibaba Function Compute のトリガーはリストに含まれず、拒否されます。 照合されるのはプロバイダーではなくホスト名の形式です。したがって、上でプロバイダーを挙げたからといって、そのプロバイダーが発行できるすべての URL が受け入れられるわけではありません。呼び出し元がこれらのいずれかを使ってしまうのはもっともなことなので、紛らわしい 3 つのケースを明示しておきます。R2 のカスタムドメイン(`cdn.example.com`)は受け入れられません。Cloudflare は `pub-.r2.dev` をレート制限のあるデバッグ用ホスト名として文書化し、本番トラフィックはカスタムドメインに向けるよう案内していますが、カスタムドメインのホスト名には R2 であることを示す情報がないため、Router は他のホストと区別できず拒否します。`.r2.cloudflarestorage.com` エンドポイントの署名付き URL を生成するか、`pub-.r2.dev` 形式を使用してください。S3 の IPv6 dualstack エンドポイント(`s3.dualstack..amazonaws.com`)も受け入れられません。通常のリージョナルエンドポイントを使用してください。Azure Blob の代替 DNS ゾーン(`.z.blob.storage.azure.net`)も同様です。`.blob.core.windows.net` を使用してください。返される拒否メッセージにはこれらの同じ形式が記載されているので、それらを読むためにここに来る必要はありません。 +上記の `` と `pub-` というプレースホルダーは、通常アクセスする際の形式を示すものであり、階層の制限ではありません。マッチングはオブジェクトストレージのドメインサフィックスに対して行われるため、同じ名前空間の下にあるより深い名前(`a.b.pub-.r2.dev`)も受け入れられます。ただし、それによって広がるわけではないのは名前空間そのものです。サフィックスは依然として列挙されたもののいずれかでなければなりません。 +以下の例は形状のみを示しています。実際の値には署名用のクエリパラメータも含まれますが、ここでは意図的に省略しています。公開された例は仕様の中に永久に残り、実際の署名は漏えいした認証情報であると同時に、やがて機能しなくなるリンクでもあるためです。 +各画像は 25 MiB、1 つのリクエストの画像は合計 64 MiB に制限されます。 @@ -230,7 +233,7 @@ URL は認証情報なしで解決できなければなりません。Router は - `image` に対して生成する画像、または加える編集のテキスト記述。 + 生成する画像、または `image` に対して行う編集のテキスト記述。 diff --git a/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx b/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx index 4d71da9df9..6d68e3f7aa 100644 --- a/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx +++ b/ja/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx @@ -22,9 +22,9 @@ import RouterCodeFooter from "/snippets/ja/comfy-router/model-code-footer.mdx"; [Comfy ワークスペース](https://platform.comfy.org/profile/api-keys?onboarding=router)でキーを作成し、`COMFY_API_KEY` としてエクスポートします。Python と TypeScript のスニペットは Comfy SDK(`pip install comfy-sdk` と `npm install @comfyorg/sdk`)を使用します。cURL のスニペットは、同じ呼び出しを生の HTTP で行うものです。 -**Model ID:** `pika/pika-2.5-image-to-video` +**モデル ID:** `pika/pika-2.5-image-to-video` -**Endpoint:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video` +**エンドポイント:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video` diff --git a/ja/development/comfy-router/reference.mdx b/ja/development/comfy-router/reference.mdx index c14abc97c2..fd872933db 100644 --- a/ja/development/comfy-router/reference.mdx +++ b/ja/development/comfy-router/reference.mdx @@ -521,7 +521,8 @@ Comfy Router のキュー配信モードです。リクエストボディは、` ボディ: [`RouterErrorResponse`](#routererrorresponse) -- ヘッダー: `X-Comfy-Error-Type`, `X-Comfy-Request-Id` -`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" で始まります。2 つ目は、その後にチェックされるもので、リクエストがパス内のプロバイダーに対する 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` の場合は新しいキーが必要です。このルートにおける 2 つの `invalid_input` 競合はキーとはまったく関係がなく、新しいキーでもどちらも解消されません。1 つ目は、`model_provider` で別のプロバイダーを指定した場合の拒否で、リクエストボディがマルチパート操作(編集)を選択しており、このモデルに対するそのプロバイダーのトランスレーターがそれを処理できないときに発生します。その `detail` は "this request's `image` selects the edit operation" で始まります。2 つ目は、その後にチェックされるもので、リクエストがパス内のプロバイダーに対する 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` (when `concurrency_limit_exceeded`) diff --git a/ko/development/comfy-router/models/meshy/meshy-5/code.mdx b/ko/development/comfy-router/models/meshy/meshy-5/code.mdx index 0c0c62c4fb..a576498473 100644 --- a/ko/development/comfy-router/models/meshy/meshy-5/code.mdx +++ b/ko/development/comfy-router/models/meshy/meshy-5/code.mdx @@ -221,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다. geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode 참이 Ultra 패스를 요청하는 방법입니다. + 지원 중단됨. 대신 geometry_resolution을 사용하세요. true는 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다. geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode true가 Ultra 패스를 요청하는 방법입니다. #### `refine` 변형 diff --git a/ko/development/comfy-router/models/meshy/meshy-6/code.mdx b/ko/development/comfy-router/models/meshy/meshy-6/code.mdx index 31569e3a23..2209861e18 100644 --- a/ko/development/comfy-router/models/meshy/meshy-6/code.mdx +++ b/ko/development/comfy-router/models/meshy/meshy-6/code.mdx @@ -185,7 +185,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 참일 때 입력 콘텐츠에서 유해할 가능성이 있는 콘텐츠를 검사합니다. + true이면 입력 콘텐츠에서 유해할 가능성이 있는 콘텐츠를 검사합니다. @@ -221,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다. geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode 참이 Ultra 패스를 요청하는 방법입니다. + 지원 중단됨. 대신 geometry_resolution을 사용하세요. true는 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다. geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode true가 Ultra 패스를 요청하는 방법입니다. #### `refine` 변형 @@ -241,7 +241,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 참일 때 입력 콘텐츠에서 유해할 가능성이 있는 콘텐츠를 검사합니다. + true이면 입력 콘텐츠에서 유해할 가능성이 있는 콘텐츠를 검사합니다. diff --git a/ko/development/comfy-router/models/meshy/meshy-7-1/code.mdx b/ko/development/comfy-router/models/meshy/meshy-7-1/code.mdx index bf9df0045c..df67f0c428 100644 --- a/ko/development/comfy-router/models/meshy/meshy-7-1/code.mdx +++ b/ko/development/comfy-router/models/meshy/meshy-7-1/code.mdx @@ -185,7 +185,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 참일 때 입력 콘텐츠는 잠재적으로 유해한 콘텐츠가 있는지 검사됩니다. + true이면 입력 콘텐츠는 잠재적으로 유해한 콘텐츠가 있는지 검사됩니다. @@ -199,7 +199,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 리메시 단계를 활성화할지 여부를 제어합니다. 거짓이면 최고 정밀도의 삼각형 메시를 반환합니다. 기본값은 Meshy 5의 경우 참이고 Meshy 6 및 7의 경우 거짓입니다. + 리메시 단계를 활성화할지 여부를 제어합니다. false이면 최고 정밀도의 삼각형 메시를 반환합니다. 기본값은 Meshy 5의 경우 true이고 Meshy 6 및 7의 경우 false입니다. @@ -221,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다: geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode를 참으로 설정하는 것이 Ultra 패스를 요청하는 방법입니다. + 지원 중단됨. 대신 geometry_resolution을 사용하세요. true는 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다: geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode를 true로 설정하는 것이 Ultra 패스를 요청하는 방법입니다. #### `refine` 변형 @@ -241,7 +241,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7.1/requests/$REQUEST_ID \ - 참일 때 입력 콘텐츠는 잠재적으로 유해한 콘텐츠가 있는지 검사됩니다. + true이면 입력 콘텐츠는 잠재적으로 유해한 콘텐츠가 있는지 검사됩니다. diff --git a/ko/development/comfy-router/models/meshy/meshy-7/code.mdx b/ko/development/comfy-router/models/meshy/meshy-7/code.mdx index 93d4a81343..680d725587 100644 --- a/ko/development/comfy-router/models/meshy/meshy-7/code.mdx +++ b/ko/development/comfy-router/models/meshy/meshy-7/code.mdx @@ -221,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-7/requests/$REQUEST_ID \ - 지원 중단됨. 대신 geometry_resolution을 사용하세요. 참은 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다. geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode를 참으로 설정하는 것이 Ultra 패스를 요청하는 방법입니다. + 지원 중단됨. 대신 geometry_resolution을 사용하세요. true는 geometry_resolution 2k와 동일합니다. ai_model이 meshy-7, meshy-7.1 또는 latest인 경우에만 지원됩니다. 예외는 meshy-7입니다. geometry_resolution 2k는 meshy-7.1 또는 latest가 필요하므로, meshy-7에서는 ultra_mode를 true로 설정하는 것이 Ultra 패스를 요청하는 방법입니다. #### `refine` 변형 diff --git a/ko/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx b/ko/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx index 85255f53cd..bbbd73fc7f 100644 --- a/ko/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx +++ b/ko/development/comfy-router/models/veo/veo-3-1-lite-generate-001/code.mdx @@ -337,7 +337,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 더 높은 품질을 위해 프롬프트를 자동으로 개선합니다. 기본값: 참. + 더 높은 품질을 위해 프롬프트를 자동으로 개선합니다. 기본값: true. @@ -345,7 +345,7 @@ curl https://api.comfy.org/v2/models/veo/veo-3.1-lite-generate-001/requests/$REQ - 비디오와 함께 오디오를 생성할지 여부입니다. 기본값: 참. Veo 3.0+ 모델에서 지원됩니다. + 비디오와 함께 오디오를 생성할지 여부입니다. 기본값: true. Veo 3.0+ 모델에서 지원됩니다. diff --git a/ko/development/comfy-router/providers.mdx b/ko/development/comfy-router/providers.mdx index 7f46170fc4..ff6357a7cf 100644 --- a/ko/development/comfy-router/providers.mdx +++ b/ko/development/comfy-router/providers.mdx @@ -17,7 +17,7 @@ translationFrom: development/comfy-router/providers.mdx | 모델 / 공급자 | **Comfy (기본)** | **fal** | **Higgsfield** | **Pika** | **Runware** | **WaveSpeed** | | --- | --- | --- | --- | --- | --- | --- | | [Dreamina Seedance 2.0 260128](/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-0-260128/code) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| [Dreamina Seedance 2.5 260628](/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-5-260628/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | +| [Dreamina Seedance 2.5 260628](/ko/development/comfy-router/models/byteplus/dreamina-seedance-2-5-260628/code) | ✓ | ✓ | ✓ | - | ✓ | ✓ | | [GPT Image 2](/ko/development/comfy-router/models/openai/gpt-image-2/code) | ✓ | ✓ | - | ✓ | ✓ | ✓ | | [GPT Image 2.5 Flare](/ko/development/comfy-router/models/openai/gpt-image-2-5-flare/code) | ✓ | ✓ | - | - | ✓ | ✓ | | [GPT Image 2.5 Sunburst](/ko/development/comfy-router/models/openai/gpt-image-2-5-sunburst/code) | ✓ | ✓ | - | - | ✓ | ✓ | diff --git a/ko/development/comfy-router/reference.mdx b/ko/development/comfy-router/reference.mdx index c9c5baef91..7c2acc61a8 100644 --- a/ko/development/comfy-router/reference.mdx +++ b/ko/development/comfy-router/reference.mdx @@ -521,7 +521,8 @@ Comfy Router의 대기 중 전달 모드입니다. 요청 본문은 `POST /v2/mo 본문: [`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 자격 증명을 확인한 상태라면 거부되며, `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`인 경우) diff --git a/zh/development/comfy-router/models/meshy/meshy-5/code.mdx b/zh/development/comfy-router/models/meshy/meshy-5/code.mdx index bf24b00ac4..e3a59fa9a9 100644 --- a/zh/development/comfy-router/models/meshy/meshy-5/code.mdx +++ b/zh/development/comfy-router/models/meshy/meshy-5/code.mdx @@ -315,7 +315,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-5/requests/$REQUEST_ID \ - 前置使用例的数量。仅在 status 为 PENDING 时有意义。 + 前置任务的数量。仅在 status 为 PENDING 时有意义。 diff --git a/zh/development/comfy-router/models/meshy/meshy-6/code.mdx b/zh/development/comfy-router/models/meshy/meshy-6/code.mdx index 82efa74d62..91b6d284f9 100644 --- a/zh/development/comfy-router/models/meshy/meshy-6/code.mdx +++ b/zh/development/comfy-router/models/meshy/meshy-6/code.mdx @@ -169,7 +169,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 已生成网格的几何分辨率。2k 和 4k 会运行 Ultra 通道,以获得更精细的表面细节。2k 和 4k 要求 ai_model 为 meshy-7.1 或最新。 + 已生成网格的几何分辨率。2k 和 4k 会运行 Ultra 通道,以获得更精细的表面细节。2k 和 4k 要求 ai_model 为 meshy-7.1 或 latest。 可选值:`standard`、`2k`、`4k` @@ -185,7 +185,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 当为是时,输入内容将被筛查是否存在潜在有害内容。 + 当为 true 时,输入内容将被筛查是否存在潜在有害内容。 @@ -199,7 +199,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 控制是否启用重网格化阶段。当为否时,返回最高精度的三角网格。Meshy 5 默认为是,Meshy 6 和 7 默认为否。 + 控制是否启用重网格化阶段。当为 false 时,返回最高精度的三角网格。Meshy 5 默认为 true,Meshy 6 和 7 默认为 false。 @@ -221,7 +221,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 弃用。请改用 geometry_resolution;取值为是时等价于 geometry_resolution 2k。仅当 ai_model 为 meshy-7、meshy-7.1 或最新时才受支持。meshy-7 是例外:geometry_resolution 2k 要求 meshy-7.1 或最新,因此在 meshy-7 上,要请求 Ultra 通道需将 ultra_mode 设为是。 + 弃用。请改用 geometry_resolution;取值为 true 时等价于 geometry_resolution 2k。仅当 ai_model 为 meshy-7、meshy-7.1 或 latest 时才受支持。meshy-7 是例外:geometry_resolution 2k 要求 meshy-7.1 或 latest,因此在 meshy-7 上,要请求 Ultra 通道需将 ultra_mode 设为 true。 #### `refine` 变体 @@ -231,7 +231,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 除基础颜色外,还生成 PBR 贴图(金属度、粗糙度、法线)。注意,使用 Sculpture 风格时,enable_pbr 应设置为否。 + 除基础颜色外,还生成 PBR 贴图(金属度、粗糙度、法线)。注意,使用 Sculpture 风格时,enable_pbr 应设置为 false。 @@ -241,7 +241,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 当为是时,输入内容将被筛查是否存在潜在有害内容。 + 当为 true 时,输入内容将被筛查是否存在潜在有害内容。 @@ -257,7 +257,7 @@ curl https://api.comfy.org/v2/models/meshy/meshy-6/requests/$REQUEST_ID \ - 已生成纹理的纹理分辨率。可选 2k、4k 或 8k 之一。4k 和 8k 要求 ai_model 为 meshy-6、meshy-7、meshy-7.1 或最新。 + 已生成纹理的纹理分辨率。可选 2k、4k 或 8k 之一。4k 和 8k 要求 ai_model 为 meshy-6、meshy-7、meshy-7.1 或 latest。 可选值:`2k`、`4k`、`8k` diff --git a/zh/development/comfy-router/models/openai/gpt-image-1/code.mdx b/zh/development/comfy-router/models/openai/gpt-image-1/code.mdx index 2f2bf54c7d..b5028a3538 100644 --- a/zh/development/comfy-router/models/openai/gpt-image-1/code.mdx +++ b/zh/development/comfy-router/models/openai/gpt-image-1/code.mdx @@ -156,7 +156,7 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-1/requests/$REQUEST_ID \ ## Schema -### Input +### 输入 背景透明度。`auto` 让模型自行选择。 diff --git a/zh/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx b/zh/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx index 6d6f8dd068..5eebf281c9 100644 --- a/zh/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx +++ b/zh/development/comfy-router/models/openai/gpt-image-2-5-flare/code.mdx @@ -168,7 +168,7 @@ curl https://api.comfy.org/v2/models/openai/gpt-image-2.5-flare/requests/$REQUES ## Schema -### Input +### 输入 背景透明度。`auto` 表示由模型自行选择。 diff --git a/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx b/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx index 5e371eeec5..223a48e1f5 100644 --- a/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx +++ b/zh/development/comfy-router/models/pika/pika-2-5-image-to-video/code.mdx @@ -22,9 +22,9 @@ import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; 在 [你的 Comfy 工作区](https://platform.comfy.org/profile/api-keys?onboarding=router) 中创建密钥,并将其导出为 `COMFY_API_KEY`。Python 和 TypeScript 代码片段使用 Comfy SDK(`pip install comfy-sdk` 和 `npm install @comfyorg/sdk`);cURL 代码片段是通过原始 HTTP 发出的同一调用。 -**模型 ID:** `pika/pika-2.5-image-to-video` +**模型 ID:** `pika/pika-2.5-image-to-video` -**端点:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video` +**端点:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-image-to-video` diff --git a/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx b/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx index e0f6571b8c..e7a81add05 100644 --- a/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx +++ b/zh/development/comfy-router/models/pika/pika-2-5-text-to-video/code.mdx @@ -22,9 +22,9 @@ import RouterCodeFooter from "/snippets/zh/comfy-router/model-code-footer.mdx"; 在[你的 Comfy 工作区](https://platform.comfy.org/profile/api-keys?onboarding=router)中创建密钥,并将其导出为 `COMFY_API_KEY`。Python 和 TypeScript 代码片段使用 Comfy SDK(`pip install comfy-sdk` 和 `npm install @comfyorg/sdk`);cURL 代码片段是通过原始 HTTP 进行的同一调用。 -**模型 ID:** `pika/pika-2.5-text-to-video` +**模型 ID:** `pika/pika-2.5-text-to-video` -**端点:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video` +**端点:** `POST https://api.comfy.org/v2/models/pika/pika-2.5-text-to-video` diff --git a/zh/development/comfy-router/reference.mdx b/zh/development/comfy-router/reference.mdx index 1654bedf35..9fcf21b306 100644 --- a/zh/development/comfy-router/reference.mdx +++ b/zh/development/comfy-router/reference.mdx @@ -520,7 +520,8 @@ Comfy Router 的队列投递模式。请求体与 `POST /v2/models/{provider}/{m Body: [`RouterErrorResponse`](#routererrorresponse) -- Headers: `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)凭据时,其 `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` 时)