Protoface Veo 3.1 · Text to Video
The one with the audio baked in
- video
- files
- run id
Why Veo still matters in a Wan-and-LTX world
Open video models got very good, very fast. Wan, LTX 2.5, and MiniMax's open H3 release closed most of the gap on motion, faces, and camera work. What they didn't close, for a long time, was audio: Veo generates dialogue, ambience and effects in the same pass as the picture. The KB's line - Veo 3's native audio has "no open-source equivalent" - was written before H3 landed, and even now it's the capability people cite when they pay Google instead of renting a GPU.
This node is text-to-video at native 1080p with synchronized audio, from Google's Veo 3.1 (the October 2025 revision: better audio, granular editing, stronger image-to-video). It's part of Protoface, a beta pack that exposes hosted models as native ComfyUI nodes - paid per generation, executed on their side, keyed to your Protoface account rather than Comfy credits.
Reach for it when the deliverable needs sound and you don't want to stitch a silent clip to a generated score and hope they agree. Skip it for exploration - browsing ideas at $per-clip adds up, and a Wan or LTX draft pass costs you nothing but time.
How it works
The pack's shared adapter does the whole dance: schema-derived controls, validation, media upload, submission, polling with progress, download, and materialisation as a native VIDEO. Every Protoface node runs on that one code path, which is why a Google node and a Kling node feel the same in the graph.
generation_id is the paid-request identity. Fixed = reuse or resume the recorded job. Incremented = a fresh charge. The prompt, resolution and duration are part of that identity too, so editing the prompt is a new request no matter what the id says.
The inputs that matter
prompt - Veo wants a shot description: subject, action, camera, light, and if relevant, the line of dialogue you want spoken. Short prompts produce boring, floaty footage.
resolution defaults to 1080p (this is the native-1080p tier, not an upscale) and duration to 8 seconds, offered as a combo rather than a number. aspect_ratio defaults to 16:9 - set it to 9:16 up front if you're making verticals, because reframing 16:9 after the fact is pain.
generate_audio defaults on. Turning it off gives you a silent clip - still a full-price generation, so only do it if you actively want no track.
negative_prompt and seed are media-style controls (Default omits the field, Set supplies it, Null where the API supports an explicit null). Default is the right answer for most runs; Set the seed when you're chasing a specific take.
Outputs
video is a native VIDEO list, files is a PROTOFACE_FILE list of every original downloaded asset, and run id is a string. The run id is not decoration: video jobs are slow, and if your browser gives up before the poll finishes, Resume Run with that id retrieves the result instead of buying a second one.
Wire video into a save/preview node, or into another Protoface video node's video input - Extend and Reference both take media inputs in Video/Image modes, plus a References mode that accepts a reused result asset. That last one is how you chain remote jobs without re-uploading the file.
Install
Manager → search Protoface → install protoface-nodes → restart → reload the browser. Manual, from your ComfyUI directory:
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git custom_nodes/protoface
python -m pip install -r custom_nodes/protoface/requirements.txt
ComfyUI 0.41.0+ and Python 3.10+. av (PyAV) is in the dependency list because native video and audio connections need it - if video sockets misbehave, that's the package to check. Then click Protoface in the lower-right and enter a key.
Where people get burned
Timeouts read as failures when they aren't. A video job can outlive a polling session; the pack leaves a recoverable job rather than submitting another one. Don't increment generation_id to "retry" - requeue unchanged, or resume by run id.
Assumption that Comfy credits apply. They don't. This pack bills Protoface directly and is independent of the Partner Nodes.
Two polls, two charges? Only if the request identity changed. Changed prompt, changed duration, changed resolution - all new requests, all new money. Requeueing identical inputs is safe.
Video sockets that won't connect. Almost always a dependency or version problem, not a node bug: confirm av installed into ComfyUI's own environment and that ComfyUI is new enough for the V3 node API this pack is built on.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text prompt for generation; Positive text prompt. | |
| resolution | COMBO | 1080p | Video resolution. |
| duration | COMBO | 8 | The duration of the generated media in seconds. |
| aspect_ratio | COMBO | 16:9 | Aspect ratio of the video. |
| generate_audio | BOOLEAN | true | Whether to generate audio. |
| negative_prompt | COMBO | Negative prompt for the generation. | |
| seed | COMBO | The random seed to use for the generation. | |
| generation_id | INT | 00–9007199254740991 | Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed. |
| request_scope | STRING | Automatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| files | PROTOFACE_FILE | — |
| run id | STRING | — |