跳转到内容

Nano Banana(Gemini 原生生图)接入说明

本文介绍如何通过 Google Gemini 原生协议调用 Nano Banana 2 和 Nano Banana Pro 生成图片。当前完整的 Gemini 模型清单请查看可用模型列表

模型名称与 API Model ID

产品名称推荐 API Model ID兼容/预览别名
Nano Banana 2gemini-3.1-flash-imagegemini-3.1-flash-image-preview
Nano Banana Progemini-3-pro-imagegemini-3-pro-image-preview
  • 新接入优先使用推荐 ID。
  • 兼容/预览别名用于兼容已有接入,能力和可用性可能随上游调整。
  • API 请求中的 model 必须使用表内的 gemini-* ID;Nano Banana 2Nano 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-imagegemini-3-pro-imagegemini-3-pro-image-previewgemini-3.1-flash-imagegemini-3.1-flash-image-previewgemini-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:116:99:164:33:4
imageSize"4K"支持 1K2K4K;必须使用大写 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.b64

macOS 解码:

bash
base64 -D image.b64 > nano-banana.png

Linux 解码:

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 的实时授权。