GPT Image 2.5 API 接入教程:Flare 和 Sunburst 怎么选,附 image2 API 迁移代码
2026/09/16

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-flaregpt-image-2.5-sunburst。接口地址、base64 返回格式和大部分参数都和 gpt-image-2(不少人习惯叫它 image2)一样,已经接好 image2 API 的项目,主要是改模型名,再决定新增的 xhighmax 档位用不用。

GPT Image 2.5 API 模型怎么选:Flare、Sunburst 还是 GPT Image 2

模型 ID适合做什么相对速度quality 可选值备注
gpt-image-2.5-flareOpenAI 给大多数应用的默认选择:创作者内容、产品内的生图功能、视觉搜索、大批量生成三者中最快,OpenAI 称延迟比 GPT Image 2 低约 50%lowmediumhighxhighmaxautoOpenAI 称画质高于 GPT Image 2。快照:gpt-image-2.5-flare-2026-09-08
gpt-image-2.5-sunburst需要在多轮编辑中把控细节的高要求工作:可直接投放的广告创意、精修产品图比 Flare 慢,OpenAI 明确提到生成时间更长lowmediumhighxhighmaxauto快照:gpt-image-2.5-sunburst-2026-09-08
gpt-image-2已经在跑、还没在 2.5 上重测过的项目比 Flare 慢lowmediumhighauto支持 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 去哪里拿

  1. 在 OpenAI 后台创建 Key。 登录 OpenAI API 平台,进入 API keys 页面新建。OpenAI 的开发者快速入门里有直达入口。
  2. 先充值。 图像生成是付费功能,三个模型的模型页在限流表里都把免费档标为不支持。
  3. 确认组织认证。 OpenAI 的图像生成指南提到,使用 GPT Image 模型前,可能需要先完成 API Organization Verification(组织认证)。
  4. 把 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@latest

openai-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 字段里,所以命令后面接了 jqbase64 解码。如果 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-flaregpt-image-2.5-sunburstgpt-image-2
prompt文本,最长 32,000 字符相同相同
sizeauto1024x10241536x10241024x1536 或自定义 WIDTHxHEIGHT支持自定义,规则见下一节相同
qualitylowmediumhighxhighmaxauto(默认)六个都支持不支持 xhighmax
backgroundauto(默认)、opaquetransparent支持透明背景,需搭配 pngwebp透明背景为预览功能
output_formatpng(默认)、jpegwebp相同相同
output_compression0 到 100,仅对 jpegwebp 生效相同相同
n1 到 10相同相同
moderation(生成)auto(默认),或过滤更宽松的 low相同相同
streampartial_imagestruefalse,过程图 0 到 3 张相同相同
user你应用里终端用户的稳定 ID,便于 OpenAI 监测滥用相同相同
image(编辑)最多 16 个 PNG、WebP、JPG 文件,每个小于 50 MB相同相同
mask(编辑)带 alpha 通道的 PNG,小于 4 MB,尺寸与原图一致相同相同
input_fidelity(编辑)highlowSDK 类型定义里有(默认 low),依赖它之前先实测不要传:gpt-image-2 始终以高保真读取输入图

旧版教程的参数表里还列了 resolutionimage_urlscallback_url,以及 16:9 这种比例写法的 size。这些是部分中转服务自己的参数,OpenAI 的 Image API 里没有。直连 OpenAI 时,分辨率靠 size 控制,参考图以文件形式上传。

GPT Image 2.5 API 尺寸与分辨率规则

size 可以填 auto、三个标准尺寸,或自定义的 WIDTHxHEIGHTgpt-image-2gpt-image-2.5-flaregpt-image-2.5-sunburst 共用同一套规则:

  • 宽和高都必须是 16 的倍数。
  • 宽高比在 1:3 到 3:1 之间。
  • 任何一边都不超过 3840 px。
  • 总像素在 655,360 到 8,294,400 之间,所以 16:9 最大就是 3840x2160
  • 超过 2560x1440 的分辨率,OpenAI 标注为实验性。
size是否有效原因
1536x86416:9,两边都能被 16 整除
2048x1152约 2K 的 16:9
2560x1440非实验范围内最大的 16:9
3840x2160是,实验性上限
2160x3840是,实验性像素数到顶的 9:16 竖图
1920x10801080 不是 16 的倍数,改用 1920x1088(接近 16:9)或 2048x1152
512x512只有 262,144 像素,低于下限
2560x6404: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 size

OpenAI 还说明,尺寸同时要满足模型当前的像素和边长限制,所以这段代码只是预检,不能保证请求一定通过。

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/pngimage/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",
 )

