Modelverse Veo 3.1 Video
Veo 3.1 with real audio, right in your ComfyUI graph
- client
- first_frame_image
- last_frame_image
- url
- task_id
Google's Veo is the video model the local community keeps measuring itself against, and Veo 3.1 has one thing nobody else on this list has: native audio. It generates synchronized sound effects and dialogue along with the picture - the KB's closed-source notes call it a genuine capability gap, and it still mostly is. Modelverse Veo 3.1 Video puts that model inside ComfyUI through UCloud's ModelVerse API. You get Veo 3.1 without a Google Cloud account, a Gemini API key, or any local model.
If your project needs video with sound - a talking character, a scene with ambience - this is the node in this pack you actually can't replicate locally. Veo 3.1's audio is the differentiator, and this is the cheapest way to touch it from a ComfyUI workflow.
The inputs that matter
Required:
client- the pack's standard wiring from Modelverse Client or Secret Client.model-veo-3.1-generate-001(default, standard quality) orveo-3.1-fast-generate-001(faster, lower cost).prompt- required. Describe the shot, motion, and if you want audio, describe the sound too.generate_audio- defaults totrueand the tooltip is blunt: audio is required by the Veo API, not optional polish. Turn it off only if you want video-only and a smaller bill.
Optional but useful:
first_frame_image/first_frame_url- turns it into image-to-video (give one or the other, never both).last_frame_image/last_frame_url- with a first frame, gives you start-and-end animation.duration- 4, 6, or 8 seconds. Veo's default here is 8.resolution-720por1080p;aspect_ratio-16:9or9:16.person_generation-allow_adult(default) ordont_allow. This is Google's safety dial for faces and people; expect it to actually matter.seed- 0 to skip, or a fixed number to reproduce.
The two outputs are the pack's standard url and task_id, and url feeds Modelverse Preview Video to save the clip.
How it works
Under the hood the node converts your frame tensors to base64 (or fetches URLs), submits a task to Modelverse, and polls every 5 seconds until the video - up to 180 retries, which is a long wait for 8 seconds of video. Veo is not fast; budget for it. The audio comes back embedded in the generated file, so Preview Video just saves an .mp4 that has sound when you play it.
Install and expectations
Standard pack install: ComfyUI Manager → search "ComfyUl-UCloud" → Install → restart, or git clone https://github.com/ucloud/comfyui-plugin into custom_nodes. Light deps, no downloads.
Two honest notes. First, Veo 3.1 is the priciest model in this pack and the queue can be slow - don't treat it as a toy for iterating; draft with something cheaper, then run Veo for the final. Second, it's Google: expect the same content-filtering behavior you'd get from the first-party API. The person_generation dial is real, and the model will still refuse things it doesn't like. That's the trade for getting the audio gap closed.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| client | MODELVERSE_API_CLIENT | — | |
| model | COMBO | veo-3.1-generate-001 | veo-3.1-generate-001: standard quality, veo-3.1-fast-generate-001: faster generation |
| prompt | STRING | Text prompt describing the desired video | |
| generate_audio | BOOLEAN | true | Whether to generate synchronized audio (required by Veo API) |
| first_frame_imageopt | IMAGE | First frame image for image-to-video | |
| first_frame_urlopt | STRING | First frame image URL (use either this OR first_frame_image) | |
| last_frame_imageopt | IMAGE | Last frame image for start-end video | |
| last_frame_urlopt | STRING | Last frame image URL (use either this OR last_frame_image) | |
| negative_promptopt | STRING | Negative prompt for unwanted elements | |
| aspect_ratioopt | COMBO | 16:9 | Output aspect ratio |
| resolutionopt | COMBO | 720p | Output resolution |
| durationopt | COMBO | 8 | Video duration in seconds: 4, 6, or 8 |
| seedopt | INT | 00–4294967295 | Random seed (0 to skip) |
| person_generationopt | COMBO | allow_adult | Safety setting for person/face generation |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| url | STRING | — |
| task_id | STRING | — |