IMAGES API · GENERATIONS / EDITS / SETUP GUIDE

图片生成与编辑

使用 mid-route 的图片 API:文字生成图片,或上传已有图片进行编辑。下面的示例使用 curl,适用于自己的脚本和应用。

01准备密钥与模型

从控制台复制支持图片模型的 API Key。示例使用 gpt-image-2.5-flare,可按分组实际支持情况替换为 gpt-image-2.5-sunburst 或其他图片模型。

打开 API 密钥
生成图片
POST https://mid-route.site/v1/images/generations
编辑图片
POST https://mid-route.site/v1/images/edits
认证请求头
Authorization: Bearer YOUR_API_KEY

接口名称是 generations 和 edits(均为复数),不是 generate 或 edit。

macOS / Linux · 当前终端
export MID_ROUTE_API_KEY="YOUR_API_KEY"
下面的命令会执行真实生图并产生用量。请替换密钥占位值、确认分组与余额后再运行;不要在截图或代码仓库中暴露密钥。

02文字生成图片

新建 UTF-8 编码的 generate.json 文件,复制以下内容。prompt 是图片描述,n: 1 表示生成一张,stream: false 表示等待完整 JSON 响应。

generate.json
{
  "model": "gpt-image-2.5-flare",
  "prompt": "一只橘猫坐在窗边,温暖的自然光,写实摄影风格",
  "n": 1,
  "stream": false,
  "response_format": "b64_json"
}

在该文件所在目录运行对应命令,响应保存到 generated-response.json。

macOS / Linux
curl --fail-with-body --max-time 600 "https://mid-route.site/v1/images/generations" -H "Authorization: Bearer $MID_ROUTE_API_KEY" -H "Content-Type: application/json" --data-binary "@generate.json" -o generated-response.json

本示例不指定尺寸,使用上游默认值。需要指定时,可在 JSON 中添加 size;支持的尺寸以所选模型和渠道为准。

03上传图片并编辑

将源图片放到当前目录,命名为 input.png。编辑接口使用 multipart/form-data 上传:image 是源文件,prompt 描述要怎样修改。

macOS / Linux
curl --fail-with-body --max-time 600 "https://mid-route.site/v1/images/edits" -H "Authorization: Bearer $MID_ROUTE_API_KEY" -F "model=gpt-image-2.5-flare" -F "prompt=保留主体,将背景改成蓝色天空与白云" -F "image=@input.png" -F "n=1" -F "stream=false" -F "response_format=b64_json" -o edited-response.json
不要手动设置 multipart 的 Content-Type,curl 会自动生成包含 boundary 的正确请求头。@input.png 表示读取本地文件,不是发送文件名字符串。

如需多图输入,可按渠道能力改用重复的 -F "image[]=@input.png" 字段;不是所有模型或渠道都支持多图或遮罩。本页先演示单图编辑。

04把 Base64 保存成图片

成功响应的图片内容位于 data[0].b64_json。下面是结构示意,省略的 Base64 不能直接解码:

成功响应结构
{
  "created": 1789128000,
  "data": [
    {
      "b64_json": "这里是完整的图片 Base64 字符串"
    }
  ]
}

mid-route 当前对 API Key 账号转发的 gpt-image-2.5 系列强制设置 response_format=b64_json;即使客户端传 url,也会被覆盖。其他模型不要假设使用相同覆盖规则。

将下面代码保存为 save-image.py(需要 Python 3)。它会检查响应是否有图片,并根据 PNG / JPEG / WebP 文件头选择扩展名。

save-image.py
import base64
import json
import sys
from pathlib import Path

response = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8-sig"))
if response.get("error"):
    raise SystemExit("请求失败:" + str(response["error"]))
items = response.get("data") or []
if not items:
    raise SystemExit("响应中没有图片,请查看原始 JSON。")
for i, item in enumerate(items, 1):
    if not item.get("b64_json"):
        raise SystemExit("响应没有 b64_json,请检查模型和返回格式。")
    image = base64.b64decode(item["b64_json"], validate=True)
    extension = "bin"
    if image.startswith(b"\x89PNG\r\n\x1a\n"):
        extension = "png"
    elif image.startswith(b"\xff\xd8\xff"):
        extension = "jpg"
    elif image[:4] == b"RIFF" and image[8:12] == b"WEBP":
        extension = "webp"
    output = Path(sys.argv[1]).with_name(f"{Path(sys.argv[1]).stem}-{i}.{extension}")
    if output.exists():
        raise SystemExit(f"{output} 已存在,请先重命名文件。")
    output.write_bytes(image)
    print(output)
macOS / Linux
python3 save-image.py generated-response.json
# 编辑结果则使用:
python3 save-image.py edited-response.json

请求返回错误时,响应文件可能包含错误 JSON,而不是图片。请先检查 HTTP 状态和文件内容。

05常见问题

提示 401,应该检查哪里?

确认使用的是 mid-route 控制台创建的完整 API Key。登录密码、其他平台的 Key 都不能替代它。

提示 503 或模型不可用?

检查 Key 所属分组是否支持该模型,以及是否存在可调度账号。相同域名下,不同分组的模型和渠道可能不同。可到API 密钥核对分组。

如何确认请求走了 mid-route?

发送一条简短消息后,到用量记录核对模型和时间。只查询模型列表不等于完成了一次模型调用。

curl 提示无法读取 input.png?

确认终端工作目录中存在该文件,或把 @input.png 改成真实的完整路径。路径含空格时保留引号。

生图等待很久,能反复重试吗?

生图比文字响应慢。客户端超时不等于上游已取消,先查看控制台用量和请求状态,再决定是否重试,避免重复生成与扣费。

404 / 400 应该检查什么?

404 先核对完整路径;400 则检查模型、参数、图片文件和上游错误说明。不要把文字模型填进图片接口。

参考文档:
客户端版本会影响菜单和配置项,请以当前版本及控制台生成的配置为准。