Gemini Image
Gemini 图片模型支持两种接入方式:OpenAI 兼容的 Chat Completions 接口,以及 Gemini 原生格式的 generateContent 接口。两种接口的请求字段和图片返回位置不同,不能混用。
OpenAI 兼容接入
通过 /v1/chat/completions 调用时:
- 请求图片尺寸和比例时,把
image_config放在请求体顶层。 image_config内使用 snake_case 字段:aspect_ratio、image_size。- 不需要传 Gemini 原生的
generationConfig.imageConfig。 - 不要在请求 JSON 里放
extra_body.google.image_config;该写法不是公开文档推荐格式。
请求地址
POST /v1/chat/completions支持模型
| 模型 | 说明 |
|---|---|
gemini-3-pro-image-preview | Gemini 3 Pro 图片预览模型 |
gemini-3.1-flash-image-preview | Gemini 3.1 Flash 图片预览模型 |
实际可用模型以账户权限和平台配置为准。
请求示例
curl https://cubicspaces.cloud/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image-preview",
"messages": [
{
"role": "user",
"content": "生成一张猫在咖啡馆里的图片,暖色调,写实摄影风格"
}
],
"image_config": {
"aspect_ratio": "1:1",
"image_size": "2K"
},
"stream": false
}'请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | Gemini 图片模型名称,例如 gemini-3.1-flash-image-preview |
messages | array | 是 | OpenAI Chat Completions 消息数组 |
stream | boolean | 否 | 图片生成建议传 false 或省略 |
image_config | object | 否 | 顶层图片配置,用于指定比例和尺寸 |
响应格式
图片会返回在 OpenAI Chat Completions 响应的 choices[0].message.images 中:
{
"id": "chatcmpl_123",
"object": "chat.completion",
"model": "gemini-3.1-flash-image-preview",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "",
"images": [
{
"type": "image_url",
"image_url": {
"url": "data:image/png;base64,BASE64_IMAGE_DATA"
},
"index": 0
}
]
},
"finish_reason": "stop"
}
]
}如果模型同时返回文本和图片,content 中是文本部分,images 中是生成图片。客户端应从 choices[].message.images[].image_url.url 读取图片数据。
不要从 content 中解析 Markdown 图片。Cubicspaces 会把上游可能返回的图片数据统一整理到 message.images,content 只保留文本内容。
图片配置
image_config 是可选参数,必须放在请求体顶层,不能放在 messages、请求 JSON 的 extra_body 字段或 Gemini 原生字段内。支持字段:
| 字段 | 类型 | 说明 |
|---|---|---|
aspect_ratio | string | 图片比例,例如 1:1、16:9、9:16 |
image_size | string | 图片尺寸,例如 1K、2K、4K |
正确写法:
{
"model": "gemini-3.1-flash-image-preview",
"messages": [
{
"role": "user",
"content": "生成一张猫在咖啡馆里的图片"
}
],
"image_config": {
"aspect_ratio": "16:9",
"image_size": "4K"
},
"stream": false
}在 OpenAI 兼容接口中不要这样写:
{
"generationConfig": {
"imageConfig": {
"aspectRatio": "16:9",
"imageSize": "4K"
}
}
}上面是 Gemini 原生请求字段,不适用于 Cubicspaces 的 OpenAI 兼容 /v1/chat/completions 入口。
SDK 示例
部分 OpenAI SDK 会限制可传入的顶层参数。遇到这种情况时,使用 SDK 提供的 extra_body / raw body 选项把 image_config 合并到最终请求体顶层。注意:这里的 extra_body 是 SDK 选项,不是发送给接口的 JSON 字段。
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://cubicspaces.cloud/v1"
)
response = client.chat.completions.create(
model="gemini-3.1-flash-image-preview",
messages=[
{"role": "user", "content": "生成一张猫在咖啡馆里的图片"}
],
extra_body={
"image_config": {
"aspect_ratio": "1:1",
"image_size": "2K",
}
},
stream=False
)
print(response.choices[0].message.images[0].image_url.url)import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://cubicspaces.cloud/v1"
});
const response = await client.chat.completions.create({
model: "gemini-3.1-flash-image-preview",
messages: [
{ role: "user", content: "生成一张猫在咖啡馆里的图片" }
],
image_config: {
aspect_ratio: "1:1",
image_size: "2K"
},
stream: false
});
console.log(response.choices[0].message.images[0].image_url.url);注意事项
- 使用 OpenAI Chat Completions 格式时,不要在请求体中传 Gemini 原生字段。
image_config是顶层字段,字段名是aspect_ratio和image_size,不是aspectRatio和imageSize。- 图片结果在
message.images内以data:image/...;base64,...URL 形式返回。 content只作为文本内容读取,不作为图片输出位置。- 图片生成建议使用非流式请求,便于客户端一次性读取完整图片内容。
Gemini 原生格式接入
通过 Cubicspaces 的 Gemini 原生接口调用时,模型名称放在 URL 中,请求体使用 contents 和 generationConfig,返回体保持 Gemini 原生结构。使用 Cubicspaces API Key,通过 x-goog-api-key 请求头鉴权。
POST /v1beta/models/{model}:generateContent文生图
curl "https://cubicspaces.cloud/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
-H "x-goog-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [{"text": "生成一张猫在咖啡馆里的图片,暖色调,写实摄影风格"}]
}
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {
"aspectRatio": "16:9",
"imageSize": "2K"
}
}
}'参考图生图
在同一个 contents[].parts 中放入文字和参考图。将 BASE64_INPUT_IMAGE 替换为图片文件的纯 Base64 内容(不含 data:image/...;base64, 前缀),并按实际文件类型填写 mimeType。多张参考图可增加多个 inlineData part;模型对参考图数量及大小的限制以实际可用模型为准。
{
"contents": [
{
"role": "user",
"parts": [
{"text": "保持参考图主体,改成清晨自然光的摄影风格"},
{
"inlineData": {
"mimeType": "image/png",
"data": "BASE64_INPUT_IMAGE"
}
}
]
}
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
}
}读取图片
原生响应中的文字与图片都位于 candidates[].content.parts[]。图片 part 的 inlineData.data 是纯 Base64,inlineData.mimeType 是文件类型;不应按 OpenAI 兼容接口的 choices[].message.images 读取。
{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{"text": "已生成图片。"},
{"inlineData": {"mimeType": "image/png", "data": "BASE64_OUTPUT_IMAGE"}}
]
},
"finishReason": "STOP"
}
]
}原生接口的 imageConfig 使用 aspectRatio、imageSize,不要传 OpenAI 兼容入口的顶层 image_config。更多原生字段参见 Gemini 原生协议。