主题
Nano Banana 图像生成
「Nano Banana」是 Google 在 Gemini 系列下推出的图像生成 / 图像编辑模型的代称,可通过 why01 直接调用。
写代码前先到控制台确认
- 模型实际可用名(如
gemini-2.5-flash-image等)以控制台 模型 / 定价页 当前列表为准——Google 经常改名 - 价格按"调用次数 + 输出尺寸"计,按上游 usage 计费
它能做的事
- 文生图:根据 prompt 生成新图像
- 图生图 / 局部编辑:传入一张参考图 + prompt,输出改写后的新图(典型场景:换背景、改风格、抠图重绘)
- 多图融合:将多张参考图合成为一张(取决于上游版本是否支持)
接入方式
走 OpenAI 兼容路径调即可,与文本对话模型同一套鉴权 / Base URL:
Base URL: https://s1.why01.top
API Key: sk-...(控制台 → 令牌管理 创建)
Model: 以控制台模型页当前的 Nano Banana 系列模型名为准调用示例
Python(OpenAI SDK 风格)
很多图像模型通过 chat.completions 接口返回——返回字段里包含 base64 图或图 URL:
python
from openai import OpenAI
import base64
client = OpenAI(
base_url="https://s1.why01.top/v1",
api_key="sk-你的key",
)
# 模型名按控制台当前列表替换
resp = client.chat.completions.create(
model="gemini-2.5-flash-image",
messages=[{
"role": "user",
"content": "生成一张:黄昏的东京街道,赛博朋克风格,霓虹灯反射在湿润路面"
}],
)
# 不同上游返回格式不一样,常见三种:
# 1) message.content 是 markdown 含 
# 2) message.content 是 base64 字符串本身
# 3) 单独的 images 字段
print(resp.choices[0].message.content[:200])返回格式没有统一标准
图像生成不像文本对话有 OpenAI 标准 schema。上游不同渠道返回字段差异较大——拿到响应先 print 原始 JSON 看结构,再决定怎么解析。出问题先看控制台「日志」原始响应。
cURL
bash
curl https://s1.why01.top/v1/chat/completions \
-H "Authorization: Bearer sk-你的key" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.5-flash-image",
"messages": [
{"role": "user", "content": "生成一只在月球上滑滑板的猫"}
]
}'图生图(传入参考图)
把参考图作为 image_url 传给模型,prompt 描述要做什么改动:
python
import base64
with open("input.jpg", "rb") as f:
img_b64 = base64.standard_b64encode(f.read()).decode()
resp = client.chat.completions.create(
model="gemini-2.5-flash-image",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "把这张图里的天空改成黄昏粉紫色"},
{"type": "image_url", "image_url": {
"url": f"data:image/jpeg;base64,{img_b64}"
}}
]
}],
)计费
按上游返回的 usage 字段计——通常输入 token + 输出 token(图像本身的像素折算成 token 后参与计费)。具体倍率以控制台 模型 / 定价页 当前数值为准。
控成本三招
- 先低分辨率出图:上游多数支持 size 参数,先用最小尺寸调通流程再拉高分辨率
- 单次专 Key:给图像调用建一个独立令牌、单独限额,防止意外刷量
- prompt 精简:图像模型对 prompt 长度不敏感,长 prompt 多花的 token 价值有限
常见问题
提示「模型不存在 / 404」
- 控制台 → 模型页确认当前 Nano Banana 系列的精确模型名
- Google 经常改名——半年前能用的模型名今天可能下线,看公告
- 仍不行 → 联系客服,说明你调用的模型名和报错时间
返回的图打不开 / 乱码
返回的多半是 base64 编码。前端渲染需要拼前缀:
html
<img src="data:image/png;base64,<base64 字符串>" />Python 里写文件:
python
import base64
with open("out.png", "wb") as f:
f.write(base64.b64decode(img_b64))生成内容触发审核
图像模型上游有内容审核,部分 prompt(涉及暴力 / 色情 / 真人脸 / 政治敏感)会被拒。这是上游策略,why01 不能绕过——换 prompt 表述即可。