WaveSpeedAI Google VEO 3.1 Image-to-Video
Give Veo 3.1 a frame, get a movie — and an end-frame, if you want one
- client
- video_url
Image-to-video is where Veo 3.1 is at its best - you already know the composition you want, because you're looking at it. This node from razvanmatei-sf/razv-wavespeed hands a starting frame to Google's Veo 3.1 through the WaveSpeed AI API and gets back a short, coherent clip that moves within your image rather than inventing a new world. It's the "animate this picture" node, and it's genuinely good at it.
The one feature that separates this from the rest of the video nodes in the pack is last_frame: an optional ending frame image. Give Veo both a start and an end, and it generates a transition between them. That's the classic morph/transition shot, and it's the kind of thing you'd otherwise composite by hand or reach for a dedicated transition model for.
How it works
WaveSpeedAI Client → image (the starting frame, as a URL) → POST to the Veo 3.1 image-to-video endpoint → poll → video_url string out. Same URL-not-file output as every video node here; download it yourself.
The dials mirror the text-to-video node: aspect_ratio (16:9 / 9:16), duration (4/6/8s), resolution (720p/1080p), generate_audio (native synced audio, off by default). Then the two that matter for I2V specifically:
- image - the start frame. JPEG/PNG/WEBP. As with all image inputs in this pack, it's a hosted URL string - there's no upload node registered in the current build.
- last_frame - optional ending frame for a transition. Leave empty for an open-ended continuation.
- prompt - describe motion and story context. The tooltip's example is perfect: "Slow dolly zoom on a city skyline." Motion and camera, not "make it pretty."
The inputs that matter
- image - required start frame. Publicly reachable URL.
- prompt - the motion language.
- last_frame - the transition trick. This is the reason to pick this node over a plain I2V.
- generate_audio - flip on for synced sound.
Install
Shared pack:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/razv-wavespeed
# restart ComfyUI
Or ComfyUI Manager → search "razv-wavespeed" → Install. Add a WaveSpeed AI key via the WaveSpeedAI Client node, config.ini (copy from config.ini.tmp, [API]), or a WAVESPEED_API_KEY env var.
Common issues
- Paid video generation - the most expensive category in the pack, and a start+end-frame transition is a heavier job than a plain I2V. Budget for it.
- URL-only input. If you go hunting for the tooltip's "Upload Image node," you won't find one in the current build. Paste a public image URL.
- Aspect ratio vs. your source image. The node will letterbox or crop to the chosen ratio; crop your start frame to match before you pay for a generation.
- Video URLs expire. Fetch the result promptly.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| image | STRING | Starting frame image URL (JPEG/PNG/WEBP) - connect from Upload Image node | |
| prompt | STRING | Describe motion/story context (e.g., 'Slow dolly zoom on a city skyline') | |
| 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 native audio synchronized with the video |
| last_frameopt | STRING | Optional ending frame image URL for transition effect (JPEG/PNG/WEBP) | |
| negative_promptopt | STRING | Specify undesired generation characteristics | |
| 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 | — |