Veo3.1 Image To Video
Animate any image with Veo 3.1, straight from the tensor
- image
- last_frame
- video_paths
The most useful way to use Veo 3.1, honestly, is image-to-video. Text-to-video leaves you guessing what the model thinks your prompt means; image-to-video pins the composition, the subject, and the style to something you already approved. This node takes a ComfyUI IMAGE tensor - from a Nano Banana node, a Load Image, an img2img result, anything - and hands it to Google's Veo 3.1 as the first frame, with your prompt dictating the motion.
How it works
The node encodes your image tensor into the right format, attaches it to a Veo 3.1 generation request on Vertex AI, and starts a long-running video operation that it polls until completion. The result downloads back to ComfyUI's temp folder and comes out the other side as a VEO_VIDEO path list. Optional nicety: the last_frame input accepts a second image tensor, which Veo uses as the end frame - giving you a guided interpolation between two fixed points instead of an open-ended animation.
Inputs that matter
- image - the required starting frame. Any
IMAGEtensor. - last_frame - optional ending frame for interpolation. This is the one beginners don't expect and end up loving.
- prompt - what moves and how. Empty prompts are tolerated (Veo falls back to interpreting the image), but you'll get better motion with a real description.
- model -
VEO_3_1,VEO_3_1_FAST, orVEO_3_1_LITE. The lite and fast variants are cheaper and quicker at the cost of quality - useful when you're iterating. - output_resolution -
720p(default),1080p, or4k. The 720p default is the pack's most-voiced complaint; set this before a paid run. - duration_seconds - 4, 6, or 8 seconds only.
- generate_audio - on by default; Veo 3.1's native audio is a genuine differentiator, leave it unless you're replacing the soundtrack yourself.
- image_format -
PNG,JPEG, orMP4, the format hint for the API.
Optional: negative_prompt, seed, output_gcs_uri (mandatory if compression_quality is lossless), and the pack-standard gcp_project_id / gcp_region.
Gotchas
The seed story is worth knowing before you chase reproducibility: the tooltip claims seed works with enhance-prompt disabled, but Veo 3.1 doesn't expose that toggle - prompt enhancement is always on, so treat seed as effectively inert here. And "lossless" mode has a hard requirement: no output_gcs_uri, no generation, with an interactive error telling you to provide a gs:// bucket.
Installing and wiring it
Part of the Google GenMedia pack:
cd ComfyUI/custom_nodes
git clone https://github.com/GoogleCloudPlatform/comfyui-google-genmedia-custom-nodes
pip install -r comfyui-google-genmedia-custom-nodes/requirements.txt
Or ComfyUI Manager → search comfyui-google-genmedia-custom-nodes. Restart, find it under Google AI/Veo3.1. Set gcp_project_id and gcp_region on the node (this is a billed Vertex AI call, not local inference). The video_paths output goes to VeoVideoSaveAndPreview for playback or VeoVideoToVHSNode if you want the frames back as images for post-processing. A solid loop: Nano Banana for the still → this node for the motion → VHS node for upscaling.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | VEO_3_1 | 3 options: VEO_3_1, VEO_3_1_FAST, VEO_3_1_LITE |
| image | IMAGE | — | |
| image_format | COMBO | PNG | mime type of the image |
| prompt | STRING | — | |
| aspect_ratio | COMBO | 16:9 | 2 options: 16:9, 9:16 |
| output_resolution | COMBO | 720p | 3 options: 720p, 1080p, 4k |
| compression_quality | COMBO | optimized | 2 options: optimized, lossless |
| person_generation | COMBO | allow_adult | 2 options: dont_allow, allow_adult |
| duration_seconds | INT | 84–8 | — |
| generate_audio | BOOLEAN | true | — |
| sample_count | INT | 11–4 | — |
| last_frameopt | IMAGE | — | |
| output_gcs_uriopt | STRING | — | |
| negative_promptopt | STRING | — | |
| seedopt | INT | 00–4294967295 | 0 seed let's Veo API handle randomness. Seed works with enhance_prompt disabled |
| gcp_project_idopt | STRING | GCP project id where Vertex AI API will query Veo | |
| gcp_regionopt | STRING | GCP region for Vertex AI API |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_paths | VEO_VIDEO | — |