主题
Nano Banana 图像生成
「Nano Banana」是 Google 在 Gemini 系列下推出的图像生成 / 图像编辑模型的代称,可通过 why01 直接调用。除它之外,控制台还提供其他出图模型(GPT 系出图、agnes 出图等),用法相同、只是换个 model 名。
写代码前先到控制台确认
它能做的事
- 文生图:根据 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-3.1-flash-image-preview",
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-3.1-flash-image-preview",
"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-3.1-flash-image-preview",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "把这张图里的天空改成黄昏粉紫色"},
{"type": "image_url", "image_url": {
"url": f"data:image/jpeg;base64,{img_b64}"
}}
]
}],
)计费
出图模型走按次计费:每成功生成一次按该模型的固定单价扣一笔费,和文本对话模型的按 token 计费是两套逻辑。单价以控制台 模型 / 定价页 上该模型标注的数值为准(页面会标「按次计费」,不同出图模型单价不同)。调用失败 / 被审核拒绝通常不计费,以控制台「日志」实际扣费为准。
控成本两招
- 单次专 Key:给图像调用建一个独立令牌、单独限额,防止意外刷量
- 先小批量验证 prompt:确认出图效果符合预期再批量生成,避免反复重试多扣按次费
常见问题
提示「模型不存在 / 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 表述即可。