> https://router.one/zh/blog/nano-banana-2-api-guide 的 Markdown 镜像，供 AI 助手与爬虫使用。Router One 是 OpenAI 兼容的统一 LLM API 网关。
> 发布：2026-08-25 · 作者：Router One Team

# Nano Banana 2 API 国内调用指南：gemini-3.1-flash-image-preview 生图与改图

_用 OpenAI 兼容 Images API 调用 Nano Banana 2（gemini-3.1-flash-image-preview）：文生图、带参考图改图、按张固定单价，以及和 Nano Banana Pro 怎么选——国内免翻墙、支付宝充值。_

Nano Banana 2 是社区给谷歌 Gemini 3.1 Flash Image 起的名字。它在 Router One 目录里的模型 ID 是 `gemini-3.1-flash-image-preview`，归在 image 类别，旁边就是同系列的 Nano Banana Pro（`gemini-3-pro-image-preview`）。调用方式和网关上其他生图模型一样：同一个 OpenAI 兼容 Images API、同一把 Key、同一个钱包，每次请求都有成本 trace，国内免翻墙直连。

这篇只讲实操：文生图的完整请求、带参考图改图的完整请求、这个模型收什么参数不收什么参数、怎么计费，以及 Nano Banana 2 和 Nano Banana Pro 到底怎么选。

## 名字、模型 ID 和单价

目录里有两个谷歌生图模型，外号很容易搞混：

| 社区常用名 | Router One 模型 ID | 单价（2026 年 8 月） |
| --- | --- | --- |
| Nano Banana 2 | gemini-3.1-flash-image-preview | $0.50 每张 |
| Nano Banana Pro | gemini-3-pro-image-preview | $0.50 每张 |

