
GPT Image 2.5 API 接入教程:Flare 和 Sunburst 怎么选,附 image2 API 迁移代码
GPT Image 2.5 API 接入教程:Flare 和 Sunburst 怎么选,Python、Node.js、cURL 代码可直接复制,附尺寸规则、16 张参考图编辑、报错处理和 image2 API 迁移清单。
2026 年 9 月更新:本文已按 GPT Image 2.5 重写,示例代码默认使用 gpt-image-2.5-flare,继续用 gpt-image-2 时需要注意的地方也单独标了出来。
OpenAI 在 2026 年 9 月 8 日(北京时间 9 月 9 日)发布了 GPT Image 2.5。API 里它是两个模型:gpt-image-2.5-flare 和 gpt-image-2.5-sunburst。接口地址、base64 返回格式和大部分参数都和 gpt-image-2(不少人习惯叫它 image2)一样,已经接好 image2 API 的项目,主要是改模型名,再决定新增的 xhigh、max 档位用不用。
GPT Image 2.5 API 模型怎么选:Flare、Sunburst 还是 GPT Image 2
| 模型 ID | 适合做什么 | 相对速度 | quality 可选值 | 备注 |
|---|---|---|---|---|
gpt-image-2.5-flare | OpenAI 给大多数应用的默认选择:创作者内容、产品内的生图功能、视觉搜索、大批量生成 | 三者中最快,OpenAI 称延迟比 GPT Image 2 低约 50% | low、medium、high、xhigh、max、auto | OpenAI 称画质高于 GPT Image 2。快照:gpt-image-2.5-flare-2026-09-08 |
gpt-image-2.5-sunburst | 需要在多轮编辑中把控细节的高要求工作:可直接投放的广告创意、精修产品图 | 比 Flare 慢,OpenAI 明确提到生成时间更长 | low、medium、high、xhigh、max、auto | 快照:gpt-image-2.5-sunburst-2026-09-08 |
gpt-image-2 | 已经在跑、还没在 2.5 上重测过的项目 | 比 Flare 慢 | low、medium、high、auto | 支持 Batch API(截至 2026 年 9 月 15 日,2.5 不支持)。快照:gpt-image-2-2026-04-21 |
一般直接用 Flare。同一张图要来回改好几轮、每一轮都得把细节控制住,再把这类任务交给 Sunburst。两个模型用同一批提示词跑出来差在哪、各要等多久,可以看本站的 Flare 和 Sunburst 6 组实测。
和 Images 2.0 相比,OpenAI 给 2.5 列了四项改进:光影更自然、纹理更丰富;参考照片里的主体保留得更好;多轮编辑时更能按指令改;延迟更低。
表里故意没写价格。API 按 token 计费,OpenAI 的模型页写明 2.5 的 token 单价与 GPT Image 2 相同。单价相同,单张图的成本却不一定相同:同样的设置下,2.5 消耗的 token 数可能不一样。做预算前先看 OpenAI API 定价页,再用自己的真实请求测一测。
想先试提示词、暂时不写代码,可以打开 GPT Image 2.5:浏览器里直接跑 Flare 和 Sunburst,不需要 ChatGPT 账号,附免费体验积分。
GPT Image 2.5 和 GPT Image 2 的 API Key 去哪里拿
- 在 OpenAI 后台创建 Key。 登录 OpenAI API 平台,进入 API keys 页面新建。OpenAI 的开发者快速入门里有直达入口。
- 先充值。 图像生成是付费功能,三个模型的模型页在限流表里都把免费档标为不支持。
- 确认组织认证。 OpenAI 的图像生成指南提到,使用 GPT Image 模型前,可能需要先完成 API Organization Verification(组织认证)。
- 把 Key 放进环境变量。 两个官方 SDK 都会自动读取
OPENAI_API_KEY,代码里不必出现 Key。
# macOS / Linux
export OPENAI_API_KEY="sk-proj-your-key-here"
# Windows PowerShell
setx OPENAI_API_KEY "sk-proj-your-key-here"国内团队:托管 API Key
如果团队在国内开发、担心直连 OpenAI 不稳定,或者希望由一个中转服务统一处理失败切换和汇总计费,可以发邮件到 support@gpt-image2.art 申请可商用的 GPT Image 2 中转 API Key。中转沿用 OpenAI 的 gpt-image-2 模型名和参数。GPT Image 2.5 Flare / Sunburst 的接入,也可以发邮件咨询。
GPT Image 2.5 API 快速上手:Python、Node.js、cURL
安装 SDK
# Python 3.10 及以上
pip install --upgrade openai
# Node.js 22 及以上
npm install openai@latestopenai-python 当前版本要求 Python 3.10+,openai-node 支持 Node.js 22 及以上。已经装过 SDK 也建议升级:新版本的类型定义里才有 2.5 的模型 ID 和新增的 quality 值。
用 Python 调用 GPT Image 2.5
import base64
from openai import OpenAI
client = OpenAI() # 自动读取 OPENAI_API_KEY
result = client.images.generate(
model="gpt-image-2.5-flare",
prompt=(
"一只白色不锈钢保温瓶立在米色亚麻桌布上,"
"清晨柔和的窗光,高级产品摄影"
),
size="1024x1024",
quality="medium",
)
with open("bottle.png", "wb") as f:
f.write(base64.b64decode(result.data[0].b64_json))GPT 图像模型一律把图片以 base64 放在 b64_json 里返回,所以代码要自己解码、写文件。一个请求要出多张图,就设置 n(取值 1 到 10)。
用 Node.js 调用 GPT Image 2.5
// generate.mjs
import fs from 'node:fs';
import OpenAI from 'openai';
const client = new OpenAI(); // 自动读取 OPENAI_API_KEY
const result = await client.images.generate({
model: 'gpt-image-2.5-flare',
prompt: '一只白色不锈钢保温瓶立在米色亚麻桌布上,清晨柔和的窗光,高级产品摄影',
size: '1024x1024',
quality: 'medium',
});
fs.writeFileSync('bottle.png', Buffer.from(result.data[0].b64_json, 'base64'));文件用 .mjs 后缀,顶层 await 才能直接运行。Key 写在 .env 文件里的话,用 node --env-file=.env generate.mjs 启动。
用 cURL 调用 GPT Image 2.5
curl -s https://api.openai.com/v1/images/generations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.5-flare",
"prompt": "一只白色不锈钢保温瓶立在米色亚麻桌布上,清晨柔和的窗光",
"size": "1024x1024",
"quality": "medium"
}' \
| jq -r '.data[0].b64_json' | base64 --decode > bottle.png返回的是 JSON,图片在 data[0].b64_json 字段里,所以命令后面接了 jq 和 base64 解码。如果 bottle.png 是空的或打不开,去掉管道重新请求一次,看返回的报错内容。
还在用 GPT Image 2? 上面三段代码把 model 换成 gpt-image-2(或锁定版本 gpt-image-2-2026-04-21),其余部分不用改。
GPT Image 2.5 API 参数表(与 GPT Image 2 的差异)
| 参数 | 取值 | GPT Image 2.5(Flare、Sunburst) | GPT Image 2 |
|---|---|---|---|
model | 模型 ID 或带日期的快照 | gpt-image-2.5-flare、gpt-image-2.5-sunburst | gpt-image-2 |
prompt | 文本,最长 32,000 字符 | 相同 | 相同 |
size | auto、1024x1024、1536x1024、1024x1536 或自定义 WIDTHxHEIGHT | 支持自定义,规则见下一节 | 相同 |
quality | low、medium、high、xhigh、max、auto(默认) | 六个都支持 | 不支持 xhigh 和 max |
background | auto(默认)、opaque、transparent | 支持透明背景,需搭配 png 或 webp | 透明背景为预览功能 |
output_format | png(默认)、jpeg、webp | 相同 | 相同 |
output_compression | 0 到 100,仅对 jpeg 和 webp 生效 | 相同 | 相同 |
n | 1 到 10 | 相同 | 相同 |
moderation(生成) | auto(默认),或过滤更宽松的 low | 相同 | 相同 |
stream、partial_images | true 或 false,过程图 0 到 3 张 | 相同 | 相同 |
user | 你应用里终端用户的稳定 ID,便于 OpenAI 监测滥用 | 相同 | 相同 |
image(编辑) | 最多 16 个 PNG、WebP、JPG 文件,每个小于 50 MB | 相同 | 相同 |
mask(编辑) | 带 alpha 通道的 PNG,小于 4 MB,尺寸与原图一致 | 相同 | 相同 |
input_fidelity(编辑) | high 或 low | SDK 类型定义里有(默认 low),依赖它之前先实测 | 不要传:gpt-image-2 始终以高保真读取输入图 |
旧版教程的参数表里还列了 resolution、image_urls、callback_url,以及 16:9 这种比例写法的 size。这些是部分中转服务自己的参数,OpenAI 的 Image API 里没有。直连 OpenAI 时,分辨率靠 size 控制,参考图以文件形式上传。
GPT Image 2.5 API 尺寸与分辨率规则
size 可以填 auto、三个标准尺寸,或自定义的 WIDTHxHEIGHT。gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst 共用同一套规则:
- 宽和高都必须是 16 的倍数。
- 宽高比在 1:3 到 3:1 之间。
- 任何一边都不超过 3840 px。
- 总像素在 655,360 到 8,294,400 之间,所以 16:9 最大就是
3840x2160。 - 超过
2560x1440的分辨率,OpenAI 标注为实验性。
size | 是否有效 | 原因 |
|---|---|---|
1536x864 | 是 | 16:9,两边都能被 16 整除 |
2048x1152 | 是 | 约 2K 的 16:9 |
2560x1440 | 是 | 非实验范围内最大的 16:9 |
3840x2160 | 是,实验性 | 上限 |
2160x3840 | 是,实验性 | 像素数到顶的 9:16 竖图 |
1920x1080 | 否 | 1080 不是 16 的倍数,改用 1920x1088(接近 16:9)或 2048x1152 |
512x512 | 否 | 只有 262,144 像素,低于下限 |
2560x640 | 否 | 4:1 超出了 3:1 |
发请求前在本地先校验一遍,无效尺寸就不用等接口来报错:
def check_size(size: str) -> str:
"""发请求前预检尺寸,适用于 gpt-image-2 和 GPT Image 2.5 系列。"""
if size == "auto":
return size
width, height = (int(v) for v in size.lower().split("x"))
problems = []
if width % 16 or height % 16:
problems.append("宽和高必须是 16 的倍数")
if max(width, height) > 3 * min(width, height):
problems.append("宽高比必须在 1:3 到 3:1 之间")
if max(width, height) > 3840:
problems.append("任何一边都不能超过 3840 px")
if not 655_360 <= width * height <= 8_294_400:
problems.append("总像素必须在 655,360 到 8,294,400 之间")
if problems:
raise ValueError(f"{size}:" + ";".join(problems))
return sizeOpenAI 还说明,尺寸同时要满足模型当前的像素和边长限制,所以这段代码只是预检,不能保证请求一定通过。
quality 档位与延迟
OpenAI 的指南建议打草稿用 low;出最终成品时,把几个高档位的结果放在一起比较,再权衡细节、延迟和成本。同一份指南还提到,复杂提示词最长可能要两分钟,jpeg 输出比 png 返回得快。
GPT Image 2.5 图片编辑与图生图:一次最多传 16 张参考图
编辑接口可以改一张现有图片、用参考图生成新图,或者只改蒙版(mask)圈出的区域。一次请求最多 16 张图,每张为 PNG、WebP 或 JPG,小于 50 MB。
curl -s https://api.openai.com/v1/images/edits \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F "model=gpt-image-2.5-flare" \
-F "image[]=@bottle.png" \
-F "image[]=@label-artwork.png" \
-F "image[]=@marble-counter.jpg" \
-F "image[]=@lemons.webp;type=image/webp" \
-F "prompt=把保温瓶放到大理石台面上,瓶身包上那张纸质标签图案,旁边摆两个柠檬。瓶子的形状和瓶盖保持不变。" \
-F "size=1536x1024" \
-F "quality=high" \
| jq -r '.data[0].b64_json' | base64 --decode > bottle-counter.png每张参考图写一行 -F "image[]=@文件名"。方括号要保留:官方 SDK 发送图片数组时,用的字段名就是 image[]。curl 会按扩展名给 .png、.jpg 带上 image/png、image/jpeg,但 .webp 可能被当成 application/octet-stream 发出去,所以 WebP 那一行手动指定了类型。
同样的请求,Python 写法:
import base64
from pathlib import Path
from openai import OpenAI
client = OpenAI()
MIME = {".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp"}
refs = ["bottle.png", "label-artwork.png", "marble-counter.jpg", "lemons.webp"]
def as_upload(path: str):
p = Path(path)
return (p.name, p.read_bytes(), MIME[p.suffix.lower()])
result = client.images.edit(
model="gpt-image-2.5-flare",
image=[as_upload(p) for p in refs], # 最多 16 个文件
prompt=(
"把保温瓶放到大理石台面上,瓶身包上那张纸质标签图案,"
"旁边摆两个柠檬。瓶子的形状和瓶盖保持不变。"
),
size="1536x1024",
quality="high",
)
Path("bottle-counter.png").write_bytes(base64.b64decode(result.data[0].b64_json))Node.js 写法:
// edit.mjs
import fs from 'node:fs';
import path from 'node:path';
import OpenAI, { toFile } from 'openai';
const client = new OpenAI();
const MIME = { '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.webp': 'image/webp' };
const refs = ['bottle.png', 'label-artwork.png', 'marble-counter.jpg', 'lemons.webp'];
const images = await Promise.all(
refs.map((file) =>
toFile(fs.createReadStream(file), path.basename(file), {
type: MIME[path.extname(file).toLowerCase()],
}),
),
);
const result = await client.images.edit({
model: 'gpt-image-2.5-flare',
image: images, // 最多 16 个文件
prompt: '把保温瓶放到大理石台面上,瓶身包上那张纸质标签图案,旁边摆两个柠檬。瓶子的形状和瓶盖保持不变。',
size: '1536x1024',
quality: 'high',
});
fs.writeFileSync('bottle-counter.png', Buffer.from(result.data[0].b64_json, 'base64'));写编辑请求的几条建议:
- 按内容指代参考图,比如“那张纸质标签图案”,别写“第二张图”。以后调整文件顺序,提示词照样读得通。
- 写明哪些地方不能动。 提示词只写要改什么,其余部分就可能被模型自由发挥。
- 用蒙版限定范围。 cURL 加
-F "mask=@mask.png",SDK 里传mask=。蒙版是带 alpha 通道的 PNG,小于 4 MB,格式和尺寸都要与被编辑的原图一致;传了多张图时,蒙版只作用于第一张。OpenAI 说明 GPT Image 的蒙版编辑完全靠提示词驱动,模型只把蒙版当参考,改动范围不一定严格贴合蒙版形状。
从 image2 API(gpt-image-2)迁移到 GPT Image 2.5
多数项目真正要改的只有一行,下面的示例顺带锁定了带日期的快照:
result = client.images.generate(
- model="gpt-image-2",
+ model="gpt-image-2.5-flare-2026-09-08",
prompt=prompt,
size="1536x1024",
quality="high",
)切生产流量之前,按这份清单过一遍:
- 改模型名。
gpt-image-2换成gpt-image-2.5-flare或gpt-image-2.5-sunburst。OpenAI 的模型列表里没有单独的gpt-image-2.5。 - 锁定带日期的快照。
gpt-image-2.5-flare-2026-09-08和gpt-image-2.5-sunburst-2026-09-08会固定模型版本,作用和 GPT Image 2 的gpt-image-2-2026-04-21一样。以后换新快照前,先把提示词测试重跑一遍。 - 给新 quality 档位加判断。 如果同一段代码同时服务新老模型,要确保
xhigh、max不会发给gpt-image-2。 - 尺寸规则不变。 三个模型的自定义
WIDTHxHEIGHT规则相同(见上文尺寸一节),check_size可以直接复用。 - 透明背景两个 2.5 模型都支持。 在
gpt-image-2上它仍是预览功能。 - 留意 Batch API。 截至 2026 年 9 月 15 日,OpenAI 模型页显示
gpt-image-2支持 Batch,两个 2.5 模型都不支持。走 Batch 的任务先留在gpt-image-2上。 - 对比 token 用量。 拿一批真实请求分别在两个模型上跑,记下
usage,再决定切多少流量过去。 - 检查超时设置。 用 Sunburst 时尤其要注意。SDK 默认最多等 10 分钟,但你链路上的网关、Serverless 平台或任务队列,可能更早就断开了。
- 重测编辑类提示词。 OpenAI 说 2.5 对参考照片里主体的保留更好,当初为防止
gpt-image-2偏离参考图而加的约束,放到 2.5 上效果可能不一样。
其余部分照旧:生成和编辑两个接口、SDK 方法、base64 返回、参考图和蒙版,以及参数表里的其他参数。OpenAI 官方指南已建议新接入直接用 2.5,gpt-image-2 也仍然可用,并保留自己的快照。
GPT Image 2.5 API 批量生成与并发控制
图像模型按分钟限制 token 数(TPM)和出图张数(IPM),上限随使用档位(usage tier)提高。每个模型页都列了各档位的数值,比如 GPT Image 2.5 Flare 模型页。一口气发一百个请求很快就会撞上限,所以要控制并发。
Python 用 asyncio:
import asyncio
import base64
from openai import AsyncOpenAI
client = AsyncOpenAI(max_retries=4)
async def generate_one(i: int, prompt: str, sem: asyncio.Semaphore) -> None:
async with sem:
result = await client.images.generate(
model="gpt-image-2.5-flare",
prompt=prompt,
size="1024x1024",
quality="low",
)
with open(f"draft-{i:03}.png", "wb") as f:
f.write(base64.b64decode(result.data[0].b64_json))
async def main(prompts: list[str], concurrency: int = 4) -> None:
sem = asyncio.Semaphore(concurrency)
results = await asyncio.gather(
*(generate_one(i, p, sem) for i, p in enumerate(prompts)),
return_exceptions=True,
)
for i, r in enumerate(results):
if isinstance(r, Exception):
print(f"第 {i} 条失败:{r!r}")
asyncio.run(main(["提示词一", "提示词二", "提示词三"]))Node.js 用 p-limit(先 npm install p-limit):
// batch.mjs
import fs from 'node:fs';
import OpenAI from 'openai';
import pLimit from 'p-limit';
const client = new OpenAI({ maxRetries: 4 });
const limit = pLimit(4);
const prompts = ['提示词一', '提示词二', '提示词三'];
const results = await Promise.allSettled(
prompts.map((prompt, i) =>
limit(async () => {
const result = await client.images.generate({
model: 'gpt-image-2.5-flare',
prompt,
size: '1024x1024',
quality: 'low',
});
fs.writeFileSync(`draft-${i}.png`, Buffer.from(result.data[0].b64_json, 'base64'));
}),
),
);
results.forEach((r, i) => {
if (r.status === 'rejected') console.error(`第 ${i} 条失败:`, r.reason?.message);
});两个 SDK 本身就会对连接错误、408、409、429 和 5xx 自动重试两次,并带短暂的指数退避。想多试几次,就调大 max_retries(Python)或 maxRetries(Node.js),不要在外面再包一层重试循环。
GPT Image 2.5 流式返回过程图
打开 stream 后,API 会在最终图之前先推送最多 3 张过程图,适合在界面上做进度预览。OpenAI 的图像生成指南用 2.5 模型演示了这个用法。如果最终图先生成完,收到的过程图可能比设置的少;每张过程图还会额外计 100 个图像输出 token。
import base64
from openai import OpenAI
client = OpenAI()
stream = client.images.generate(
model="gpt-image-2.5-flare",
prompt="一只白色不锈钢保温瓶立在米色亚麻桌布上",
size="1024x1024",
stream=True,
partial_images=2,
)
for event in stream:
if event.type == "image_generation.partial_image":
name = f"preview-{event.partial_image_index}.png"
elif event.type == "image_generation.completed":
name = "final.png"
else:
continue
with open(name, "wb") as f:
f.write(base64.b64decode(event.b64_json))// stream.mjs
import fs from 'node:fs';
import OpenAI from 'openai';
const client = new OpenAI();
const stream = await client.images.generate({
model: 'gpt-image-2.5-flare',
prompt: '一只白色不锈钢保温瓶立在米色亚麻桌布上',
size: '1024x1024',
stream: true,
partial_images: 2,
});
for await (const event of stream) {
if (event.type === 'image_generation.partial_image') {
fs.writeFileSync(`preview-${event.partial_image_index}.png`, Buffer.from(event.b64_json, 'base64'));
} else if (event.type === 'image_generation.completed') {
fs.writeFileSync('final.png', Buffer.from(event.b64_json, 'base64'));
}
}读取流的过程中出错时,Python SDK 不会自动重试,因为重放请求可能让你重复收到已经拿到的内容。断流要在自己的代码里处理。
GPT Image 2.5 API 报错:状态码、原因和处理办法
| 状态码与 SDK 异常 | 图像请求里的常见原因 | 怎么处理 |
|---|---|---|
400 BadRequestError | 参数不合法:尺寸不符合规则、模型不支持的 quality 档位、不被允许的背景与格式组合、图片数量超限、蒙版与原图不匹配 | 修改请求。同样的参数重发还会失败 |
400 且 code: "moderation_blocked" | 提示词、输入图或生成结果被安全系统拦截。如果附带了 moderation_details,其中的 moderation_stage 会标明是 input 还是 output | 修改提示词或图片,不要自动重试 |
401 AuthenticationError | Key 错误、已撤销、复制时多了空格,或者用了其他组织、项目的 Key | 检查 OPENAI_API_KEY,必要时新建一个 |
403 PermissionDeniedError | 例如从 API 不支持的国家或地区发起请求 | 查看 OpenAI 的错误码说明 |
429 RateLimitError(限流或 slow_down) | 超过了当前档位每分钟的 token 数或出图数;slow_down 则是请求量涨得太快,没超限也可能出现 | 退避后重试,有 Retry-After 就按它等,同时降低并发 |
| 429 且带计费类 code | credit_balance_exhausted,或触发了组织、项目的消费上限(spend limit),或组织的用量上限(usage limit) | 充值或调高上限,重试没有用 |
500 InternalServerError | 服务端故障 | 稍等后重试 |
503 且 server_is_overloaded | 模型暂时过载 | 有 Retry-After 就按它等,然后重试 |
APIConnectionError、APITimeoutError | 网络问题或客户端超时 | 重试,耗时长的任务调大客户端超时 |
Node.js 里的异常类名称基本一一对应(OpenAI.BadRequestError、OpenAI.RateLimitError 等,超时对应 APIConnectionTimeoutError),每个异常都能读取 err.status、err.code 和 err.requestID。下面的 Python 示例把失败分成几类,任务队列可以按类别决定下一步。示例关掉了 SDK 自带的重试:SDK 会重试所有 429,连充值才能解决的计费错误也会重试,这里交给任务队列判断要不要重来:
import base64
import openai
from openai import OpenAI
client = OpenAI(max_retries=0) # 重试交给任务队列决定
BILLING_CODES = {
"credit_balance_exhausted",
"organization_spend_limit_exceeded",
"project_spend_limit_exceeded",
"organization_usage_limit_exceeded",
}
def generate(prompt: str) -> tuple[str, bytes | None]:
try:
result = client.images.generate(
model="gpt-image-2.5-flare",
prompt=prompt,
size="1024x1024",
quality="medium",
)
return "ok", base64.b64decode(result.data[0].b64_json)
except openai.BadRequestError as e:
if e.code == "moderation_blocked":
body = e.body if isinstance(e.body, dict) else {}
print("被拦截:", body.get("moderation_details"), e.request_id)
return "blocked", None # 给用户一条笼统的提示
print("请求有误:", e.message, e.request_id)
return "fix_request", None # 原样重发还会失败
except openai.RateLimitError as e:
if e.code in BILLING_CODES or e.type == "insufficient_quota":
return "billing", None # 充值或调高上限
return "retry_later", None # 延迟后重新入队
except (openai.AuthenticationError, openai.PermissionDeniedError) as e:
print("账号问题:", e.status_code, e.request_id)
return "check_account", None # 检查 key、项目或地区
except (openai.APIConnectionError, openai.InternalServerError):
return "retry_later", NoneOpenAI 建议给终端用户的提示保持笼统,moderation_details 留给日志和客服排查使用。
接入时的常见错误
| 错误写法 | 结果 | 改法 |
|---|---|---|
完全不传 model | 生成接口默认用 dall-e-2(传了 GPT 图像模型专属参数时除外),编辑接口默认用 gpt-image-1.5 | 始终显式传模型 ID |
读取 data[0].url | GPT 图像模型只返回 base64 | 解码 data[0].b64_json |
| 所有 4xx 都重试 | 内容拦截、参数错误、欠费这几类,每次都会同样失败 | 只重试限流、5xx 和网络错误 |
| 把 API Key 写死在代码里 | Key 随 Git 历史或前端打包文件泄露 | 用环境变量或密钥管理服务 |
| 日志里直接打印用户的完整提示词 | 用户隐私进了明文日志 | 写日志前做哈希或脱敏 |
GPT Image 2.5 接入上线前检查清单
- API Key 放在环境变量或密钥管理服务里,代码和日志里都没有
- 模型锁定到带日期的快照
- 发请求前先校验
size - 草稿用
low;high、xhigh、max只用在对比过效果的场景 - 并发控制在当前档位的每分钟出图上限以内
- 内容拦截、参数错误、计费错误不自动重试
- 每个失败请求都记录了 request ID
- 按模型和 quality 记录
usage,并在 OpenAI 项目上设置消费上限 - 用户提示词先过一遍自己的内容检查,被拦截时给用户一条笼统提示
- 重复请求走缓存,缓存键包含提示词、模型、尺寸和 quality
- 解码后的图片存进自己的存储
- 网关和 Serverless 的超时时间足够 Sunburst 用
GPT Image 2.5 API 常见问题
问:GPT Image 2.5 API 的模型名是什么?
gpt-image-2.5-flare 或 gpt-image-2.5-sunburst。带日期的快照分别是 gpt-image-2.5-flare-2026-09-08 和 gpt-image-2.5-sunburst-2026-09-08。
问:Flare 和 Sunburst 该选哪个? 默认用 Flare。以编辑为主、需要在多轮修改中精细把控的任务,可以测试 Sunburst,同时预留更长的生成时间。
问:GPT Image 2.5 API 免费吗? 不免费,按 token 计费,OpenAI 的限流表里也没有给它开放免费档。只想测试提示词、手上还没有 API Key 的话,GPT Image 2.5 在线生成器有免费体验积分。
问:GPT Image 2.5 生成一张图多少钱?
取决于尺寸、quality 和每张图实际消耗的 token。OpenAI 在定价页公布 token 单价,把你自己请求返回的 usage 里各类 token 数分别乘上对应单价,加起来就是单张成本。
问:GPT Image 2.5 API 支持哪些分辨率?
三个标准尺寸,以及自定义的 WIDTHxHEIGHT:两边都是 16 的倍数,宽高比在 1:3 到 3:1 之间,长边不超过 3840 px,总像素在 655,360 到 8,294,400 之间。3840x2160 和 2160x3840 都在范围内,不过超过 2560x1440 的尺寸属于实验性支持。
问:GPT Image 2.5 API 能做图生图吗?
能。用编辑接口 /v1/images/edits(SDK 里是 images.edit),可以改现有图片,也可以用参考图生成新图,写法见上文“图片编辑与图生图”一节。
问:怎么生成透明背景 PNG?
background 设为 transparent,output_format 设为 png 或 webp。两个 2.5 模型都支持。
问:提示词最长多少? GPT 图像模型最多 32,000 字符。
问:GPT Image 2.5 的限流是多少? 取决于你的使用档位。OpenAI 文档的每个模型页都按档位列出了每分钟 token 数和出图数。
问:GPT Image 2.5 API 支持流式返回吗?
支持。stream 设为 true,partial_images 取 0 到 3。
问:还能继续用 gpt-image-2(image2 API)吗? 可以。它仍在 OpenAI 的模型列表里,也有自己的快照;接口一样,参数也基本一致(差异见参数表),可以按任务类型逐步切换到 2.5。
需要可商用的 GPT Image 2 中转 API Key?
如果不想自己折腾 OpenAI 账号、绑卡、国内访问稳定性和限流配额,可以发邮件到 support@gpt-image2.art 购买 GPT Image 2 中转 API。我们提供:
- 一个稳定的 API endpoint,内置 failover
- 人民币计费,不需要 USD 跨境汇款
- 异步任务模式和 callback 回调
- 月用量超过 1 万张的团队享受批量价
- 与官方 API 相同的
gpt-image-2模型名和参数规范
GPT Image 2.5 Flare / Sunburst 的接入,欢迎发邮件咨询。
延伸阅读
- GPT Image 2.5 Flare 和 Sunburst 怎么选?6 组同提示词实测
- GPT Image 2 案例与提示词库:成品图和对应的完整提示词
- GPT Image 2 Prompt 写作指南:让命中率从 30% 涨到 90% 的 7 条规律
- GPT Image 2 风格库:12 种实用画风 prompt(可直接复制粘贴)
- 什么是 GPT Image 2?一篇看懂的完整介绍
gpt-image2.art 是独立网站,与 OpenAI 没有关联。
更多文章

8 个 GPT Image 2 设计提示词:从世界观到包装
我把一份 21 条的 GPT Image 2 玩法合集删到 8 个,覆盖世界观设定板、技术拆解图、品牌视觉审计、广告分镜、儿童绘本、聊天表情、产品精修和包装提案。每条都按交付物、视觉锚点、一致性、文字和限制条件重写成可直接执行的设计需求单,并说明多面板提示词最容易出错的地方,复制后替换主题就能直接用。

10 组 GPT Image 2 电影级镜头 Prompt
10 组可直接复制的 GPT Image 2 电影级镜头 Prompt,附实用镜头公式、连续性流程和构图修正方法。

GPT Image 2 vs Nano Banana 2 vs Midjourney v7:生产力视角下的三模型对决
GPT Image 2、Nano Banana 2、Midjourney v7 三方对比:在中文文字、商业海报、概念艺术、写实摄影等场景下分别该用哪一款?这是一份基于实测的生产力视角决策指南。