ComfyUI Node

Veo 2 Video Generation

The video node that makes you wait (and it's worth it)

By khanhlvg·Created about a year ago·Updated about a year ago· 4
Veo 2 Video Generation
  • first_frame
  • last_frame
  • video
project_id
locationus-central1
model
promptA cinematic shot of a panda eating bamboo.
output_gcs_uri
duration_seconds8
aspect_ratio
enhance_prompttrue
person_generation
seed2594296857

Veo 2 is the node most people install the Vertex AI pack for. It's Google's video generation model as a single ComfyUI node: text in, an 8-second clip out, with first-frame and last-frame conditioning so it plays nice with the rest of your graph. The catch is patience - you type a prompt, and then you wait minutes for the cloud to render it. The result is worth the wait in a way most local video models can't match, but "wait" is the operative word.

What it is

A text-to-video and image-to-video node running veo-2.0-generate-001. It produces 5–8 second clips at 16:9 or 9:16, and you can pin both the first and last frame - a rare capability that makes it genuinely useful for stitching a clip between two stills in a larger workflow. Veo 2 is the model the KB's closed-source essay calls "incredible vlog style AI video"; the physics, motion, and camera behavior are a clear step above most open-source video at the time of writing.

How it works

The node opens a google-genai client, builds a GenerateVideosConfig from your settings, and submits an async operation. Then it polls every 15 seconds until the clip is done - this is where your minutes go. The video comes back either as bytes or from a GCS URI you specify, gets saved to a temp file, and is returned as ComfyUI's VIDEO type (a VideoFromFile object). Wire that into the pack's own "Preview Video" node to watch it, or into any video-consuming node.

Inputs that matter

  • prompt - multiline. Veo rewards descriptive, camera-aware prompts.
  • first_frame / last_frame - optional images. Give it one and it animates from there; give it both and it animates between them.
  • duration_seconds - 5 to 8.
  • aspect_ratio - 16:9 or 9:16.
  • enhance_prompt - on by default; Veo rewrites your prompt internally and it helps.
  • person_generation - allow_adult or dont_allow. Relevant if people are in frame.
  • output_gcs_uri - set it to keep a durable copy of the clip in your bucket; leave blank to get the video back directly.
  • seed - reproducibility.

Output is one video in VIDEO format.

Installing

Standard pack install:

cd ComfyUI/custom_nodes
git clone https://github.com/khanhlvg/vertex-ai-comfyui-nodes.git
cd vertex-ai-comfyui-nodes
pip install -r requirements.txt

Then the pack-wide auth: gcloud auth application-default login, GOOGLE_CLOUD_PROJECT / GOOGLE_CLOUD_LOCATION (defaults us-central1), billing-enabled project with the Vertex AI API on. The requirements install google-genai plus storage SDKs - no local weights, no VRAM.

Where people get burned

  • The wait. Clips take minutes, not seconds, and the node looks frozen while it polls. It isn't broken - every 15 seconds it checks the operation. Leave the tab alone.
  • Silent failure feels scary. If the request is blocked (person generation, safety), the API can come back empty. Check the console for the error, and check your person_generation setting first.
  • Cost. Veo 2 is priced per second of generated video. Batching 10 variations of a clip is a real line on your bill. Iterate on the prompt, not on volume.
  • You need a GCS-adjacent setup only if you set output_gcs_uri - otherwise the pack handles everything through temp files.

One honest comparison: ComfyUI's own cloud offering also serves Veo, and you can run open video models locally - but if you want Veo 2 specifically inside your graph, with first/last-frame control feeding the rest of your workflow, this node is the direct route. Just budget the minutes.

CategoryVertex AI

Inputs (12)

NameTypeDefaultDescription
project_idSTRING
locationSTRINGus-central1
modelCOMBO1 options: veo-2.0-generate-001
promptSTRINGA cinematic shot of a panda eating bamboo.
first_frameoptIMAGE
last_frameoptIMAGE
output_gcs_urioptSTRING
duration_secondsoptINT85–8
aspect_ratiooptCOMBO2 options: 16:9, 9:16
enhance_promptoptBOOLEANtrue
person_generationoptCOMBO2 options: allow_adult, dont_allow
seedoptINT25942968570–4294967295

Outputs (1)

NameTypeDescription
videoVIDEO