Veo Text-to-Video (Vertex AI)
Google's video API, frames out
- frames
This is the node that gets you Veo - Google's text-to-video model - inside ComfyUI, and it's the most ambitious thing in this pack: a real long-running cloud generation with a poll loop, not just a single request. You give it a prompt, it starts a Veo job on Vertex AI, checks back every 15 seconds until the video is done (up to 10 minutes), downloads the MP4, and hands you back the frames as a normal ComfyUI IMAGE batch. What you do with those frames - save them as a video, run them through an upscaler, animate over them - is your workflow's business.
Why reach for it? Because Veo 3 has a capability nobody local can match yet: native audio generation, with sound effects and speech that stay in sync with the picture. That's the generate_audio toggle's whole reason to exist, and the KB's read is blunt - "the only model that generates audio natively with video," up to 1080p and around 8 seconds a clip. There's no open-source equivalent with the same chops, so if you need that, this is one of the few ways to get it inside a ComfyUI graph. The catch is the setup: this is the Vertex route, meaning Google Cloud project, billing, and a service account - the heaviest lift in the whole pack.
How it works
The node builds a vertexai=True client from your project_id and location (default us-central1), using the service_account JSON path for credentials, then calls generate_videos. Because Veo generation takes a while, it polls the operation every 15 seconds and gives up after 10 minutes with a timeout error. Once done, it pulls the video bytes, writes them to a temp MP4, and uses OpenCV to walk the frames and convert each to a tensor, concatenating them into one batch. The temp file gets cleaned up either way.
Inputs and output
project_idandservice_account- your GCP project and the path to a service account key JSON. Required; the node errors out if either is missing.prompt- the scene. Default is "a cat reading a book" - a fine test prompt, not a production one.negative_prompt- passed through to the API if you fill it in.model- four choices:veo-3.0-generate-001(default),veo-3.0-generate-preview,veo-3.0-fast-generate-preview, andveo-2.0-generate-001. The "fast" preview variant is the one to pick when you're iterating on prompts rather than doing a final render.aspect_ratio- here's a limitation worth knowing: the only choice is16:9. Don't go looking for a portrait option; there isn't one.generate_audio- the headline feature. Keep it on only for the render you actually keep; audio generation is slower and pricier.seed--1for random, or a fixed value for reproducible runs.
Output is one frames output of type IMAGE - a batch of tensors, one per frame, which you then feed into a video-save or encode node. Nothing is rendered for you automatically.
Installing and what bites
Same pack as its siblings - ComfyUI Manager search "Comfyui-geminiapi", or:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/zhanglongxiao111/Comfyui-geminiapi.git
cd Comfyui-geminiapi
python -m pip install -r requirements.txt
Then restart and find it under ExternalAPI/Video. The requirements.txt includes opencv-python, which is what does the frame extraction, and google-genai.
The failure mode is the pack's signature: any exception is caught and returned as a tiny 64×64 black tensor. A black thumbnail out of this node means the job failed - check the console for the real message, and verify the Vertex AI API is enabled on the project with billing active. Also know what you're in for on runtime: a Veo job can sit in the poll loop for minutes, and this node blocks the workflow while it waits. Wire it into your graph with that in mind, or run it as its own queue item and come back.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| project_id | STRING | — | |
| location | COMBO | us-central1 | 39 options: us-central1, us-east1, us-east4, us-east5, us-south1, us-west1, +33 |
| service_account | STRING | — | |
| prompt | STRING | a cat reading a book | — |
| negative_prompt | STRING | — | |
| model | COMBO | veo-3.0-generate-001 | 4 options: veo-3.0-generate-preview, veo-3.0-fast-generate-preview, veo-3.0-generate-001, veo-2.0-generate-001 |
| aspect_ratio | COMBO | 16:9 | 1 options: 16:9 |
| generate_audio | BOOLEAN | false | — |
| seed | INT | -1-1–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |