Veo2 Image To Video (GcsUriImage)
Veo 2 image-to-video, when your image already lives in the cloud
- video_paths
The GCS-URI variants of these Veo nodes exist for one reason: the image you want to animate isn't on your disk, it's in Google Cloud Storage. If you're running ComfyUI on GKE or you've got a pipeline where images land in a gs:// bucket before they touch the graph, this node skips the download-and-reupload dance and hands Veo 2 the cloud URI directly. It's the same image-to-video generation as the tensor version - just a different way of feeding it.
How it works
You give it a gs:// URI, Veo 2 fetches the image from storage as its starting frame, and your prompt dictates the motion. The node validates the bucket and file up front - if the object doesn't exist or isn't accessible you get a clear error before any money is spent. It also supports last_frame_gcsuri, an optional second cloud image that becomes the video's final frame, for guided interpolation. The result is downloaded back to ComfyUI's temp and returned as video_paths (VEO_VIDEO).
Inputs that matter
- gcsuri - the required
gs://path/to/imageinput image. - last_frame_gcsuri - optional ending frame for interpolation.
- image_format -
PNG,JPEG, orMP4, the format hint for the API. - prompt - the animation description.
- aspect_ratio -
16:9or9:16. - compression_quality -
optimizedorlossless; lossless needsoutput_gcs_uri, since the API can't return a huge lossless file inline. - person_generation -
allow_adultordont_allowfor people in the video. - duration_seconds - Veo 2 runs 5–8 seconds (note: different range from Veo 3.1's 4–8).
- enhance_prompt - on by default; the model rewrites your prompt. Note it disables seed.
- sample_count - up to 4 variations.
Optional: negative_prompt, seed (only meaningful with enhance_prompt off), output_gcs_uri, and the pack-standard gcp_project_id / **gcp_region`.
Installing it
Shared 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/Veo2. Set project/region on the node, authenticate, and each video is a billed Vertex AI call.
Who should use it
If you're on a local ComfyUI with your images already on disk, the tensor-based Veo2ImageToVideoNode is the easier pick - no bucket management. Reach for this one when your images live in GCS anyway (GKE setups, automated pipelines, huge files you don't want to shuttle). Also note this is the older Veo 2 generation: no native audio, 720p-class output, no resolution selector, and prompt enhancement that's toggleable - which at least means the seed actually works when you turn it off. If you want the newer model's bells and whistles, Veo 3.1's GCS node is the upgrade path.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| 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 |
| compression_quality | COMBO | optimized | 2 options: optimized, lossless |
| person_generation | COMBO | allow_adult | 2 options: dont_allow, allow_adult |
| duration_seconds | INT | 85–8 | — |
| enhance_prompt | 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 | — |