Nano Banana API 价格与调用示例
一把 LaoZhang API Key 就能调用,和 YingTu 图片工作台走的是同一个接口。下面列出接口地址、参数、单张价格和可直接复制的代码,示例里不会出现你的真实 Key。截至 2026 年 10 月 9 日,本页所有模型 ID 都按张计费、没有订阅,一个 Key 全部能用。
关键信息(截至 2026 年 10 月 10 日)
- 同一接口下的模型 ID:gemini-3.1-flash-lite-image、gemini-3.1-flash-image、gemini-nano-banana-2.1、gemini-3-pro-image,一个 LaoZhang Key 全部能用。
- 单张价格:Nano Banana 2 Lite $0.025,Nano Banana 2 $0.055,Nano Banana 2.1 $0.045,Nano Banana Pro $0.09;没有订阅,每张图单独计费。
- Base URL https://api2.laozhang.ai,Gemini 请求格式:POST /v1beta/models/{model}:generateContent。
- LaoZhang 新账号送 $0.1 测试额度:约 4 张 Nano Banana 2 Lite 或 1 张 Nano Banana Pro。
- 在 laozhang.ai 充值,支持 Stripe 银行卡和 USDT。
三步跑通
- 1
在 laozhang.ai 创建 API Key(新账号送 $0.1)。
- 2
复制下方的模型 ID 和代码示例,把 Key 写进环境变量。
- 3
先生成一张图确认返回正常,再加大调用量。
接口与鉴权
- Base URL
- https://api2.laozhang.ai
- 认证方式
- Bearer API Key
- 请求格式
- Gemini native
- 参考图
- 支持
- 参考图数量
- YingTu 里最多 5 张(这是 YingTu 的限制,不是模型上限)
- 验证状态
- 暂未公开带日期的实测记录。
代码示例
把提示词换成你自己的;要带参考图,改用下方的改图接口示例。
文生图示例
export LAOZHANG_API_KEY="replace-with-your-key"
curl --fail-with-body --max-time 500 \
-X POST 'https://api2.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent' \
-H "Authorization: Bearer ${LAOZHANG_API_KEY}" \
-H "Content-Type: application/json" \
--data '{"contents":[{"parts":[{"text":"浅色石材桌面上的哑光陶瓷咖啡杯商品图,柔和窗光,自然阴影,极简陈列,保留真实材质细节。"}]}],"generationConfig":{"responseModalities":["IMAGE"],"imageConfig":{"imageSize":"2K"}}}'
# The JSON response can contain base64 image data or an image URL.
# If this request times out, check request and billing logs before retrying.参考图编辑示例
import base64
import mimetypes
import os
import sys
import requests
API_KEY = os.environ.get("LAOZHANG_API_KEY")
if not API_KEY:
raise RuntimeError("Set the LAOZHANG_API_KEY environment variable before running this example.")
API_URL = "https://api2.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent"
REQUEST_TIMEOUT_SECONDS = 500
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
def encode_image(image_path):
mime_type = mimetypes.guess_type(image_path)[0] or "image/jpeg"
with open(image_path, "rb") as image_file:
data = base64.b64encode(image_file.read()).decode("ascii")
return {"mime_type": mime_type, "data": data}
reference_1 = encode_image("image_1.jpg") # Replace with your image path
payload = {
"contents": [{
"parts": [
{"text": "浅色石材桌面上的哑光陶瓷咖啡杯商品图,柔和窗光,自然阴影,极简陈列,保留真实材质细节。"},
{"inline_data": reference_1}
]
}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {
"imageSize": "2K"
}
}
}
try:
response = requests.post(
API_URL,
headers=headers,
json=payload,
timeout=REQUEST_TIMEOUT_SECONDS,
)
except requests.Timeout as error:
print(
"Request timed out after 500 seconds. The result status may be unknown; "
"check call and billing logs before retrying.",
file=sys.stderr,
)
raise SystemExit(1) from error
if response.status_code != 200:
print(f"API error {response.status_code}: {response.text}", file=sys.stderr)
raise SystemExit(1)
try:
result = response.json()
except ValueError as error:
print("API returned a non-JSON response.", file=sys.stderr)
raise SystemExit(1) from error
if not isinstance(result, dict):
print("API returned an unexpected JSON shape.", file=sys.stderr)
raise SystemExit(1)
image_part = None
for candidate in result.get("candidates", []):
for part in candidate.get("content", {}).get("parts", []):
inline_data = part.get("inlineData") or part.get("inline_data")
if inline_data and inline_data.get("data"):
image_part = inline_data
break
if image_part:
break
if not image_part:
response_id = result.get("responseId", "not provided")
print(f"No image data in response. responseId={response_id}", file=sys.stderr)
raise SystemExit(1)
mime_type = image_part.get("mimeType") or image_part.get("mime_type") or "image/png"
encoded_image = image_part["data"]
if encoded_image.startswith("data:"):
header, encoded_image = encoded_image.split(",", 1)
mime_type = header[5:].split(";", 1)[0] or mime_type
extension_by_mime = {
"image/jpeg": "jpg",
"image/png": "png",
"image/webp": "webp",
"image/gif": "gif",
}
extension = extension_by_mime.get(mime_type, "bin")
output_path = f"output.{extension}"
with open(output_path, "wb") as output_file:
output_file.write(base64.b64decode(encoded_image, validate=True))
print(f"Image saved: {output_path} ({mime_type})")请求参数
字段名和 YingTu 工作台、上面的代码示例完全一致。
| 参数 | 发送方式 |
|---|---|
| model | 必填。使用本页显示的精确模型 ID。 |
| prompt | 必填。填写图片指令,不要把 API Key 写进提示词。 |
| 输出控制 | generationConfig.imageConfig.aspectRatio 与 imageSize;比例选「自动」时不传。 |
| 参考图 | 可选。YingTu 里最多 5 张,以 contents[].parts[].inline_data 传入。 |
响应与超时处理
- 图片响应
- 客户端从
candidates[].content.parts[].inlineData或inline_data读取 base64 图片,并保留返回的 MIME 类型。 - 非图片响应
- 没有图片数据时不会判为成功;存在时会显示拦截原因、结束原因或 response ID。
最长等待 500 秒
YingTu 最多等 500 秒;超时后上游可能仍在生成,是否扣费以账单为准。
不自动重试
YingTu 不会自动重试。想重试前,先查一下调用和计费日志,避免重复扣费。
常见报错怎么处理
- 认证
- 确认环境变量中是预期的 Key,并通过 Bearer 认证头发送。
- 权限或余额
- 在 LaoZhang 检查模型权限、当前余额、计费和账户限制。
- 限流
- 降低并发,并先查看返回的上游或账户消息。
- 非图片或空结果
- 检查拦截原因、结束原因、API 消息与 response ID;仅在响应说明原因时再针对性调整提示词。
- 超时
- 最终状态可能未知;再次请求前先检查调用与计费日志。
已知限制
用生成结果前,重点检查这几项。
- 检查下载文件的实际尺寸;配置的输出控制不能替代结果核验。
- 使用前检查主体身份、Logo、包装、颜色与细小品牌元素。
- 可用性与延迟会随上游容量变化。
- 实时价格、余额、权限和扣费以 LaoZhang 账户为准。
这个接口可用的 Nano Banana 模型 ID
同一个接口、同样的请求格式,只换模型 ID。
| 模型 | 模型 ID | 单价 | 尺寸 |
|---|---|---|---|
| Nano Banana 2 Lite | gemini-3.1-flash-lite-image | $0.025/ 张 | 1K |
| Nano Banana 2 | gemini-3.1-flash-image | $0.055/ 张 | 512 / 1K / 2K / 4K |
| Nano Banana 2.1 | gemini-nano-banana-2.1 | $0.045/ 张 | 1K / 2K / 4K |
| Nano Banana Pro | gemini-3-pro-image | $0.09/ 张 | 1K / 2K / 4K |
API 常见问题
Nano Banana API 多少钱?
按张计费、没有订阅:Nano Banana 2 Lite $0.025,Nano Banana 2 $0.055,Nano Banana 2.1 $0.045,Nano Banana Pro $0.09。每笔扣费都能在 LaoZhang 账户里看到。
怎么获取 Nano Banana API Key?
在 laozhang.ai 创建令牌(本页顶部的令牌按钮)。一个 Key 能调用表里所有模型,新账号送 $0.1 用来测试。国内可以直接调用。
接口地址(Base URL)是什么?
https://api2.laozhang.ai,Gemini 格式:POST /v1beta/models/{model}:generateContent。
Nano Banana API 有免费额度吗?
有测试额度:LaoZhang 新账号送 $0.1,约 4 张 Nano Banana 2 Lite 或 1 张 Nano Banana Pro。之后每次调用从余额里按张扣费,没有月费,也不用买套餐额度。
国内有 Nano Banana 中转 API 吗?
有。LaoZhang API(https://api2.laozhang.ai)就是常说的中转:国内直接调用 Google 的 Nano Banana 模型,请求格式和 Gemini 官方一致(generateContent),按张计费。同一个 Key 还能粘贴进 YingTu 网页版直接出图。
API Key 放在哪里?
放进代码示例里用的环境变量。不要提交到代码仓库、打印到日志,也不要写进提示词。
超时就是失败了吗?
不一定。500 秒后 YingTu 不再等待,但上游可能仍在生成,也可能已经扣费;重试前先查日志。
参考图数量上限是模型的限制吗?
不是。这是 YingTu 当前的限制,不代表上游模型的最大值。
在哪里看价格和权限?
在 LaoZhang 账户里:当前价格、余额、模型权限和每笔扣费都能查到。
价格与计费
按张计费,页面显示的是 LaoZhang 当前单价;实际扣费、余额和模型权限以 LaoZhang 账户为准。
- 模型 ID
- gemini-3.1-flash-image
- 单价
- $0.055/ 张
- 输出尺寸
- 512 / 1K / 2K / 4K
- API 类型
- Gemini native
先在工作台试一张
这些参数在 YingTu 图片工作台里都能直接选,新用户还有 $0.1 免费额度。
相关页面
YingTuLaoZhang