Veo 3 Text to Video
Veo 3 Text to Video is a phone call to Google
- video_paths
The name promises local generation, but the reality is more useful and more boring. Veo 3 Text to Video doesn't run any model on your machine - it's a thin wrapper that packages your prompt into a request for Google's Veo 3 API, waits a few minutes while Google renders the video, then hands you back a path to the .mp4 it just downloaded. No VRAM, no model files, no sampler settings. Just an API key and an internet connection. That's the entire pitch, and for someone who wants Veo-quality clips without renting a big-GPU box, it's the whole game.
Worth being honest about the deal, though. This is a paid, remote, possibly-not-available-in-your-country service wrapped in a node. The README quotes roughly $0.35 per second, and since clips max out at 8 seconds, a single generation runs you about $2.80. Google's Veo API may not be offered in your region at all - the author put a red warning about exactly that at the top of the README. You're getting 720p at 24fps, 16:9 or 9:16, and every clip comes back watermarked with SynthID. "Experimental" is in the pack name for a reason; treat it like the unofficial wrapper it is.
How it works
Under the hood it's the official google-genai SDK (google-genai>=0.3.0). The node calls the veo-3.0-generate-001 model through generate_videos(), which kicks off a long-running operation, then sits in a polling loop - it checks every 20 seconds until the job finishes. That's why a "Running" node can look frozen for several minutes: it's not stuck, it's waiting on Google.
There are two built-in politeness rules you should know about. The pack enforces a 60-second minimum gap between requests, and on quota errors (429 / RESOURCE_EXHAUSTED) it retries with a delay that starts at 120 seconds and grows each attempt. So don't queue up ten of these and expect speed. This thing is built for the occasional careful generation, not for batching.
The inputs that matter
Only a handful, and most have sane defaults:
- prompt - your text-to-video prompt. This is the whole craft; Veo responds well to concrete subject, camera, and motion descriptions.
- aspect_ratio -
16:9(default) or9:16for portrait. - duration_seconds - 5 to 8, default 8. Longer isn't free; remember the $0.35/sec math.
- person_generation -
dont_allow(default) orallow_adult. Google's policy dial, not a creative one. - api_key - leave blank if you've set up the
.envfile (recommended); paste it here if you'd rather not. - negative_prompt - here's the trap: the field exists and accepts text, but the API call the node builds never sends it. Negative prompting doesn't work on this pipeline, so save yourself the time and ignore it.
The output
video_paths (VEO_VIDEO) - a path to the saved .mp4, dropped into ComfyUI's output directory with a timestamp name like veo3_1789..._0.mp4. Wire it into the pack's Veo 3 Video Saver to get a clean filename and an in-UI preview, or into Veo 3 to VHS if you want the frames as a batch of images for further processing. VEO_VIDEO is a custom type from this pack, so those two sibling nodes are the natural next stop.
Installing
Nothing to download model-wise - that's the point. The pack itself is one clone:
cd ComfyUI/custom_nodes
git clone https://github.com/cuban044/ComfyUI-Veo3-Experimental
cd ComfyUI-Veo3-Experimental
pip install -r requirements.txt
...or just search "Veo 3 Experimental" in ComfyUI Manager and hit install. The dependency list is small - google-genai, opencv-python, and friends; torch and numpy you already have. Then create a .env in the extension folder:
GOOGLE_API_KEY=your_key_here
Grab the key from Google AI Studio, restart ComfyUI, and you're done. One heads-up: the README's install section still points at a ShmuelRonen fork URL - that's stale, clone from the cuban044 address above.
Troubleshooting
- "Google API key is required" - the
.envfile isn't being read (wrong folder, or you restarted before creating it), or the key itself isn't enabled for Veo. You can also paste the key straight into the node'sapi_keyfield to bypass.enventirely. - Node runs for minutes then outputs nothing - that's a quota error being retried, or the API being blocked for your region. Watch the console; the pack logs every poll and retry attempt there.
- Slow - the 60-second rate limit is by design, not a bug. Space out your generations.
If you're not sure Veo is worth $0.35/sec to you at all, do one or two runs here before committing. The quality is real, but the local open-source alternatives (Wan and friends) have been closing the gap fast - and those run on hardware you already own.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| aspect_ratio | COMBO | 16:9 | 2 options: 16:9, 9:16 |
| person_generation | COMBO | dont_allow | 2 options: dont_allow, allow_adult |
| duration_seconds | INT | 85–8 | — |
| api_key | STRING | — | |
| negative_promptopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_paths | VEO_VIDEO | — |