两者都按张计价：一张图一个固定美元单价，输出不算 token。写这篇时两者在 Router One 上同价——实时价格以[模型页](https://router.one/zh/models/gemini-3-1-flash-image-preview)为准——所以选哪个看出图效果，不看预算，下面细说。

## 准备工作

在 Router One 控制台创建 API Key，给钱包充值。大陆直连不用 VPN，托管收银台支持支付宝——见[支付宝充值说明](https://router.one/zh/alipay-llm-api)。然后把客户端指向网关：

```bash
export ROUTER_ONE_KEY=sk-your-router-one-key
export OPENAI_BASE_URL=https://api.router.one/v1
```

如果这把 Key 已经在调聊天模型，什么都不用改——生图端点用的是同一把 Key。

## 文生图：POST /v1/images/generations

请求就是 OpenAI Images API 的格式：JSON body 里给 `model` 和 `prompt`。想一次出多张候选图，加 `n`。

```bash
curl -X POST https://api.router.one/v1/images/generations \
  -H "Authorization: Bearer $ROUTER_ONE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "gemini-3.1-flash-image-preview",
       "prompt": "等距视角的夜市插画，暖色灯笼光，画面里不要文字",
       "n": 2}'
```

针对这个模型有两点要知道：

- **`size`、`quality`、`response_format` 对它不生效。**传了也会被忽略，出图完全由 prompt 决定。构图、比例、景别这些要求直接写进 prompt。
- **响应里的图可能是 `data[].b64_json`，也可能是 `data[].url`。**多数情况是内联 base64，但也可能拿到一个 URL。两种分支都要处理，拿到就立刻落盘，别假定只有一种形态。

用官方 OpenAI Python SDK：

```python
import base64, httpx
from openai import OpenAI

client = OpenAI(base_url="https://api.router.one/v1", api_key="sk-your-router-one-key")

result = client.images.generate(
    model="gemini-3.1-flash-image-preview",
    prompt="等距视角的夜市插画，暖色灯笼光，画面里不要文字",
    n=2,
)

for i, item in enumerate(result.data):
    png = base64.b64decode(item.b64_json) if item.b64_json else httpx.get(item.url).content
    with open(f"night-market-{i}.png", "wb") as f:
        f.write(png)
```

返回几张图就按几张计费——`n: 2` 就是两张、两个单位。完整字段见 [Images API 文档](https://router.one/zh/docs/images/createImageGeneration)。

## 带参考图改图：POST /v1/images/edits

Nano Banana 2 在目录里支持图像输入，所以可以给它一张图、描述你要的改动。这走的是 edits 端点，格式是 `multipart/form-data` 而不是 JSON：参考图放 `image` 字段，改图指令放 `prompt`。

```bash
curl -X POST https://api.router.one/v1/images/edits \
  -H "Authorization: Bearer $ROUTER_ONE_KEY" \
  -F model=gemini-3.1-flash-image-preview \
  -F image=@teapot.png \
  -F prompt="把这个茶壶放到大理石台面上，柔和晨光，标签文字保持可读"
```

多张参考图就重复 `-F image=@...`——比如一张产品图加一张风格参考。SDK 写法是 `client.images.edit(model=..., image=open("teapot.png", "rb"), prompt=...)`，响应和 generations 一样是 `data[]`，上面那段两种分支都存的代码可以直接复用。每个参考文件上限 25 MB。

常见用法：产品图换风格、换背景、草图渲染成成品场景、用一张主图出一整套风格一致的素材。

## Nano Banana 2 还是 Nano Banana Pro？

两个模型在 Router One 上每张同价、请求格式相同，所以最实在的答案是：拿你自己的 prompt 两边都跑一遍。在网关上这就是改一行——同一把 Key、同一个端点、换 `model` 字符串——每次请求都进 Dashboard → Logs，带模型、单价、延迟、状态，对比是一个筛选条件，不是一张表。

从这种 A/B 里得出的实操建议：

- 走量的活先用 **Nano Banana 2**——缩略图、多版本变体、反复调 prompt 直到构图对。
- 把筛出来的 prompt 再丢给 **Nano Banana Pro**，留下评审更喜欢的那版。如果 Pro 的结果在你的场景里没有肉眼可见的提升，就没有成本上的理由用它。
- 参考图改图两边流程一样，都支持 edits。

## 让账单可预期

生图流水线是用量最容易失控的地方，`n` 会悄悄放大。网关的标准管控照常生效：

- **Per-key 预算。**给生图流水线单独发一把带上限的 Key，失控的批量任务在上限处停下，不会掏空钱包。
- **每请求 trace。**每次生成的单价和聊天流量记在同一份日志里，财务能看清一次活动的素材到底花了多少。
- **固定单价。**成本预测就是张数 × 单价，不用估 token。

## 常见问题

**Nano Banana 2 就是 gemini-3.1-flash-image-preview 吗？**
是。Nano Banana 2 是社区常用名，`gemini-3.1-flash-image-preview` 是请求里要填的模型 ID。Nano Banana Pro 是同一系列的 Pro 档，模型 ID 是 `gemini-3-pro-image-preview`。

**Nano Banana 2 在 Router One 上比 Nano Banana Pro 便宜吗？**
不。2026 年 8 月两者在 Router One 上都是 $0.50 每张。实时价格看目录；按你 prompt 的出图效果选，不按价格选。

**能指定尺寸或画质吗？**
这个模型不行。`size`、`quality`、`response_format` 会被接受但不生效——想要的构图和比例写进 prompt。

**怎么用自己的图当起点？**
走 POST /v1/images/edits，`multipart/form-data`：参考图放 `image` 字段，指令放 `prompt`。generations 是 JSON，只收文字。

**响应给的是 URL 还是 base64？**
都有可能。同一个循环里同时处理 `data[].b64_json` 和 `data[].url`，拿到字节就存。

**国内能直接用吗？**
能。端点大陆可直连不用 VPN，钱包可以在同一个托管收银台用支付宝或银行卡充值，也支持 USDT/USDC（6 条链）。

## 结论

对已经在网关上的人，Nano Banana 2 就是改一行的事：`model` 填 `gemini-3.1-flash-image-preview`，发 prompt，`b64_json` 或 `url` 回来哪个存哪个。带参考图改图是一次 multipart 调用，按张计费，跑聊天模型的那把 Key 直接就能用。

端点全貌看[生图 API 页](https://router.one/zh/image-generation-api)，实时价格看[模型页](https://router.one/zh/models/gemini-3-1-flash-image-preview)，[到 router.one 创建 Key](https://router.one/zh/signup) 发第一个请求。

## 相关页面

- 本页规范地址：https://router.one/zh/blog/nano-banana-2-api-guide
- LLM API 支付：https://router.one/zh/wechat-pay-llm-api
- 全部博客文章：https://router.one/zh/blog
- 模型与每模型 token 价格：https://router.one/zh/models（markdown：https://router.one/zh/models.md）
- 定价：https://router.one/zh/pricing
- API 文档（markdown）：https://router.one/zh/docs.md
- 公司事实（markdown）：https://router.one/zh/facts/company.md