切生产流量之前,按这份清单过一遍:

  1. 改模型名。 gpt-image-2 换成 gpt-image-2.5-flaregpt-image-2.5-sunburst。OpenAI 的模型列表里没有单独的 gpt-image-2.5
  2. 锁定带日期的快照。 gpt-image-2.5-flare-2026-09-08gpt-image-2.5-sunburst-2026-09-08 会固定模型版本,作用和 GPT Image 2 的 gpt-image-2-2026-04-21 一样。以后换新快照前,先把提示词测试重跑一遍。
  3. 给新 quality 档位加判断。 如果同一段代码同时服务新老模型,要确保 xhighmax 不会发给 gpt-image-2
  4. 尺寸规则不变。 三个模型的自定义 WIDTHxHEIGHT 规则相同(见上文尺寸一节),check_size 可以直接复用。
  5. 透明背景两个 2.5 模型都支持。gpt-image-2 上它仍是预览功能。
  6. 留意 Batch API。 截至 2026 年 9 月 15 日,OpenAI 模型页显示 gpt-image-2 支持 Batch,两个 2.5 模型都不支持。走 Batch 的任务先留在 gpt-image-2 上。
  7. 对比 token 用量。 拿一批真实请求分别在两个模型上跑,记下 usage,再决定切多少流量过去。
  8. 检查超时设置。 用 Sunburst 时尤其要注意。SDK 默认最多等 10 分钟,但你链路上的网关、Serverless 平台或任务队列,可能更早就断开了。
  9. 重测编辑类提示词。 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 AuthenticationErrorKey 错误、已撤销、复制时多了空格,或者用了其他组织、项目的 Key检查 OPENAI_API_KEY,必要时新建一个
403 PermissionDeniedError例如从 API 不支持的国家或地区发起请求查看 OpenAI 的错误码说明
429 RateLimitError(限流或 slow_down超过了当前档位每分钟的 token 数或出图数;slow_down 则是请求量涨得太快,没超限也可能出现退避后重试,有 Retry-After 就按它等,同时降低并发
429 且带计费类 codecredit_balance_exhausted,或触发了组织、项目的消费上限(spend limit),或组织的用量上限(usage limit)充值或调高上限,重试没有用
500 InternalServerError服务端故障稍等后重试
503 且 server_is_overloaded模型暂时过载Retry-After 就按它等,然后重试
APIConnectionErrorAPITimeoutError网络问题或客户端超时重试,耗时长的任务调大客户端超时

Node.js 里的异常类名称基本一一对应(OpenAI.BadRequestErrorOpenAI.RateLimitError 等,超时对应 APIConnectionTimeoutError),每个异常都能读取 err.statuserr.codeerr.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", None

OpenAI 建议给终端用户的提示保持笼统,moderation_details 留给日志和客服排查使用。

接入时的常见错误

错误写法结果改法
完全不传 model生成接口默认用 dall-e-2(传了 GPT 图像模型专属参数时除外),编辑接口默认用 gpt-image-1.5始终显式传模型 ID
读取 data[0].urlGPT 图像模型只返回 base64解码 data[0].b64_json
所有 4xx 都重试内容拦截、参数错误、欠费这几类,每次都会同样失败只重试限流、5xx 和网络错误
把 API Key 写死在代码里Key 随 Git 历史或前端打包文件泄露用环境变量或密钥管理服务
日志里直接打印用户的完整提示词用户隐私进了明文日志写日志前做哈希或脱敏

GPT Image 2.5 接入上线前检查清单

  • API Key 放在环境变量或密钥管理服务里,代码和日志里都没有
  • 模型锁定到带日期的快照
  • 发请求前先校验 size
  • 草稿用 lowhighxhighmax 只用在对比过效果的场景
  • 并发控制在当前档位的每分钟出图上限以内
  • 内容拦截、参数错误、计费错误不自动重试
  • 每个失败请求都记录了 request ID
  • 按模型和 quality 记录 usage,并在 OpenAI 项目上设置消费上限
  • 用户提示词先过一遍自己的内容检查,被拦截时给用户一条笼统提示
  • 重复请求走缓存,缓存键包含提示词、模型、尺寸和 quality
  • 解码后的图片存进自己的存储
  • 网关和 Serverless 的超时时间足够 Sunburst 用

GPT Image 2.5 API 常见问题

问:GPT Image 2.5 API 的模型名是什么? gpt-image-2.5-flaregpt-image-2.5-sunburst。带日期的快照分别是 gpt-image-2.5-flare-2026-09-08gpt-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 之间。3840x21602160x3840 都在范围内,不过超过 2560x1440 的尺寸属于实验性支持。

问:GPT Image 2.5 API 能做图生图吗? 能。用编辑接口 /v1/images/edits(SDK 里是 images.edit),可以改现有图片,也可以用参考图生成新图,写法见上文“图片编辑与图生图”一节。

问:怎么生成透明背景 PNG? background 设为 transparentoutput_format 设为 pngwebp。两个 2.5 模型都支持。

问:提示词最长多少? GPT 图像模型最多 32,000 字符。

问:GPT Image 2.5 的限流是多少? 取决于你的使用档位。OpenAI 文档的每个模型页都按档位列出了每分钟 token 数和出图数。

问:GPT Image 2.5 API 支持流式返回吗? 支持。stream 设为 truepartial_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-image2.art 是独立网站,与 OpenAI 没有关联。

限时免费试用

现在就用 GPT Image 2 出一张图

中文文字稳定渲染、支持局部编辑、带 50+ 现成 Prompt 模板——无需下载,浏览器里即可上手。