Gemini OpenAI 格式(生图)
图像系列
Gemini OpenAI 格式(生图)
Gemini imagine 系列:OpenAI 兼容 /v1/images/generations 与 /v1/images/edits
POST
Gemini OpenAI 格式(生图)
若使用 Gemini 原生
generateContent 生图,请参见 Gemini 原生(图像)。需要 extra_body.google 细粒度控制时,也可走 Gemini OpenAI 格式(对话) 的 /v1/chat/completions 入口(见文末附录)。/v1/images/generations 与 /v1/images/edits 接口直接调用。
Base URL:https://api.gravitex.ai
目录
- 认证
- 模型列表
- 接口总览
/v1/images/generations— 文生图 / 图生图/v1/images/edits— 图片编辑- 使用场景与示例
- 错误处理
- 计费规则
- 限制说明
- 最佳实践
- 常见问题
- 附录:与
/v1/chat/completions入口的对比
认证
所有接口使用 Bearer Token 认证。在 Gravitex AI 控制台 创建令牌后,在请求头中添加:模型列表
平台还会持续接入新的 imagine 系列模型,最新支持列表请在 Gravitex AI 控制台 模型页面查看。
接口总览
对 imagine 模型来说,/v1/images/generations与/v1/images/edits完全等价——传不传image字段决定是文生图还是图生图,而不是接口路径。选哪个看你用的 SDK 习惯(OpenAI Python SDK 中images.generatevsimages.edit)。
/v1/images/generations — 文生图 / 图生图
POST https://api.gravitex.ai/v1/images/generations
请求参数
image 字段格式
image 字段用于”图生图”——把一张或多张参考图喂给模型作为视觉上下文。支持以下两种 JSON 形态:
- URL 形态:网关会自动 fetch 并校验图片类型;URL 必须可公网访问,建议用 https。
- base64 / data URI 形态:网关自动 decode 并嗅探 MIME。
- 支持的图片格式:
image/png、image/jpeg、image/jpg、image/webp、image/heic、image/heif。 - 不支持
multipart/form-data上传文件——请把图片转成 base64 或先上传到对象存储拿到 URL。
size / quality 取值映射
imagine 模型的输出有限定档位(不像传统模型可任意指定像素),网关会自动把 OpenAI 风格的取值映射到模型支持的档位。
size → 宽高比
quality → 输出分辨率档位
响应格式
成功响应
Gemini imagine 模型在生成图片的同时常常会返回一段文字描述(“我帮您画了 X”),这段文字以revised_prompt+metadata.text形式返回,客户端可选择展示。usage字段格式与 OpenAI gpt-image-1 完全对齐,方便用 OpenAI SDK 的项目无缝接入。
错误响应
/v1/images/edits — 图片编辑
POST https://api.gravitex.ai/v1/images/edits
请求/响应格式与 /v1/images/generations 完全一致(同样接受 JSON + image 字段,返回相同结构)。区别仅在于 OpenAI Python SDK 中 images.edit 与 images.generate 是两个不同的方法,部分用户习惯按”编辑”语义走 edits 入口。
⚠️ 与 OpenAI 官方 dall-e-2 的/images/edits不同:本接口不支持multipart/form-data上传 +mask字段(imagine 模型靠 prompt 指挥编辑,不需要 mask)。image字段同 generations。
使用场景与示例
1. 纯文生图
最基础的使用方式:只传prompt。
2. 图生图 / 风格迁移
把一张照片改成赛博朋克风格——image 字段传单张参考图。
3. 多图融合
把多张参考图合成到一张图里——image 字段传字符串数组。
4. /v1/images/edits 等价调用
下面这个请求和 场景 2 完全等价,只是入口换成 edits:
5. 用 Python (openai SDK) 调用
images.edit 在我们这里也走 generations 协议;如要走 /v1/images/edits 入口,请用 client.images.edit(...)):
6. 用 Node.js (openai SDK) 调用
错误处理
请求失败时,HTTP 状态码 ≠ 200,响应体格式:常见错误码
被安全策略拦截(prompt_blocked)通常是 prompt 涉及未成年人不适宜内容、政治敏感、版权人物等。换一种描述方式或避开敏感主题即可。
计费规则
- 按”实际生成的图片张数”计费:上游真实返回了几张图就扣几张,请求里的
n参数不影响计费(见 限制说明)。 - 被 safety 拦截或返回零图时:不计费。
- 不同模型 /
quality档位的单价请在 Gravitex AI 控制台 - 模型价格 页面查看。 - 计费明细可在 令牌使用记录 页查看,每条记录包含
生成数量 N字段。
限制说明
最佳实践
- prompt 写法:imagine 模型对自然语言描述非常敏感,多用具体形容词(风格、色调、构图、镜头视角),避免空泛词汇。
- 图生图先小图试:第一次调试时建议把参考图缩到 512×512 以下,调通 prompt 后再上原图。
- 多次重试:图像生成有随机性,同一 prompt 可能首次效果不理想,建议提供”重新生成”按钮让用户多试几次。
- 敏感主题降级:如果业务可能涉及人物 / 名人 / 品牌 logo,建议在产品上加入”换一张”和”举报”按钮,被
prompt_blocked拦截时友好提示用户。 - 保存原始 base64:拿到
b64_json后立即保存到您自己的存储(OSS / S3),不要重复请求 Gravitex AI 拉取——上游不缓存历史结果。 - 善用
revised_prompt:模型返回的描述文本是免费的”产品文案”,可以直接展示在生成图下方提升用户体验。 size与quality组合:先用1K出草稿,定稿后再用2K出最终成片,可显著节省成本。
常见问题
Q1:为什么我传了 n=4,只拿到 1 张图?
A:Gemini imagine 模型上游单次调用只产出 1 张图,平台会按实际产出张数计费。需要多张请客户端多次调用,每次单独计费。
Q2:图生图能精确控制要改哪些区域吗?
A:imagine 模型不接受mask 字段,所有改动通过 prompt 描述(如”只把头发改成红色,其它保持不变”)。模型会理解 prompt 自动定位区域。
Q3:返回的 b64_json 没有 data:image/png;base64, 前缀,怎么用?
A:b64_json 是纯 base64 字符串,方便直接 decode 保存为文件。如果你要嵌入 HTML <img src>,自己拼接前缀即可:"data:image/png;base64," + b64_json。
Q4:能让模型只返回图片不返回文字吗?
A:当前不能——imagine 模型的特色就是图文一起返回,revised_prompt/metadata.text 字段可以选择不展示,但请求层面无法关闭。
Q5:图生图和文生图收费一样吗?
A:是的——按”输出图片张数 + 输出 quality 档位”计费,与是否带image 字段无关。
Q6:可以同时传文字 + 多张参考图吗?
A:可以。image 字段支持 string[],配合 prompt 描述融合方式,参考 场景 3:多图融合。
Q7:/v1/images/generations 和 /v1/chat/completions 调 imagine 模型有什么区别?
A:详见 附录。简单来说:
/v1/images/generations:协议简单(OpenAI Image API 标准),适合”我只要图片”的场景。/v1/chat/completions:能控制 Gemini 原生参数(imageConfig、safetySettings、thinking_config等),适合”需要细粒度控制”的场景。
附录:与 /v1/chat/completions 入口的对比
Gemini imagine 模型同时也可以走 OpenAI 的 /v1/chat/completions 接口(把 prompt 写成 message,把图片放进 content 数组)。两个入口对比:
切换示例(chat 入口 图生图):
choices[0].message.content 是数组:
