Images API
两个端点:生成(文字 → 图)、编辑(图 + 文字 → 图)。响应都是 OpenAI 标准结构 data[0].b64_json。
Seedream 和 Qwen-Image 不支持 /v1/images/edits,图生图走 generations 端点,但参考图字段不同:Seedream 用 image,Qwen 用 input_images,注意不要写反。Gemini 需要控制分辨率(512 至 4K)时走 Gemini 原生协议。各系列的参数差异见对应系列页。
快速开始
一个最小可运行的请求:生成一张 1024×1024 的图,解码后存成 output.png。
https://api.ofox.io/v1https://api.ofox.io/v1/images/generationshttps://api.ofox.io/v1/images/editsopenai/gpt-image-2.5-flarePython
import base64
from openai import OpenAI
client = OpenAI(
api_key="YOUR_OFOX_API_KEY",
base_url="https://api.ofox.io/v1",
timeout=600, # 图像接口同步返回,耗时较长
)
resp = client.images.generate(
model="openai/gpt-image-2.5-flare",
prompt="白色桌面上的一个红苹果",
size="1024x1024",
quality="low",
)
with open("output.png", "wb") as f:
f.write(base64.b64decode(resp.data[0].b64_json))接口同步返回,客户端超时请设为 600 秒。 高画质、大尺寸及改图请求可能需要数分钟,见实测耗时。
各系列调用方式一致,换模型只改 model。取值范围与独有参数不同,见下方各参数说明。
生成图像
POST https://api.ofox.io/v1/images/generations请求参数
下面的可选值与默认值适用于 GPT Image 系列(gpt-image-2.5-flare、gpt-image-2.5-sunburst、gpt-image-2)。其他系列有差异的地方单独注明。实测细节见 GPT Image 系列。
输出尺寸。可自定义宽高,但要满足四条约束,否则返回 400 Invalid size。
▸ 详情
四条约束:
- 宽、高都能被 16 整除
- 最长边 ≤ 3840
- 宽高比在 1:3 到 3:1 之间
- 总像素 ≥ 655,360(
768x768不合法,1024x768合法)
不传或传 auto 时由模型决定,实测返回 1254×1254。需要固定尺寸请显式传入。其他系列的尺寸规则不同,见对应系列页。详见 GPT Image · 尺寸。
画质档位,直接影响价格。gpt-image-2 没有 xhigh / max。
▸ 详情
gpt-image-2没有xhigh/max,传了返回 400。- 不接受 DALL·E 时代的
standard/hd,传了返回 400。 - 不传不等于
medium:由模型自己选档(实测选了low)。想要画质和成本稳定,请显式指定。
其他系列大多没有档位,见对应系列页。详见 GPT Image · 画质。
生成张数,每张单独计费。Gemini 模型不支持,不要传。
输出文件格式。
▶高级 · 7output_compression · background · moderation · stream · partial_images · input_images · extra_body.provider.type展开
压缩率,仅对 jpeg / webp 生效。
背景。transparent 需要支持 alpha 通道的格式(png / webp)。
内容审核强度。
是否流式返回。配合 partial_images 可在生成过程中收到中间图。
流式返回的中间图张数,需同时传 stream: true。按 OpenAI 官方说明,每张中间图额外计 100 个输出 token。
参考图数组(URL 或 base64),仅 Qwen 系列支持,1–3 张。
▸ 详情
其他系列传了不报错也不生效;Seedream 的参考图字段是 image。
指定供应商。可选,通常不需要,网关会自动路由。有内容审核方面的需求时可考虑指定;指定后若该供应商不可用,不会自动切换到其他供应商。
▸ 详情
等价写法是请求头 X-OfoxAI-Provider-Type。见进阶:指定供应商。
响应
{
"created": 1777385517,
"data": [
{ "b64_json": "iVBORw0KGgoAAAANSUhEUgAA…", "index": 0 }
],
"model": "openai/gpt-image-2.5-flare",
"size": "1024x1024",
"quality": "low",
"usage": {
"input_tokens": 13,
"input_tokens_details": { "text_tokens": 13 },
"output_tokens": 196,
"output_tokens_details": { "image_tokens": 196 },
"total_tokens": 209
}
}图片的 base64 编码,不带 data:image/png;base64, 前缀。
▸ 详情
解码后写文件;在浏览器里显示需要自己拼前缀。响应里没有 url 字段。
图片序号,n > 1 时区分多张图。
实际输出尺寸。没传 size 或传了 auto 时,从这里读出实际尺寸。
实际使用的画质档位。没传 quality 时,从这里确认实际用了哪一档。
实际使用的背景与格式。不一定返回,不要依赖这两个字段。
计费用量。output_tokens 为输出的图片 token,input_tokens_details.text_tokens 为提示词 token。
▸ 详情
按这里的数字核算单次成本。
编辑图像
POST https://api.ofox.io/v1/images/edits此端点支持 GPT Image、Nano Banana(Gemini)、MAI Image。Seedream 和 Qwen-Image 调用会返回 400 endpoint_not_supported,请改用生成接口的参考图字段,见 Seedream、Qwen-Image。
请求参数
multipart/form-data,以表单字段提交,需上传图片文件。可选值与默认值同样适用于 GPT Image 系列。
局部重绘遮罩:带 alpha 通道的 PNG,尺寸与 image 一致,透明区域 = 要重画的部分。
▸ 详情
只在本端点生效,传到生成接口会被静默忽略。制作方法与实测效果见 GPT Image · mask 局部重绘。
生成张数,每张单独计费。
▶高级 · 1X-OfoxAI-Provider-Type展开
指定供应商。可选,通常不需要,网关会自动路由。有内容审核方面的需求时可考虑指定;指定后若该供应商不可用,不会自动切换到其他供应商。
▸ 详情
本端点是 multipart 上传,想固定供应商时只能用请求头,表单字段 extra_body 会被静默忽略。见进阶:指定供应商。
响应
结构与生成接口相同,usage 里多出参考图的输入 token:
{
"created": 1777385669,
"data": [
{ "b64_json": "iVBORw0KGgoAAAANSUhEUgAA…", "index": 0 }
],
"model": "openai/gpt-image-2",
"size": "auto",
"quality": "low",
"usage": {
"input_tokens": 1041,
"input_tokens_details": { "image_tokens": 1024, "text_tokens": 17 },
"num_input_images": 1,
"output_tokens": 358,
"total_tokens": 1399
}
}参考图折算成的输入 token。实测一张 1024×1024 的参考图计 1,024 个。改图比同尺寸的文生图贵,主要贵在这一项。
参考图张数。可以用它确认参考图确实被模型读取了。
其余字段同生成接口的响应。
支持的模型与价格见 模型目录 。
调用
Python
import base64
from openai import OpenAI
client = OpenAI(api_key="YOUR_OFOX_API_KEY", base_url="https://api.ofox.io/v1", timeout=600)
with open("apple.png", "rb") as f:
resp = client.images.edit(
model="openai/gpt-image-2",
image=f,
prompt="把苹果改成绿色,其他保持不变",
size="auto",
quality="low",
)
with open("apple_edited.png", "wb") as out:
out.write(base64.b64decode(resp.data[0].b64_json))image 字段传本地文件路径(cURL 用 @ 前缀),不是 URL。
实测对比:
错误
出错时返回 HTTP 错误码和下面的结构(实测):
{
"error": {
"code": null,
"message": "The model 'gpt-image-2' does not support quality 'xhigh'.",
"param": null,
"request_id": "fbe4f24c-779d-41a0-8b3a-c62886cdd1ae",
"type": "image_generation_user_error"
}
}code 可能为 null。请按 HTTP 状态码和 message 判断。
联系支持时,请附上响应里的 request_id 和报错信息(HTTP 状态码与 error.message)。建议在日志里记录它们。
进阶:指定供应商
可选,通常不需要。 GPT Image 三个模型(gpt-image-2.5-flare、gpt-image-2.5-sunburst、gpt-image-2)都由 azure_foundry 和 openai 两家承载,生成和编辑都支持。不指定时网关自动路由。
有内容审核方面的需求时可以指定供应商。指定后请求只会发往该供应商;该供应商不可用时,不会自动切换到其他供应商。
指定未承载该模型的供应商会返回 400 provider_type_unavailable。
openai/gpt-image-2 的两个供应商审核尺度不同。提示词反复被拒时,可以显式指定 openai。未指定时请求会被加权分流,可能落到 azure_foundry。
文生图 /v1/images/generations
JSON 请求体,请求体字段 extra_body.provider.type 与请求头 X-OfoxAI-Provider-Type 两种写法均可。
Python
resp = client.images.generate(
model="openai/gpt-image-2",
prompt="A simple red apple on a white table",
size="1024x1024",
extra_body={"extra_body": {"provider": {"type": "openai"}}},
)使用官方 OpenAI SDK 时,extra_body 需作为请求体中的字面量键存在。TypeScript SDK 在参数对象中直接书写 extra_body 即可。Python SDK 的 extra_body= 参数会把内容合并到请求体顶层,因此需额外嵌套一层,或改用请求头。
图生图 /v1/images/edits
multipart 上传,没有 JSON 请求体可供嵌套 extra_body,因此只能使用请求头。
curl https://api.ofox.io/v1/images/edits \
-H "Authorization: Bearer $OFOX_API_KEY" \
-H "X-OfoxAI-Provider-Type: openai" \
-F "model=openai/gpt-image-2" \
-F "prompt=..." \
-F "image=@input.png"SDK 写法:Python 传 extra_headers={"X-OfoxAI-Provider-Type": "openai"};TypeScript 在第二个参数传 { headers: { 'X-OfoxAI-Provider-Type': 'openai' } }。
在 /v1/images/edits 上,作为表单字段传递的 extra_body 会被静默忽略:图片照常生成,但约束不生效。请改用 X-OfoxAI-Provider-Type。
完整参考见 API · 供应商路由。
官方文档与更多
官方文档描述的是直连 OpenAI 的行为。与 OfoxAI 实测不一致时,以本站实测为准。
OpenAI 官方
OfoxAI 系列页
- GPT Image 系列概览:选型、尺寸、画质、耗时、报错
- 文生图
- 改图与多图
- 局部重绘
- Nano Banana 系列(Gemini Image)与报错排查
- Seedream 系列
- Qwen-Image 系列
- MAI Image 系列

