Skip to content

图片生成 ​

先确认引擎 B 的模式。默认 native 模式使用聊天接口;/v1/images/generations 需要 upstream 模式、开启透传,并且上游实现该接口。

模式请求接口结果位置
nativePOST /v1/chat/completionschoices[0].message.content 中的媒体链接
upstream + passthrough: truePOST /v1/images/generations上游响应,常见 data[].url 或 data[].b64_json

原生模式:文本生成图片 ​

先调用 GET /v1/models,确认图片模型 ID。以下模型仅为示例,需要出现在当前模型目录中,并且账户具备生成资格和可用额度。

bash
curl http://localhost:8800/v1/chat/completions \
  -H 'Authorization: Bearer sk-xxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gemini-3.1-flash-image",
    "messages": [{"role": "user", "content": "生成一张被浓雾笼罩的森林图片,气氛阴森"}],
    "stream": false
  }' \
  -o image-response.json

必填 messages,其中的用户文本描述图片;应显式指定图片 model。stream: false 返回完整聊天 JSON。输出结构如下,示例省略了实际 Base64 数据:

json
{
  "choices": [{
    "message": {
      "role": "assistant",
      "content": "\n![media](data:image/png;base64,<图片Base64>)\n"
    }
  }]
}

提取 Markdown 括号内的链接。若是 data: URI,逗号前是 MIME 等信息,逗号后是 Base64 数据,解码后保存;若是 URL,则读取对应媒体。响应可能同时包含文本和多张图片,需要逐一提取。

当前原生 HTTP 聊天适配器接收 model、messages、stream、temperature、top_p、max_tokens、user,以及图片尺寸 image_size。输出模态由模型目录自动选择。size、n、image_config、response_modalities 等额外字段不会设置图片参数;尺寸只用顶层 image_size,不能用 OpenAI 的 size 代替。原生消息只提取文本,当前不能通过 image_url 传入参考图做编辑。

这里的 user 仅被 HTTP 解析,未进入生成协议;采样参数也不保证每个私有 RPC 都会编码。

指定输出尺寸 ​

image_size 放在聊天 JSON 顶层,取值 512、1K、2K、4K。K 必须大写,4k 会被拒绝。图片请求还需要足够大的 max_tokens:省略它时,本机对 gemini-nano-banana-2.1 的两次调用都是 HTTP 200 且正文为空;带 max_tokens: 2048 和 image_size: "4K" 的一次返回 HTTP 200、image/jpeg、5504×3072。

json
{
  "model": "gemini-nano-banana-2.1",
  "messages": [{"role": "user", "content": "draw a simple red circle"}],
  "image_size": "4K",
  "max_tokens": 2048
}

Gemini 官方图像参数对照 ​

官方新 Interactions 请求使用 response_format: {type: "image", aspect_ratio, image_size, mime_type, delivery},可与 text 分支组成数组。旧 generation_config.image_config 和 response_modalities 已废弃。官方 response_format 对象仍不能直接放进网关聊天 JSON。尺寸请用顶层 image_size。

官方参数允许值 / 含义网关现状
aspect_ratio1:1、2:3、3:2、3:4、4:3、4:5、5:4、9:16、16:9、21:9、1:8、8:1、1:4、4:1;具体模型取子集HTTP 未开放比例设置
image_size512、1K、2K、4K,K 大写;具体模型取子集聊天顶层 image_size 已接入。不是 response_format.image_size,也不能用 OpenAI size 代替。省略 max_tokens 时正文可能为空,2048 已出过图
mime_type参考枚举仅 image/jpeg,指南的 image/png 输出示例存在冲突按实际返回的 MIME 保存,不保证指定编码
deliveryinline / uri不开放选择;把上游媒体转成 Markdown 链接
input 的 image / video / document 块data 裸 base64 或 uri,按模型支持参考图 / 视频 / PDF原生聊天未映射媒体输入,不能据此启用编辑
generation_config.thinking_level模型支持的思考等级HTTP 未开放控制;不同图像模型支持范围不同

Nano Banana 新 ID、各模型思考等级、参考图数量和视频生图限制见中文参考详解;全部字段和官方枚举见完整对照。新官方模型 ID 只有进入账号的实时模型目录后,才可能通过网关使用。

若使用 stream: true,媒体链接会通过 SSE 的 choices[0].delta.content 返回;先拼接分片,再提取完整链接。

upstream 模式:图片专用接口 ​

配置条件:

yaml
engine_b:
  enabled: true
  mode: upstream
  base_url: http://127.0.0.1:2048
  api_key: 上游服务的Key
  passthrough: true

下面是常见 OpenAI 兼容协议示例。先替换模型占位值,确认上游支持相应字段;网关原样转发请求体,参数范围和默认值由上游定义。

bash
curl http://localhost:8800/v1/images/generations \
  -H 'Authorization: Bearer sk-xxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<上游图片模型ID>",
    "prompt": "被浓雾笼罩的森林",
    "n": 1,
    "size": "1024x1024",
    "response_format": "b64_json"
  }'
字段常见用途支持条件
model上游图片模型 ID由上游提供
prompt图片描述常见协议必填
n生成数量示例为 1,上游决定范围
size图片尺寸示例为 1024x1024,上游决定可选值
response_formaturl 或 b64_json仅上游支持时有效

常见响应为 {"data":[{"b64_json":"..."}]} 或 {"data":[{"url":"https://..."}]}。前者需解码后保存,后者使用返回 URL;实际响应格式以对应上游为准。

在 native 模式调用图片专用透传路径会返回 502。模型可见、聊天正常均不能保证图片生成有剩余额度。

由 web2api 社区维护