4Z API

python 使用 gpt-image-2.6 创建编辑图片(含 SVG / GIF 输出)

适用模型:gpt-image-2.6-flare(快速迭代)、gpt-image-2.6-sunburst(精细视觉作业)。 接口:POST /v1/images/generations(文生图)、POST /v1/images/edits(编辑),请求体与官方 OpenAI Images API 兼容。

from openai import OpenAI
import base64

client = OpenAI(
    base_url="https://4zapi.com/v1",
    api_key="sk-xxx",
)

1. 文生图(最简)

result = client.images.generate(
    model="gpt-image-2.6-flare",
    prompt="产品静物:哑光黑机械键盘,影棚灯光,无文字",
    n=1,
    size="1536x1024",
)

with open("keyboard.png", "wb") as f:
    f.write(base64.b64decode(result.data[0].b64_json))

2. complexity 复杂度(2.6 新增)

complexity 控制渲染前的规划强度,与 quality(画质)相互独立,不另收费。省略时默认 high。

result = client.images.generate(
    model="gpt-image-2.6-sunburst",
    prompt="儿童绘本插画:纸雕风格足球夺冠场景,看台上有 CHAMPIONS 横幅",
    complexity="medium",   # low / medium / high
    quality="medium",
)
  • low:适合换背景、改招牌这类局部修改,延迟低、少改动;
  • high:适合密集文字、复杂布局与物体关系,延迟更高,也可能引入多余改动。

3. SVG 矢量输出(2.6 新增)

output_format="svg",仅文生图接口且 n=1;必须携带 svg 对象指定作者模型。

result = client.images.generate(
    model="gpt-image-2.6-sunburst",
    prompt="面包店标志:金色麦穗与手写店名,扁平矢量风",
    output_format="svg",
    n=1,
    quality="medium",
    extra_body={
        "svg": {
            "model": "gpt-6-luna",
            "reasoning": {"effort": "low"},
        }
    },
)

with open("logo.svg", "wb") as f:
    f.write(base64.b64decode(result.data[0].b64_json))  # 解码后为 UTF-8 XML

JSON 请求体也可以直接写:

{
  "model": "gpt-image-2.6-sunburst",
  "prompt": "面包店标志:金色麦穗与手写店名,扁平矢量风",
  "output_format": "svg",
  "n": 1,
  "svg": { "model": "gpt-6-luna", "reasoning": { "effort": "low" } }
}
  • 计费 = 参考图按图像模型费率 + SVG tokens 按作者模型费率;响应 svg_usage 汇报作者模型用量。
  • SVG 不支持流式、partial_images、prompt_rewriter、output_compression;编辑接口不支持 SVG。
  • 若报错 SVG generation requires '***.model':说明 svg 对象未携带或未被中转透传,请补上 svg.model 后重试;仍报错请联系支持确认透传状态。

4. GIF 动图输出(2.6 新增)

output_format="gif",仅文生图接口。在 prompt 里写明主体、运动与循环方式。

result = client.images.generate(
    model="gpt-image-2.6-sunburst",
    prompt="一只猴子在雪夜小屋前举起灯笼,眨眼后回到起始姿势,无缝循环",
    output_format="gif",
    n=1,
    size="1024x1024",
    frame_count=9,          # 2-16,默认 9
    frame_duration_ms=200,  # 每帧毫秒,默认 200,最小 20
)

with open("monkey.gif", "wb") as f:
    f.write(base64.b64decode(result.data[0].b64_json))
  • size 描述每一帧的尺寸;帧数 × 帧尺寸 × n 超出像素预算时会失败,减小 frame_count、帧尺寸或 n。
  • GIF 不支持 mask、流式、partial_images、自定义 output_compression。

5. 标注引导编辑(markup,2.6 新增)

在透明 PNG 上圈出要修改的区域,改什么写在 prompt 里。标注层需与首图同宽高(方向对齐后),必须含透明像素。

result = client.images.edit(
    model="gpt-image-2.6-flare",
    image=open("kitchen.webp", "rb"),
    markup=open("markup-vase.png", "rb"),
    quality="medium",
    prompt=(
        "把红圈内的花瓶改成钴蓝色陶瓷。"
        "保留它的形状、干花和其余画面不变,去掉红圈。"
    ),
)

with open("vase.png", "wb") as f:
    f.write(base64.b64decode(result.data[0].b64_json))

等价 curl(multipart):

curl https://4zapi.com/v1/images/edits \
  -H "Authorization: Bearer $API_KEY" \
  -F model=gpt-image-2.6-flare \
  -F image=@kitchen.webp \
  -F markup=@markup-vase.png \
  -F quality=medium \
  -F 'prompt=把红圈内的花瓶改成钴蓝色陶瓷。保留它的形状、干花和其余画面不变,去掉红圈。' \
  | jq -r '.data[0].b64_json' | base64 --decode > vase.png
  • markup 只作用于第一张输入图,其余图作参考图;标注文件不超过 16,777,216 像素、50MB。
  • markup 不可与 mask 或 prompt_rewriter 同用。
  • 编辑接口不支持 SVG 输出。

常见报错

报错 原因与处理
SVG generation requires '***.model' SVG 输出缺 svg.model(或未被中转透传),补上 svg 对象后重试
GIF / SVG 参数不生效 frame_count / frame_duration_ms 仅 output_format=gif 可用;svg 对象仅 output_format=svg 可用
编辑接口传 output_format=svg 被拒 SVG 仅支持 POST /v1/images/generations