Wan Animate-Mix
POST /api/v1/services/aigc/image2video/video-synthesis — wan2.2-animate-mix character replacement
The Wan character-replacement model (wan2.2-animate-mix) swaps the protagonist of a reference video for the character in a person image, keeping the original motion, scene, lighting, and color grade.
Models
| Model | Notes |
|---|---|
wan2.2-animate-mix | Two service modes: wan-std (standard) / wan-pro (professional) |
Create a job
/api/v1/services/aigc/image2video/video-synthesiscurl https://api.modelsite.ai/api/v1/services/aigc/image2video/video-synthesis \
-H "Authorization: Bearer $MODELSITE_API_KEY" -H "Content-Type: application/json" \
-d '{
"model": "wan2.2-animate-mix",
"input": {
"image_url": "https://example.com/character.jpeg",
"video_url": "https://example.com/reference.mp4",
"watermark": false
},
"parameters": { "mode": "wan-std" }
}'Request body
| Field | Type | Notes |
|---|---|---|
model | string (required) | Fixed to wan2.2-animate-mix |
input.image_url | string (required) | Person image URL. JPG/JPEG/PNG/BMP/WEBP, sides [200, 4096]px, aspect 1:3–3:1, ≤5MB |
input.video_url | string (required) | Reference video URL. MP4/AVI/MOV, sides [200, 2048]px, aspect 1:3–3:1, ≤200MB, 2–30 s |
input.watermark | boolean (optional) | "AI-generated" stamp, default false. Lives in input, not in parameters |
parameters.mode | string (required) | wan-std (fast, budget-friendly) / wan-pro (smoother, better quality, higher rate) |
parameters.check_image | boolean (optional) | Pre-check the input image, default true |
This model takes no prompt, media, duration, or resolution — the person image plus the reference video is the complete input, and output geometry follows the reference video. A media array is refused.
Polling and result
/api/v1/tasks/{task_id}curl "https://api.modelsite.ai/api/v1/tasks/$TASK_ID" \
-H "Authorization: Bearer $MODELSITE_API_KEY"Response fields
| Field | Meaning |
|---|---|
output.task_id | Job ID (same value returned at creation) |
output.task_status | PENDING queued / RUNNING processing / SUCCEEDED done / FAILED failed |
output.video_url | The generated video URL — only on SUCCEEDED; download promptly |
output.code / output.message | Present only on failure, with the reason |
usage | Usage stats (duration, resolution tier, …); counted only on success |
request_id | Unique request ID — include it when reporting issues |
Status flow: PENDING → RUNNING → SUCCEEDED / FAILED.
Two differences on this model: the video URL lands at output.results.video_url (not output.video_url), and usage.video_duration carries the billed duration (fractional seconds) while usage.video_ratio echoes the service mode (standard / pro).
Billing
Billed by actual generated duration (fractional seconds); wan-std and wan-pro have different rates; failed jobs are not billed. Rates on the Models page.
Error handling
Creation-time errors return {"code": "...", "message": "..."} (e.g. a missing parameters.mode); mid-job failures surface through the poll's output.code / output.message. General error codes: Errors.