Appearance
Gemini 兼容 OpenAI 协议接入指南
本页说明如何用 OpenAI Images API 兼容协议调用 We-AI 的 Gemini 香蕉生图模型。适合已经接入过 OpenAI /v1/images/generations、/v1/images/edits 的客户端,只需要替换 BASE_URL、API Key 和 model 即可接入。
如果你使用的是 Google Gemini 原生协议(/v1beta/models/{model}:generateContent),请阅读 Gemini 香蕉生图文档。本页只讲 OpenAI 兼容入口。
参考资料:OpenAI 兼容协议(/v1/images/*)
接入前准备
选择一个 We-AI 入口作为 BASE_URL,末尾不要重复写 /v1:
| 线路 | BASE_URL |
|---|---|
| 国际加速路线 | https://us-la.we-token.cc |
| 亚太加速路线 | https://asian-acc.we-token.cc |
| 国内加速路线 | https://sub2api.we-token.cc |
| Aitu 独立站点 | https://sub2api.aitu.art |
鉴权方式:
http
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json注意
we-token.cc 的三条线路用户体系相同,只是加速区域不同。sub2api.aitu.art 是独立站点,API Key、余额和账号信息不与 we-token.cc 打通。
两个分组
Gemini 香蕉有两个分组:aistudio香蕉 和 adobe香蕉,用哪个取决于你的 API Key 属于哪个分组(创建 API Key 时选择的分组)。两个分组的 OpenAI 兼容入口参数相同,差别只有下面几条:
| 项 | aistudio香蕉 | adobe香蕉 |
|---|---|---|
| 模型 | Pro、2、2.1 | Pro、2 |
思考档位 thinkingLevel | ✅ 支持 | 不支持(传了忽略) |
响应里的 output_format | Google 实际返回的图片格式,目前基本是 jpeg | 回显请求值,不传为 png |
response_format: "url" 返回的链接 | 平台临时链接,24 小时内有效 | Adobe 临时预签名链接 |
usage | Google 返回了就是真实值,没返回时按 Google 官方每图 token 数估算 | 估算值 |
后文凡是没有特别注明分组的内容,两个分组都适用。
接口概览
| 场景 | 方法 | 路径 | 请求格式 |
|---|---|---|---|
| 文生图 | POST | /v1/images/generations | application/json |
| 图生图 / 改图 | POST | /v1/images/edits | application/json(推荐,传图片 URL)或 multipart/form-data(上传文件) |
示例完整地址:
txt
https://sub2api.we-token.cc/v1/images/generations
https://sub2api.we-token.cc/v1/images/edits支持的模型
| model | 俗称 | 定位 | 分组 |
|---|---|---|---|
gemini-3-pro-image | Nano Banana Pro | 质量优先:商业海报、复杂构图、细节要求高的任务 | 两个分组都有 |
gemini-3.1-flash-image | Nano Banana 2 | 速度优先:快速预览、批量草稿、日常生图 | 两个分组都有 |
gemini-nano-banana-2.1 | Nano Banana 2.1 | 新一代 flash:比例更多、支持三档思考 | 仅 aistudio香蕉 |
说明:
- 带
-preview后缀的写法是别名:gemini-3-pro-image-preview≡gemini-3-pro-image,gemini-3.1-flash-image-preview≡gemini-3.1-flash-image。 - 模型名区分大小写,不带比例、清晰度后缀。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
model | 是 | 见上方模型表。 |
prompt | 是 | 图片生成或编辑要求,不能为空。 |
size | 否 | 清晰度档位:1K、2K、4K(不分大小写),不传为 2K。像素写法(如 1024x1024)、auto 会被忽略,按不传处理。 |
resolution | 否 | 同 size,两个都传时以 resolution 为准。 |
aspectRatio | 否 | 画面比例,也可以写成 aspect_ratio(两个都传时以 aspect_ratio 为准)。可选值见下方。 |
thinkingLevel | 否 | 思考档位,也可以写成 thinking_level。仅 aistudio香蕉 生效,见下方「思考档位」。 |
n | 否 | 每次只能出 1 张:不传或传 1。传大于 1 的值返回 400。 |
response_format | 否 | 不传或传 b64_json:图片在 data[0].b64_json;传 url:图片在 data[0].url(临时链接,见下方说明)。 |
image / images / input_images | 改图必填 | 仅 /v1/images/edits:参考图,1~14 张,格式见「图生图 / 改图示例」。 |
background、quality、output_format | 否 | 不影响出图,可以不传。 |
size 是清晰度档位,不是固定像素尺寸。实际输出像素由「比例 + 档位」决定,例如 16:9 / 1K 回 1376×768,2:3 / 2K 回 1696×2528,gemini-nano-banana-2.1 的 1:8 / 1K 回 352×2928、8:1 / 1K 回 2928×352。需要严格指定 2048x1152 这类固定像素时,建议改用 生图接入指南 中的 gpt-image-2。
支持的 aspectRatio:
- 通用:
1:1、2:3、3:2、3:4、4:3、4:5、5:4、9:16、16:9、21:9。 - 超宽 / 超长比例
1:4、4:1、1:8、8:1:adobe香蕉两个模型都支持;aistudio香蕉只有gemini-nano-banana-2.1支持,gemini-3-pro-image、gemini-3.1-flash-image都不支持。 - 不传或传
auto:由模型按提示词决定画面形状。aistudio香蕉传了不支持的比例也按不传处理、不报错(例如gemini-3.1-flash-image传1:8,照常返回,但出图不是 1:8;需要超宽 / 超长图请用gemini-nano-banana-2.1);adobe香蕉请只传上面列出的比例。
思考档位(仅 aistudio香蕉)
thinkingLevel 控制模型出图前的思考量,取值 minimal / medium / high(大小写不敏感)。每个模型支持的档位不同:
| 模型 | 支持的档位 | 不传时 |
|---|---|---|
gemini-3-pro-image | high | Google 默认(官方为 high) |
gemini-3.1-flash-image | minimal、high | Google 默认(官方为 minimal) |
gemini-nano-banana-2.1 | minimal、medium、high | Google 默认(官方为 medium) |
不传、传空、传不认识的值、或传了该模型不支持的档位(例如 gemini-3.1-flash-image 传 medium):不报错,一律按不传处理,照常出图。档位越高出图越慢;minimal 最快。
文生图示例
Postman 中选择 Body -> raw -> JSON,请求:
http
POST https://sub2api.we-token.cc/v1/images/generations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json请求体:
json
{
"model": "gemini-3.1-flash-image",
"prompt": "A beautiful mountain landscape at sunrise",
"size": "2K",
"aspectRatio": "16:9"
}curl 示例(把 data[0].b64_json 解码存成文件):
bash
curl -s "${BASE_URL%/}/v1/images/generations" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image",
"prompt": "A beautiful mountain landscape at sunrise",
"size": "2K",
"aspectRatio": "16:9"
}' \
| python3 -c 'import sys,json,base64; d=json.load(sys.stdin); ext={"jpeg":"jpg"}.get(d.get("output_format"),d.get("output_format") or "png"); open("out."+ext,"wb").write(base64.b64decode(d["data"][0]["b64_json"])); print("saved out."+ext)'带思考档位(aistudio香蕉,Nano Banana 2.1):
json
{
"model": "gemini-nano-banana-2.1",
"prompt": "a cozy reading nook by a rainy window, warm light",
"size": "4K",
"aspectRatio": "4:1",
"thinkingLevel": "high"
}OpenAI Python SDK 示例:
python
import base64
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://sub2api.we-token.cc/v1")
img = client.images.generate(
model="gemini-3-pro-image",
prompt="a pug wearing sunglasses, studio lighting",
size="2K",
extra_body={"aspectRatio": "16:9", "thinkingLevel": "high"},
)
open("out.jpg", "wb").write(base64.b64decode(img.data[0].b64_json))响应格式
成功时返回 OpenAI Images 风格的结果,默认图片以 base64 放在 data[0].b64_json:
jsonc
{
"created": 1784100892,
"data": [
{ "b64_json": "<base64>" }
],
"background": "auto",
"output_format": "jpeg",
"quality": "",
"size": "2K",
"model": "gemini-3.1-flash-image-preview",
"usage": {
"input_tokens": 12,
"input_tokens_details": { "image_tokens": 0, "text_tokens": 12 },
"output_tokens": 1680,
"output_tokens_details": { "image_tokens": 1680, "text_tokens": 0 },
"total_tokens": 1692
}
}字段说明:
data[0].b64_json:图片的 base64,解码后直接存文件。aistudio香蕉按output_format决定扩展名(目前基本是jpeg)。size:实际出图的档位(1K/2K/4K),不一定等于请求里传的原值(例如传了像素值被忽略时这里是2K)。model:本次使用的模型,可能带-preview后缀。usage:input_tokens为输入(提示词 + 参考图),output_tokens为输出图片(aistudio香蕉在 Google 返回真实值时还包含思考 token),total_tokens为两者之和。
aistudio香蕉 在 Google 没返回 token 数时,按 Google 官方每图 token 数估算:
| 模型 | 输出 1 张 1K | 输出 1 张 2K | 输出 1 张 4K | 每张参考图(输入) |
|---|---|---|---|---|
gemini-3-pro-image | 1120 | 1120 | 2000 | 560 |
gemini-3.1-flash-image | 1120 | 1680 | 2520 | 1120 |
gemini-nano-banana-2.1 | 1120 | 1680 | 3780 | 1120 |
返回图片 URL
请求里加 "response_format": "url",图片会以临时链接放在 data[0].url,其余字段不变:
jsonc
{
"created": 1784100892,
"data": [
{ "url": "https://..." }
],
"size": "2K",
"...": "其余字段同上"
}URL 返回说明
aistudio香蕉的链接是平台临时链接,24 小时内有效;adobe香蕉的链接是 Adobe 的临时预签名链接。拿到后请尽快下载或转存,不要长期依赖该链接。- 个别情况下(例如图片转存失败)会退回成
b64_json,客户端建议两种都能处理:有url就下载,没有就解b64_json。
图生图 / 改图示例
改图接口推荐使用 JSON 请求体。把参考图放到 images 数组里,然后在 prompt 中写清楚要保留什么、改变什么。
http
POST https://sub2api.we-token.cc/v1/images/edits
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json请求体:
json
{
"images": [
{
"image_url": "https://img10.360buyimg.com/n3/jfs/t1/367079/6/5814/311805/692671edFfd7fe2e8/8b15689df633c338.jpg"
}
],
"model": "gemini-3.1-flash-image",
"prompt": "keep product unchanged, change background to clean warm studio background",
"size": "2K",
"aspectRatio": "1:1"
}curl 示例:
bash
curl -s "${BASE_URL%/}/v1/images/edits" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"images": [
{ "image_url": "https://example.com/reference.jpg" }
],
"model": "gemini-3.1-flash-image",
"prompt": "keep product unchanged, change background to clean warm studio background",
"size": "2K",
"aspectRatio": "1:1"
}'参考图的几种写法(可以混用,合计 1~14 张):
| 写法 | 示例 |
|---|---|
| 字段名 | image、images、input_images 都可以,三个字段的图会按此顺序合并。 |
| 图片 URL | "https://example.com/a.jpg" 或 {"url": "https://example.com/a.jpg"} 或 {"image_url": "https://example.com/a.jpg"} 或 {"image_url": {"url": "https://example.com/a.jpg"}} |
| base64 | {"b64_json": "<base64>"},或直接写 "data:image/png;base64,<base64>" |
| 单张 / 多张 | 字段值可以是单个值,也可以是数组。 |
图片 URL 必须是服务端能直接访问的公网 http(s):// 地址(不需要登录、不是内网地址)。
上传本地文件用 multipart/form-data,图片字段名 image、image[]、images、images[] 都可以,多张就重复同一个字段:
bash
curl -s "${BASE_URL%/}/v1/images/edits" \
-H "Authorization: Bearer ${API_KEY}" \
-F "model=gemini-3.1-flash-image" \
-F "prompt=keep product unchanged, change background to clean warm studio background" \
-F "size=2K" \
-F "aspectRatio=1:1" \
-F "image[]=@product.png" \
-F "image[]=@style.jpg"返回结构与文生图一致;usage.input_tokens_details.image_tokens 会计入参考图。
错误格式
json
{ "error": { "message": "...", "type": "invalid_request_error" } }常见状态码:
| HTTP | 含义 | 怎么处理 |
|---|---|---|
| 400 | 参数不合法:缺 prompt、n 大于 1、改图没传参考图(image is required)或超过 14 张等。adobe香蕉 的内容安全审核拒绝也是 400。 | 按 message 修改请求。 |
| 401 / 403 | API Key 无效、已禁用,或余额不足。 | 检查 Key 和余额。 |
| 404 | 模型名不对,或该模型不在你的分组里(例如 adobe香蕉 调 gemini-nano-banana-2.1)。 | 核对模型名和分组。 |
| 413 | 参考图或请求体太大。 | 压缩图片、减少张数,或改用图片 URL。 |
| 451 | 仅 aistudio香蕉:上游这次没有返回图片(不一定是内容违规);或者提示词是 hi、test 这类无意义的探测文本。 | 重试一般就能出图;连续失败再调整提示词或参考图。 |
| 408 | 生成超时;adobe香蕉 上游限流、繁忙时也返回 408。 | 退避后重试。 |
| 429 / 502 / 503 | 上游限流或暂时不可用。 | 退避后重试。 |
提示词建议
改图时建议按「保留内容 + 修改内容 + 禁止内容」来写:
txt
保留参考图中的商品主体不变,包括外形、颜色、材质、比例、Logo 和包装文字。
将背景改成干净的暖色摄影棚,柔和棚拍光,轻微阴影。
不要改变商品结构,不要新增品牌 Logo,不要生成促销文字,不要加水印。如果要做电商主图,优先上传清晰商品图;如果要做人物或角色一致性,优先上传角色参考图。不要把多个目标挤在一张复杂拼图里,输入图越干净,改图越稳定。
常见问题
1. 返回的是 b64_json,没有 url
默认就是返回 base64。需要链接请在请求里加 "response_format": "url";即使加了,个别情况下也可能退回 b64_json,客户端两种都要能处理。
2. 返回 URL 但前端打不开
链接是临时的(aistudio香蕉 24 小时内有效),业务侧应尽快下载或转存。如果要长期展示,请把图片保存到自己的对象存储或 CDN。
3. 404 或路径不存在
检查 BASE_URL 末尾是否已经带了 /v1。如果配置成 https://sub2api.we-token.cc/v1,再拼接 /v1/images/generations 会变成重复路径。如果路径没问题,再检查模型名是否在你的分组里(见「支持的模型」)。
4. 改图时报 image is required
说明请求没有正确传入参考图。请确认使用的是 /v1/images/edits,并且请求体里包含参考图,例如:
json
{
"images": [
{ "image_url": "https://example.com/reference.jpg" }
]
}5. 传了 thinkingLevel 没效果
thinkingLevel 只在 aistudio香蕉 生效,而且每个模型支持的档位不同(见「思考档位」)。不支持的档位会按不传处理,不会报错。
6. 生成很慢或超时
4K、复杂改图、多参考图、thinkingLevel: high 都会更慢。建议先用 1K 或 2K 验证提示词和画面方向,正式交付时再提高到 4K。客户端和中转站超时建议设置到 30 分钟左右。