WaveSpeedAI WAN 2.2 Animate
Drive one video's motion into another image — WAN 2.2 Animate, hosted
- client
- video_url
Most image-to-video nodes want a still and a text prompt. This one is different: it wants a still and a video. WAN 2.2 Animate is Alibaba's motion-transfer model - you give it a character image plus a clip of someone dancing, walking, or gesticulating, and it re-performs that motion on your image while keeping your subject's identity intact. It's the same trick as the popular "dance" and "invisible outfit" videos that swept the feeds, and since WAN 2.2's Animate weights aren't something you're going to run on a laptop, this hosted version is a legitimate shortcut.
What it is
A node that sends an image + a driving video to the WAN 2.2 animate endpoint on WaveSpeed AI and returns the animated clip as a URL. Note the input names: image_url and video_url - both are required, and both are URLs (the tooltips point you at the Upload Image / Upload Video nodes). There's no prompt needed for a basic result; the prompt is optional "additional guidance," so the model works on pure motion transfer out of the box.
How it works
Pack-standard mechanism under the hood: the client carries your API key from the WaveSpeedAI Client node, the node POSTs both URLs to /api/v3/wavespeed-ai/wan-2.2/animate, and you get a video_url string back. enable_sync_mode defaults to true here - a nice touch, since you usually want to just wait for the clip - but you can flip it off to grab a task ID and check later if you're batching.
The inputs that matter
- image_url - your subject. A clean, well-lit front-facing shot transfers motion best; the model has less to work with if the subject is tiny or heavily cropped.
- video_url - the driving motion. The model reads the movement from this clip, so pick something with clear, unambiguous motion. The clip doesn't need to be long or high-res; it needs to be readable.
- resolution - 480p or 720p. The tooltip prices it: 480p is $0.25 per 5 seconds, 720p is $0.50 per 5 seconds. Start at 480p to validate the motion transfer, then re-render at 720p once it works.
- prompt (optional) - extra guidance, and seed - fix it for reproducible takes.
Output is video_url (STRING). As with all the video nodes in this pack, you still need a download step to actually keep the file.
Install & setup
One pack install covers every node here:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/razv-wavespeed.git
cd razv-wavespeed
pip install -r requirements.txt
Or ComfyUI Manager → search "razv-wavespeed" → Install, then restart. Add a WaveSpeed AI API key via config.ini (from config.ini.tmp), the WaveSpeedAI Client node, or WAVESPEED_API_KEY. No model downloads; deps are requests, pillow, numpy<2.0.0, torch.
Common issues
- It won't start without a video URL - this trips people up because every other node here is image-only. The
video_urlinput is required. If you don't have a driving clip, use the plain WAN 2.5 Image-to-Video node instead. - Motion looks rubbery or identity drifts - typical of motion transfer generally; lower the resolution to 480p, use a cleaner driving clip, and add a prompt specifying what shouldn't change.
- 401 / "Invalid API key" - key problem, as everywhere in this pack.
The honest framing: motion transfer is a solved-once, fiddly-forever genre, and a hosted node means your money buys you the model without the VRAM. For a first pass, set a fixed seed and render both resolutions - you'll want to compare anyway.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| image_url | STRING | URL of input image for generating output (connect from Upload Image node) | |
| video_url | STRING | URL of input video for generating output (connect from Upload Video node) | |
| resolution | COMBO | 480p | Output video resolution. 480p costs $0.25 per 5 seconds, 720p costs $0.50 per 5 seconds |
| enable_sync_mode | BOOLEAN | true | Wait for generation to complete before returning |
| promptopt | STRING | Additional generation guidance for the animation | |
| seedopt | INT | -1-1–2147483647 | Random seed for reproducible results. -1 for random seed |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |