# GPT Image 2 API 调用文档 本文档面向 sub2api/OpenAI-compatible 网关调用 `gpt-image-2`。示例默认使用: ```text BASE_URL=https://claude.omniclaw.store/v1 API_KEY=<从 /keys 页面生成的 sub2api key> ``` 不要把 `.codex/auth.json` 里的 ChatGPT OAuth token 当 API key 使用。 ## 快速结论 - 直接生成图片:使用 `POST /v1/images/generations`,`model` 传 `gpt-image-2`。 - 编辑图片:使用 `POST /v1/images/edits`,multipart 上传 `image[]`、可选 `mask`。 - Agent/Codex 场景:主模型仍用 `gpt-5.5`,通过 Responses API 的 `image_generation` tool 调图像能力;不要把 Codex 主模型设成 `gpt-image-2`。 - `gpt-image-2` 返回 base64 图片数据,通常是 `data[0].b64_json`。 - `3840x2160` 4K 可用,但属于高像素、长耗时场景;生产调用应设置 180-300 秒超时。 ## 官方能力摘要 `gpt-image-2` 是图片生成和编辑模型,支持文本输入、图片输入、图片输出。模型别名和快照: ```text gpt-image-2 gpt-image-2-2026-04-21 ``` 支持端点: ```text /v1/images/generations /v1/images/edits /v1/responses # 通过 image_generation tool ``` 官方参考: - https://developers.openai.com/api/docs/models/gpt-image-2 - https://developers.openai.com/api/docs/guides/image-generation - https://developers.openai.com/api/reference/resources/images ## 认证 ```bash export BASE_URL="https://claude.omniclaw.store/v1" export API_KEY="sk-..." ``` 所有 JSON 请求带: ```http Authorization: Bearer $API_KEY Content-Type: application/json ``` multipart 编辑接口由 `curl -F` 或 SDK 自动设置 `Content-Type`。 ## 生成图片 ### 最小请求 ```bash curl -sS "$BASE_URL/images/generations" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-image-2", "prompt": "A compact Apple-style dashboard UI, clean white background", "size": "1024x1024", "quality": "medium", "output_format": "png", "n": 1 }' > image.json ``` 解码: ```bash jq -r '.data[0].b64_json' image.json | base64 --decode > image.png ``` ### 4K 请求 ```bash curl -sS "$BASE_URL/images/generations" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ --max-time 300 \ -d '{ "model": "gpt-image-2", "prompt": "A modern product poster, cinematic lighting, premium realistic photography", "size": "3840x2160", "quality": "medium", "output_format": "png", "n": 1 }' > image-4k.json ``` 生产建议:4K + `high` 很慢且成本高。先用 `1024x1024` 或 `1536x1024` 验证提示词,再升到 `3840x2160`。 ## 生成参数 | 参数 | 类型 | 建议值 | 说明 | |---|---|---|---| | `model` | string | `gpt-image-2` | 必填。也可用快照 `gpt-image-2-2026-04-21`。 | | `prompt` | string | 详细自然语言 | 必填。写清主体、环境、镜头、风格、限制。 | | `n` | number | `1` | 生成数量。生产建议单张并发调度,便于重试和计费。 | | `size` | string | `1024x1024`、`1536x1024`、`3840x2160` | `gpt-image-2` 支持灵活尺寸,见下方尺寸约束。 | | `quality` | string | `low`、`medium`、`high`、`auto` | 草稿用 `low`,常规用 `medium`,最终图用 `high`。 | | `output_format` | string | `png`、`jpeg`、`webp` | 默认 `png`。延迟敏感优先 `jpeg`。 | | `output_compression` | number | `0-100` | 仅 `jpeg`/`webp` 有意义。 | | `background` | string | `auto`、`opaque` | `gpt-image-2` 当前不支持 `transparent`。 | | `moderation` | string | `auto`、`low` | 控制图像生成过滤强度;仍需遵守内容政策。 | | `stream` | boolean | `false` | 开启 SSE 流式图片事件。 | | `partial_images` | number | `0-3` | 流式时返回部分图片;会增加输出 token 成本。 | | `user` | string | 用户 ID | 终端用户标识,便于审计和滥用监控。 | ## 尺寸约束 `gpt-image-2` 的 `size` 可以是 `auto`,也可以是满足约束的 `宽x高`: - 最大边不超过 `3840px` - 宽和高都必须是 `16px` 的倍数 - 长边/短边比例不超过 `3:1` - 总像素在 `655,360` 到 `8,294,400` 之间 常用尺寸: ```text 1024x1024 # 方图,通常最快 1536x1024 # 横图 1024x1536 # 竖图 2048x2048 # 2K 方图 2048x1152 # 2K 横图 3840x2160 # 4K 横图 2160x3840 # 4K 竖图 auto ``` 超过 `2560x1440` 的输出通常应按实验性高像素场景处理:高延迟、高成本、失败概率更高。 ## 返回结构 典型响应: ```json { "created": 1770000000, "background": "opaque", "data": [ { "b64_json": "...", "revised_prompt": "..." } ], "model": "gpt-image-2", "output_format": "png", "quality": "medium", "size": "1024x1024", "usage": { "input_tokens": 43, "input_tokens_details": { "image_tokens": 0, "text_tokens": 43 }, "output_tokens": 196, "output_tokens_details": { "image_tokens": 196, "text_tokens": 0 }, "total_tokens": 239 } } ``` 业务侧应持久化: - `model` - `size` - `quality` - `output_format` - `usage.total_tokens` - `usage.input_tokens` - `usage.output_tokens` - 请求耗时 - 上游账号/分组/用户/key ## 编辑图片 ### 单图编辑 ```bash curl -sS "$BASE_URL/images/edits" \ -H "Authorization: Bearer $API_KEY" \ -F "model=gpt-image-2" \ -F "image[]=@input.png" \ -F "prompt=Replace the sofa with a minimalist white lounge chair" \ -F "size=1024x1024" \ -F "quality=medium" \ -F "output_format=png" \ > edit.json ``` ### 局部遮罩编辑 ```bash curl -sS "$BASE_URL/images/edits" \ -H "Authorization: Bearer $API_KEY" \ -F "model=gpt-image-2" \ -F "image[]=@input.png" \ -F "mask=@mask.png" \ -F "prompt=Change only the transparent masked region into a glass button" \ -F "size=1024x1024" \ -F "quality=medium" \ > edit-mask.json ``` 遮罩要求: - `image` 和 `mask` 必须同格式、同尺寸 - 文件小于 50MB - `mask` 必须包含 alpha 通道 - `gpt-image-2` 不要传 `input_fidelity`;它自动按高保真处理输入图 ## Responses API 调用 image_generation tool 用于多轮 Agent、让模型先理解需求再调用图片工具。主模型使用文本/Agent 模型,例如 `gpt-5.5`。 ```bash curl -sS "$BASE_URL/responses" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-5.5", "input": "Generate a clean product poster for an AI proxy service.", "tools": [ { "type": "image_generation", "quality": "medium", "size": "1536x1024", "output_format": "png" } ] }' > response-image.json ``` 注意: - `model` 是主推理模型,不是 `gpt-image-2` - `image_generation` 工具负责图片生成 - sub2api 对 Codex 官方客户端请求会注入 `image_generation` 工具提示,但业务调用仍建议显式传 tool ## 流式图片 Image API 支持流式生成: ```bash curl -N "$BASE_URL/images/generations" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-image-2", "prompt": "A futuristic city skyline at sunrise", "stream": true, "partial_images": 2, "size": "1536x1024", "quality": "medium" }' ``` 事件类型: ```text image_generation.partial_image image_generation.completed ``` `partial_images` 可设 `0-3`。每张 partial image 会额外产生输出 token 成本。 ## SDK 示例 ### Node.js ```ts import fs from "node:fs"; import OpenAI from "openai"; const client = new OpenAI({ apiKey: process.env.API_KEY, baseURL: process.env.BASE_URL ?? "https://claude.omniclaw.store/v1", }); const result = await client.images.generate({ model: "gpt-image-2", prompt: "A premium product poster for an AI service", size: "1536x1024", quality: "medium", output_format: "png", n: 1, }); const b64 = result.data?.[0]?.b64_json; if (!b64) throw new Error("No image returned"); fs.writeFileSync("image.png", Buffer.from(b64, "base64")); ``` ### Python ```py import base64 import os from openai import OpenAI client = OpenAI( api_key=os.environ["API_KEY"], base_url=os.environ.get("BASE_URL", "https://claude.omniclaw.store/v1"), ) result = client.images.generate( model="gpt-image-2", prompt="A premium product poster for an AI service", size="1536x1024", quality="medium", output_format="png", n=1, ) b64 = result.data[0].b64_json with open("image.png", "wb") as f: f.write(base64.b64decode(b64)) ``` ## 生产调度建议 - 路由:图片生成优先使用 plus/team/pro OpenAI OAuth 账号,避免 free 账号能力不足或限流。 - 超时:普通图设置 120 秒,4K 设置 300 秒。 - 重试:只对网络错误、502/503/504 做有限重试;不要对内容政策拒绝无限重试。 - 并发:4K 请求输出 token 高,建议单账号小并发;普通 1024 图可更高并发。 - 成本:记录 `usage` 并按 `input_tokens + output_tokens` 计费;4K 输出 token 可能远高于 1024。 - 延迟:延迟敏感优先 `jpeg`,草稿用 `quality: low`。 - 失败降级:4K/high 失败时降为 4K/medium;仍失败则 1536x1024/medium 先出图,再走放大流程。 ## 常见错误 | 现象 | 可能原因 | 处理 | |---|---|---| | `401 INVALID_API_KEY` | key 不是 sub2api key,或已删除/停用 | 从 `/keys` 重新生成 key | | `400 invalid_request_error` | 参数不兼容,例如透明背景、尺寸不合法 | 检查 `size`、`background`、`quality` | | `429 usage_limit_reached` | 命中 OpenAI 账号用量窗口 | 切换 plus/team/pro 账号或等待恢复 | | `502 Upstream request failed` | 上游没返回图片、网络断开、内容被拒绝文本化 | 看服务端日志;必要时改提示词/降质量/改尺寸 | | 超过 2 分钟 | 高像素或复杂提示词 | 设置更长超时,使用流式或先低分辨率验证 | | `/v1/models` 不显示 `gpt-image-2` | Codex 主模型列表不等于图片接口能力列表 | 直接调用 `/v1/images/generations` | ## 安全边界 业务侧应在请求前过滤明显违规内容,尤其是: - 未成年人或年轻化人物的性化内容 - 非自愿、胁迫、性暴力场景 - 明确裸露或露骨性行为 - 违法、仇恨、极端暴力内容 建议提示词显式写清“成年人、非露骨、无裸露、完全穿着”等约束,降低被上游拒绝或返回非图片文本的概率。