GPT-Image-2
curl --request POST \
--url https://api.gravitex.ai/v1/images/generations \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"image": [
"<string>"
],
"n": 123,
"size": "<string>",
"quality": "<string>",
"background": "<string>",
"output_format": "<string>",
"output_compression": 123,
"moderation": "<string>",
"user": "<string>"
}
'import requests
url = "https://api.gravitex.ai/v1/images/generations"
payload = {
"model": "<string>",
"prompt": "<string>",
"image": ["<string>"],
"n": 123,
"size": "<string>",
"quality": "<string>",
"background": "<string>",
"output_format": "<string>",
"output_compression": 123,
"moderation": "<string>",
"user": "<string>"
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
image: ['<string>'],
n: 123,
size: '<string>',
quality: '<string>',
background: '<string>',
output_format: '<string>',
output_compression: 123,
moderation: '<string>',
user: '<string>'
})
};
fetch('https://api.gravitex.ai/v1/images/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gravitex.ai/v1/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'prompt' => '<string>',
'image' => [
'<string>'
],
'n' => 123,
'size' => '<string>',
'quality' => '<string>',
'background' => '<string>',
'output_format' => '<string>',
'output_compression' => 123,
'moderation' => '<string>',
'user' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gravitex.ai/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image\": [\n \"<string>\"\n ],\n \"n\": 123,\n \"size\": \"<string>\",\n \"quality\": \"<string>\",\n \"background\": \"<string>\",\n \"output_format\": \"<string>\",\n \"output_compression\": 123,\n \"moderation\": \"<string>\",\n \"user\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gravitex.ai/v1/images/generations")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image\": [\n \"<string>\"\n ],\n \"n\": 123,\n \"size\": \"<string>\",\n \"quality\": \"<string>\",\n \"background\": \"<string>\",\n \"output_format\": \"<string>\",\n \"output_compression\": 123,\n \"moderation\": \"<string>\",\n \"user\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gravitex.ai/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image\": [\n \"<string>\"\n ],\n \"n\": 123,\n \"size\": \"<string>\",\n \"quality\": \"<string>\",\n \"background\": \"<string>\",\n \"output_format\": \"<string>\",\n \"output_compression\": 123,\n \"moderation\": \"<string>\",\n \"user\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body图像系列
GPT-Image-2
OpenAI GPT-Image-2:generations 端点主打文生图,edits 端点主打图生图
POST
/
v1
/
images
/
generations
GPT-Image-2
curl --request POST \
--url https://api.gravitex.ai/v1/images/generations \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"image": [
"<string>"
],
"n": 123,
"size": "<string>",
"quality": "<string>",
"background": "<string>",
"output_format": "<string>",
"output_compression": 123,
"moderation": "<string>",
"user": "<string>"
}
'import requests
url = "https://api.gravitex.ai/v1/images/generations"
payload = {
"model": "<string>",
"prompt": "<string>",
"image": ["<string>"],
"n": 123,
"size": "<string>",
"quality": "<string>",
"background": "<string>",
"output_format": "<string>",
"output_compression": 123,
"moderation": "<string>",
"user": "<string>"
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
image: ['<string>'],
n: 123,
size: '<string>',
quality: '<string>',
background: '<string>',
output_format: '<string>',
output_compression: 123,
moderation: '<string>',
user: '<string>'
})
};
fetch('https://api.gravitex.ai/v1/images/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gravitex.ai/v1/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'prompt' => '<string>',
'image' => [
'<string>'
],
'n' => 123,
'size' => '<string>',
'quality' => '<string>',
'background' => '<string>',
'output_format' => '<string>',
'output_compression' => 123,
'moderation' => '<string>',
'user' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gravitex.ai/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image\": [\n \"<string>\"\n ],\n \"n\": 123,\n \"size\": \"<string>\",\n \"quality\": \"<string>\",\n \"background\": \"<string>\",\n \"output_format\": \"<string>\",\n \"output_compression\": 123,\n \"moderation\": \"<string>\",\n \"user\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gravitex.ai/v1/images/generations")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image\": [\n \"<string>\"\n ],\n \"n\": 123,\n \"size\": \"<string>\",\n \"quality\": \"<string>\",\n \"background\": \"<string>\",\n \"output_format\": \"<string>\",\n \"output_compression\": 123,\n \"moderation\": \"<string>\",\n \"user\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gravitex.ai/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image\": [\n \"<string>\"\n ],\n \"n\": 123,\n \"size\": \"<string>\",\n \"quality\": \"<string>\",\n \"background\": \"<string>\",\n \"output_format\": \"<string>\",\n \"output_compression\": 123,\n \"moderation\": \"<string>\",\n \"user\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body简介
GPT-Image-2 具备真实世界智能、多语言理解、4K 分辨率支持和智能路由层,提供双端点适配方案:| 端点 | 定位 | 说明 |
|---|---|---|
POST /v1/images/generations | 文生图 | 纯文本 prompt 直接生成图像,是文生图的推荐入口 |
POST /v1/images/edits | 图生图 | 专业图像编辑能力,支持原图局部重绘、多参考图融合等精细化编辑场景,支持 JSON 和 multipart/form-data 两种请求格式 |
b64_json)并附带 usage token 统计。
能力对比
| 能力 | OpenAI 官方接口 | Gravitex AI(generations 端点) |
|---|---|---|
| 文生图(text-to-image) | ✅ 支持 | ✅ 支持 |
| 图生图(image-to-image) | ❌ 仅 edits 端点支持 | ✅ 额外支持 |
| 文 + 图混合输入 | ❌ | ✅ 支持 |
在 OpenAI 官方定义中,
gpt-image-2 的 /v1/images/generations 端点为纯文生图接口,仅接收文本 prompt,不支持传入图片进行图生图,官方的图生图能力仅通过 /v1/images/edits 端点提供。我们对 /v1/images/generations 做了能力扩展:额外支持图生图(image-to-image),你可以在该端点同时传入文本 prompt 与图片,由模型基于输入图片进行再创作、风格迁移、内容参考或局部重绘。认证
string
必填
Bearer Token,如
Bearer sk-xxxxxxxxxxstring
必填
JSON 请求为
application/json;multipart 上传为 multipart/form-data支持的模型
| 模型 ID | 说明 |
|---|---|
gpt-image-2 | OpenAI GPT-Image-2,支持 4K 与多尺寸,两个端点通用 |
通用参数说明
两个端点的参数集合完全一致,说明如下。string
必填
固定值
gpt-image-2string
必填
图像描述文本(文生图)或编辑描述文本(图生图)
string | string[]
图生图的输入图片。单张传字符串、多张传数组;支持 URL 或 base64 data URI。文生图时不传该字段
integer
默认值:"1"
生成图片数量,范围
1-10string
默认值:"1024x1024"
图片尺寸,见下方 size 可选值
string
默认值:"high"
图片质量:
low、medium、high、autostring
默认值:"auto"
背景透明度,可选
auto、opaque。传 transparent 会直接报错string
默认值:"png"
返回图片格式:
png、jpegnumber
默认值:"100"
压缩率,取值
0–100,仅 jpeg 生效string
默认值:"auto"
内容审核严格度:
auto、low(更宽松)string
终端用户标识,用于滥用检测
size 可选值
| 值 | 说明 |
|---|---|
1024x1024 | 正方形(默认) |
1024x1536 | 竖版 |
1536x1024 | 横版 |
2880x2880 | 4K 正方形 |
2048x3072 | 4K 竖版 |
3072x2048 | 4K 横版 |
自定义 WxH | 每维须为 16 的倍数,总像素 655,360 ~ 8,294,400 |
quality 可选值
| 值 | 说明 |
|---|---|
low | 低质量,生成速度快 |
medium | 中等质量 |
high | 高质量(默认) |
auto | 自动选择最佳质量 |
文生图:POST /v1/images/generations
以文本描述生成图像。只需传入 model 与 prompt,即可按指定尺寸、质量输出图片,适用于创意生成、素材生产等纯文本驱动的场景。
请求示例
- 基础
- 完整参数
curl -X POST "https://api.gravitex.ai/v1/images/generations" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "一只在星空下奔跑的白色猫咪,赛博朋克风格",
"size": "1024x1536",
"quality": "high",
"n": 1
}'
curl -X POST "https://api.gravitex.ai/v1/images/generations" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "美丽的欧洲中世纪公主,金色长发,蓝色大眼睛,身着华丽的白色蕾丝长裙,头戴水晶王冠,站在古老城堡的阳台上,阳光洒在身上。",
"n": 1,
"size": "2048x1152",
"quality": "medium",
"background": "opaque",
"output_format": "jpeg",
"output_compression": 95,
"moderation": "low",
"user": "biz_test_001"
}'
响应示例
{
"created": 1786436787,
"background": "opaque",
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUh..."
}
],
"output_format": "png",
"quality": "medium",
"size": "2048x1152",
"usage": {
"input_tokens": 65,
"input_tokens_details": {
"image_tokens": 0,
"text_tokens": 65
},
"output_tokens": 1413,
"output_tokens_details": {
"image_tokens": 1413,
"text_tokens": 0
},
"total_tokens": 1478
}
}
该端点同样支持图生图。 在文生图请求的基础上额外携带
image 字段(URL 或 base64 data URI,单图传字符串、多图传数组),系统会自动将请求路由到图像编辑处理流程,无需切换端点,接口统一、使用简单。image 字段的输入图片数量无硬性上限,受上游总 token 限制约束;单张图片最大 50MB。- 单图编辑
- 多图融合
- base64 输入
curl -X POST "https://api.gravitex.ai/v1/images/generations" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "帮我在这张图的基础上加一点郁金香的元素",
"image": "https://example.com/input.png",
"n": 1,
"size": "2048x1152",
"quality": "medium",
"background": "opaque",
"output_format": "jpeg",
"output_compression": 95,
"moderation": "low",
"user": "biz_test_001"
}'
curl -X POST "https://api.gravitex.ai/v1/images/generations" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "将 2 张图片风格融合",
"image": [
"https://example.com/input1.jpeg",
"https://example.com/input2.jpeg"
],
"n": 1,
"size": "2048x1152",
"quality": "medium",
"output_format": "jpeg",
"output_compression": 95,
"user": "biz_test_001"
}'
curl -X POST "https://api.gravitex.ai/v1/images/generations" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "夏日郊野自然风光,澄澈蓝天蓬松白云,蜿蜒清澈小河,两岸茂密青草地,8K 超清,治愈森系风景",
"image": "data:image/png;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2...",
"n": 1,
"size": "2048x1152",
"quality": "medium",
"output_format": "jpeg",
"output_compression": 95,
"user": "biz_test_001"
}'
usage.input_tokens_details.image_tokens 大于 0,反映输入图片消耗的 token 数:
{
"created": 1786438823,
"background": "opaque",
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSU..."
}
],
"output_format": "jpeg",
"quality": "medium",
"size": "2048x1152",
"usage": {
"input_tokens": 1048,
"input_tokens_details": {
"image_tokens": 1024,
"text_tokens": 24
},
"output_tokens": 1413,
"output_tokens_details": {
"image_tokens": 1413,
"text_tokens": 0
},
"total_tokens": 2461
}
}
{
"created": 1786439615,
"background": "opaque",
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgAACAAAAASACAIA..."
}
],
"output_format": "jpeg",
"quality": "medium",
"size": "2048x1152",
"usage": {
"input_tokens": 2064,
"input_tokens_details": {
"image_tokens": 2048,
"text_tokens": 16
},
"output_tokens": 1413,
"output_tokens_details": {
"image_tokens": 1413,
"text_tokens": 0
},
"total_tokens": 3477
}
}
图生图:POST /v1/images/edits
标准的 OpenAI 图像编辑端点,以参考图为基础进行再创作、风格迁移、局部重绘与多图融合,支持 JSON 和 multipart/form-data 两种请求格式。
方式一:multipart/form-data
适用于直接上传本地图片文件。图片字段使用
image[](即使只有一张图片也可用 image[])。- 单图
- 多图
curl -X POST "https://api.gravitex.ai/v1/images/edits" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-F "model=gpt-image-2" \
-F "prompt=商业服装模特三视图参考图,纯白背景" \
-F "image[]=@你的本地图片文件名.png" \
-F "n=1" \
-F "size=2048x1152" \
-F "quality=medium" \
-F "background=opaque" \
-F "output_format=png" \
-F "output_compression=100" \
-F "moderation=low" \
-F "user=biz_test_001"
curl -X POST "https://api.gravitex.ai/v1/images/edits" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-F "model=gpt-image-2" \
-F "prompt=商业服装模特三视图参考图,纯白背景" \
-F "image[]=@你的本地图片文件名1.png" \
-F "image[]=@你的本地图片文件名2.png" \
-F "n=1" \
-F "size=2048x1152" \
-F "quality=medium" \
-F "background=opaque" \
-F "output_format=png" \
-F "output_compression=100" \
-F "moderation=low" \
-F "user=biz_test_001"
方式二:JSON
适用于传入图片 URL 或 base64 编码的图片,请求参数与 generations 端点的图生图完全一致。- 单图
- 多图
- base64 输入
curl -X POST "https://api.gravitex.ai/v1/images/edits" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "帮我在这张图的基础上加一点郁金香的元素",
"image": "https://example.com/input.png",
"n": 1,
"size": "2048x1152",
"quality": "medium",
"background": "opaque",
"output_format": "jpeg",
"output_compression": 95,
"moderation": "low",
"user": "biz_test_001"
}'
curl -X POST "https://api.gravitex.ai/v1/images/edits" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "将 2 张图片风格融合",
"image": [
"https://example.com/input1.png",
"https://example.com/input2.jpeg"
],
"n": 2,
"size": "2048x1152",
"quality": "medium",
"background": "opaque",
"output_format": "jpeg",
"output_compression": 95,
"moderation": "low",
"user": "biz_test_001"
}'
curl -X POST "https://api.gravitex.ai/v1/images/edits" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "将背景改为海滩日落",
"image": "data:image/png;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2...",
"n": 1,
"size": "1024x1024",
"quality": "high"
}'
该端点同样支持文生图。 不传
image 字段、仅提供 model 与 prompt 时,请求会按纯文本生成处理,输出结果与 /v1/images/generations 的文生图一致,方便已接入 edits 的应用统一走单一端点。curl -X POST "https://api.gravitex.ai/v1/images/edits" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "一只在星空下奔跑的白色猫咪,赛博朋克风格",
"size": "1024x1536",
"quality": "high",
"n": 1
}'
响应字段说明
所有端点返回格式一致:| 字段 | 类型 | 说明 |
|---|---|---|
created | integer | 创建时间戳 |
background | string | 背景类型(opaque 不透明 / auto 自动) |
data | array | 生成的图片数组 |
data[].b64_json | string | base64 编码的图片数据 |
output_format | string | 输出图片格式(png / jpeg) |
quality | string | 实际使用的图片质量 |
size | string | 实际使用的图片尺寸 |
usage | object | token 用量统计 |
usage 字段说明
| 字段 | 说明 |
|---|---|
input_tokens | 输入 token 总数(文本 + 图片) |
output_tokens | 输出 token 总数(图片输出) |
total_tokens | 总 token 数 |
input_tokens_details.text_tokens | 文本输入 token 数 |
input_tokens_details.image_tokens | 图片输入 token 数(文生图时为 0,图生图时 > 0) |
- GPT-Image-2 始终返回 base64 编码的图片数据(
b64_json),不支持response_format=url。 output_tokens全部为图片输出 token,该模型无文本输出。- 计费按 token 维度区分:文本输入、图片输入、图片输出各有独立单价。
定价
所有价格均为每 1M tokens 的美元价格,基于上游返回的 usage tokens 计费。| 类型 | 价格($/1M tokens) |
|---|---|
| Text Input Tokens | $5.00 |
| Image Input Tokens | $8.00 |
| Cached Text Input Tokens | $1.25 |
| Cached Image Input Tokens | $2.00 |
| Image Output Tokens | $30.00 |
注意事项
- 图片生成通常需要 10-30 秒,具体取决于尺寸和质量设置
- 始终返回 base64 编码的图片数据
- 支持的输入图片格式:PNG、JPEG、WebP;输出图片格式:PNG、JPEG
- 4K 分辨率生成时间更长,建议优先使用标准尺寸
quality设置为low可以显著加快生成速度gpt-image-2始终以高保真处理输入图片,无需也不支持传input_fidelity参数- 单张上传图片最大 50MB
- 输出图片数量
n范围为 1-10 - 输入图片数量无硬性上限,受上游总 token 限制约束
- 该模型无文本输出,
output_tokens全部为图片输出 token background只支持auto(默认)和opaque,传transparent会直接报错
相关资源
图片生成
多模型图片生成接口总览
图像编辑
更多 edits 端点用法与示例
