Wan 2.1 VACE Long Reframe
集成
模型 id
wan-vace-apps/long-reframe
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/wan-vace-apps/long-reframe?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}'
# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const API = "https://api.doitong.com/v1";
const headers = {
"Authorization": "Bearer " + process.env.DOITONG_API_KEY,
"Content-Type": "application/json",
};
// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/wan-vace-apps/long-reframe?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);
// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
import os
import requests
API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/wan-vace-apps/long-reframe", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])
# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
# 1. Connect once (Claude Code; Cursor, VS Code, Claude Desktop: https://doitong.com/zh/developers/docs/mcp)
claude mcp add --transport http doitong-models https://api.doitong.com/v1/mcp \
--header "Authorization: Bearer $DOITONG_API_KEY"
# 2. Your agent calls the "run" tool with:
{
"model_id": "wan-vace-apps/long-reframe",
"input": {
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
}
通过 Doitong API 调用 Wan 2.1 VACE Long Reframe 模型(wan-vace-apps/long-reframe)。智能体文档:https://doitong.com/zh/developers/models/wan-vace-apps/long-reframe.md
POST https://api.doitong.com/v1/run/wan-vace-apps/long-reframe?wait=20
Authorization: Bearer $DOITONG_API_KEY
Content-Type: application/json
{
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
如果响应状态为 "queued" 或 "running",请轮询 GET https://api.doitong.com/v1/requests/REQUEST_ID?wait=20,直到状态变为 "succeeded";文件位于 outputs[].url。使用相同请求体 POST https://api.doitong.com/v1/quote/wan-vace-apps/long-reframe,可在运行前返回确切价格。
与示例类似的文件: $0.40 400 API 积分 运行前会测量你的文件 在此页面运行
你的新 API 密钥。 它仅在此时显示,并且已填入下方的代码和 API 密钥字段中。请妥善保密:切勿将其放入在浏览器中运行的代码。
构建请求
控件根据模型架构生成。更改控件时,代码和价格会同步更新。
POST
/run/wan-vace-apps/long-reframe?wait=20
报价 → $0.40
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/wan-vace-apps/long-reframe?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}'
# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const API = "https://api.doitong.com/v1";
const headers = {
"Authorization": "Bearer " + process.env.DOITONG_API_KEY,
"Content-Type": "application/json",
};
// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/wan-vace-apps/long-reframe?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);
// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
import os
import requests
API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/wan-vace-apps/long-reframe", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])
# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "run",
"arguments": {
"model_id": "wan-vace-apps/long-reframe",
"input": {
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
},
"wait_seconds": 20
}
}
}
关于 Wan 2.1 VACE Long Reframe
专为较长片段设计:检测场景、逐个重构,并可通过 `paste_back` 将结果回贴到原视频中。`scene_threshold`(0 到 100)设置检测灵敏度,数值越低检测到的场景越多。默认启用自动降采样。还支持 `zoom_factor`、`trim_borders`、宽高比以及 240p 到 720p 的 `resolution`。
参数
发送规范名称或原生名称之一,不要同时发送两者。 规范名称
名称类型
默认值允许值
描述
prompt可选
类型string
默认值
指导视频生成的文本指令;重新构图时可选。
negative_prompt可选
类型string
默认值letterboxing, borders, black bars, bright colors, overexposed, static, blurred details, subtitles, style, artwork, painting, picture, still, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, malformed limbs, fused fingers, still picture, cluttered background, three legs, many people in the background, walking backwards
生成视频时应用的负面提示词。
seed可选
类型integer | null
使生成结果可复现的种子。设置为 None 时会随机选择种子。
resolution可选
类型enum
默认值auto
auto240p360p480p580p720p
输出视频的分辨率。
aspect_ratio可选
类型enum
默认值auto
auto16:91:19:16
结果视频的宽高比。
num_inference_steps可选
类型integer
默认值30
2 – 50
采样步数;步数越多,处理时间越长,质量越高。
guidance_scale可选
类型number
默认值5
1 – 10
通过无分类器引导控制的提示词对齐强度;提高该比例会使生成的图像更贴合文本。
sampler可选
类型enum
默认值unipc
unipcdpm++euler
生成视频时使用的采样器。
shift可选
类型number
默认值5
1 – 15
生成视频时应用的偏移设置。
video_url必填
video
类型url · video
重新构图参考,通过指向源视频文件的 URL 提供。
enable_safety_checker可选
类型boolean
默认值false
安全检查开关,关闭此设置需要账户授权。没有该授权时,无论设置如何,每个请求都会经过检查;true 启用检查器。
acceleration可选
类型enum
默认值regular
nonelowregular
推理加速设置,可选择 'none' 或 'regular':加速处理可显著提升速度,但会导致输出产生非常轻微的变化。
video_quality可选
类型enum
默认值high
lowmediumhighmaximum
结果视频的质量级别。
video_write_mode可选
类型enum
默认值balanced
fastbalancedsmall
结果视频的写入模式。
enable_auto_downsample可选
类型boolean
默认值true
自动降采样开关。
auto_downsample_min_fps可选
类型number
默认值6
1 – 60
自动降采样的最低帧率,单位为 FPS。
interpolator_model可选
类型enum
默认值film
rifefilm
帧插值模型选择:'rife' 或 'film'。
transparency_mode可选
类型enum
默认值content_aware
content_awarewhiteblack
首帧和尾帧的透明度处理,决定如何填充其中的透明区域。
return_frames_zip可选
类型boolean
默认值false
控制是否同时返回包含每个生成帧的 ZIP 压缩包;为 true 时启用。
zoom_factor可选
类型number
默认值0
0 – 0.9
将视频缩放设为 0 可保持不变。正数倍数会使视频相对于画布按该值放大,并裁剪掉外边缘。
trim_borders可选
类型boolean
默认值true
控制是否裁剪视频边缘。
scene_threshold可选
类型number
默认值30
0 – 100
场景检测阈值:降低该值会增加检测到的场景数量。接受 0 到 100 的值。
paste_back可选
类型boolean
默认值true
控制是否将重新构图的场景贴回原始视频。
必填
规范名称,也可接受
文件参数接受公开的 https:// URL、最大 10 MB 的 data: URI,或上传文件的 file_url。 文件
输出
GET /requests/req_8k2m4q7x1z9c3v5b6n0p2r4t
{
"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
"object": "request",
"model": "wan-vace-apps/long-reframe",
"status": "succeeded",
"created_at": "2026-10-20T12:00:00Z",
"started_at": "2026-10-20T12:00:02Z",
"completed_at": "2026-10-20T12:00:09Z",
"queue_position": null,
"cost": {
"credits": 400,
"usd": "0.40",
"charged": 400,
"refunded": 0
},
"input": {
"video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
},
"output": {
"video": {
"url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
"content_type": "video/mp4",
"file_name": "0-output.mp4",
"file_size": 1843200,
"width": 1024,
"height": 768,
"fps": 1.0,
"duration": 5,
"num_frames": 1
}
},
"outputs": [
{
"type": "video",
"url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
"content_type": "video/mp4",
"file_size": 1843200,
"width": 1280,
"height": 720,
"duration": 5,
"stored": true
}
],
"error": null,
"metrics": {
"inference_seconds": 6.8
},
"urls": {
"self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
"cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
}
}
你的文件,由你选择每个 outputs[].url 都是存储中的副本:可永久保存(按 GB-月付费),也可免费保存 7 天,由账户设置或 ?storage= 决定。
每个模型的结构相同图像、视频和音频均包含 type、url、content_type、width、height 和 duration。output 是模型自身的结果对象。
输出字段
- video
- object {url, content_type, file_name, file_size, width, height, fps, duration, num_frames}生成的视频文件。
其他 Wan VACE Apps 变体
更多模型:视频转换
对于 AI 代理:此页面的 Markdown 版本位于 https://doitong.com/zh/developers/models/wan-vace-apps/long-reframe.md. 所有模型和指南: https://doitong.com/developers/llms.txt