Veo (Vertex AI)
Veo 3's native audio in ComfyUI comes with a billing tab
- first_frame
- last_frame
- frames
- audio
Veo is the current ceiling for closed-source video, and it has exactly one capability local models can't touch: native audio - dialogue and sound effects generated with the video, synchronized to the motion. Wan 2.2 is your local alternative and it's genuinely good, but it won't do that. VeoVertexVideoGenerator ("Veo (Vertex AI)") is the node that drops Veo 3 into your ComfyUI graph. The catch, and it's a real one: it goes through Google Cloud Vertex AI, which means service accounts, project IDs, and a wallet that's paying per second before you've finished the setup.
The 30-second version
You give it a prompt, a project_id, a location, and a service-account JSON file pasted into a text box. The node writes that JSON to a temp file, points GOOGLE_APPLICATION_CREDENTIALS at it, and drives google-genai with vertexai=True. It submits a generate_videos operation, polls until it's done (minutes per clip, so don't treat this like a quick KSampler), then decodes the returned MP4 with PyAV. Output one is frames - a list of IMAGE tensors, every frame of your clip. Output two is audio - an AUDIO tensor... but only when generate_audio is on.
The inputs that matter
The Vertex trio is where you'll spend your setup time:
- project_id - your GCP project ID, and the project needs the Vertex AI API enabled and billing attached.
- location - defaults to
us-central1; the dropdown lists 40 regions. Most people never move it. - service_account - paste the entire JSON key file for a service account that has the Vertex AI User role. This is the fiddly bit and where 90% of setup failures happen: wrong role, expired key, or a stray quote in the paste.
Then the model. The dropdown runs veo-2.0-generate-001 through veo-3.1-generate-001, with veo-3.0-generate-001 the default. The -fast variants trade quality for latency and cost. resolution is 720p or 1080p, aspect_ratio 16:9 or 9:16, duration_seconds 4–8, fps locked to 24, and generate_audio is off by default - flip it on deliberately, because it's priced separately.
In the optional section: negative_prompt works, and first_frame / last_frame are where it gets fun. Feed an IMAGE into first_frame and you've got image-to-video; feed both and you're pinning the start and end of the clip, which is how you get a loop or a locked composition.
Installing it
Same install as the whole 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 and it's under video/generation. The requirements include google-genai and av - the PyAV dependency is real here; it's what turns the MP4 into tensors. ComfyUI Manager users can search "ComfyUI-ExternalAPI-Helpers."
Common issues, honestly grounded
- The auth setup is the whole fight. If you've never made a service account, budget a session for it: create the account, assign Vertex AI User, download the JSON key, paste it in. One wrong permission and you get a cryptic error that traces back to billing, not code.
- It's per-second money. Veo is billed by generated second; an 8-second clip lands around a dollar or more depending on model and resolution, and the community has been loud about the prices. The
-fastmodels exist partly for this. audiocomes back asNonewhengenerate_audiois off. If your downstream audio chain expects a waveform, wire in a fallback or you'll hit a silent dead end.- It blocks your queue. While the operation polls, your whole ComfyUI queue waits. Run it on its own tab or schedule it.
- Veo is heavily filtered. If your prompt trips the safety filters you get nothing and still don't pay - but expect the same moderation wall that pushed so many people back to Wan locally in the first place.
One shortcut worth knowing before you commit to GCP: the same pack has a sibling VeoGeminiVideoGenerator ("Veo (Gemini API)") that just needs an AI Studio key - no project, no service account, no JSON. It only outputs frames (no audio), but if you're testing whether Veo is worth your money at all, start there. This node is for when you've decided yes and want the full 1080p-plus-audio experience on the Vertex side.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | a cat reading a book | — |
| project_id | STRING | — | |
| location | COMBO | us-central1 | 40 options: global, us-central1, us-east1, us-east4, us-east5, us-south1, +34 |
| service_account | STRING | Paste service account JSON content | |
| model | COMBO | veo-3.0-generate-001 | 7 options: veo-2.0-generate-001, veo-2.0-generate-exp, veo-2.0-generate-preview, veo-3.0-generate-001, veo-3.0-fast-generate-001, veo-3.1-generate-001, +1 |
| resolution | COMBO | 720p | 2 options: 720p, 1080p |
| aspect_ratio | COMBO | 16:9 | 2 options: 16:9, 9:16 |
| duration_seconds | INT | 44–8 | — |
| seed | INT | 691–2147483646 | — |
| generate_audio | BOOLEAN | false | — |
| fps | COMBO | 24 | 1 options: 24 |
| negative_promptopt | STRING | — | |
| first_frameopt | IMAGE | — | |
| last_frameopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |
| audio | AUDIO | — |