# 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 支持比例与像素
更新于 2026-09-14 · 2 号站独立文档
| 比例 | 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 图片生成文档。