WaveSpeedAI Google VEO 3.1 Fast Image-to-Video
Veo 3.1 video from a still, with synced audio — the hosted shortcut
- client
- video_url
Veo is the video model the local community quietly envies - and Veo 3.1's claim to fame is that it generates audio natively, sound effects and dialogue synced to the picture, which is a capability gap open video models still haven't closed. You can't run it locally, ever. This node wraps the Fast variant of Veo 3.1 image-to-video on WaveSpeed AI, so a still image plus a prompt becomes a clip with optional generated audio, without touching Google's own product surfaces.
What it is
A hosted Veo 3.1 Fast image-to-video node. Feed it an image URL and a prompt describing motion; choose aspect_ratio (16:9 or 9:16), duration (4, 6, or 8 seconds), and resolution (720p or 1080p). The star setting is generate_audio - flip it on and the API returns a clip with audio generated to match, which is the feature that makes Veo hard to replace.
How it works
The familiar pack pattern: client from the WaveSpeedAI Client node, a POST to the Veo 3.1 Fast image-to-video endpoint, and a video_url string back. enable_sync_mode defaults off, so by default it submits and polls until done (up to 30 minutes). The tooltip on the image input offers a real tip: it recommends bright, high-contrast source images - Veo's motion interpretation degrades on dark, low-contrast frames. There's also a negative_prompt and seed in the optional set.
The inputs that matter
- image - source frame as a public URL. Bright and high-contrast, per the author's tooltip.
- prompt - motion and characteristics ("Slow cinematic zoom out as wind moves through trees").
- generate_audio - the differentiator. On means synced audio comes back with the clip.
- aspect_ratio / duration / resolution - shape, length, and quality. Duration is capped at 8 seconds here, which is a Veo trait, not a node quirk.
- negative_prompt, seed, enable_sync_mode.
Output is video_url (STRING) - a URL, so pair it with a download/save node to keep the file.
Install & setup
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 → "razv-wavespeed" → Install, restart. API key from wavespeed.ai in config.ini (from config.ini.tmp), the Client node, or WAVESPEED_API_KEY. Deps: requests, pillow, numpy<2.0.0, torch.
Common issues
- Audio missing - you have to explicitly turn on generate_audio; the default is off.
- Dark frames come out muddy - the model's known preference is bright, contrasty input. Brighten the source before uploading.
- 8-second cap - Veo's clips are short; plan shots accordingly.
- "No output received" - unreachable image URL or task timeout.
- 401 - key issue.
Where this node is worth its price: any clip where synced audio matters - a product teaser, a narrative moment, a voice-style test. No open model does native synchronized audio the way Veo does, and this is the lowest-friction way to use it. If you just need motion without sound, WAN 2.5 via this same pack is cheaper and fine.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| image | STRING | Source image URL for video generation (connect from Upload Image node). Recommended: bright, high-contrast images | |
| prompt | STRING | Describe desired motion and video characteristics (e.g., 'Slow cinematic zoom out as wind moves through trees') | |
| aspect_ratio | COMBO | 16:9 | Video aspect ratio - 16:9 (landscape) or 9:16 (portrait) |
| duration | COMBO | 8 | Video duration in seconds |
| resolution | COMBO | 1080p | Video output resolution |
| generate_audio | BOOLEAN | false | Generate automatic audio synchronized with the video |
| negative_promptopt | STRING | Specify unwanted elements or characteristics in the generated video | |
| seedopt | INT | -1-1–2147483647 | Random seed for reproducible results. -1 for random seed |
| enable_sync_modeopt | BOOLEAN | false | Wait for generation to complete before returning |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |