Nano Banana 生图

Nano Banana 是 Gemini 的生图模型,使用独立的 Nano Banana 生图线路 Key,走 Gemini 原生接口。

想用 OpenAI Images API 生图,请看 Images。普通 Gemini 文本调用请看 Gemini。

可用模型和价格

图片按张计费,不按 Token 计费,价格只看尺寸档位。余额需要先充值,请求失败不扣费。

模型 名称 1K 2K 4K
gemini-3-pro-image-preview Nano Banana Pro ¥0.95/张 ¥0.95/张 ¥1.50/张
gemini-3.1-flash-image Nano Banana 2 ¥0.55/张 ¥0.65/张 ¥0.80/张

档位怎么算

档位由请求里的 generationConfig.imageConfig.imageSize 决定,可填 "1K"、"2K" 或 "4K"。

每次都请明确填写 imageSize。 不填时按 2K 计费。

画面比例用 imageConfig.aspectRatio 控制,例如 1:1、16:9、9:16、4:3、3:4。比例不影响价格。

1. 创建并检查 Key

打开 API 密钥,选择 Nano Banana 生图线路 创建 Key,然后检查模型权限:

curl https://api.laoshirenai.com/v1beta/models \
  -H "x-goog-api-key: YOUR_API_KEY"

返回结果里应能看到上面的模型。这一步只查询模型,不生成图片,不产生费用。

不要使用 OpenAI、Anthropic 或其他 Gemini 分组的 Key。

2. cURL 生成图片

curl "https://api.laoshirenai.com/v1beta/models/gemini-3.1-flash-image:generateContent" \
  -H "x-goog-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --max-time 300 \
  -d '{
    "contents": [{"parts": [{"text": "一只红色陶瓷杯,浅灰色背景,产品摄影,无文字"}]}],
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "imageConfig": {"imageSize": "1K", "aspectRatio": "1:1"}
    }
  }' > response.json

图片在 candidates[0].content.parts 里带 inlineData 的那一项:data 是 Base64 图片,mimeType 是图片格式。

{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          { "inlineData": { "mimeType": "image/png", "data": "iVBORw0KGgoAAAANSUhEUg..." } }
        ]
      },
      "finishReason": "STOP"
    }
  ]
}

把 response.json 里的图片存成文件:

import base64
import json
from pathlib import Path

response = json.loads(Path("response.json").read_text())
for part in response["candidates"][0]["content"]["parts"]:
    if "inlineData" in part:
        ext = part["inlineData"]["mimeType"].split("/")[-1]
        Path(f"result.{ext}").write_bytes(base64.b64decode(part["inlineData"]["data"]))

3. Python SDK

安装 Google 官方 google-genai SDK:

python3 -m pip install google-genai

把 base_url 换成老实人AI 的地址即可。timeout 的单位是毫秒,下面设为 300 秒。

from pathlib import Path
from google import genai
from google.genai import types

client = genai.Client(
    api_key="YOUR_API_KEY",
    http_options={"base_url": "https://api.laoshirenai.com", "timeout": 300_000},
)

response = client.models.generate_content(
    model="gemini-3.1-flash-image",
    contents="一只红色陶瓷杯,浅灰色背景,产品摄影,无文字",
    config=types.GenerateContentConfig(
        response_modalities=["IMAGE"],
        image_config=types.ImageConfig(image_size="1K", aspect_ratio="1:1"),
    ),
)

for part in response.candidates[0].content.parts:
    if part.inline_data:
        ext = part.inline_data.mime_type.split("/")[-1]
        Path(f"result.{ext}").write_bytes(part.inline_data.data)

SDK 已经把 Base64 解码成二进制,直接写文件即可,不用再解码。

要用 Nano Banana Pro,把 model 换成 gemini-3-pro-image-preview。

4. 等待时间和流式

流式请求示例:

curl -N "https://api.laoshirenai.com/v1beta/models/gemini-3-pro-image-preview:streamGenerateContent?alt=sse" \
  -H "x-goog-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --max-time 300 \
  -d '{
    "contents": [{"parts": [{"text": "一只红色陶瓷杯,浅灰色背景,产品摄影,无文字"}]}],
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "imageConfig": {"imageSize": "4K", "aspectRatio": "16:9"}
    }
  }'

客户端逐条读取 SSE 中的 candidates,直到出现完成原因;图片同样在 parts 里带 inlineData 的那一项。

计费与排查

常见错误

Thinking…

正在连接老实人AI。