WaveSpeedAI Wan2.2 I2V 720p
Wan 2.2 image-to-video without the 24GB VRAM tax
- client
- video_url
Wan 2.2 is the last open Wan, and it's genuinely good - 14B MoE, runs locally, the base half of the open-video world sits on it. So why would anyone reach for a hosted version? Because "runs locally" is doing a lot of work. A real Wan 2.2 I2V setup needs a serious card and a fiddly pipeline, and if you just want to see motion on one image, the setup cost dwarfs the generation. This node is the shortcut: it sends your image to WaveSpeed AI's hosted Wan 2.2 720p image-to-video service and gets you a clip back, no model download, no CUDA babysitting.
Fair warning up front: it's a paid API node from the razvanmatei-sf/razv-wavespeed pack, so every clip costs money and you need a WaveSpeed AI key. If you're doing heavy iterative video work, local Wan 2.2 will pay for itself in patience. If you're testing an idea or generating once, this is faster to stand up than a local install.
How it works
Same pattern as the whole pack: a WaveSpeedAI Client node provides the connection, and this node POSTs to the Wan 2.2 I2V 720p endpoint. The notable feature is last_image_url - an optional second image that guides the ending frame. You describe the motion in prompt, and the model animates from your first image toward that last frame. It's a genuinely useful trick for loop-adjacent shots and controlled scene transitions that most I2V wrappers don't expose.
Sync mode is on by default here (enable_sync_mode = true), meaning the node waits for the whole generation before returning. That's fine for a single clip; flip it off if you're queuing several and want the task IDs back immediately.
Output is a single video_url string - the hosted clip. Download it yourself or pipe it to a save-from-URL node; nothing lands on disk automatically.
The inputs that matter
- image_url - required, and it's a URL string, not an image tensor. More on this below.
- prompt - what motion and content you want. This carries the weight; Wan 2.2 respects a well-written motion prompt.
- duration - 5 or 8 seconds, that's the whole menu.
- last_image_url - optional end-frame image. This is the differentiator.
- seed - -1 for random; set it to lock in a result you liked.
Also there: negative_prompt, and that's basically it. The node is refreshingly lean.
Install
It's part of the shared pack, so one install covers everything:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/razv-wavespeed
# restart ComfyUI
Or ComfyUI Manager → search "razv-wavespeed" → Install. Then you need a WaveSpeed AI API key (wavespeed.ai). Drop it in the WaveSpeedAI Client node, or copy config.ini.tmp → config.ini in the pack folder and paste it under [API], or set a WAVESPEED_API_KEY env var.
Common issues
- "Where do I connect my Load Image?" - you don't. The
image_urlinput takes a hosted URL string. The tooltips mention an "Upload Image node," but no such node is registered in the current build of the pack, so you'll paste a public image URL directly (or host the image yourself and paste that). - Portrait vs landscape is dictated by your input image's aspect ratio, not by a size dropdown - so crop your source before you upload, or Wan crops for you.
- It's still an API. Expect queue times on busy days, and a 30-minute cap on the wait. That's WaveSpeed's service, not a bug in the node.
- Name trap: don't confuse this pack with the WaveSpeed acceleration tool (first-block cache) - same word, completely different project.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| image_url | STRING | URL of input image for video generation (connect from Upload Image node) | |
| prompt | STRING | Text prompt describing the desired motion and content | |
| duration | COMBO | 5 | Duration of the generated video in seconds (5 or 8) |
| enable_sync_mode | BOOLEAN | true | Wait for generation to complete before returning |
| negative_promptopt | STRING | Negative text prompt of what to avoid in the generation | |
| last_image_urlopt | STRING | Optional URL of an image to guide the end of the video (connect from Upload Image node) | |
| seedopt | INT | -1-1–2147483647 | Random seed for reproducible results. -1 for random seed |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |