API 参考
图像编辑 Images Edits
POST /v1/images/edits 的参数与示例:上传原图加提示词修改图片,支持多图合成和蒙版局部重绘。multipart/form-data 格式,与 OpenAI 图像编辑接口一致,本站按原格式转发请求。
POST /v1/images/edits 在一张或多张原图的基础上,按提示词生成新图片。常见用法是换背景、改画面里的文字、局部重绘,或者把商品图和 logo 合成到一起。请求用 multipart/form-data 上传文件,格式与 OpenAI Images API 一致。本站把请求按原格式转发给模型服务,不同模型支持的字段和取值不同,以对应模型的官方说明为准。
POST
https://open.tutujin.com/v1/images/edits请求头
| 请求头 | 必填 | 说明 |
|---|---|---|
Authorization | 是 | Bearer sk-...,控制台创建的 API Key |
Content-Type | 是 | multipart/form-data。用 SDK 或 curl -F 时会自动设置并带上 boundary,不要手写 |
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 模型名,例如 gpt-image-1.5 |
image | file | 是 | 原图,常见格式 PNG、JPEG、WEBP。GPT Image 系列可以传多张,表单字段名写成 image[] |
prompt | string | 是 | 修改要求,说明要改什么、哪些地方保持不变 |
mask | file | 否 | 蒙版 PNG。透明区域(alpha 为 0)是要重绘的位置,尺寸要和原图一致,作用于第一张原图 |
n | integer | 否 | 生成几张,默认 1 |
size | string | 否 | 输出尺寸,可选值因模型而异 |
quality | string | 否 | GPT Image 系列可选 low、medium、high、auto |
response_format | string | 否 | url 或 b64_json,部分模型只支持其中一种 |
请求示例
下面的例子把 logo 印到杯身上,cup.png 是商品图,logo.png 是 logo:
curl https://open.tutujin.com/v1/images/edits \
-H "Authorization: Bearer $TUTUJIN_API_KEY" \
-F model="gpt-image-1.5" \
-F "image[]=@cup.png" \
-F "image[]=@logo.png" \
-F prompt="把第二张图的 logo 印在杯身正面,保持杯子形状、颜色和光线不变"import base64
import os
from openai import OpenAI
client = OpenAI(base_url="https://open.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"], timeout=300)
resp = client.images.edit(
model="gpt-image-1.5",
image=[open("cup.png", "rb"), open("logo.png", "rb")],
prompt="把第二张图的 logo 印在杯身正面,保持杯子形状、颜色和光线不变",
)
img = resp.data[0]
if img.b64_json:
with open("cup-logo.png", "wb") as f:
f.write(base64.b64decode(img.b64_json))
else:
print(img.url) # 临时链接,拿到后尽快下载保存import fs from 'node:fs'
import OpenAI, { toFile } from 'openai'
const client = new OpenAI({ baseURL: 'https://open.tutujin.com/v1', apiKey: process.env.TUTUJIN_API_KEY, timeout: 300_000 })
const resp = await client.images.edit({
model: 'gpt-image-1.5',
image: [
await toFile(fs.createReadStream('cup.png'), 'cup.png', { type: 'image/png' }),
await toFile(fs.createReadStream('logo.png'), 'logo.png', { type: 'image/png' }),
],
prompt: '把第二张图的 logo 印在杯身正面,保持杯子形状、颜色和光线不变',
})
const img = resp.data[0]
if (img.b64_json) fs.writeFileSync('cup-logo.png', Buffer.from(img.b64_json, 'base64'))
else console.log(img.url)用蒙版局部重绘
只想改画面的一部分时,再上传一张和原图同尺寸的 PNG 蒙版,把要重绘的区域做成透明:
cURL
curl https://open.tutujin.com/v1/images/edits \
-H "Authorization: Bearer $TUTUJIN_API_KEY" \
-F model="gpt-image-1.5" \
-F "image[]=@room.png" \
-F mask=@mask.png \
-F prompt="在透明区域放一盆绿植,风格和光线与房间一致"响应示例
JSON
{
"created": 1794000000,
"data": [
{ "b64_json": "iVBORw0KGgo..." }
]
}| 字段 | 说明 |
|---|---|
data[].b64_json | base64 编码的图片数据 |
data[].url | 图片的临时链接,模型返回链接时出现,会过期 |
usage | 按 token 计费的图像模型会返回输入、输出 tokens,原图也计入输入 |
注意事项
- 这个接口是原样转发,没有在本站单独实测。GPT Image 以外的模型对字段名、多图写法的要求可能不同,接入前先用一两次请求确认。
- 上传文件的后缀要和真实格式一致,例如
cup.png必须真的是 PNG,否则可能报错或出图异常。 - 原图越大,请求越慢,也可能触发请求体过大(413)。发送前把图片缩到够用的尺寸。
- 返回的链接是临时地址,下载后转存到自己的存储。
- 生图耗时较长,客户端超时建议设为 300 秒左右。实际扣费以控制台「用量明细」为准。
支持此接口的模型
| 模型 | 厂商 | 最低价分组 | 输入 ¥/百万 | 输出 ¥/百万 | 按次 ¥/次 |
|---|---|---|---|---|---|
| nano-banana-pro | 标准 | — | — | ¥0.4 | |
| flux-schnell | Flux 绘图 | 标准 | — | — | ¥0.02 |
| flux | Flux 绘图 | 标准 | — | — | ¥0.02 |
| flux-dev | Flux 绘图 | 标准 | — | — | ¥0.06 |
| gpt-4o-image | OpenAI | 标准 | — | — | ¥0.1 |
| flux-pro | Flux 绘图 | 标准 | — | — | ¥0.1 |
| grok-imagine-image-2.0 | xAI | 标准 | — | — | ¥0.12 |
| gpt-image-1.5 | OpenAI | 标准 | — | — | ¥0.12 |
价格为人民币,取各模型最低价分组;价格更新于 2026年11月12日 20:17。
共 31 个模型支持此接口,上表列出其中一部分。 在模型广场查看全部
没找到答案?加客服微信 JsnonoChat,发送报错信息里的 request id,我们帮你排查。