Wan 2.5 图像编辑 Preview
万相图像编辑模型,通过文本指令编辑图片。
模型 ID(请求中的 model 字段)
wan2.5-i2i-preview快速开始#
- 创建 API Key
在控制台 我的 Key 创建通用 API Key(明文只显示一次),并确认账户余额充足。
- 设置环境变量
export TOKENTOSEA_API_KEY="sk-relay_…",示例从环境变量读取密钥。 - 发送请求
以下为 图像编辑 · JSON 示例;其他接口见全部调用示例。
- 需要准备图片的 HTTPS 地址(示例变量
IMAGE_URL) - 请填写你有权使用且可被上游访问的素材地址,或先创建所需文件 / 音色。
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl https://api.tokentosea.com/v1/images/edits \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan2.5-i2i-preview",
"prompt": "A red cube on a white table, soft studio light.",
"n": 1,
"size": "1024x1024",
"image": "{{IMAGE_URL}}"
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
IMAGE_URL = "https://example.com/your-image.png" # 替换为你有权使用、上游可访问的图片 HTTPS 地址
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "wan2.5-i2i-preview",
"prompt": "A red cube on a white table, soft studio light.",
"n": 1,
"size": "1024x1024",
"image": IMAGE_URL,
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
try:
response = requests.post(
f"{API_BASE}/v1/images/edits",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
timeout=1300,
)
print(response.status_code, response.headers.get("X-Request-Id"))
show(response.json())
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
show(result)
# output.data[].url 是短期有效(≤300 秒)的 COS 下载链接;过期后用 asset_id 重新获取:
# requests.get(f"{API_BASE}/v1/assets/{asset_id}/download-url", headers=AUTH, timeout=30).json()// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const IMAGE_URL = 'https://example.com/your-image.png'; // 替换为你有权使用、上游可访问的图片 HTTPS 地址
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'wan2.5-i2i-preview',
prompt: 'A red cube on a white table, soft studio light.',
n: 1,
size: '1024x1024',
image: IMAGE_URL,
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
try {
const response = await fetch(`${API_BASE}/v1/images/edits`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
show(await response.json());
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
show(result);
// output.data[].url 是短期有效(≤300 秒)的 COS 下载链接;过期后用 asset_id 重新获取:
// await fetch(`${API_BASE}/v1/assets/${assetId}/download-url`, { headers: auth }).then(r => r.json());能力与接口#
图片编辑
下表只列出已在该型号上完成验收的接口、响应方式与输入类型;其他组合会返回 422(如 endpoint_not_verified、response_mode_not_verified、input_modality_not_verified)。
| 接口 | JSON | SSE 流式 | WebSocket | 已验证输入 |
|---|---|---|---|---|
图像编辑/v1/images/edits | 支持 | 不支持 | 不支持 | — |
价格#
官方价格以人民币(CNY)公布,核对日期 2026-10-19。TokenToSea 按官方价格计费、不加价;调用从账户余额(美元)扣除,人民币价格按请求受理时冻结的汇率换算为美元,金额保留 6 位小数并向上取整。
| 计费项 | 单价 | 计量单位 |
|---|---|---|
| 输出图片 | ¥0.2 | 每张 |
每次请求先按可能的最高用量预留金额,完成后按供应商返回的实际用量结算并退回差额。计费方式详见计费与结算。
官方价格来源
限制#
本页暂未收录此型号的上下文窗口与最大输出长度,请以厂商文档为准;以下为平台规则。
响应方式:JSON。
- 同一账户最多同时进行 8 个已预留或执行中的调用(平台规则)。
- JSON 请求体不超过 48 MB;multipart 上传仅 1 个
file,不超过 25 MB。 - 结果保留 31 天;生成的文件保留 30 天,结果中的下载链接有效期不超过 300 秒,过期后重新查询或通过
/v1/assets/{asset_id}/download-url获取。
全部调用示例#
每个示例都包含 cURL、Python 与 Node.js 三种写法,发送完全相同的请求体,并用同一个 Idempotency-Key 查询结果。
图像编辑 · JSON#
POST /v1/images/edits 接口参考
- 需要准备图片的 HTTPS 地址(示例变量
IMAGE_URL) - 请填写你有权使用且可被上游访问的素材地址,或先创建所需文件 / 音色。
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl https://api.tokentosea.com/v1/images/edits \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan2.5-i2i-preview",
"prompt": "A red cube on a white table, soft studio light.",
"n": 1,
"size": "1024x1024",
"image": "{{IMAGE_URL}}"
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
IMAGE_URL = "https://example.com/your-image.png" # 替换为你有权使用、上游可访问的图片 HTTPS 地址
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "wan2.5-i2i-preview",
"prompt": "A red cube on a white table, soft studio light.",
"n": 1,
"size": "1024x1024",
"image": IMAGE_URL,
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
try:
response = requests.post(
f"{API_BASE}/v1/images/edits",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
timeout=1300,
)
print(response.status_code, response.headers.get("X-Request-Id"))
show(response.json())
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
show(result)
# output.data[].url 是短期有效(≤300 秒)的 COS 下载链接;过期后用 asset_id 重新获取:
# requests.get(f"{API_BASE}/v1/assets/{asset_id}/download-url", headers=AUTH, timeout=30).json()// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const IMAGE_URL = 'https://example.com/your-image.png'; // 替换为你有权使用、上游可访问的图片 HTTPS 地址
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'wan2.5-i2i-preview',
prompt: 'A red cube on a white table, soft studio light.',
n: 1,
size: '1024x1024',
image: IMAGE_URL,
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
try {
const response = await fetch(`${API_BASE}/v1/images/edits`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
show(await response.json());
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
show(result);
// output.data[].url 是短期有效(≤300 秒)的 COS 下载链接;过期后用 asset_id 重新获取:
// await fetch(`${API_BASE}/v1/assets/${assetId}/download-url`, { headers: auth }).then(r => r.json());相关文档#
在控制台测试#
登录后可在 模型测试 页面直接调用 wan2.5-i2i-preview,查看返回结果、token 用量与实际扣费。网页调用同样从账户余额扣费。