Nodes/Comfyui-geminiapi/Veo Text-to-Video (Vertex AI)
ComfyUI Node

Veo Text-to-Video (Vertex AI)

Google's video API, frames out

By zhanglongxiao111·Created 11 months ago·Updated 9 months ago· 3
Veo Text-to-Video (Vertex AI)
    • frames
    project_id
    locationus-central1
    service_account
    prompta cat reading a book
    negative_prompt
    modelveo-3.0-generate-001
    aspect_ratio16:9
    generate_audiofalse
    seed-1

    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_id and service_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, and veo-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 is 16: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 - -1 for 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.

    CategoryExternalAPI/Video

    Inputs (9)

    NameTypeDefaultDescription
    project_idSTRING
    locationCOMBOus-central139 options: us-central1, us-east1, us-east4, us-east5, us-south1, us-west1, +33
    service_accountSTRING
    promptSTRINGa cat reading a book
    negative_promptSTRING
    modelCOMBOveo-3.0-generate-0014 options: veo-3.0-generate-preview, veo-3.0-fast-generate-preview, veo-3.0-generate-001, veo-2.0-generate-001
    aspect_ratioCOMBO16:91 options: 16:9
    generate_audioBOOLEANfalse
    seedINT-1-1–18446744073709550000

    Outputs (1)

    NameTypeDescription
    framesIMAGE