香蕉 2.1
使用 gemini-nano-banana-2.1 生成图片,或上传图片、PDF、视频作为参考。
1 快速开始
使用 139 或 125 分组的 API Key。两组模型和价格相同。不写 response_format 时,原生接口 #139 返回图片链接(fileData),#125 返回 Base64(inlineData);Chat 两组都返回链接,其他接口见 #125 / #139 返回格式对比。示例生成一张 1K 图片,保存并打开;按分组价格计费。 选下面一种方式运行即可,切换示例并重新发送会产生新的调用。
1.1 Python 3:完整流程
适用于 Windows、macOS 和 Linux。只使用 Python 标准库,无需安装 SDK。
将下面的代码保存为 banana-21-quickstart.py,在终端运行 python3 banana-21-quickstart.py(Windows 可用 py -3 banana-21-quickstart.py),按提示输入 API Key。程序会打印文件路径,并尝试用浏览器打开本地结果。
import base64
import getpass
import json
from pathlib import Path
from urllib.error import HTTPError
from urllib.request import Request, urlopen
import uuid
import webbrowser
URL = 'https://yyds.seqnode.com/v1beta/models/gemini-nano-banana-2.1:generateContent'
PAYLOAD = {
"contents": [
{
"role": "user",
"parts": [
{
"text": "一只戴蓝色围巾的白色小狐狸,浅灰背景,柔和光线,无文字。"
}
]
}
],
"generationConfig": {
"responseModalities": [
"IMAGE"
],
"imageConfig": {
"aspectRatio": "1:1",
"imageSize": "1K"
}
}
}
def main():
api_key = getpass.getpass("输入 API Key:").strip()
if not api_key:
raise ValueError("请输入有效的 API Key。")
headers = {"x-goog-api-key": api_key}
headers["Content-Type"] = "application/json; charset=utf-8"
headers["User-Agent"] = "YM2API-Quickstart/1.0"
request = Request(URL, data=json.dumps(PAYLOAD, ensure_ascii=False).encode("utf-8"), headers=headers)
with urlopen(request, timeout=300) as response:
result = json.load(response)
parts = [part
for candidate in result.get("candidates", [])
for part in candidate.get("content", {}).get("parts", [])
if not part.get("thought")]
encoded = next((p["inlineData"]["data"] for p in parts if p.get("inlineData", {}).get("data")), None)
link = next((p["fileData"]["fileUri"] for p in parts if p.get("fileData", {}).get("fileUri")), None)
if encoded:
data = base64.b64decode(encoded, validate=True)
elif link:
# 139 分组默认返回图片链接,1 小时内有效
with urlopen(Request(link, headers={"User-Agent": "YM2API-Quickstart/1.0"}), timeout=120) as image:
data = image.read()
else:
raise ValueError("响应没有最终图片。请检查响应和使用记录,再决定是否重试。")
if data.startswith(b"\x89PNG\r\n\x1a\n"):
extension = ".png"
elif data.startswith(b"\xff\xd8\xff"):
extension = ".jpg"
elif len(data) >= 12 and data[:4] == b"RIFF" and data[8:12] == b"WEBP":
extension = ".webp"
else:
raise ValueError("返回数据不是可识别的 PNG、JPEG 或 WebP。")
path = Path.cwd() / ("banana-21-" + uuid.uuid4().hex + extension)
with path.open("xb") as output:
output.write(data)
print(f"图片已保存:{path}")
if not webbrowser.open(path.as_uri()):
print("请到以上路径手动打开图片。")
if __name__ == "__main__":
try:
main()
except HTTPError as error:
print(f"HTTP {error.code}:{error.read(2000).decode('utf-8', errors='replace')}")
raise SystemExit(1)
except Exception as error:
print(f"运行失败:{error}")
raise SystemExit(1)下载 Python 示例。如未自动打开结果,按输出路径手动打开。
1.2 PowerShell 7:完整流程
适合已有 PowerShell 7 的 Windows 用户。复制整段代码到终端,只按提示输入 API Key。
$apiKey = Read-Host "输入 API Key" -MaskInput
if ([string]::IsNullOrWhiteSpace($apiKey)) { throw "请输入有效的 API Key。" }
$model = "gemini-nano-banana-2.1"
$payload = @{
contents = @(@{
role = "user"
parts = @(@{ text = "一只戴蓝色围巾的白色小狐狸,浅灰背景,柔和光线,无文字。" })
})
generationConfig = @{
responseModalities = @("IMAGE")
imageConfig = @{ aspectRatio = "1:1"; imageSize = "1K" }
}
}
$request = @{
Uri = "https://yyds.seqnode.com/v1beta/models/${model}:generateContent"
Method = "Post"
Headers = @{ "x-goog-api-key" = $apiKey }
ContentType = "application/json; charset=utf-8"
Body = [Text.Encoding]::UTF8.GetBytes(($payload | ConvertTo-Json -Depth 12))
TimeoutSec = 300
ErrorAction = "Stop"
}
$result = Invoke-RestMethod @request
$image = $result.candidates.content.parts |
Where-Object { ($_.inlineData.data -or $_.fileData.fileUri) -and -not $_.thought } | Select-Object -First 1
if (-not $image) {
$detail = $result | ConvertTo-Json -Depth 12
throw "响应中没有图片。检查以下响应中的 finishReason 或 promptFeedback:`n$detail"
}
$media = if ($image.inlineData) { $image.inlineData } else { $image.fileData }
$extension = @{ "image/png" = ".png"; "image/jpeg" = ".jpg"; "image/webp" = ".webp" }[$media.mimeType]
if (-not $extension) { throw "未识别的图片格式:$($media.mimeType)" }
if ($image.inlineData) {
$bytes = [Convert]::FromBase64String($image.inlineData.data)
} else {
# 139 分组默认返回图片链接,1 小时内有效
$bytes = (Invoke-WebRequest -Uri $image.fileData.fileUri -TimeoutSec 120 -ErrorAction Stop).Content
}
if ($bytes.Length -eq 0) { throw "图片数据为空。请保留响应排查。" }
$file = Join-Path $PWD ("banana-21-" + [guid]::NewGuid().ToString("N") + $extension)
$stream = [IO.File]::Open($file, [IO.FileMode]::CreateNew)
try { $stream.Write($bytes, 0, $bytes.Length) } finally { $stream.Dispose() }
Write-Host "图片已保存:$file"
Invoke-Item -LiteralPath $file -ErrorAction Continue1.3 cURL / JSON:检查原始请求
JSON 是请求体,需要由 cURL、Postman 或 Apifox 发送。先将下面内容保存为 UTF-8 的 banana-21-request.json,也可下载请求 JSON。
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "一只戴蓝色围巾的白色小狐狸,浅灰背景,柔和光线,无文字。"
}
]
}
],
"generationConfig": {
"responseModalities": [
"IMAGE"
],
"imageConfig": {
"aspectRatio": "1:1",
"imageSize": "1K"
}
}
}在该文件所在目录,用 Bash(Linux、macOS 或 Git Bash)运行下面的命令,只输入 API Key。响应保存到 response.json,已有同名文件会被覆盖;终端显示 HTTP 状态码。
read -rsp 'API Key: ' API_KEY; printf '\n'
curl --silent --show-error --fail-with-body --max-time 300 "https://yyds.seqnode.com/v1beta/models/gemini-nano-banana-2.1:generateContent" \
-H "x-goog-api-key: $API_KEY" \
-H 'Content-Type: application/json' \
--data-binary '@banana-21-request.json' \
--output response.json --write-out 'HTTP %{http_code}\n'
unset API_KEYPostman / Apifox:新建 POST 请求,URL 填 https://yyds.seqnode.com/v1beta/models/gemini-nano-banana-2.1:generateContent,Body 选择 raw → JSON 并粘贴上面的 JSON;请求头设置 Content-Type: application/json 和 x-goog-api-key: YOUR_API_KEY,将 YOUR_API_KEY 替换为自己的 Key。
HTTP 200 后,还需确认响应包含图片数据。cURL 保存的是 JSON;Python 和 PowerShell 示例会自动解码并保存图片。
2 接入信息与场景选择
请求地址: POST https://yyds.seqnode.com/v1beta/models/gemini-nano-banana-2.1:generateContent。
鉴权: x-goog-api-key: YOUR_API_KEY。JSON 请求使用 Content-Type: application/json;上传表单时让客户端自动设置请求头。
本页快速开始已经包含完整地址。客户端自动拼接路径时,核对最终 URL,避免重复添加 /v1 或 /v1beta。分组由 API Key 决定,不在请求体中填写 group_id。
文生图、图生图、PDF 和视频参考,统一推荐本站已验证的 Gemini 原生 generateContent 接口。 默认模型为 gemini-nano-banana-2.1,请求体为 JSON。125 分组默认返回 Base64(inlineData.data)。139 分组默认返回本站图片链接(fileData.fileUri,1 小时内有效);需要 Base64 时,在请求体顶层加 "response_format": "b64_json",图片改为 inlineData.data。
POST https://yyds.seqnode.com/v1beta/models/gemini-nano-banana-2.1:generateContent
x-goog-api-key: YOUR_API_KEY
Content-Type: application/json
| 用途 | 推荐方式 |
|---|---|
| 文生图 | parts[].text |
| 图片 / PDF / 视频参考 | parts[].inlineData,本地文件转 Base64 |
| 已有公开 PDF / MP4 直链 | parts[].fileData,填写 MIME 和 HTTPS URL |
| 获取当前 Key 的模型 | GET /v1beta/models,请求头 x-goog-api-key |
| OpenAI 客户端获取模型 | GET /v1/models,请求头 Authorization: Bearer YOUR_API_KEY;这个入口用于模型发现 |
Gemini 客户端 Base URL 通常填 https://yyds.seqnode.com;若客户端要求完整 API 前缀,填 https://yyds.seqnode.com/v1beta,避免重复添加 /v1beta。生图按本页协议,不混入 response_format 等 OpenAI Images 字段。本站 Files 上传流程尚未接通,优先使用上述两种附件方式。
2.1 OpenAI Images 兼容格式
以上接口使用 139 分组 API Key,请求头为 Authorization: Bearer YOUR_API_KEY,模型填 gemini-nano-banana-2.1。2026-10-15 已完成公网实际生图验证。
| 用途 | POST 路径 | 请求格式 |
|---|---|---|
| 文生图 | /v1/images/generations | JSON |
| 图生图 | /v1/images/edits | JSON:images[].image_url 支持 data URL 或公开 HTTPS 图片直链 |
| 上传图片编辑 | /v1/images/edits | multipart/form-data:image 或 image[] 文件字段 |
文生图请求示例:
{
"model": "gemini-nano-banana-2.1",
"prompt": "一只蓝色陶瓷杯,白色桌面,柔和自然光。",
"size": "1024x1024",
"n": 1,
"response_format": "url"
}发送到 /v1/images/edits 的 JSON 示例:
{
"model": "gemini-nano-banana-2.1",
"prompt": "只把杯子改为红色,保持其余内容。",
"size": "1024x1024",
"n": 1,
"response_format": "url",
"images": [
{
"image_url": "data:image/jpeg;base64,图片Base64"
}
]
}response_format 支持 url 和 b64_json;139 分组未填写时默认 url,链接 1 小时内有效。size 可填 1K、2K、4K 或宽x高;宽高用于选择比例和分辨率档位,实际像素以返回图片为准。每次 n=1、stream=false。图片参考接受 PNG、JPEG、WebP,最多 14 张、合计 20 MiB;本轮实测为单张 JPEG。mask 局部蒙版暂未接通。
思考签名、多轮对话,以及 PDF、视频等非图片附件,请继续使用下方 Gemini 原生接口,并在多轮请求中回传完整模型内容和 thoughtSignature。Images 接口每次需提交提示词和参考图片。
url 返回本站域名的随机图片地址;本次响应、下载头和图片数据中未发现上游域名或密钥。持有链接即可下载,不等于私有鉴权存储。
2.2 Chat Completions 兼容格式
POST /v1/chat/completions,使用同一把 139 分组 Key 和 Bearer 鉴权。使用普通 JSON 响应;图片流式目前暂停,stream=true 会立即返回 HTTP 400,不计费。图片位于 message.content 的 Markdown 图片链接中;125 和 139 分组都默认返回链接,要 Base64 需在请求体顶层加 "response_format": "b64_json"。generationConfig 是本站兼容扩展,使用 SDK 时可通过 extra_body 传入。
{
"model": "gemini-nano-banana-2.1",
"messages": [
{
"role": "user",
"content": "画一只蓝色陶瓷杯,白色桌面。"
}
],
"generationConfig": {
"imageConfig": {
"imageSize": "1K",
"aspectRatio": "1:1"
}
},
"stream": false
}思考签名的完整回传与多轮修改仍推荐 Gemini 原生 contents 协议。
3 文生图
仅使用提示词生成图片,发送 JSON 到接入信息中的 generateContent 地址。模型名位于 URL。
| 参数 | 填写要求 | 用途 / 示例 |
|---|---|---|
contents[].role |
本页示例填写 user |
用户输入 |
contents[].parts[].text |
填写提示词 | 说明主体、场景或编辑目标 |
generationConfig.responseModalities |
示例显式填写 ["IMAGE"] |
需要文字时使用 ["TEXT", "IMAGE"];仍需检查实际返回内容 |
generationConfig.imageConfig.imageSize |
可选,示例显式填写 | 档位名称中的 K 大写;支持范围按本页说明 |
generationConfig.imageConfig.aspectRatio |
可选,示例显式填写 | 例如 1:1;实际像素与比例、模型有关 |
将下列内容保存为 UTF-8 的 request.json,发送到上述 POST 地址:
{
"contents": [{
"role": "user",
"parts": [{"text": "生成一张白色背景的黄色陶瓷杯产品照片,柔和自然光。"}]
}],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {"imageSize": "1K", "aspectRatio": "3:2"}
}
}
响应: 图片在 candidates[].content.parts[] 中,读取并保存最终图片。
4 图生图、PDF 与视频参考
接口: 与文生图相同,使用 JSON。参考文件只影响输入内容,输出仍是图片;每个附件占一个 part。
| 输入参数 | 何时填写 | 说明 |
|---|---|---|
parts[].text |
所有场景 | 说明参考文件用途及需要生成的图片 |
parts[].inlineData |
本地文件 | 填写 mimeType 和纯 Base64 data |
parts[].fileData |
已验证的公开 PDF / MP4 直链 | 填写 mimeType 和 fileUri;链接应直接返回文件 |
三种输入采用相同结构,只需替换 mimeType、文件 Base64 和提示词。以下是图片参考的完整请求体:
{
"contents": [{
"role": "user",
"parts": [
{"inlineData": {"mimeType": "image/png", "data": "FILE_BASE64"}},
{"text": "保留参考图片中的主体、颜色和形状,将背景换成浅蓝色。"}
]
}],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {"imageSize": "1K", "aspectRatio": "3:2"}
}
}
| 输入 | 将 mimeType 替换为 |
提示词示例 |
|---|---|---|
| JPG 图片 | image/jpeg |
保留人物或产品,调整背景 |
application/pdf |
读取各页内容,生成一张信息图 | |
| MP4 视频 | video/mp4 |
按视频场景出现顺序生成参考图,保留主体、颜色和编号 |
请求 4K: 将 imageSize 改成 "4K"。视频是参考输入,结果仍是图片。本站视频参考 4K 已实测返回 5056 × 3392 JPEG,这是本次 3:2 样本的尺寸,不是所有请求的固定尺寸。
多附件: 在同一个 parts 数组中增加多个 inlineData 项,每个文件一项;可混合图片、PDF 和视频。最大数量和复杂素材的还原效果以实际模型表现为准。
公开文件 URL: 将上例的 inlineData 那一项替换为下面结构。本站已验证公开 PDF / MP4 直链;链接需直接返回文件,不是登录页或网页预览。
{
"fileData": {
"mimeType": "application/pdf",
"fileUri": "https://yyds.seqnode.com/api-docs/parameter-test-fixtures/mime-20261007/fixture.pdf"
}
}
响应: 与文生图一致;读取最终图片,不要把视频参考输入当作视频输出。
5 读取响应、保存与查看图片
{
"candidates": [{
"content": {
"role": "model",
"parts": [{
"inlineData": {"mimeType": "image/jpeg", "data": "OUTPUT_IMAGE_BASE64"}
}]
},
"finishReason": "STOP"
}]
}
遍历 candidates[].content.parts[],跳过 thought: true 项;最终图片是 inlineData(Base64)或 fileData(链接):前者解码 data,后者下载 fileUri,再按返回的 mimeType 保存,如 image/jpeg → .jpg、image/png → .png。文字与图片可能同时返回,不要默认第一项就是图片。
139 分组未指定格式时默认返回本站图片链接,同一张图另附一个  文本项,便于只读取文字的客户端显示。链接 1 小时后失效,请及时下载或转存。需要 Base64 时,在请求体顶层加 "response_format": "b64_json",响应即为上例的 inlineData。
{
"candidates": [{
"content": {
"role": "model",
"parts": [
{"fileData": {"mimeType": "image/jpeg", "fileUri": "https://img.yydsbest.com/<UUID>.jpg"}},
{"text": ""}
]
},
"finishReason": "STOP"
}]
}
图片链接说明(139 分组)
- 链接形如
https://img.yydsbest.com/<UUID>.jpg,扩展名与实际格式一致(.jpg、.png、.webp)。 - 直接 GET 下载,无需 API Key;支持 HEAD 和 Range 分段下载。持有链接即可访问,请勿公开分享。
- 1 小时内有效,过期返回 404。收到响应后请立即下载;需要长期使用时,下载后转存到自己的存储。
- 单张图片可超过 20 MB,下载超时建议不少于 120 秒。
- 下载所在的服务器或网络需能访问
img.yydsbest.com。无法下载时先用curl -I 图片链接测试;网络无法访问时,请求体顶层加"response_format": "b64_json"改为 Base64 返回。
5.1 流式输出、思考签名与多轮改图
streamGenerateContent 和 "stream": true 的请求会立即返回 HTTP 400,不生成、不计费。本节的流式内容是 2026-10-15 的实测记录,恢复前请改用非流式 generateContent。
139 分组默认返回图片链接。签名多轮需要回传上一轮完整的 inlineData 图片,请在每轮请求体顶层加 "response_format": "b64_json"。
使用 139 分组的本站 API Key。Gemini 原生流式端点为 POST /v1beta/models/gemini-nano-banana-2.1:streamGenerateContent?alt=sse,响应类型为 text/event-stream;请求体使用 contents,不需要额外添加 stream=true。
下面的 cURL 适用于 Bash / macOS / Linux。YOUR_API_KEY 替换为本站 Key;-N 关闭客户端输出缓冲。Windows 可直接使用后面的 Python 示例。
curl -N "https://yyds.seqnode.com/v1beta/models/gemini-nano-banana-2.1:streamGenerateContent?alt=sse" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
--data-binary '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "画一只蓝色陶瓷杯,桌上放一个橙子,柔和自然光。"
}
]
}
],
"generationConfig": {
"responseModalities": [
"IMAGE"
],
"imageConfig": {
"imageSize": "1K",
"aspectRatio": "1:1"
}
}
}'
SSE 响应结构示意(占位符不是可回传的真实值):
data: {"candidates": [{"content": {"role": "model", "parts": [{"inlineData": {"mimeType": "image/jpeg", "data": "<完整图片Base64>"}, "thoughtSignature": "<原样保存的签名>"}]}, "finishReason": "STOP"}]}
以空行分隔 SSE 事件,解析 data: 后的 JSON。读取 candidates[0].content.parts 中的 inlineData 图片和 thoughtSignature。忽略以冒号开头的心跳注释;不要把每个网络数据块当成一条完整 JSON。
2026-10-15 直连当前上游渠道,对两个模型各完成三轮流式改图:蓝杯子 → 红杯子 → 加勺子,六次均成功并返回签名。本次每个响应只在生成完成后发送一个完整 data 事件,没有逐段图片或思考文本输出;SSE 协议不保证更早出图,其他请求的事件数量可能不同。思考签名是需要回传的上下文数据,并不等于可读的思考文本。
本站端点的补充验证本次首轮收到 HTTP 429,未完成本站多轮验证;以下代码是接入示例,上述六次成功记录来自上游直连测试。遇到 429 请检查分组、额度和并发状态,不要持续自动重发。
下一轮仍请求相同流式端点。按 user → model → user 顺序组织历史,保留上一轮全部 model parts 的原始顺序与字段,包括图片及 thoughtSignature;不要截断、解码、改写签名,也不要将带签名的 part 与其他 part 合并。以下 JSON 仅展示单图片响应的结构;实际代码应回传完整模型内容。
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "画一只蓝色陶瓷杯,桌上放一个橙子,柔和自然光。"
}
]
},
{
"role": "model",
"parts": [
{
"inlineData": {
"mimeType": "image/jpeg",
"data": "<上一轮完整图片Base64>"
},
"thoughtSignature": "<上一轮原始签名>"
}
]
},
{
"role": "user",
"parts": [
{
"text": "把上一张图的杯子改成红色,保持橙子、桌面和构图不变。"
}
]
}
],
"generationConfig": {
"responseModalities": [
"IMAGE"
],
"imageConfig": {
"imageSize": "1K",
"aspectRatio": "1:1"
}
}
}
签名可能很大,本次样本约 129 万~191 万字符;不要按普通短 token 限长。多轮历史中的图片和签名会增加请求体大小。
python3 banana-signed-stream.py --model gemini-nano-banana-2.1
Windows 使用 py -3 替代 python3。程序提示输入隐藏的本站 Key,也可读取 YM2API_KEY 环境变量;默认连续调用三次、每次生成一张 1K 图片,按分组价格计费。只测试首轮可加 --turns 1。程序仅依赖标准库,图片保存到新建的 banana-stream-* 目录,签名只保存在运行内存中,不打印或写入文件。
示例支持多个 SSE 事件,按顺序保留所有 parts;HTTP 错误、SSE error、非 STOP 结束、缺少最终图片或后续轮次所需签名时停止。不会自动重试,避免重复生成。
URL 返回与签名多轮的区别:POST /v1/images/generations 设置 response_format="url" 后,返回 created 和 data[].url;当前实测返回本站随机图片地址,不含 thoughtSignature。图片 URL 可作为图片编辑的参考图,但仅保留该 URL 不会保留原生签名对话历史。Chat Completions 的 Markdown 图片链接也不应当作完整 Gemini model content 回传。
{
"created": 1792070510,
"data": [
{
"url": "https://yyds.seqnode.com/随机标识.jpg"
}
]
}
6 格式、尺寸与可选参数
| 文件 | 正确 mimeType |
使用建议 |
|---|---|---|
| PNG | image/png |
图标、文字、截图或带透明通道的源文件 |
| JPG / JPEG | image/jpeg |
普通照片,体积通常较小 |
| WebP | image/webp |
已有 WebP 可直接提交 |
application/pdf |
文档、报告、演示材料 | |
| MP4 | video/mp4 |
视频优先使用已验证的 H.264 MP4 |
| TXT / Markdown 内容 | 放入 parts[].text |
简单文字无需转 Base64 |
| CSV / JSON 文件 | text/csv / application/json |
UTF-8 附件已实测,按“图生图、PDF 与视频参考”一节内联提交 |
MOV、WebM、其他 MIME 的详细状态见完整格式表。DOCX 目前尚未验证成功,文档输入优先用 PDF。
- 字段准确拼写为
mimeType,大小写保持一致;JPG 使用image/jpeg。 data放完整文件的 Base64,不带data:...;base64,前缀。修改 MIME 或文件后缀不会转换文件格式。- 整个 HTTP 请求的
Content-Type始终是application/json,与附件 MIME 分开。 imageSize使用1K/2K/4K。建议先以1K调通,再按交付需求提高;当前视频样本验证了 1K 与 4K。aspectRatio表示宽高比,本页采用已验证的3:2。实际像素请以返回文件为准。
6.1 可选:Thinking
2.1 官方支持 minimal、medium(默认)、high 三档。常规接入可先省略 Thinking 配置;minimal 偏向较低延迟,high 增加思考量,效果仍需结合具体任务评估。以下按官方原生 REST 示例,将配置放在 generationConfig 中:
{
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {"imageSize": "4K", "aspectRatio": "3:2"},
"thinkingConfig": {"thinkingLevel": "High", "includeThoughts": false}
}
}
这是替换前述 generationConfig 的片段,发送时保留 contents。includeThoughts: false 控制是否返回思考内容,并不关闭模型思考。Thinking 属于渠道相关能力,当前并非所有上游都已验证可控。 2026-10-07 对照测试中,一路上游的 Medium / High 返回思考项与 thinking tokens,隐藏输出生效,非法档位返回 400;当前默认优先路由只返回图片,未报告思考项或 thinking tokens,非法档位也返回 200。后者的参数疑似被忽略或兼容层未完整实现,尚无证据认定手动档位生效,也不据此断定模型内部完全没有思考。常规生图先使用默认配置;依赖 Thinking 控制的应用需确认所用渠道。官方模型说明、原生接口 Thinking 配置。
7 附件调用工具与批量调试
下载 Python 3 示例,仅使用标准库,自动处理 Base64 并保存图片。先设置环境变量:
# Windows PowerShell
$env:BASE_URL = "https://yyds.seqnode.com"
$env:API_KEY = "YOUR_API_KEY"
# macOS / Linux Bash
export BASE_URL="https://yyds.seqnode.com"
export API_KEY="YOUR_API_KEY"
常用命令(两种环境均适用):
python gemini-image.py --list-models
python gemini-image.py --prompt "生成一张陶瓷杯产品照片。" --output text-result
python gemini-image.py --image reference.png --prompt "保留主体,换成浅蓝色背景。" --output image-result
python gemini-image.py --image first.png --image second.jpg --prompt "把两张参考图融合为一张海报。" --output multi-result
python gemini-image.py --pdf reference.pdf --prompt "根据文档生成信息图。" --output pdf-result
python gemini-image.py --video reference.mp4 --size 4K --ratio 3:2 --prompt "按视频场景顺序生成参考图,保留编号、颜色和形状。" --output video-4k
也可直接发送 request.json。以下单行命令在 PowerShell / Bash 均可用,Windows 如有同名别名则使用 curl.exe:
curl --fail-with-body --max-time 180 "https://yyds.seqnode.com/v1beta/models/gemini-nano-banana-2.1:generateContent" -H "x-goog-api-key: YOUR_API_KEY" -H "Content-Type: application/json" --data-binary "@request.json" -o response.json
8 常见问题与验证记录
| 现象 | 建议检查 |
|---|---|
| 401 / 403 | Key、绑定分组与额度/权限 |
| 400 | JSON、MIME、Base64、文件是否有效 |
| 413 | 减小附件;Base64 会增加约三分之一体积 |
| 429 | 检查额度、并发及上游状态,避免循环重发 |
| 502 / 503 / 504 / 超时 | 保存请求 ID,先核对用量与上游状态,再决定是否重试 |
| 200 但结果不对 | 检查最终图片和参考内容,不能只看状态码 |
已完成视频 A/B 两轮、倒序、首帧、无附件及损坏文件共 8 次对照,并逐张核对输出。另有 PDF、长视频、混合附件、URL 和 MIME 测试。详见测试方法、素材与结果,以及本次 4K 视频参考原图。这些是具体样本验证,不代表所有视频、文件大小或模型都已完整验收。