Nano Banana(Gemini 画像モデル)
現在販売中の Gemini 画像モデルは gemini-3.1-flash-image-preview、gemini-3-pro-image-preview、gemini-3.1-flash-lite-image です。これらは Gemini チャネルが提供する画像生成モデルで、呼び出し経路は 2 つあります(各モデルの実際の一覧はモデルで supported_endpoint_types を確認してください)。
| 経路 | エンドポイント | 送信するボディ |
|---|---|---|
| OpenAI 画像形式 | POST /v1/images/generations | OpenAI 画像 JSON(OpenAI 画像フォーマット) |
| Gemini ネイティブ | POST /v1beta/models/{model}:generateContent | Gemini の contents + generationConfig |
クライアントがすでに Gemini プロトコル(Google GenAI SDK)を使い、responseModalities と imageConfig を細かく制御したい場合はネイティブ経路を、OpenAI 画像 API しか話せない場合は /v1/images/generations を使ってください。
/v1/images/generations 経由
Section titled “/v1/images/generations 経由”ボディ形式、認証、エラーボディは OpenAI 画像フォーマット と同じです。RouteAPI が画像リクエストを Gemini の generateContent 呼び出しに変換します。
リクエストパラメータ
Section titled “リクエストパラメータ”| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
model | string | はい | gemini-3.1-flash-image-preview などの Gemini 画像モデル ID |
prompt | string | はい | user ターンの単一テキスト part として送信されます |
size | string | いいえ | generationConfig.imageConfig.aspectRatio にマッピングされます(下表) |
n | integer | いいえ | 1 より大きい値は generationConfig.candidateCount として送信されます。1 または省略時は何も送りません |
quality、response_format、style、user、watermark | — | いいえ | この経路では変換されず、Gemini アダプターは無視します |
responseModalities は RouteAPI が ["TEXT", "IMAGE"] を自分で設定するため、このエンドポイントでは渡す必要はありません。セーフティ設定はプラットフォームの Gemini 設定から適用されます。
サイズからアスペクト比へ
Section titled “サイズからアスペクト比へ”以下の正確な size 値だけがアスペクト比にマッピングされます。
size | aspectRatio |
|---|---|
256x256、512x512、1024x1024 | 1:1 |
1536x1024 | 3:2 |
1024x1536 | 2:3 |
1024x1792 | 9:16 |
1792x1024 | 16:9 |
: を含む値はそのままアスペクト比として渡されます。それ以外(2K や auto など)は imageConfig を一切送らず、上流のデフォルトが使われます。この経路ではピクセル寸法は指定できず、アスペクト比が唯一のサイズ制御です。
リクエスト例
Section titled “リクエスト例”curl https://api.routeapi.ai/v1/images/generations \ -H "Authorization: Bearer $ROUTEAPI_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gemini-3.1-flash-image-preview", "prompt": "A nano banana wearing sunglasses, studio product shot", "size": "1536x1024" }'レスポンスは OpenAI の画像オブジェクトに変換されます。残るのはインライン画像 part のみで、モデルが返したテキストは破棄されます。
{ "created": 1740000000, "data": [ { "b64_json": "iVBORw0KGgoAAAANSUhEUgAA..." } ]}この経路では URL は生成されません。常に data[].b64_json を読んでください。画像 part が含まれないレスポンスは 500 で失敗し、Gemini がプロンプトをブロックした場合は 400 で失敗します(ブロック理由はリクエストに記録されます)。
generateContent によるネイティブ呼び出し
Section titled “generateContent によるネイティブ呼び出し”POST /v1beta/models/{model}:generateContentPOST /v1beta/models/{model}:streamGenerateContent?alt=sse例:
curl https://api.routeapi.ai/v1beta/models/gemini-3-pro-image-preview:generateContent \ -H "x-goog-api-key: $ROUTEAPI_KEY" \ -H "Content-Type: application/json" \ -d '{ "contents": [ { "role": "user", "parts": [{ "text": "Draw a cat astronaut on the moon" }] } ], "generationConfig": { "responseModalities": ["TEXT", "IMAGE"], "imageConfig": { "aspectRatio": "16:9", "imageSize": "2K" } } }'リクエストフィールド
Section titled “リクエストフィールド”| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
contents | array | はい | Gemini の会話内容。少なくとも 1 要素。ロールは user と model |
generationConfig.responseModalities | array of string | 実質必須 | IMAGE を含める必要があります。含めないとテキストのみが返ります |
generationConfig.imageConfig | object | いいえ | 画像オプション。Gemini へそのまま渡されます。aspectRatio(1:1、3:2、16:9 など)、imageSize(1K、2K、4K など)。受け付ける値はモデルによります |
generationConfig.candidateCount | integer | いいえ | 候補数。すべての画像モデルが対応しているわけではありません |
safetySettings | array | いいえ | Gemini のセーフティ設定。そのまま転送されます |
systemInstruction | object | いいえ | システム指示。snake_case の system_instruction も受け付けます |
generationConfig のフィールドは camelCase と snake_case の両方を受け付けます(responseModalities / response_modalities、imageConfig / image_config など)。両方ある場合は snake_case が優先されます。imageConfig とその中身は検証されずにそのまま渡されるため、未対応の imageSize は RouteAPI ではなく Gemini がエラーを返します。
画像を編集・参照するには、テキストの隣にインライン画像 part を追加します。
{ "contents": [ { "role": "user", "parts": [ { "text": "Repaint this photo as a watercolor illustration" }, { "inlineData": { "mimeType": "image/png", "data": "iVBORw0KGgoAAAANSUhEUgAA..." } } ] } ], "generationConfig": { "responseModalities": ["TEXT", "IMAGE"] }}inlineData は Base64 の画像バイト列を運び、Gemini へそのまま転送されます。Google にアップロード済みのファイルはネイティブの fileData.fileUri part も利用でき、これも転送対象です。クライアントが OpenAI チャット形式を使う場合、image_url コンテンツ part はサーバー側でダウンロードされ、インライン part に変換されてから Gemini に送られます。
ストリーミング
Section titled “ストリーミング”ストリーミングはアクション名ではなくクエリパラメータ ?alt=sse で決まります。付けると上流のアクションが streamGenerateContent になり、レスポンスは Gemini の server-sent events ストリームになります。各チャンクは標準の candidates[].content.parts 構造です。画像を逐次受け取りたい場合に使います。そうでなければ :generateContent が 1 つのボディで全体を返します。
ネイティブ経路は Gemini のレスポンス構造をそのまま返します。
{ "candidates": [ { "content": { "role": "model", "parts": [ { "text": "Here is the image." }, { "inlineData": { "mimeType": "image/png", "data": "iVBORw0KGgoAAAANSUhEUgAA..." } } ] }, "finishReason": "STOP" } ], "usageMetadata": { "promptTokenCount": 12, "candidatesTokenCount": 1120, "totalTokenCount": 1132 }}画像は parts[].inlineData から読み取ります。通常はテキスト part が併存します。Gemini がリクエストをブロックした場合、promptFeedback.blockReason が設定され candidates は空になります。
Gemini 画像モデルはトークン単位で課金されます。生成された画像は出力トークンとして出力価格で課金され、プロンプトと参照画像は入力トークンとして課金されます。現在の料金はモデル料金とモデル詳細ページを参照してください。
次のステップ
Section titled “次のステップ”- OpenAI 画像フォーマット — 共通の
/v1/imagesボディ形式と編集の挙動。 - Seedream — ByteDance Seedream のサイズと編集の意味。
- モデル — 画像モデルを探し、
image-generation対応を確認します。 - モデル料金 — トークン課金と 1 枚あたり課金。