クイックスタート
お使いの Comfy ワークスペースでキーを作成し、COMFY_API_KEY としてエクスポートします。Python、TypeScript、Swift のスニペットは Comfy SDK(pip install comfy-sdk、npm install @comfyorg/sdk、および ComfySwiftSDK Swift パッケージ)を使用しています。cURL のスニペットは、同じ呼び出しを生の HTTP で行うものです。
モデル ID: vertexai/gemini-3-pro-image
エンドポイント: POST https://api.comfy.org/v2/models/vertexai/gemini-3-pro-image
- 結果を待つ
- キューに登録して後で収集
提供プロバイダー
このモデルは、リクエストで別のプロバイダーを指定しない限り、Comfy Router が直接提供します。以下のプロバイダーも、同じエンドポイントと同じモデル ID でこのモデルを提供しており、model_provider クエリパラメータで選択します。
- 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 - 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
strict_mode のデフォルトは false であるため、Router はこのページで説明されているネイティブのリクエストボディをプロバイダー独自のスキーマに変換し、レスポンスを元に戻す変換を行います。API リファレンスの model_provider、strict_mode、fallback_provider と、この方法でルーティングされるすべてのモデルについては提供プロバイダーを参照してください。
スキーマ
入力
object[]
必須
モデルとの現在の会話のコンテンツ。単一ターンのクエリでは単一のインスタンスとなります。マルチターンのクエリでは、会話履歴と最新のリクエストを含む繰り返しフィールドとなります。
object[]
必須
object
URI ベースのデータ。
string
URI
string
data フィールドまたは fileUri フィールドで指定されたファイルのメディアタイプ。指定できる値は以下のとおりです。gemini-2.0-flash-lite および gemini-2.0-flash では、オーディオファイルの最大長は 8.4 時間、ビデオファイル(音声なし)の最大長は 1 時間です。詳細については、Gemini のオーディオとビデオの要件を参照してください。テキストファイルは UTF-8 でエンコードされている必要があります。テキストファイルの内容はトークン上限にカウントされます。画像の解像度に制限はありません。指定可能な値:
application/pdf、audio/mpeg、audio/mp3、audio/wav、image/png、image/jpeg、image/webp、text/plain、video/mov、video/mpeg、video/mp4、video/mpg、video/avi、video/wmv、video/mpegps、video/flv、image/heic、image/heif、audio/flac、video/webmobject
生のバイト形式のインラインデータ。gemini-2.0-flash-lite および gemini-2.0-flash では、inlineData を使用して最大 3000 枚の画像を指定できます。
string (byte)
プロンプトにインラインで含める画像、PDF、またはビデオの base64 エンコーディング。メディアをインラインで含める場合は、データのメディアタイプ(mimeType)も指定する必要があります。サイズ制限: 20MB形式:
bytestring
data フィールドまたは fileUri フィールドで指定されたファイルのメディアタイプ。指定できる値は以下のとおりです。gemini-2.0-flash-lite および gemini-2.0-flash では、オーディオファイルの最大長は 8.4 時間、ビデオファイル(音声なし)の最大長は 1 時間です。詳細については、Gemini のオーディオとビデオの要件を参照してください。テキストファイルは UTF-8 でエンコードされている必要があります。テキストファイルの内容はトークン上限にカウントされます。画像の解像度に制限はありません。指定可能な値:
application/pdf、audio/mpeg、audio/mp3、audio/wav、image/png、image/jpeg、image/webp、text/plain、video/mov、video/mpeg、video/mp4、video/mpg、video/avi、video/wmv、video/mpegps、video/flv、image/heic、image/heif、audio/flac、video/webmstring
モデルがこのパートのビデオを読み取る方法。固定レートのフレームサンプリングではなく、モデルに検査するセグメントを判断させるには “AGENTIC” を設定します。デフォルトの固定レートサンプリングを使用する場合は省略します。gemini-3.7-flash 以降の Flash モデルでサポートされています。
string
テキストプロンプトまたはコードスニペット。
boolean
このパートがモデルからの思考/推論ステップであることを示します。
string
指定可能な値:
user、modelobject
生成のためのサンプリング、長さ、出力の設定。すべてのフィールドはオプションです。以下で
default を宣言しているフィールドは省略時にそれが適用され、それ以外はモデル自身の動作に従います。object
画像生成の設定
string
生成される画像のアスペクト比
object
オプション。生成される画像の画像出力形式。
integer
オプション。出力画像の圧縮品質。
string
オプション。出力を保存する画像形式。
string
オプション。生成される画像のサイズを指定します。サポートされる値は 1K、2K、4K です。指定しない場合、モデルはデフォルト値の 1K を使用します。
integer
レスポンスで生成できるトークンの最大数。トークンはおよそ 4 文字に相当します。100 トークンはおおよそ 60~80 語に相当します。範囲:
16 ~ 65536`TEXT`, `IMAGE`[]
integer
seed を特定の値に固定すると、モデルは繰り返しのリクエストに対して同じレスポンスを返すよう最善を尽くします。決定論的な出力は保証されません。また、モデルや temperature などのパラメータ設定を変更すると、同じ seed 値を使用してもレスポンスが変化する可能性があります。デフォルトではランダムな seed 値が使用されます。以下のモデルで利用できます: gemini-2.5-flash、gemini-2.5-pro、gemini-2.5-flash-preview-04-1、gemini-2.5-pro-preview-05-0、gemini-2.0-flash-lite-00、gemini-2.0-flash-001
string[]
number
デフォルト:"1"
temperature はレスポンス生成中のサンプリングに使用され、これは topP と topK が適用されるときに実行されます。temperature はトークン選択におけるランダム性の度合いを制御します。低い temperature は、より限定された、あるいは創造性の低いレスポンスが求められるプロンプトに適しており、高い temperature はより多様または創造的な結果につながる可能性があります。temperature が 0 の場合、最も確率の高いトークンが常に選択されることを意味します。この場合、特定のプロンプトに対するレスポンスはほぼ決定的ですが、わずかなばらつきが生じる可能性はあります。モデルが返すレスポンスが一般的すぎる、短すぎる、またはモデルがフォールバックレスポンスを返す場合は、temperature を上げてみてください範囲:
0 から 2形式: floatobject
省略可能。thinking 機能の設定です。thinking とは、モデルが複雑なタスクを小さなステップに分解し、より高品質なレスポンスを生成するプロセスです。
boolean
省略可能。true の場合、モデルは自身の思考をレスポンスに含めます。
integer
省略可能。モデルの thinking プロセスのトークン予算。モデルはこの予算内に収まるよう最善を尽くします。
string
省略可能。モデルの thinking レベル。指定可能な値:
THINKING_LEVEL_UNSPECIFIED、LOW、MEDIUM、HIGH、MINIMALinteger
デフォルト:"40"
Top-K は、モデルが出力のためにトークンを選択する方法を変更します。Top-K が 1 の場合、次に選択されるトークンはモデルの語彙内のすべてのトークンの中で最も確率が高いものになります。Top-K が 3 の場合、次のトークンは最も確率の高い 3 つのトークンの中から temperature を用いて選択されます。範囲:
1 から …number
デフォルト:"0.95"
指定した場合、nucleus サンプリングが使用されます。
Top-P は、モデルが出力のためにトークンを選択する方法を変更します。トークンは、それらの確率の合計が top-P の値に等しくなるまで、最も確率の高いもの(top-K を参照)から低いものへと選択されます。たとえば、トークン A、B、C の確率がそれぞれ 0.3、0.2、0.1 で、top-P の値が 0.5 の場合、モデルは temperature を用いて A または B のいずれかを次のトークンとして選択し、C は候補から除外されます。
ランダム性の低いレスポンスには低い値を、ランダム性の高いレスポンスには高い値を指定します。範囲:
0 から 1形式: floatobject[]
安全でないコンテンツをブロックするためのリクエストごとの設定。GenerateContentResponse.candidates に適用されます。
string
必須
指定可能な値:
HARM_CATEGORY_SEXUALLY_EXPLICIT、HARM_CATEGORY_HATE_SPEECH、HARM_CATEGORY_HARASSMENT、HARM_CATEGORY_DANGEROUS_CONTENTstring
必須
指定可能な値:
OFF、BLOCK_NONE、BLOCK_LOW_AND_ABOVE、BLOCK_MEDIUM_AND_ABOVE、BLOCK_ONLY_HIGHobject
モデルをより良いパフォーマンスへ導くための指示。たとえば、「できるだけ簡潔に回答してください」や「回答に専門用語を使わないでください」などです。テキスト文字列はトークン上限にカウントされます。systemInstruction の role フィールドは無視され、モデルのパフォーマンスには影響しません。注: parts にはテキストのみを使用し、各 part の content は別々の段落にしてください。
object[]
必須
1 つのメッセージを構成する順序付けられた part のリスト。part ごとに異なる IANA MIME タイプを持つ場合があります。最大トークン数や画像数などの入力の制限については、Google のモデルページにあるモデル仕様を参照してください。
string
テキストプロンプトまたはコードスニペット。
string
メッセージを作成するエンティティの識別情報。次の値がサポートされています: user: メッセージが実在の人物によって送信されたことを示します。通常はユーザーが生成したメッセージです。model: メッセージがモデルによって生成されたことを示します。model の値は、マルチターン会話中にモデルからのメッセージを会話に挿入するために使用されます。マルチターンでない会話では、このフィールドは空のままにするか、未設定にできます。指定可能な値:
user、modelobject[]
システムがモデルの知識と範囲外のアクションを実行するために、外部システムと連携できるようにするコード。Function calling を参照してください。
object[]
string
string
必須
object
関数パラメータの JSON スキーマ
boolean
true の場合、生成済みの画像はクラウドストレージにアップロードされ、インラインの base64 データではなく署名付き URL として返されます。URL は 24 時間後に失効します。
object
ビデオ入力の場合、ビデオの開始オフセットと終了オフセットを Duration 形式で指定します。たとえば、1:00 から始まる 10 秒のクリップを指定するには、“startOffset”: { “seconds”: 60 } と “endOffset”: { “seconds”: 70 } を設定します。メタデータは、ビデオデータが inlineData または fileData で提供されている場合にのみ指定してください。
object
ビデオタイムライン上の位置に対する再生時間のオフセットを表します。
integer
ナノ秒解像度での秒の小数部(符号付き)。小数部を持つ負の秒の値であっても、nanos の値は非負でなければなりません。範囲:
0 から 999999999integer
期間の秒数(符号付き)。-315,576,000,000 から +315,576,000,000 まで(両端を含む)でなければなりません。範囲:
-315576000000 から 315576000000object
ビデオタイムライン上の位置に対する再生時間のオフセットを表します。
integer
ナノ秒解像度での秒の小数部(符号付き)。小数部を持つ負の秒の値であっても、nanos の値は非負でなければなりません。範囲:
0 から 999999999integer
期間の秒数(符号付き)。-315,576,000,000 から +315,576,000,000 まで(両端を含む)でなければなりません。範囲:
-315576000000 から 315576000000GET /v2/models/vertexai/gemini-3-pro-image/openapi.json で提供するスキーマから生成されています。これは、リクエストがプロバイダーに到達する前に呼び出しを検証する対象となるドキュメントと同じものです。
出力
object[]
object
object[]
string[]
integer
string
string (date)
フォーマット:
dateinteger
string
string
object
モデルとの現在の会話のコンテンツです。単一ターンのクエリでは、これは単一のインスタンスです。マルチターンのクエリでは、これは会話履歴と最新のリクエストを含む繰り返しフィールドです。
object[]
必須
object
URI ベースのデータ。
string
URI
string
data フィールドまたは fileUri フィールドで指定されたファイルのメディアタイプです。許容される値は以下のとおりです。gemini-2.0-flash-lite および gemini-2.0-flash では、オーディオファイルの最大長は 8.4 時間、ビデオファイル(音声なし)の最大長は 1 時間です。詳細については、Gemini のオーディオとビデオの要件を参照してください。テキストファイルは UTF-8 でエンコードする必要があります。テキストファイルのコンテンツはトークン制限にカウントされます。画像の解像度に制限はありません。指定可能な値:
application/pdf、audio/mpeg、audio/mp3、audio/wav、image/png、image/jpeg、image/webp、text/plain、video/mov、video/mpeg、video/mp4、video/mpg、video/avi、video/wmv、video/mpegps、video/flv、image/heic、image/heif、audio/flac、video/webmobject
生バイトのインラインデータです。gemini-2.0-flash-lite および gemini-2.0-flash では、inlineData を使用して最大 3000 枚の画像を指定できます。
string (byte)
プロンプトにインラインで含める画像、PDF、またはビデオの base64 エンコードです。メディアをインラインで含める場合は、データのメディアタイプ(mimeType)も指定する必要があります。サイズ制限: 20MBフォーマット:
bytestring
data フィールドまたは fileUri フィールドで指定されたファイルのメディアタイプです。許容される値は以下のとおりです。gemini-2.0-flash-lite および gemini-2.0-flash では、オーディオファイルの最大長は 8.4 時間、ビデオファイル(音声なし)の最大長は 1 時間です。詳細については、Gemini のオーディオとビデオの要件を参照してください。テキストファイルは UTF-8 でエンコードする必要があります。テキストファイルのコンテンツはトークン制限にカウントされます。画像の解像度に制限はありません。指定可能な値:
application/pdf、audio/mpeg、audio/mp3、audio/wav、image/png、image/jpeg、image/webp、text/plain、video/mov、video/mpeg、video/mp4、video/mpg、video/avi、video/wmv、video/mpegps、video/flv、image/heic、image/heif、audio/flac、video/webmstring
モデルがこのパートのビデオをどのように読み取るかです。固定レートのフレームサンプリングではなく、検査するセグメントをモデルに決定させるには “AGENTIC” を設定します。デフォルトの固定レートサンプリングを使用する場合は省略します。gemini-3.7-flash 以降の Flash モデルでサポートされています。
string
テキストプロンプトまたはコードスニペット。
boolean
このパートがモデルからの思考/推論ステップであることを示します。
string
指定可能な値:
user、modelstring
object[]
string
指定可能な値:
HARM_CATEGORY_SEXUALLY_EXPLICIT、HARM_CATEGORY_HATE_SPEECH、HARM_CATEGORY_HARASSMENT、HARM_CATEGORY_DANGEROUS_CONTENTstring
コンテンツが指定された安全性カテゴリに違反する確率指定可能な値:
NEGLIGIBLE、LOW、MEDIUM、HIGH、UNKNOWNstring
レスポンスが作成されたタイムスタンプ。
string
レスポンスの生成に使用されたモデルのバージョン。
object
string
string
object[]
string
指定可能な値:
HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_DANGEROUS_CONTENTstring
コンテンツが指定された安全性カテゴリに違反する確率指定可能な値:
NEGLIGIBLE, LOW, MEDIUM, HIGH, UNKNOWNstring
レスポンスの一意の識別子。
object
integer
出力専用。入力内のキャッシュされた部分 (キャッシュされたコンテンツ) のトークン数。
integer
レスポンス内のトークン数。
object[]
モダリティ別の候補トークンの内訳。
string
入力または出力コンテンツのモダリティの種類。指定可能な値:
MODALITY_UNSPECIFIED, TEXT, IMAGE, VIDEO, AUDIO, DOCUMENTinteger
指定されたモダリティのトークン数。
integer
リクエスト内のトークン数。cachedContent が設定されている場合でも、これは有効なプロンプトの合計サイズであり、キャッシュされたコンテンツ内のトークン数も含まれます。
object[]
モダリティ別のプロンプトトークンの内訳。
string
入力または出力コンテンツのモダリティの種類。指定可能な値:
MODALITY_UNSPECIFIED, TEXT, IMAGE, VIDEO, AUDIO, DOCUMENTinteger
指定されたモダリティのトークン数。
integer
thoughts 出力に含まれるトークン数。
integer
ツール使用プロンプトに含まれるトークン数。
object[]
モダリティ別のツール使用プロンプトトークンの内訳。
string
入力または出力コンテンツのモダリティの種類。指定可能な値:
MODALITY_UNSPECIFIED, TEXT, IMAGE, VIDEO, AUDIO, DOCUMENTinteger
指定されたモダリティのトークン数。
integer
トークンの合計数 (プロンプト + 候補)。
string
リクエストに使用されたトラフィックタイプ (例: PROVISIONED_THROUGHPUT)。
例
入力
出力
parts の読み取り
デフォルトでは、生成された画像の part には、base64 バイト列がinlineData.data に、メディアタイプが inlineData.mimeType に含まれます。バイト列をデコードしてファイルに保存してください。uploadImagesToStorage: true の場合、アップロードされた画像は代わりに、署名付き URL に fileData.fileUri を、メディアタイプに fileData.mimeType を使用します。これらの画像は、URL が失効する前にダウンロードしてください。URL は作成から 24 時間後に失効します。
fileData は、それを要求していないレスポンスにも現れることがあります。 この 2 つの形はレスポンス単位ではなく part 単位です。uploadImagesToStorage: true が設定されている場合、アップロードに失敗した画像は inlineData のまま残るため、1 つのレスポンスに両方が混在することがあります。要求した内容ではなく、どのキーが存在するかで分岐してください。逆のケースは起こりません。フィールドが未設定または false の場合、生成されたすべての画像は inlineData として返り、fileData の画像 part は生成されません。テキストの part も現れることがあり、画像が最初の part であるとも限らないため、インデックスではなく必要なフィールドで part を選択してください。上記のクイックスタートのサンプルにある candidates[0].content.parts[0].inlineData.data というパスは、このページのサンプルレスポンスにある唯一の inline part を読み取るものです。実際のレスポンスに対しては、位置 0 をインデックス指定するのではなく、parts を走査して目的のキーを探してください。
thoughtSignature も part のフィールドで、しかもサイズが大きくなります。 part は thoughtSignature を持つことがあります。これはモデルの推論を表す不透明な base64 署名で、後続のリクエストでその思考を再生できるようにするために存在します。上記の生成スキーマには含まれていません。このスキーマは Router が公開しているリクエスト/レスポンスのドキュメントに従ったものです。実際のレスポンスで計測すると、part あたりおよそ 1〜2 MB で、画像本体と同程度です。そのため、レスポンスをログに記録したり、サーバーレス関数を介して転送したり、保存したりする場合は、その分の容量を見込むか、明示的に破棄することを検討してください。
imageSize は幅ではなくクラス
generationConfig.imageConfig.imageSize は 1K、2K、4K のいずれかを取り、段階が上がるごとに幅を設定するのではなく両辺が 2 倍になります。16:9 のリクエストを計測すると、1K では 1376x768 で約 1.35 MB、2K では 2752x1536 で約 5.6 MB でした。同じアスペクト比で、ピクセル数は 4 倍、バイト数もおよそ 4 倍です。したがって 2K は幅 2048 ピクセルの画像を意味するものではありません。2K を幅であるかのように扱ってアップロード経路、レスポンスボディの上限、ストレージバケットのサイズを見積もると、約 4 倍の不足が生じます。
参照チェーン
生成済みの画像をそのまま入力し直すと、同じ被写体を別のカメラアングルで捉えた画像が得られます。そのため、1 つのシーンの一連のショットは、すべてを一度に記述しなければならない 1 つのプロンプトではなく、呼び出しのチェーンになります。アーキテクチャ、素材、ライティングはチェーンを通じて維持されることがよくありますが、モデルがそれを保証するわけではありません。連続性は、信頼できる性質ではなく、確認すべき可能性の高い結果として扱ってください。 画像は、前のレスポンスで使われた形のまま送り返してください。inlineData の part の場合は、inlineData.data から base64 バイト列を取り出し、それをそのまま inlineData として送信します(以下を参照)。uploadImagesToStorage: true で fileData として返ってきた part の場合は、署名付き URL がまだ有効なうちに、その fileData.fileUri と fileData.mimeType を fileData part として送信してください。バイト列を inlineData として再アップロードする方法も機能し、失効しません。そのうえで、希望する変更を指示します。
2K の画像は 1K のおよそ 4 倍のバイト数になります。
出荷前の確認
SDK はIdempotency-Key を生成し、自動リトライで再利用します。手動リトライでは元のキーを再利用してください。Router は最大 10 分間接続を保持できます。
リクエストが失敗すると、Router は理由を説明する X-Comfy-Error-Type レスポンスヘッダーを送信します。422 は、プロバイダーを呼び出す前に Router が入力を拒否したことを意味し、413 はリクエスト本文が Router の受け入れ可能なサイズを超えていたことを意味します。生成されたアセットは 結果 URL の有効期限 があるため、早めにダウンロードしてください。
上記のフィールド説明に記載されているサイズ制限は、プロバイダーの仕様から引用した、そのフィールドに対するプロバイダー自身の上限です。Router はリクエスト本文全体に対して別の上限を適用し、base64 エンコードされたメディアもこれにカウントされます。リクエスト本文のサイズ を参照してください。
このページは、Comfy Router 経由で呼び出す 1 つのパートナーモデルについて説明しています。同じ comfy-sdk / @comfyorg/sdk パッケージには、Comfy Cloud 上で ComfyUI のワークフローグラフ全体を実行するための 2 つ目のクライアントも含まれています: Comfy(api_key=...) / new Comfy({ apiKey })、および client.workflows、client.assets、client.jobs。Comfy SDKs を参照してください。
ヘッダー
認証、冪等性、リクエスト ID、エラー分類、リトライ間隔、支出上限。
Router API の利用
モデルの検出、バリデーションエラー、リトライ、課金。
制限事項
Router が現在対応していないことと、代替手段。