Wan 2.2 Animate: give it a character image and a reference video, and either drive the character with the motion in the video (animate) or swap the person in the video for your character (replace). The output is as long as the reference video, at 480p or 720p, billed per second of that video.
Authorization: Bearer YOUR_API_KEY| Resolution | Per second | 5-second reference | 10-second | 30-second | Frame |
|---|---|---|---|---|---|
| 480p | $0.0742 | $0.371 | $0.742 | $2.226 | 832x480 |
| 720p (default) | $0.154 | $0.77 | $1.54 | $4.62 | 1280x720 |
Billed on the length of the reference video, rounded up to whole seconds (a 3.5-second clip is billed as 4). The charge is fixed when the task is created — nothing is added afterwards. The frame follows the reference video; the sizes above are for a 16:9 reference. Failed requests are not charged.
| animate (default) | Motion transfer: the output shows the character and background from your image, moving and emoting like the person in the reference video. Use it to make an illustration, game character or avatar dance, talk or gesture. |
| replace | Character replacement: the output keeps the scene, camera and motion of the reference video and only swaps the person for your character. Use it to put a virtual character into live footage or recast an existing clip. |
| Both the character image and the reference video are required | The image takes a public URL or base64, at most 50MB; one person, facing forward, with a clear face works best. The video must be a public https URL (no base64, no login, no signed-expiry link), MP4, at most 200MB. |
| The output is as long as the reference video | There is no duration parameter. In our test a 3.54-second reference produced a 3.54-second clip. The reference video may be at most 120 seconds; longer returns a 400. |
| Unreadable video length means no task | The price depends on the reference video length, so it is read when the task is created. If it cannot be read (private link, not a video, expired) you get a 400 with the reason right away instead of a failure minutes later. |
| Resolution is 480p or 720p, default 720p | Omitting resolution renders and bills at 720p — pass 480p explicitly to pay less. There is no 1080p tier. |
| The output carries the reference video audio | In our test the output kept the reference video sound (stereo AAC) at 24fps. A silent reference gives a silent output. |
| Generation takes about two minutes and up | A 480p job on a 3.54-second reference took 110 seconds in our test; longer clips and 720p take longer. Design your polling around an async task. |
# ─── Animate: your character follows the motion in the reference video ───
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan-2.2-animate",
"image": "https://example.com/character.png",
"video": "https://example.com/dance-template.mp4",
"mode": "animate",
"resolution": "480p"
}'
# Response (async — a task is created):
# { "code": 200, "data": { "taskId": "clxxx", "state": "pending" } }
# ─── Replace: swap the person in the video for your character ───
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan-2.2-animate",
"image": "https://example.com/character.png",
"video": "https://example.com/interview.mp4",
"mode": "replace",
"resolution": "720p",
"prompt": "keep the lighting of the original scene",
"seed": 42
}'
# ─── Poll for the result ──────────────────────────────────
curl "https://api.apimodels.app/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# { "code": 200, "data": { "state": "completed", "resultUrls": ["https://r2.apimodels.app/..."] } }| Field | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | wan-2.2-animate |
| image | Yes | string | Character image: a public image URL or base64, at most 50MB. image_url is accepted too. |
| video | Yes | string | Reference video: a public https MP4 URL, at most 120 seconds and 200MB. video_url is accepted too. |
| mode | No | string | animate (default) or replace — see "Two modes" above. |
| resolution | No | string | 480p or 720p, default 720p. |
| prompt | No | string | Optional style guidance such as lighting or how smooth the motion should be. Not required; the clip renders without it. |
| seed | No | number | Random seed (0 to 2147483647); random when omitted |
| callback_url | No | string | Webhook URL called when the task completes |
| Dance and choreography recreation | One character image follows any dance video. A 30-second 720p cover costs $4.62; 480p $2.226. |
| VTuber and avatar reactions | Keep a library of reference moves (wave, bow, jump) and generate the matching reaction when a tip or a comment fires; a 5-second 480p reaction is $0.371. |
| Recasting existing footage | replace mode keeps the shot, scene and motion and swaps the live person for a virtual character — turn real footage into a virtual one, or ship one clip in several character versions. |
| Digital humans and animated photos | A user uploads a photo or an illustration, you pair it with a standard motion clip, and they get a moving, emoting version; the output keeps the reference audio, so a reference with speech gives a talking digital human. |
Per second of the reference video, rounded up to whole seconds: $0.0742 at 480p and $0.154 at 720p. A 5-second reference costs $0.371 or $0.77, a 30-second one $2.226 or $4.62. The charge is fixed when the task is created, both modes cost the same, and failed requests are not charged.
animate keeps your image — its character and background — and drives it with the motion and expressions from the reference video. replace keeps the reference video — its scene, camera and motion — and swaps the person in it for your character. animate is the default.
The output is exactly as long as the reference video; there is no duration parameter. The video must be a public https MP4 URL of at most 120 seconds and 200MB. Its length is read when the task is created, so an unreadable or private link returns a 400 immediately instead of failing minutes later.
The output keeps the audio track of the reference video (stereo AAC in our test) at 24fps; a silent reference gives a silent clip. For the character image use one person facing forward with a clear, unobstructed face, as a public URL or base64 of at most 50MB.