Veo (Gemini API)
Flagship video without GCP paperwork
- image
- frames
Google's Veo is the video model that keeps embarrassing the open-source side - the KB is blunt that Veo 3's native audio still has no open equivalent - and this node hands you Veo 2.0 through the Gemini API, which means just a Google AI Studio key. No Google Cloud project, no service account JSON, no Vertex AI console spelunking. That's the entire appeal: flagship video quality with the same one-line key setup as the Gemini chat node.
The trade is that this is the Gemini-API flavor, so you're getting Veo 2.0, not the newest Veo 3.x line - and you're paying per second of generated video on your AI Studio billing.
How it works
The node uses the google-genai SDK (genai.Client with the v1beta API) and calls models.generate_videos(). That's a long-running operation: the node polls until the generation completes, then downloads the video and decodes the frames locally into an IMAGE list. If you plug an image into the optional input, it becomes image-to-video - the first frame is the image you gave it. No GPU work on your side beyond frame decoding.
The inputs that matter
- prompt - the whole game. Veo responds well to concrete, directional prompts; describe motion and shot, not just subject.
- model -
veo-2.0-generate-001, the only choice right now. Nothing to configure. - aspect_ratio -
16:9or9:16. Landscape or portrait; pick before you render. - duration_seconds - 5 to 8, default 8. Longer costs more; 5-second tests are the smart way to iterate.
- negative_prompt (optional) - what to keep out of the clip. Worth using; Veo respects it decently.
- image (optional) - an
IMAGEinput for image-to-video. This is the sleeper feature: drive Veo from any still your local models generate. - seed / api_key - seed for ComfyUI re-runs (it's not passed to the API for reproducibility, same as the rest of this pack); key in the field or as a
.envvariable name (GEMINI_API_KEY).
The output
frames - an IMAGE list of decoded video frames. This is the part that needs a plan: you can't drop a list straight into a SaveImage. Route it through Video Helper Suite (VHS) to combine and encode to mp4 or gif.
Installing it
One of the many nodes in the Aryan185/ComfyUI-ExternalAPI-Helpers pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Aryan185/ComfyUI-ExternalAPI-Helpers.git
cd ComfyUI-ExternalAPI-Helpers
pip install -r requirements.txt
Restart ComfyUI; find "Veo (Gemini API)" under video/generation. The google-genai dependency is what matters, and you may already have it from the Gemini nodes. Get a key from aistudio.google.com/app/api-keys, paste it in the field or set GEMINI_API_KEY in .env.
Where people get burned
Patience, mostly. Video generation via the API is a job, not a render - expect the node to sit in a polling loop for a while, and there's no timeout knob. If you're on the free AI Studio tier, video generation is limited or unavailable, and the failure shows up as an API error that looks like a node bug. Check your billing/quota before blaming the node. Also note this is Veo 2, not the Veo 3 with native audio - if you need sound in the clip, this node gives you frames only (there's no audio output, unlike the Sora node in this pack).
There's a sibling node in the pack (Veo Video Generator) that goes through Vertex AI instead, with project/service-account setup - this one is the low-friction version. For the trade-off, the Gemini API route is the one to start with.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | a cat reading a book | — |
| model | COMBO | veo-2.0-generate-001 | 1 options: veo-2.0-generate-001 |
| aspect_ratio | COMBO | 16:9 | 2 options: 16:9, 9:16 |
| duration_seconds | INT | 85–8 | — |
| api_key | STRING | Directly put Gemini API key or .env variable name (GEMINI_API_KEY) | |
| seed | INT | 69-1–2147483646 | — |
| negative_promptopt | STRING | — | |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |