Veo3.1 Image To Video (GcsUriImage)
Veo 3.1 image-to-video from a GCS bucket, the cloud-native way
- video_paths
This is the GCS-URI sibling of the tensor-based Veo 3.1 image-to-video node: same generation, but the starting frame is pulled from Google Cloud Storage by URI instead of being passed as an in-graph tensor. If your ComfyUI runs on GKE, or your images live in a bucket as part of an automated pipeline, this node avoids shuttling files around entirely. If you're a local user with images on disk, the tensor version is the friendlier choice - this one's for the cloud-native crowd.
How it works
You give it a gs:// URI and Veo 3.1 uses that image as the first frame, animating per your prompt. The node validates the bucket and object before spending any money - a bad or missing URI produces a clear error. Optional last_frame_gcsuri anchors the end of the clip for interpolation. The finished video downloads to temp and comes out as video_paths (VEO_VIDEO). Like all the Veo 3.1 nodes, it runs the full modern pipeline: model dropdown, resolution choice, native audio, 4–8 second durations.
Inputs that matter
- gcsuri - the required starting-frame image in the cloud.
- last_frame_gcsuri - optional ending frame for guided interpolation.
- model -
VEO_3_1,VEO_3_1_FAST, orVEO_3_1_LITE. The lite and fast tiers are cheaper; useful for iteration. - prompt - the motion description. Empty is tolerated (Veo interprets the image), but a real prompt gets intentional motion.
- output_resolution -
720p(default),1080p, or4k. The default is the pack's most common complaint; bump it before a paid run. - duration_seconds - 4, 6, or 8 only.
- generate_audio - Veo 3.1's native audio, on by default.
- image_format -
PNG,JPEG, orMP4. - compression_quality -
losslessrequires output_gcs_uri, or the node throws an interactive error demanding ags://bucket.
Optional: negative_prompt, seed, output_gcs_uri, gcp_project_id, gcp_region.
Gotchas
Two things carry over from the rest of the Veo 3.1 family. The seed tooltip promises reproducibility with enhance-prompt disabled, but Veo 3.1 doesn't let you disable prompt enhancement - so treat seed as effectively inert. And the 720p default keeps catching people: you're paying for Veo, so set output_resolution to 1080p or 4K unless you're just iterating.
Installing it
Standard pack install:
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 project/region (or rely on GKE workload identity), authenticate, and every video is a billed Vertex AI call. The video_paths output feeds VeoVideoSaveAndPreview for playback or VeoVideoToVHSNode if you want frames back for post-processing.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | VEO_3_1 | 3 options: VEO_3_1, VEO_3_1_FAST, VEO_3_1_LITE |
| gcsuri | STRING | GCS URI for the 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_frame_gcsuriopt | STRING | GCS URI for the last frame 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 | — |