Gemini 原生格式 · banana 分组

Gemini 图片生成

支持文生图、图生图与多图融合。模型可输出最高 4K。一个接口:传参考图就是图生图 / 多图融合;不传参考图就是纯文生图。

gemini-3.1-flash-image-preview gemini-3-pro-image-preview GROUP: banana UP TO 4K
POST https://vip.zpika.com/v1beta/models/{model}:generateContent

网关地址

默认推荐:

https://vip.zpika.com

以下地址同样可用:

https://aivideo.zpika.com

示例统一写 https://vip.zpika.com。换成 aivideo.zpika.com 时,仅替换域名,路径保持不变。

模型与分组

模型分组说明
gemini-3.1-flash-image-preview banana 更快,参考图建议 ≤ 3 张,支持最高 4K
gemini-3-pro-image-preview banana 更强,多图融合建议用 Pro,参考图最多约 14 张,支持最高 4K

参考图上限由模型决定,网关透传:

  • Flash:建议 ≤ 3 张
  • Pro:最多约 14 张(多图融合 / 角色一致性更稳)

错误提示(单独说明)

特别提醒:出现 400 报错,通常是提示词触发了内容安全策略 常见原因:违规、版权、可识别真人。这是上游确定性拒绝,换账号或反复重试通常无效,需要改提示词或更换参考图。完整避坑请看 内容审查指南(视频 / 图片)
测试渠道时,请用有意义的提示词 请使用「cat」「一只西瓜在跳舞」这类有语义的词,不要只用「test」等无意义词,否则更容易异常或被拒。
  • 400 / 内容拒绝:修改 prompt 或参考图后再提交。
  • 401 / 403:检查 Key 是否有效,分组是否选中 banana
  • 超时 / 5xx:可稍后重试;高分辨率 4K 更耗时,请把超时调到 ≥ 180s。
  • 未返回图片:检查响应 candidates[0].content.parts 是否包含 inlineDatafileData

认证方式

Gemini 原生格式推荐使用:

x-goog-api-key: sk-你的密钥

也兼容:

Authorization: Bearer sk-你的密钥

文生图示例(Gemini 原生)

curl · 4K

curl -s https://vip.zpika.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent \
  -H "x-goog-api-key: sk-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "role": "user",
        "parts": [
          { "text": "一只西瓜在跳舞,电影级光影,超高细节" }
        ]
      }
    ],
    "generationConfig": {
      "imageConfig": {
        "imageSize": "4K",
        "aspectRatio": "1:1"
      }
    }
  }'

Pro 模型

curl -s https://vip.zpika.com/v1beta/models/gemini-3-pro-image-preview:generateContent \
  -H "x-goog-api-key: sk-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "role": "user",
        "parts": [
          { "text": "科幻海报,霓虹城市,角色特写,电影构图" }
        ]
      }
    ],
    "generationConfig": {
      "imageConfig": {
        "imageSize": "4K",
        "aspectRatio": "16:9"
      }
    }
  }'

图生图 / 多图融合

把参考图作为 inlineData(base64)放进 parts,与文字指令并列即可。不传参考图就是纯文生图。

请求体结构

{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "把这几张图融合成一张科幻海报,保持主体一致" },
        {
          "inlineData": {
            "mimeType": "image/png",
            "data": "BASE64_REF_1"
          }
        },
        {
          "inlineData": {
            "mimeType": "image/jpeg",
            "data": "BASE64_REF_2"
          }
        }
      ]
    }
  ],
  "generationConfig": {
    "imageConfig": {
      "imageSize": "2K",
      "aspectRatio": "1:1"
    }
  }
}

Python 示例(可直接改 Key / 模型 / 图片路径)

#!/usr/bin/env python3
import base64
from pathlib import Path
import httpx

MODEL = "gemini-3-pro-image-preview"  # 多图融合建议 Pro
BASE = "https://vip.zpika.com"
API_KEY = "sk-你的密钥"

def img_part(path: str) -> dict:
    raw = Path(path).read_bytes()
    mime = "image/png" if path.lower().endswith(".png") else "image/jpeg"
    return {"inlineData": {"mimeType": mime, "data": base64.b64encode(raw).decode()}}

refs = ["./ref1.png", "./ref2.png"]  # 纯文生图时改为 refs = []
parts = [{"text": "把这几张图融合成一张科幻海报,保持画面主体一致"}]
parts += [img_part(p) for p in refs]

body = {
    "contents": [{"role": "user", "parts": parts}],
    "generationConfig": {
        "imageConfig": {
            "imageSize": "4K",      # 1K / 2K / 4K
            "aspectRatio": "1:1",  # 1:1 / 16:9 / 9:16 / 4:3 / 3:4 ...
        }
    },
}

r = httpx.post(
    f"{BASE}/v1beta/models/{MODEL}:generateContent",
    headers={"x-goog-api-key": API_KEY},
    json=body,
    timeout=180,
)
r.raise_for_status()
out_parts = r.json()["candidates"][0]["content"]["parts"]
data = next((p["inlineData"]["data"] for p in out_parts if "inlineData" in p), None)
if not data:
    raise SystemExit(f"未返回图片,响应 parts: {out_parts}")
Path("output.png").write_bytes(base64.b64decode(data))
print("已保存 output.png")

尺寸与宽高比

参数可选值说明
imageSize1K / 2K / 4K输出分辨率;默认多为 1K。两个模型均支持到 4K
aspectRatio1:1 / 16:9 / 9:16 / 4:3 / 3:4 / 3:2 / 2:3画面比例

Gemini 原生格式字段使用 camelCase,放在:

generationConfig.imageConfig.imageSize
generationConfig.imageConfig.aspectRatio

返回链接模式(可选)

默认返回内联 base64(在 inlineData.data)。若不想接收大段 base64,可加请求头:

X-Image-Response: url

此时响应中的 base64 会替换为链接形态(fileData.fileUri):

{
  "candidates": [{
    "content": {
      "parts": [{
        "fileData": {
          "mimeType": "image/png",
          "fileUri": "https://vip.zpika.com/v1/images/{request_id}/content?index=0"
        }
      }]
    }
  }]
}

可凭请求 ID 再次取件(多图 index 从 0 递增,取件需带鉴权):

curl "https://vip.zpika.com/v1/images/{request_id}/content?index=0" \
  -H "Authorization: Bearer sk-你的密钥" \
  -o out.png

图片缓存时长由服务端配置决定,过期后取件会返回 404。请及时下载保存。

返回字段

字段说明
candidates[0].content.parts[].inlineData.data默认模式:base64 图片
candidates[0].content.parts[].inlineData.mimeType图片 MIME,如 image/png
candidates[0].content.parts[].fileData.fileUri链接模式:图片 URL
响应头 X-Oneapi-Request-Id可用于再次取件(若服务端返回)

若你更习惯 OpenAI Images 的 /v1/images/generations,请使用 gpt-image-2 文档