← 返回 API 文档
# Nano Banana · Adobe 4K 使用 Gemini 原生 GenerateContent 协议,支持 Flash 与 Pro 两个完整模型名、4K 文生图、单图参考和多图参考。
Gemini NativeAdobe 4KFlash / Pro文生图单图 / 多图参考Base64 图片
## 01 · 接入信息
API Host
https://yyds.seqnode.com
鉴权请求头
`x-goog-api-key: YOUR_API_KEY`
生成端点
`/v1beta/models/{MODEL}:generateContent`
响应图片
`inlineData.data`(Base64)
**协议说明:**请求体始终是 JSON。参考图放在 `contents[].parts[].inlineData` 中,不使用 multipart,也不传 `image[]`。
## 02 · 两个示例模型 curl "https://yyds.seqnode.com/v1/models" \ -H "Authorization: Bearer YOUR_API_KEY"
| 模型 | 常用名称 | 定位 | 4K 参数 | |----|----|----|----| | `gemini-3.1-flash-image-preview` | Nano Banana 2 / Flash | 速度优先,适合批量草图和常规出图 | `imageSize="4K"` | | `gemini-3-pro-image-preview` | Nano Banana Pro | 质量优先,适合细节、构图和多图融合 | `imageSize="4K"` |
**模型名必须完整:**本页示例使用以上两个 Preview 名称。不同 Key 的分组还可能开放非 Preview 或 Firefly 完整模型名,请以 `GET /v1/models` 的实际返回为准。
## 03 · Flash 文生图请求 curl "https://yyds.seqnode.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \ -H "x-goog-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ --data-binary '{ "contents": [{ "role": "user", "parts": [{ "text": "极简产品插画:一只戴蓝色围巾的白色小狐狸站在浅灰背景中,柔和棚拍光线,画面居中,不要文字" }] }], "generationConfig": { "responseModalities": ["IMAGE"], "imageConfig": { "aspectRatio": "1:1", "imageSize": "4K" } } }'
## 04 · Pro 文生图请求 curl "https://yyds.seqnode.com/v1beta/models/gemini-3-pro-image-preview:generateContent" \ -H "x-goog-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ --data-binary '{ "contents": [{ "role": "user", "parts": [{ "text": "极简产品插画:一只戴蓝色围巾的白色小狐狸站在浅灰背景中,柔和棚拍光线,画面居中,不要文字" }] }], "generationConfig": { "responseModalities": ["IMAGE"], "imageConfig": { "aspectRatio": "1:1", "imageSize": "4K" } } }'
## 05 · 请求参数
| 字段 | 必填 | 说明 | |----|----|----| | `contents` | 是 | 对话内容数组。生图请求至少包含一个 `role=user` 的内容项。 | | `parts[].text` | 是 | 提示词。多图时明确写出“参考图 1”“参考图 2”的用途。 | | `parts[].inlineData` | 参考图请求必填 | `mimeType` 与纯 Base64 图片数据;不要带 Data URL 前缀。 | | `responseModalities` | 建议 | `["IMAGE"]` 只返回图片;需要模型文字说明时使用 `["TEXT","IMAGE"]`。 | | `imageConfig.aspectRatio` | 否 | 常用值:`1:1`、`3:2`、`2:3`、`4:3`、`3:4`、`16:9`、`9:16`、`21:9`。 | | `imageConfig.imageSize` | 是(本分组) | Adobe 4K 使用 `4K`。值区分大小写,字母 K 必须大写。 |
**4K 请求:**在 `generationConfig.imageConfig` 中同时传入 `aspectRatio` 与大写的 `imageSize: "4K"`。
## 06 · 单图参考 把提示词与参考图放进同一个 `parts` 数组。下面只展示请求体,端点中的 `{MODEL}` 替换为 §02 的任一模型。 { "contents": [{ "role": "user", "parts": [ { "text": "保持参考图主体、姿势和构图,只把围巾改成红色,把背景改成浅蓝色,不要文字" }, { "inlineData": { "mimeType": "image/jpeg", "data": "BASE64_IMAGE_1" } } ] }], "generationConfig": { "responseModalities": ["IMAGE"], "imageConfig": {"aspectRatio": "1:1", "imageSize": "4K"} } } **已实测:**`gemini-3.1-flash-image-preview` 使用一张 PNG 参考图返回 HTTP 200、`STOP` 和 JPEG 图片。
**MIME 必须匹配:**PNG 使用 `image/png`,JPEG 使用 `image/jpeg`,WebP 使用 `image/webp`。Base64 字符串中不要包含 `data:image/...;base64,`。
## 07 · 多图参考 每张参考图增加一个 `inlineData`。数组顺序就是提示词中的参考图顺序。 { "contents": [{ "role": "user", "parts": [ { "text": "以参考图 1 的人物和构图为主体,只采用参考图 2 的服装与光影;保持面部特征,不要文字" }, { "inlineData": { "mimeType": "image/png", "data": "BASE64_IMAGE_1" } }, { "inlineData": { "mimeType": "image/jpeg", "data": "BASE64_IMAGE_2" } } ] }], "generationConfig": { "responseModalities": ["IMAGE"], "imageConfig": {"aspectRatio": "16:9", "imageSize": "4K"} } } **已实测:**`gemini-3-pro-image-preview` 使用两张 PNG 参考图返回 HTTP 200、`STOP` 和 JPEG 图片。
**不要发送 multipart 摘要:**`{"parts":[{"field":"image[]"...}]}` 是抓包工具的调试说明,不是 Gemini 请求体。这里的 `parts` 必须是上面这种 Gemini JSON 内容数组。
## 08 · Windows PowerShell 完整示例 $model = "gemini-3.1-flash-image-preview" $imageBase64 = [Convert]::ToBase64String( [IO.File]::ReadAllBytes((Resolve-Path ".\reference.jpg")) ) $body = @{ contents = @(@{ role = "user" parts = @( @{ text = "保持主体不变,只把围巾改成红色" } @{ inlineData = @{ mimeType = "image/jpeg"; data = $imageBase64 } } ) }) generationConfig = @{ responseModalities = @("IMAGE") imageConfig = @{ aspectRatio = "1:1"; imageSize = "4K" } } } | ConvertTo-Json -Depth 12 -Compress $request = @{ Uri = "https://yyds.seqnode.com/v1beta/models/$model`:generateContent" Method = "Post" Headers = @{ "x-goog-api-key" = $env:YM2API_KEY } ContentType = "application/json" Body = $body } $result = Invoke-RestMethod @request $imagePart = $result.candidates[0].content.parts | Where-Object { $_.inlineData } | Select-Object -First 1 $extension = if ($imagePart.inlineData.mimeType -eq "image/jpeg") { ".jpg" } else { ".png" } [IO.File]::WriteAllBytes( (Join-Path $PWD "result$extension"), [Convert]::FromBase64String($imagePart.inlineData.data) )
## 09 · 响应与图片保存 { "candidates": [{ "content": { "parts": [{ "inlineData": { "mimeType": "image/jpeg", "data": "/9j/4AAQSkZJRgABAQ..." } }] }, "finishReason": "STOP" }], "usageMetadata": { "promptTokenCount": 11, "candidatesTokenCount": 1096, "totalTokenCount": 1107 } } 不要假定输出一定是 PNG。先读取 `inlineData.mimeType`,再决定保存扩展名;图片内容从 `inlineData.data` Base64 解码。
## 10 · 常见错误与处理
| 现象 | 通常原因 | 处理 | |----|----|----| | `401` | Key 缺失、失效,或请求头名称错误 | 使用该分组的 Key,并发送 `x-goog-api-key` 或 Bearer 鉴权 | | `404 Not Found` | 模型名不属于此分组,或漏写 `-preview` | 复制 §02 返回的完整模型名 | | `400 invalid argument` | JSON 层级、字段大小写、比例或尺寸值错误 | 对照 §03–§07;使用 `generationConfig.imageConfig` 和大写 `4K` | | 没有 `inlineData` | 未请求 `IMAGE`,或内容被模型拒绝 | 加入 `responseModalities:["IMAGE"]`,并检查 `finishReason` 与错误正文 | | Base64 解码失败 | 数据被截断、附带 Data URL 前缀,或读取了文字 part | 选择含 `inlineData` 的 part,并直接解码其中的 `data` | | `concurrency_limit` | 当前生图队列已满 | 等待 10–30 秒后指数退避重试 |
## 11 · Adobe 4K 支持比例与像素
| 比例 | 4K 像素 | 适用 | |-------------|---------------------------|-------------| | 1:1 | `4096×4096` | Flash / Pro | | 3:2 / 2:3 | `5056×3392` / `3392×5056` | Flash / Pro | | 4:3 / 3:4 | `4800×3584` / `3584×4800` | Flash / Pro | | 5:4 / 4:5 | `4608×3712` / `3712×4608` | Flash / Pro | | 16:9 / 9:16 | `5504×3072` / `3072×5504` | Flash / Pro | | 21:9 | `6336×2688` | Flash / Pro |
**比例参数:**只传比例字符串,例如 `"16:9"`;像素由模型的 4K 档位决定,不需要另传宽高。
Gemini 原生字段可参考 Google Gemini 图片生成文档。
更新于 2026-09-14 · 2 号站独立文档