工具接入

用 GPT Image 2 API 生成和编辑图像

apiToken.sale 上的 GPT Image 2 API 只有两条路由——POST /v1/images/generations 生成新图,POST /v1/images/edits 基于参考图做编辑——它们和 GPT 文本调用共用同一把 Bearer 密钥、同一个预付余额。用量按 token 计费,价格是 OpenAI 官方的一半。本文给出准确的请求写法、SDK 接入方式、真实价格表,以及上线前值得知道的接口限制。

·

一个请求看懂生成路由

GPT Image 2 是通过 OpenAI 兼容接口调用的图像模型:向 /v1/images/generations 发送提示词,model 填 gpt-image-2,带上 Authorization: Bearer 请求头,就能拿回一张 PNG。不需要单独的图像套餐,也不需要第二把密钥——覆盖 GPT、Claude 和 Gemini 调用的同一把 sk-pool 密钥和预付余额,同样结算图像用量。

curl https://router.apitoken.sale/v1/images/generations \
  -H "Authorization: Bearer $APITOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "A precise technical cutaway of a lunar rover",
    "quality": "low"
  }'

官方 GPT Image 字段会被接受并转换到本池。多余键(user、stream、moderation、style)会被忽略,而不是 400。quality 为 medium/high/auto 时仍按本池 low 档生成。output_format 为 jpeg 或 webp 时会把原生 PNG 本地转码;省略或 png 则保持 PNG。response_format=url 会被忽略,响应始终是 b64_json。n 可为 1–10;每多一张图就是又一次原生调用。background=auto 视为 opaque;transparent 会在提示前加上抠图句并请求真实 PNG alpha——请检查文件;没有 alpha 仍是 HTTP 200,不是 502。size 选择比例,不是像素锁。2048x2048 和 3840x2160 映射到 1:1 和 16:9;PNG 仍约 1.57 百万像素,响应里的 size 是真实 IHDR。

sizeProportionSteer target (inspect the PNG)
omitted or autono size steertypically ~1254×1254; not a lock
1024x1024, 1:1, 2048x20481:11254×1254
1536x1024 or 3:23:2 landscape1536×1024
1024x1536 or 2:32:3 portrait1024×1536
4:34:31448×1086
16:9, 2048x1152, 3840x216016:91672×941
9:16, 2160x38409:16944×1665

1024x1024 是正方形档,不是锁定 1024 像素。1536x1024 与 1024x1536 是同一兆像素预算的 3:2 与 2:3 切分。表格是 prompt-steer 目标。若 PNG 头与档位不符,接口仍返回 HTTP 200 和 PNG——在验收关检查 IHDR 和 alpha,不要假定会返回 502。

