Wan 2.2 Animate

Wan 2.2 Animate

Playground

Try it on WavespeedAI!

Wan2.2-Animate unified character animation & replacement model replicating movement and expression; generates 720p videos up to 120s. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Wan2.2-Animate

What is Wan2.2-Animate?

Wan2.2-Animate is an Alibaba Wan 2.2–based motion-transfer model that turns a single character image into a full performance. It copies body movement and facial expressions from a driving video while keeping the output stable, realistic, and identity-consistent.


Modes: animate vs replace

Wan2.2-Animate supports two behaviors:

  • animate The person or object in the input image is animated to follow the motion in the driving video. Use this when you want to bring a still portrait, illustration, or character design to life.

  • replace The model replaces the main performer in the video with the person or object from the image, keeping the original motion, scene, and camera. Use this when you want to swap a new character into an existing shot (presenter, actor, mascot, etc.).


Pricing

Pricing depends on output length and resolution.

ResolutionPrice per 5 sMax billed length
480p0.20 USD120 s
720p0.40 USD120 s

Billing rules

Underlying logic (no math required on your side):

  • Billed duration is clamped to the range 5–120 seconds

    • If the video is shorter than 5 s → billed as 5 s
    • If the video is longer than 120 s → billed as 120 s
  • 480p

    • 0.20 USD per 5 s → 0.04 USD per second
  • 720p

    • Double 480p → 0.40 USD per 5 s → 0.08 USD per second

So, for example:

  • 30 s at 480p → 30 × 0.04 = 1.20 USD
  • 30 s at 720p → 30 × 0.08 = 2.40 USD
  • 150 s at 720p (over the cap) → billed as 120 s → 120 × 0.08 = 9.60 USD

How to use Wan2.2-Animate

  1. image (required) Upload a clear character image.

    • Prefer PNG or JPG
    • Avoid WEBP and heavily compressed images
  2. video (required) Upload the driving video whose pose, movement, and expressions you want to copy.

  3. mode (required)

    • animate: make the image character move like the subject in the video
    • replace: swap the image character into the video
  4. prompt (optional) Short guidance such as:

    • “Preserve outfit, natural expression, no background change.”
    • “Smoother head motion, cinematic lighting.”
  5. resolution Choose 480p for faster, cheaper previews or 720p for higher-quality output.

  6. seed (optional)

    • Leave default for a fresh variation each run.
    • Set a fixed integer if you want to reproduce the same layout and motion.
  7. Run generation, review the result, and adjust image, video, mode, prompt, and resolution as needed.


Practical tips

  • Match composition and pose Try to keep the image and video similar in camera angle, crop, and body pose. This reduces artifacts and identity drift, especially in replace mode.

  • Keep aspect ratio consistent Use the same or very similar aspect ratio for both the image and the video for more stable framing.

  • Use clean, well-lit faces Avoid heavy occlusion by hands, microphones, or props, and avoid strong motion blur in the driving video.

  • Prototype at 480p Start with 480p and short clips to find good settings, then switch to 720p and longer durations once you like the behavior.

This gives you a predictable-cost, two-mode pipeline for driving AI characters and doing high-quality character replacement in existing footage.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result


# Submit the task
curl --location --request POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/wan-2.2/animate" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
    "mode": "animate",
    "resolution": "480p",
    "seed": -1
}'

# Get the result
curl --location --request GET "https://api.wavespeed.ai/api/v3/predictions/${requestId}/result" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}"

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagestringYes-The image for generating the output.
videostringYes-The video for generating the output.
promptstringNo-The positive prompt for the generation.
modestringNoanimateanimate, replaceThe mode of the generation. Animate Mode: animate the character in input image with movements from the input video. Replace Mode: replace the character in input video with the character in input image.
resolutionstringNo480p480p, 720pThe resolution of the output video.
seedintegerNo-1-1 ~ 2147483647The random seed to use for the generation. -1 means a random seed will be used.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayArray of URLs to the generated content (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.has_nsfw_contentsarrayArray of boolean values indicating NSFW detection for each output
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction, the ID of the prediction to get
data.modelstringModel ID used for the prediction
data.outputsstringArray of URLs to the generated content (empty when status is not completed).
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2025 WaveSpeedAI. All rights reserved.