コンテンツにスキップ

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/generationsOpenAI 画像 JSON(OpenAI 画像フォーマット)
Gemini ネイティブPOST /v1beta/models/{model}:generateContentGemini の contents + generationConfig

クライアントがすでに Gemini プロトコル(Google GenAI SDK)を使い、responseModalities と imageConfig を細かく制御したい場合はネイティブ経路を、OpenAI 画像 API しか話せない場合は /v1/images/generations を使ってください。

ボディ形式、認証、エラーボディは OpenAI 画像フォーマット と同じです。RouteAPI が画像リクエストを Gemini の generateContent 呼び出しに変換します。

フィールドタイプ必須説明
modelstringはいgemini-3.1-flash-image-preview などの Gemini 画像モデル ID
promptstringはいuser ターンの単一テキスト part として送信されます
sizestringいいえgenerationConfig.imageConfig.aspectRatio にマッピングされます(下表)
nintegerいいえ1 より大きい値は generationConfig.candidateCount として送信されます。1 または省略時は何も送りません
quality、response_format、style、user、watermark—いいえこの経路では変換されず、Gemini アダプターは無視します

responseModalities は RouteAPI が ["TEXT", "IMAGE"] を自分で設定するため、このエンドポイントでは渡す必要はありません。セーフティ設定はプラットフォームの Gemini 設定から適用されます。

以下の正確な size 値だけがアスペクト比にマッピングされます。

sizeaspectRatio
256x256、512x512、1024x10241:1
1536x10243:2
1024x15362:3
1024x17929:16
1792x102416:9

: を含む値はそのままアスペクト比として渡されます。それ以外(2K や auto など)は imageConfig を一切送らず、上流のデフォルトが使われます。この経路ではピクセル寸法は指定できず、アスペクト比が唯一のサイズ制御です。

Terminal window
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}:generateContent
POST /v1beta/models/{model}:streamGenerateContent?alt=sse

例:

Terminal window
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" }
}
}'
フィールドタイプ必須説明
contentsarrayはいGemini の会話内容。少なくとも 1 要素。ロールは user と model
generationConfig.responseModalitiesarray of string実質必須IMAGE を含める必要があります。含めないとテキストのみが返ります
generationConfig.imageConfigobjectいいえ画像オプション。Gemini へそのまま渡されます。aspectRatio(1:1、3:2、16:9 など)、imageSize(1K、2K、4K など)。受け付ける値はモデルによります
generationConfig.candidateCountintegerいいえ候補数。すべての画像モデルが対応しているわけではありません
safetySettingsarrayいいえGemini のセーフティ設定。そのまま転送されます
systemInstructionobjectいいえシステム指示。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 に送られます。

ストリーミングはアクション名ではなくクエリパラメータ ?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 画像モデルはトークン単位で課金されます。生成された画像は出力トークンとして出力価格で課金され、プロンプトと参照画像は入力トークンとして課金されます。現在の料金はモデル料金とモデル詳細ページを参照してください。