Google Veo 3 First-Last-Frame to Video
First-frame to last-frame video with Veo 3
- first_frame
- last_frame
- VIDEO
If you've ever tried to make AI video do something specific - end on the exact shot you planned, keep the character recognizably the same person across a cut - you know the pain of handing a model a text prompt and praying. This node is Google's answer to that: you give it a start frame, an end frame, and a prompt, and Veo animates from one to the other. It's a first/last-frame node, the format that gives you the most direct control over a video generation short of keyframing every moment yourself.
It ships with ComfyUI core (no install, no extension) and it's an API node: the heavy lifting happens on Google's servers, not your GPU. You describe the shot in prompt (and negative_prompt for what to avoid), drop an image into first_frame and last_frame, and the node uploads both, calls the Veo API through Comfy's proxy, polls until the clip is done, and hands you a VIDEO output you can save or wire into the rest of the graph.
The model dropdown is where the interesting bit lives: despite the "Veo 3" name, it currently lists veo-3.1-generate, veo-3.1-fast-generate, and veo-3.1-lite. So you're getting the 3.1 revision - the one that improved image-to-video and audio over the original - and the "lite" tier is the cheap, fast option for testing. Two settings actually matter for cost and control: duration (4–8 seconds, step 2) and generate_audio, on by default. Veo is the model that finally does native synchronized audio - dialogue and sound effects that actually match the video - which is the one capability open-weight video still hasn't caught up to. It's also the thing that quietly inflates your bill, so if you're iterating on motion, turn audio off until the shot works.
The resolution combo offers 720p, 1080p, and 4k, with aspect_ratio limited to 16:9 or 9:16 - Veo doesn't do squares or ultrawide. Nothing else is fiddly; seed is mostly a "force it to re-run" switch because Veo is non-deterministic regardless of what you plug in.
Real-world uses: this is the node you reach for when you need a specific ending. Two stills of the same character in different poses become a believable walk cycle. A product image and a hero shot become a dolly-in. Storyboard both frames, generate the middle. Because both endpoints are pinned, consistency comes free in a way prompting alone never gives you.
Where people get burned: Google's Responsible AI filters run on every generation, and if they trip you get an error naming the blocked content rather than a video - swap out the offending frame or prompt rather than fighting it. And keep an eye on the price badge the node shows you: 4k with audio on a full 8 seconds is a very different number from a 720p lite test. Try the cheap settings first, lock the motion, then spend on resolution. One other note - both frames get uploaded to Comfy's servers, so don't feed it anything you're not comfortable leaving your machine.
It landed in core around November 2025 alongside the 3.1 model refresh, and it's been the most reliable way to get Veo-grade bookended shots inside a ComfyUI workflow ever since.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text description of the video | |
| negative_prompt | STRING | Negative text prompt to guide what to avoid in the video | |
| resolution | COMBO | 3 options: 720p, 1080p, 4k | |
| aspect_ratio | COMBO | 16:9 | Aspect ratio of the output video |
| duration | INT | 84–8 | Duration of the output video in seconds |
| seed | INT | 00–4294967295 | Seed for video generation |
| first_frame | IMAGE | Start frame | |
| last_frame | IMAGE | End frame | |
| model | COMBO | 3 options: veo-3.1-generate, veo-3.1-fast-generate, veo-3.1-lite | |
| generate_audio | BOOLEAN | true | Generate audio for the video. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| VIDEO | VIDEO | — |