外观
Nano Banana(Gemini 原生生图)接入说明
本文介绍如何通过 Google Gemini 原生协议调用 Nano Banana 2 和 Nano Banana Pro 生成图片。当前完整的 Gemini 模型清单请查看可用模型列表。
模型名称与 API Model ID
| 产品名称 | 推荐 API Model ID | 兼容/预览别名 |
|---|---|---|
| Nano Banana 2 | gemini-3.1-flash-image | gemini-3.1-flash-image-preview |
| Nano Banana Pro | gemini-3-pro-image | gemini-3-pro-image-preview |
- 新接入优先使用推荐 ID。
- 兼容/预览别名用于兼容已有接入,能力和可用性可能随上游调整。
- API 请求中的
model必须使用表内的gemini-*ID;Nano Banana 2和Nano Banana Pro是产品名称,不是原生 API Model ID。 - 模型是否对当前 API Key 开放,以可用 Model API的实时结果为准。
必须使用 Google 原生协议
Gemini 图像模型(名称含 -image)仅支持 Google 原生 :generateContent 生图。不要使用 OpenAI /v1/chat/completions:该接口可能返回 HTTP 200,看似成功,但图片会被静默丢弃,同时仍按 output token 计费。 当前模型目录中的 6 个 Gemini 图像模型 ID 为:gemini-2.5-flash-image、gemini-3-pro-image、gemini-3-pro-image-preview、gemini-3.1-flash-image、gemini-3.1-flash-image-preview、gemini-3.1-flash-lite-image;它们均只能使用本页的 Google 原生协议。
准备工作
从控制台获取 Gemini 分组的 API Key,并将 API BaseURL 设置为 https://api.token2.cc。BaseURL 不包含 /v1beta:
bash
export API_BASE="https://api.token2.cc"
export API_KEY="<你的_Gemini_API_Key>"
export MODEL="gemini-3.1-flash-image"原生 Gemini 请求推荐使用 x-goog-api-key 认证。平台也兼容 Authorization: Bearer <API Key>,但一个请求只需选择一种认证方式。
API Key 必须属于 Gemini 分组。如果控制台给出的地址已包含
/v1beta,请去掉它后再赋值给API_BASE,避免路径重复。
同步生图
generateContent 会保持连接,直到生成完成或请求失败:
text
POST /v1beta/models/{model}:generateContent以下示例使用 Nano Banana 2 生成一张 4K、16:9 图片:
bash
curl --request POST \
"$API_BASE/v1beta/models/$MODEL:generateContent" \
--header "x-goog-api-key: $API_KEY" \
--header "Content-Type: application/json" \
--data '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "冬天的香港码头,清晨薄雾,远处城市天际线与渡轮,电影感写实摄影"
}
]
}
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {
"aspectRatio": "16:9",
"imageSize": "4K"
}
}
}' \
--output response.json调用 Nano Banana Pro 时,只需切换模型:
bash
export MODEL="gemini-3-pro-image"imageConfig 常用字段:
| 字段 | 示例 | 说明 |
|---|---|---|
aspectRatio | "16:9" | 常见值包括 1:1、16:9、9:16、4:3、3:4 |
imageSize | "4K" | 支持 1K、2K、4K;必须使用大写 K |
如果只需要图片,可将 responseModalities 改为 ["IMAGE"]。
读取并保存图片
生成的图片以 Base64 形式返回在:
text
candidates[].content.parts[].inlineData.data图片 MIME 类型位于同一 part 的 inlineData.mimeType。使用 jq 提取第一张图片:
bash
jq -r '
.candidates[].content.parts[]
| select(.inlineData.data != null)
| .inlineData.data
' response.json > image.b64macOS 解码:
bash
base64 -D image.b64 > nano-banana.pngLinux 解码:
bash
base64 --decode image.b64 > nano-banana.png不要只检查 HTTP 状态码。成功生图还应确认响应中至少有一个 inlineData.data;如果没有,应按失败处理并检查模型 ID、协议和响应内容。
同步、流式与异步边界
| 方式 | 接口 | 能力说明 |
|---|---|---|
| 同步 | :generateContent | 支持;推荐用于单次生图 |
| 流式 | :streamGenerateContent?alt=sse | 支持 SSE 流式返回;它仍是一次保持连接的请求 |
| 后台异步任务 | 无原生端点 | 不支持 GPT Image 风格的“提交任务后用 task ID 轮询” |
流式不等于后台异步任务:客户端断开连接后,不能依靠 task ID 恢复或轮询该请求。Google 原生 Gemini 生图没有 /v1/images/generations/async,也没有通用的 :generateContent/async。如需非阻塞业务流程,请在自己的服务中将同步请求放入任务队列并保存结果。
本页仅介绍同步和 SSE 流式调用。其他批量或异步接口是否开放,以 token2.cc 的实际能力为准。
流式请求示例
如客户端需要接收 SSE 事件,可使用:
bash
curl --no-buffer --request POST \
"$API_BASE/v1beta/models/$MODEL:streamGenerateContent?alt=sse" \
--header "x-goog-api-key: $API_KEY" \
--header "Content-Type: application/json" \
--data '{
"contents": [
{
"role": "user",
"parts": [{"text": "冬天的香港码头,电影感写实摄影"}]
}
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {
"aspectRatio": "16:9",
"imageSize": "4K"
}
}
}'图片仍位于各 SSE JSON 事件中的 candidates[].content.parts[].inlineData。
常见问题
- HTTP 200 但没有图片:确认使用的是
/v1beta/models/{model}:generateContent,而不是/v1/chat/completions;同时检查responseModalities是否包含IMAGE。 - 提示分组不匹配:检查该 API Key 的分组和模型权限,确认已开放目标 Gemini 模型。
- 路径返回 404:确认
API_BASE末尾没有/v1或/v1beta,并检查最终 URL 中只出现一次/v1beta。 - 长连接超时:增加客户端和反向代理的读取超时,或在业务端用任务队列包装同步调用;不要改用 OpenAI
chat/completions。 - 模型不可用:查询可用模型列表或可用 Model API,确认当前 Key 的实时授权。
