SF WaveSpeed VEO 3.1 Fast Image to Video
VEO 3.1 image-to-video with zero local GPU — the fast lane
- client
- video_url
You want Google's VEO 3.1 turning your still into a living shot, and you don't want to burn twenty minutes of local generation (or a mortgage payment on a 5090) to do it. This node is the shortcut: it hands your image to WaveSpeed's hosted copy of VEO 3.1 Fast and hands you back a video URL. Your GPU doesn't even wake up.
VEO 3.1 is one of the closed frontier models the local community keeps measuring itself against - native audio, 1080p, genuinely cinematic motion. There's no open equivalent that matches it yet. This node doesn't change that; it just puts VEO on the other end of an API call, which is the only way ComfyUI can reach it. The "Fast" in the name means WaveSpeed's faster variant of the model - the pack's own notes say it processes up to 30% faster than standard VEO 3.1, at a modest quality cost. For iterating on a shot, that trade is usually worth it.
How it works
All this pack's WaveSpeed nodes are thin API clients, and this one is no exception. You first drop an SF WaveSpeed Client node into the graph and wire its client output into this node's client input - every node in the pack needs one, and there's no way around it. At run time the node POSTs your image, prompt and settings to /api/v3/google/veo3.1-fast/image-to-video, then polls until the video is done. There's no local model, no checkpoints to download, no VRAM budget. The output is a single video_url string, which you can copy into a browser or wire into any node that consumes a URL.
The inputs that matter
Most of these are exactly what they look like:
- image - a URL string of the starting frame, connected from an Upload Image node. Note the tooltip's advice: bright, high-contrast images work best.
- prompt - describe the motion, not the scene. "Slow cinematic zoom out as wind moves through trees" beats "a forest".
- duration - 4, 6, or 8 seconds. Longer isn't free; it's more expensive per second.
- resolution and aspect_ratio - 720p/1080p, 16:9 or 9:16.
- generate_audio - flip this on for VEO's native, synced audio. It's the model's party trick.
- negative_prompt, seed, enable_sync_mode - seed pins reproducibility (-1 for random); sync mode changes how the node waits, but honestly the node blocks until the clip is ready either way.
Installing it
The easiest path is ComfyUI Manager - search for comfyui-stillfront and install. Manual install is the standard two commands:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/comfyui-stillfront.git
cd comfyui-stillfront
pip install -r requirements.txt
Then grab a WaveSpeed API key from wavespeed.ai and either copy config.ini.tmp to config.ini and paste it there, set WAVESPEED_API_KEY, or just type it into the SF WaveSpeed Client's api_key field. Don't worry about the README's clone URL pointing at stillfront/comfyui-stillfront - that's stale; the live repo is under razvanmatei-sf.
Where people get burned
The image input is a URL string, not a ComfyUI IMAGE tensor. You can't drag a normal Load Image node's output into it; you need an upload-style node that produces a URL. That trips up everyone once.
Second, the name collision: ComfyUI-WaveSpeed (chengzeyi's repo) is a completely different thing - a local acceleration pack that makes diffusion faster on your own GPU. It has nothing to do with this API client. If a search result starts talking about quantization and SageAttention, that's the wrong pack.
Finally, this is pay-per-generation and it's an external service: an invalid or missing key throws Unauthorized, and a video can take a couple of minutes even in fast mode. Iterate on the prompt at 720p, then spend on 1080p when you're happy.
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 | — |