POST /v1/images/* 每次调用返回一张非流式 PNG。不要围绕该路由构建进度 UI。若需要流式预览帧,使用下方独立的 Responses image_generation 工具并设置 partial_images——简单提示词可能跳过 partials。

另见: GPT Image 2 API 成本与 B2C 五折优惠

用最多五张 PNG、JPEG 或 WebP 参考图编辑现有图像

编辑走的是另一条路由、另一种 content type。向 /v1/images/edits 发送 multipart/form-data,model 同样是 gpt-image-2,附上提示词和一到五张 PNG、JPEG 或 WebP 参考图(每张 ≤50 MB)。参考图用来表达定点修改——重绘这张产品图的风格、换掉这个背景、扩展这条横幅——而不是从零重新生成。

curl https://router.apitoken.sale/v1/images/edits \
  -H "Authorization: Bearer $APITOKEN_API_KEY" \
  -F "model=gpt-image-2" \
  -F "prompt=Replace the backdrop with a seamless light-gray studio sweep" \
  -F "image=@packshot.png" \
  -F "image=@brand-swatch.png"
  • 每张参考图重复字段名 image,或发送 image[]。此路由忽略 multipart mask——局部重绘请用 Responses input_image_mask。
  • 参考图为 PNG、JPEG 或 WebP,每张不超过 50 MB。GIF、HEIC 及其他类型会被拒绝。
  • 每次调用最多五张参考图——挑那几张真正承载修改意图的,而不是把整个素材库都传上去。
  • 每张参考图都按图像输入计费,所以同样的输出,编辑比纯提示词生成更贵。
  • 响应结构与生成一致:每次调用返回一张非流式 PNG。

更深入的编辑工作流:蒙版、批量与验收检查

局部重绘与 Responses image_generation

不要把 multipart mask 发到 /v1/images/edits。该字段会被拒绝,ChatGPT 的图像编辑 URL 也会忽略它。若要只改图片的一部分——或从 GPT 文本模型调用 hosted image_generation 工具——请用 POST /v1/responses(Chat Completions 会把同一套 hosted 工具映射到 Responses)。编辑时把源 PNG 放在 input 的 input_image,并添加 tools: [{type:"image_generation", …}]。蒙版用 input_image_mask.image_url 设为 PNG data URL。蒙版中透明像素是要修改的区域,不透明像素保持不变。蒙版须与源图尺寸相同。不支持 file_id——此平面没有 Files API。

import base64, os
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["APITOKEN_API_KEY"],
    base_url="https://router.apitoken.sale/v1",
)

def png_url(path):
    return "data:image/png;base64," + base64.b64encode(Path(path).read_bytes()).decode()

response = client.responses.create(
    model="gpt-5.6-sol",
    input=[{
        "role": "user",
        "content": [
            {"type": "input_text", "text": "Change only the masked region."},
            {"type": "input_image", "image_url": png_url("photo.png")},
        ],
    }],
    tools=[{
        "type": "image_generation",
        "output_format": "webp",
        "partial_images": 2,
        "input_image_mask": {"image_url": png_url("mask.png")},
    }],
)
  • 在 /v1/responses 或 /v1/chat/completions 上使用 GPT 文本模型(例如 gpt-5.6-sol),不要用 gpt-image-2——该 id 属于 Images 路由。
  • 源图和蒙版都必须是 data:image/png;base64,… URL,不能是 https://,也不能是 OpenAI file id。
  • Responses image_generation 转发 output_format jpeg 或 webp,以及 partial_images 1..=3;有 partials 时 SSE 发出 response.image_generation_call.partial_image。
  • background=transparent 会改写为 opaque,input_fidelity 会被丢弃——这两个字段在该 ChatGPT image tool 上会 400。工具上的 quality/size 仍会 remap;completed item 回显 ChatGPT 返回的内容。
  • 蒙版不会作为第二张参考图计费;结算仍按该回合的 image-input 与 image-output token。
  • 独立的 POST /v1/images/* 路由仍只接受 PNG 输出且不流式 partials——不要混用两套契约。

用官方 OpenAI SDK 调用

可以继续用官方 OpenAI SDK,但只发送本池允许的字段。base_url 和 api_key 与文本模型相同。不要依赖 SDK 默认值:官方 api.openai.com Images 接受的多余键(user、stream、moderation、style)在这里是 400,response_format=url 也是 400。下面的示例列出了它发送的每一个字段。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["APITOKEN_API_KEY"],
    base_url="https://router.apitoken.sale/v1",
)

result = client.images.generate(
    model="gpt-image-2",
    prompt="A clean isometric diagram of a wind turbine",
    quality="low",
    size="3:2",
)

png_bytes = result.data[0].b64_json  # decode base64 and write to disk

编辑场景下,同一个客户端暴露 images.edits,参考文件以二进制模式打开传入。密钥放在服务端环境变量里;图像端点和聊天端点同样敏感,因为它们扣的是同一个余额。

一次生成的真实成本

不存在诚实的「每张图固定价」。GPT Image 2 按 token 计费,拆成四条计费腿——文本输入(你的提示词)、图像输入(编辑时的参考图)、缓存输入和图像输出——一次请求的总价以 API 返回的最终 usage 为准,与 PNG 的字节大小、尺寸无关。

计费项官方每 1M token本站价格
新鲜文本输入$5$2.50
新鲜图像输入$8$4
缓存文本输入$1.25$0.625
缓存图像输入$2$1
图像输出$30$15
  • 每条腿都享受统一的 50% B2C 折扣;缓存文本和图像输入在折扣生效之前,就先按普通输入费率的 25% 计费。
  • 读取每次响应里的 usage 对象,并把它和资产一起记录——它是计费权威,也是后台账单对账的依据。
  • gpt-image-2 是不可变快照 gpt-image-2-2026-04-21 的别名,行为不会在调用之间漂移;想在代码里明确写出这个保证,就直接固定带日期的 ID。

不要拿几张测试渲染图就在自己的定价页面上标一个单图价格。输出用量随资产变化,三个样本推出来的数字到了生产环境一定是错的。用一周的真实 usage 把各条腿加起来,再做决定。

完整成本模型与节省测算

当前图像接口的限制

按这条路由今天可验证的行为做规划,而不是按营销名称想象。已确认的能力组合刻意很窄:

  • POST /v1/images/* 每次调用一张 PNG,非流式——批量任务循环调用端点,而不是在一个请求里要 n 张图。n 不是 1 会返回 400。
  • 生成 JSON 封闭:只有 model、prompt、n、background、quality、size、output_format、response_format。未知键为 400。openai/gpt-image-2 会被接受为 gpt-image-2。GET /v1/models 列出两个 id 和图像路由,不公布这些字段规则。
  • Images HTTP 控制项为 background opaque 或 transparent、quality low(或省略)、output_format png 或省略、response_format b64_json 或省略,以及作为比例预设的 size(auto、1024x1024/1:1、1536x1024/3:2、1024x1536/2:3、4:3、16:9、9:16)。medium/high、background auto、response_format url 与 2K/4K 会被拒绝。
  • 已解析的 PNG 且有终态 usage 时为 HTTP 200,即使 size 或 alpha 与 steer 不符。此路由唯一的成功后 502 是 PNG 之后缺少 usage。
  • 编辑接受 multipart/form-data 里的一到五张 PNG、JPEG 或 WebP(每张 ≤50 MB)。image[] 等同 image。mask 会被忽略;局部重绘走上面的 Responses image_generation。
  • 图像用量和 GPT、Claude、Gemini 调用从同一个预付余额扣费——只需盯一个池子,而不是四个。

如果想换一个图像模型做对比,Gemini 侧的图像路由有并列文档,正面对比指南也覆盖了两者各自擅长的场景。

在共享余额上控制图像开销

图像输出是最贵的一条腿,批量循环又会把它成倍放大,所以给图像 worker 单独发一把 API 密钥,并设置生命周期花费上限。失控的渲染任务会在自己的额度处停下,而不是抽干聊天流量依赖的余额;后台按密钥维度的用量统计也能准确告诉你哪个 worker 花了多少。

  1. 01在后台为图像流水线创建一把专用密钥,把它的生命周期花费上限设为批量预算。
  2. 02发送一个有边界的生成请求(上面的 curl),确认返回的 PNG,以及包含预期计费腿的 usage 对象。
  3. 03用小规模循环跑你的真实提示词集,记录每个资产的最终 usage,并把总数与后台账单对账。
  4. 04确认无误后再放到完整批量规模,同时让密钥上限始终对准你实际批准的预算。

所有受支持提供商的模型费率

常见问题

GPT Image 2 API 用哪个端点?

生成新图用 POST /v1/images/generations,参考图编辑用 POST /v1/images/edits,两者都在 OpenAI 兼容基础 URL https://router.apitoken.sale/v1 上,带 Authorization: Bearer 请求头。

GPT Image 2 能编辑现有图像吗?

可以。edits 路由接受 multipart/form-data,包含一到五张 PNG、JPEG 或 WebP(每张 ≤50 MB)和提示词。重复字段名 image,或发送 image[]。multipart mask 会被忽略;局部重绘请用 Responses input_image_mask。

如何只重绘图像的一部分?

对 GPT 文本模型调用 POST /v1/responses,源 PNG 作为 input_image,并使用 tools: [{type:"image_generation", input_image_mask:{image_url:"data:image/png;base64,…"}}]。还可设置 output_format jpeg|webp 与 partial_images 1..=3。蒙版透明像素是修改区域。不要把 mask 发到 /v1/images/edits,也不要使用 file_id。Chat Completions 会把同一 image_generation 工具映射到 Responses。

GPT Image 2 的准确 model ID 是什么?

用 gpt-image-2,它是不可变快照 gpt-image-2-2026-04-21 的别名。想在代码里显式写明快照,就固定带日期的 ID。

GPT Image 2 每张图多少钱?

没有固定的单图价格:计费按最终 usage 计算,覆盖文本输入(官方 $5/M)、图像输入($8/M)、缓存输入(新鲜输入的 25%)和图像输出($30/M),本站每条计费腿统一五折——分别为每 1M $2.50、$4 和 $15。

GPT Image 2 支持透明背景或流式输出吗?

在 POST /v1/images/*:可作为请求支持透明背景,不支持流式——发送 background=transparent 请求带真实 alpha 的 PNG;省略或 opaque 为实心;没有 alpha 仍是 HTTP 200。在 Responses image_generation:background=transparent 会改写为 opaque;要用 SSE 预览请设 partial_images 1..=3(response.image_generation_call.partial_image)。

可以指定图像尺寸吗?

指定的是比例,不是任意像素。省略或 auto 通常约 1254×1254,但不是锁定。1024x1024/1:1、1536x1024/3:2、1024x1536/2:3、4:3、16:9、9:16 分别导向 1254×1254、1536×1024、1024×1536、1448×1086、1672×941、944×1665。若 PNG 头不同,接口仍返回 HTTP 200。2K 与 4K 会被拒绝。

图像生成需要单独的密钥或余额吗?

不需要。它和所有其他受支持模型(包括 GPT、Claude 和 Gemini)共用同一把 Bearer 密钥和预付余额——不过对批量图像 worker 来说,配一把带生命周期花费上限的专用密钥是合理做法。

通过 Google 或 GitHub 创建密钥,用 $5 平台欢迎奖励余额测试网关。