Nodes/Symbiotica/NS WaveSpeed VEO 3.1 Text to Video
ComfyUI Node

NS WaveSpeed VEO 3.1 Text to Video

Google Veo 3.1, audio included, without a GPU or a Google Cloud project

By symbiotica-ai·Created 6 months ago·Updated about 13 hours ago· 2
NS WaveSpeed VEO 3.1 Text to Video
  • client
  • video_url
prompt
aspect_ratio16:9
duration8
resolution1080p
generate_audiofalse
negative_prompt
seed-1
enable_sync_modefalse

Veo 3.1 is the current high-water mark for prompt-faithful AI video, and the one capability that still genuinely separates it from anything you can run locally: native synchronized audio. Sound effects, dialogue, ambient audio baked into the render rather than bolted on after. NSWaveSpeedVeo31TextToVideo from symbiotica-ai/comfyui-nodes puts that behind a ComfyUI node via WaveSpeed's hosted API - no weights, no VRAM, and no need to set up a Google Cloud billing account, which is usually the biggest barrier to touching Veo at all.

How it works

Type a scene description, pick aspect ratio, duration, resolution, and whether you want audio, and the node POSTs to WaveSpeed (/api/v3/google/veo3.1/text-to-video). The render happens on their hardware; you get back a video_url string. enable_sync_mode defaults off, so the node submits the job and polls the task endpoint every second until the clip is done - and because the polling honors ComfyUI's interrupt flag, pressing Cancel actually aborts the wait rather than watching it burn to timeout.

generate_audio is the knob to care about. Veo's native audio is the model's signature trick - the community treats it as the one thing open video still hasn't matched (closed-source-models.md). Describe the sound in your prompt - "waves crashing, distant seagulls" - and leave the toggle on if you want the full effect. Off, if you're compositing sound later and don't want to pay for audio you'll discard.

The inputs that matter

  • prompt - the scene, plus whatever audio you want to hear.
  • aspect_ratio - 16:9 or 9:16. Portrait video for reels lives here.
  • duration - 4, 6, or 8 seconds. Veo clips are short; that's the format.
  • resolution - 720p or 1080p. No 4K through this node.
  • generate_audio - native synchronized audio on or off.
  • negative_prompt (optional) - "no text, no watermarks, no morphing" - genuinely useful on Veo.
  • seed (optional) - default -1 is random; set a value to reproduce a clip.
  • client - the WAVESPEED_AI_API_CLIENT socket from the NS WaveSpeed Client node.

Output: video_url (STRING) - open in a browser or feed a download-from-URL node.

Install and keys

# ComfyUI Manager: search "Symbiotica", or:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt

Restart. Add the NS WaveSpeed Client node, put your wavespeed.ai key in its api_key field (or Settings → Symbiotica, or WAVESPEED_API_KEY), and wire client in. No model downloads.

Common issues

Expect a wait, and expect to pay. Veo renders take minutes, and per-second video pricing stacks up fast across a batch. This is the honest cost of the model the community keeps saying it wants - it's cloud-only, per-call, and your prompt leaves the machine (external-api-nodes.md).

Google's filter is baked in. Veo refuses what it refuses; there's no local patch because there are no weights to patch. If a clip comes back as a refusal, that's the model, not the node.

"API_KEY is empty." The client node isn't wired. The key never lives on this node.

Categoryneuralsins/WaveSpeed

Inputs (9)

NameTypeDefaultDescription
clientWAVESPEED_AI_API_CLIENT
promptSTRINGText description of the desired video scene
aspect_ratioCOMBO16:9Video aspect ratio - 16:9 (landscape) or 9:16 (portrait)
durationCOMBO8Video duration in seconds
resolutionCOMBO1080pVideo output resolution
generate_audioBOOLEANfalseGenerate native audio synchronized with the video
negative_promptoptSTRINGSpecify what to avoid in the generated video
seedoptINT-1-1–2147483647Random seed for reproducible results. -1 for random seed
enable_sync_modeoptBOOLEANfalseWait for generation to complete before returning

Outputs (1)

NameTypeDescription
video_urlSTRING