角色替换 – 视频分析
namifusion/character-swap/analyze
用 SAM3 检测并跟踪视频中的所有人物,返回人物清单(含预览图)和供 generate 使用的 track manifest。
参数
| 名称 | 类型 | 默认 | 约束 | 说明 |
|---|---|---|---|---|
| resolution分辨率 | select | 720p | 480p | 720p |
输出字段
| 字段 | 类型 | 说明 |
|---|---|---|
| objects | array | Detected characters: obj_id, preview url, masked_url, coverage, representative_frame, bbox |
| video_info | object | Input video info: width/height/fps/frame_count |
| analysis_id | string | Analysis session id |
| detected_objects | number | Number of detected characters |
| track_manifest_url | string | Track manifest URL - pass it to the generate model |
API
通过统一 REST API 调用本模型;在 API Keys 页获取密钥。
cURL
# 1) Submit — returns { "task_uuid": "..." }
curl -X POST "https://www.namifusion.com/api/v1/marketplace/run/namifusion/character-swap/analyze" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"resolution": "720p"
}
}'
# 2) Poll until status is "completed", then read the output URLs
curl "https://www.namifusion.com/api/v1/marketplace/run/tasks/TASK_UUID" \
-H "Authorization: Bearer YOUR_API_KEY"Python
import time, requests
API_KEY = "YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# 1) Submit
resp = requests.post(
"https://www.namifusion.com/api/v1/marketplace/run/namifusion/character-swap/analyze",
headers=HEADERS,
json={
"input": {
"resolution": "720p"
}
},
)
resp.raise_for_status() # 401/402/429/5xx stop here instead of polling a bad task
task = resp.json()
# 2) Poll until a terminal state (completed / failed / cancelled).
# This model is allowed up to 1800s server-side.
deadline = time.time() + 1860
while task.get("status") not in ("completed", "failed", "cancelled"):
if time.time() > deadline:
raise TimeoutError(f"still {task.get('status')} — keep the task_uuid and poll later")
time.sleep(3)
poll = requests.get(f"https://www.namifusion.com/api/v1/marketplace/run/tasks/{task['task_uuid']}", headers=HEADERS)
poll.raise_for_status()
task = poll.json()
print(task["status"], task.get("output"))JavaScript
const API_KEY = "YOUR_API_KEY";
const HEADERS = { Authorization: `Bearer ${API_KEY}` };
// 1) Submit
const resp = await fetch("https://www.namifusion.com/api/v1/marketplace/run/namifusion/character-swap/analyze", {
method: "POST",
headers: { ...HEADERS, "Content-Type": "application/json" },
body: JSON.stringify({
"input": {
"resolution": "720p"
}
}),
});
if (!resp.ok) throw new Error(`submit failed: ${resp.status} ${await resp.text()}`);
let task = await resp.json();
// 2) Poll until a terminal state (completed / failed / cancelled).
// This model is allowed up to 1800s server-side.
const deadline = Date.now() + 1860 * 1000;
while (!["completed", "failed", "cancelled"].includes(task.status)) {
if (Date.now() > deadline) throw new Error(`still ${task.status} — keep the task_uuid and poll later`);
await new Promise((r) => setTimeout(r, 3000));
const poll = await fetch(`https://www.namifusion.com/api/v1/marketplace/run/tasks/${task.task_uuid}`, { headers: HEADERS });
if (!poll.ok) throw new Error(`poll failed: ${poll.status}`);
task = await poll.json();
}
console.log(task.status, task.output);文档
角色替换 – 视频分析
角色替换流水线的第 1 步。检测并跟踪输入视频中的所有人物。
输入
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| video_url | string(视频 URL) | 是 | 最长 30 秒,480p/720p 处理 |
| resolution | "480p" | "720p" | 否 | 默认 720p;需与 generate 步骤一致 |
输出
objects[]:检测到的人物 ——obj_id、预览url、masked_url、coveragetrack_manifest_url:传给namifusion/character-swap/generatevideo_info:width/height/fps/frame_count
典型流程
- POST /run/namifusion/character-swap/analyze 提交视频
- 轮询 GET /run/tasks/{task_uuid} 直到完成
- 从
objects中挑选要替换的 obj_id - 携带
track_manifest_url+mappings调用 namifusion/character-swap/generate
定价:每次调用 5 积分。
相关模型
Character SwapNamiFusion
换头 – 视频生成
用 Wan2.2-Animate 将视频中选定头部替换为参考图人物头部,保留原始音轨。
起 $0.750 / 每次
Character SwapNamiFusion
换头 – 视频分析
用 SAM3 检测并跟踪视频中的头部,返回头部清单(含预览图)和供 generate 使用的 track manifest。
起 $0.050 / 每次
Character Swap
Character SwapNamiFusion
角色替换 – 视频生成
用 Wan2.2-Animate 将视频中选定人物替换为参考图人物,保留原始音轨。
起 $0.750 / 每次