Nano Banana 2 (Gemini 3.1 Flash Image)
Nano Banana 2 の画像生成・画像編集を、Google の generateContent リクエストボディを使った単一の非同期エンドポイントで行います。最大 4K 出力、参照画像は最大 14 枚。
Nano Banana 2 は Google の Gemini 3.1 Flash Image モデルです。Google の generateContent リクエストボディに model フィールドを加えて送信し、返されたタスク ID を保持して、そのタスクを照会して完成した画像を取得します。参照画像は contents 内に fileData の URL として渡します。
モデル ID
| モデル ID | チャネル | 課金方式 |
|---|---|---|
gemini-3.1-flash-image | Standard | 納品した画像 1 枚ごとの固定料金 |
gemini-3.1-flash-image-official | Official | 入力、テキスト/思考の出力、画像出力それぞれのトークン単価 |
どちらの ID も同じパラメータを受け付けます。現在の価格はモデルページを参照してください。
クイックサンプル
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image",
"contents": [{"parts": [{"text": "A ceramic teapot on a linen tablecloth, soft window light"}]}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
}
}'エンドポイント
POST https://api.seedrouter.ai/v1/images/generations| ヘッダー | 値 |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
ボディは Google の generateContent リクエストに model を 1 つ追加したものです。このエンドポイントはパスにモデルを含まないためです。レスポンスに含まれるのはタスク ID であり、完成した画像ではありません。API キーはサーバー側のコードに保管してください。/v1beta/models/...:generateContent を直接呼び出すことはできません。このエンドポイントを使用してください。
パラメータ
| 名前 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
model | string | はい | — | 上記 2 つのモデル ID のいずれか。 |
contents | Content[] | はい | — | 1〜32 ターン。各ターンは parts と任意の role(user または model)を持ち、最後のターンは user です。 |
contents[].parts[].text | string | — | — | テキストパート。テキストパートが少なくとも 1 つ必要です。 |
contents[].parts[].fileData | object | いいえ | — | {"mimeType": "...", "fileUri": "https://..."}。画像・動画・PDF の参照。合計で最大 14 個。 |
systemInstruction | object | いいえ | — | {"parts": [{"text": "..."}]}。 |
safetySettings | object[] | いいえ | — | {"category", "threshold"} の組。下記を参照してください。 |
generationConfig.responseModalities | enum[] | いいえ | テキストと画像 | 画像のみなら ["IMAGE"]、または ["TEXT", "IMAGE"]。 |
generationConfig.imageConfig.aspectRatio | enum | いいえ | 入力画像の比率、なければ 1:1 | 1:1、1:4、4:1、1:8、8:1、2:3、3:2、3:4、4:3、4:5、5:4、9:16、16:9、21:9。 |
generationConfig.imageConfig.imageSize | enum | いいえ | 1K | 512、1K、2K、4K。K は大文字です。 |
generationConfig.candidateCount | integer | いいえ | 1 | 1 のみ。1 リクエストで返る画像は 1 枚です。 |
generationConfig.temperature | number | いいえ | モデルの既定値 | 0〜2。 |
generationConfig.topP | number | いいえ | モデルの既定値 | 0〜1。 |
generationConfig.topK | integer | いいえ | モデルの既定値 | 1 以上。 |
generationConfig.seed | integer | いいえ | — | 32 ビット整数。 |
generationConfig.maxOutputTokens | integer | いいえ | モデルの既定値 | 1〜32,768。 |
generationConfig.stopSequences | string[] | いいえ | — | 最大 5 個。 |
generationConfig.mediaResolution | enum | いいえ | モデルの既定値 | MEDIA_RESOLUTION_LOW、MEDIA_RESOLUTION_MEDIUM、MEDIA_RESOLUTION_HIGH。入力メディアが使うトークン数を設定します。 |
generationConfig.thinkingConfig.includeThoughts | boolean | いいえ | false | モデルの思考の要約を output.thoughts として返します。 |
generationConfig.responseFormat.image | object | いいえ | — | mimeType:IMAGE_JPEG、delivery:INLINE、aspectRatio と imageSize は Google の列挙値(例:ASPECT_RATIO_SIXTEEN_BY_NINE、IMAGE_SIZE_TWO_K)で指定し、選べる比率とサイズは imageConfig と同じです。 |
セーフティのカテゴリ:HARM_CATEGORY_HARASSMENT、HARM_CATEGORY_HATE_SPEECH、HARM_CATEGORY_SEXUALLY_EXPLICIT、HARM_CATEGORY_DANGEROUS_CONTENT。しきい値:BLOCK_NONE、BLOCK_ONLY_HIGH、BLOCK_MEDIUM_AND_ABOVE、BLOCK_LOW_AND_ABOVE、OFF。
未知のフィールドは拒否されます。未対応の機能:Google 検索によるグラウンディング(tools)とキャッシュされたコンテンツ。このモデルでは thinkingLevel は文書化されていません。inlineData は受け付けないため、メディアは fileData の URL で渡してください。responseFormat.image.delivery は INLINE のみを受け付けます。完成した画像は常にホストされた URL として返されます。
出力サイズ
imageSize | 1:1 の出力 | 画像トークン |
|---|---|---|
512 | 512×512 | 747 |
1K | 1024×1024 | 1,120 |
2K | 2048×2048 | 1,680 |
4K | 4096×4096 | 2,520 |
他のアスペクト比でもトークン数は変わりません。例えば 1K の 16:9 は 1376×768 です。
モード
モードを指定するパラメータも、専用の編集エンドポイントもありません。
| 操作 | パラメータ |
|---|---|
| テキストから画像 | テキストパート |
| 編集・合成 | テキストパート + 1 つ以上の fileData パート |
| マルチターン編集 | 過去の user と model のターン、続けて新しい user ターン(下記の注記を参照) |
会話を続けるには、前のタスクの output.parts から model ターンを順番どおりに組み立て直します。テキストパートは {"text": ..., "thoughtSignature": ...}、画像パートは {"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...} になります。各 thoughtSignature は返されたとおりに保持してください。これはこちらで保存した署名の URL で(4K 画像の署名は数 MB になります)、リクエストがモデルに届く前に元の署名に戻します。受け付けるのは、ご自身のタスク結果に含まれる署名だけです。
参照画像を使って編集する
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image",
"contents": [{
"role": "user",
"parts": [
{"text": "Turn this photo into a watercolor painting. Keep the composition."},
{"fileData": {"mimeType": "image/jpeg", "fileUri": "https://example.com/photo.jpg"}}
]
}]
}'例の URL は、ご自身のアクセス可能な画像に置き換えてください。
メディア入力
この API は URL 参照のみを受け付けます。base64 の inlineData、data: URL、multipart アップロードは受け付けません。Playground は選択されたファイルをストレージにアップロードしてから、その URL を送信します。
参照は公開 HTTP(S) URL で、1 ファイル 50 MB 未満、合計 100 MB 未満である必要があります。対応形式は画像(image/png、image/jpeg、image/webp、image/heic、image/heif)、動画(video/mp4、video/mpeg、video/mov、video/avi、video/x-flv、video/mpg、video/webm、video/wmv、video/3gpp)、PDF ドキュメント(application/pdf)です。mimeType はファイルと一致している必要があります。URL は処理中に取得されます。アクセスできない画像はタスクの失敗となり、失敗したタスクは課金されません。
課金に影響する要素
現在のレートはモデルの料金セクションで確認してください。gemini-3.1-flash-image は、サイズやプロンプトにかかわらず、納品した画像 1 枚ごとの固定料金です。gemini-3.1-flash-image-official は使用量に応じた課金で、入力トークン(テキストと参照画像)、テキストと思考の出力トークン、画像出力トークンにそれぞれのレートが適用されます。主な要因は画像サイズです。上の表を参照してください。
最終的な課金額はアカウントの使用履歴で確認してください。失敗したタスクは課金されません。
出力スキーマ
送信するとタスクの参照が返ります:
{
"id": "task_...",
"model": "gemini-3.1-flash-image",
"status": "processing",
"created_at": 1790310979
}タスクをポーリングする
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"status が completed または failed になるまで、数秒ごとにポーリングしてください。ポーリング中のネットワークタイムアウトは生成の失敗を意味しません。タスク ID を保持して確認を再開してください。進捗確認のために別のタスクを作成しないでください。
ポーリングの完全な例
上記の Python 送信例のあとに実行してください。
import time
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "completed":
for image in task["output"]["data"]:
print(image["url"])
break
if task["status"] == "failed":
raise RuntimeError(task["error"]["message"])
time.sleep(3)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")完了したタスク
{
"id": "task_...",
"model": "gemini-3.1-flash-image",
"status": "completed",
"created_at": 1790310979,
"finished_at": 1790311001,
"output": {
"created": 1790310999,
"data": [{"url": "https://static.seedrouter.ai/media/tasks/task_example/0.jpg"}],
"output_format": "jpeg",
"usage": {
"input_tokens": 27,
"output_tokens": 1525,
"total_tokens": 1552,
"output_tokens_details": {"image_tokens": 1120, "text_tokens": 405, "reasoning_tokens": 0}
}
}
}| フィールド | 意味 |
|---|---|
id | 以降の照会のためにこの ID を保持してください。 |
status | processing、completed、failed のいずれか。 |
created_at、finished_at | 秒単位の Unix タイムスタンプ。 |
output.data[].url | 生成された画像の URL。 |
output.text | responseModalities に TEXT が含まれる場合に、画像と一緒に返されるテキスト。思考は含まれません。 |
output.thoughts | includeThoughts が true の場合の、モデルの思考の要約。思考中にモデルが描く途中の画像は納品されません。 |
output.output_format | 実際の画像フォーマット。 |
output.parts | マルチターン編集用の、順番どおりの最終レスポンスパート:{"text", "thoughtSignature"} または {"image": <index into data>, "thoughtSignature"}。thoughtSignature は URL なので、そのまま送り返してください。 |
output.usage | トークン使用量。output_tokens はテキスト・思考・画像の出力を数え、output_tokens_details.image_tokens はそのうちの画像部分です。 |
error | 失敗したタスクの構造化エラー。 |
ストリーミング(streamGenerateContent)には対応していません。結果はタスクを通じて納品されます。
エラー
タスク作成前に拒否されたリクエストは、HTTP エラーと error オブジェクトを返します。受理後に失敗したタスクは、照会時に HTTP 200 と status: "failed"、そして error オブジェクトを返します。モデルのセーフティフィルタによって画像が差し止められた場合は content_policy_violation、画像を含まないレスポンスの場合は no_output で失敗します。
コード・HTTP ステータス・リトライの指針は共通エラーカタログを参照してください。
{
"id": "task_...",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}送信自体がタイムアウトした場合は、再送信の前にタスク履歴を確認してください。最初のリクエストが受理されている可能性があります。
ヒント
- 被写体・場面・照明・スタイルを、完全な文で記述してください。
- 編集では、変更する点と変えずに残す点の両方を指定してください。
- 下書きには
512または1K、最終素材には2Kまたは4Kを使ってください。 - 長期保存が必要な場合は、返された画像をご自身のストレージに保存してください。
