NS WaveSpeed InfiniteTalk
Make a still photo talk and sing — WaveSpeed InfiniteTalk
- client
- video_url
Take a single portrait, hand it an audio file, and get back a video where the person's lips match the words, the head moves, and the expression follows the audio. That's InfiniteTalk - an audio-driven talking/singing model - and this node is WaveSpeed's hosted version of it, wrapped for ComfyUI.
It's part of the Symbiotica pack's neuralsins/WaveSpeed family. This is the node you reach for when a character needs to say something: a voiceover attached to a face, a character reacting to a line, a singing clip from a still. It's not dubbing - it's animating a frozen image to audio, with identity kept consistent, and it can run to arbitrary length, hence the "infinite" in the name.
How it works
You feed it an image URL and an audio URL, plus a resolution (480p or 720p - the tooltip quotes the meter: $0.15 per 5 seconds at 480p, $0.30 at 720p). It POSTs to WaveSpeed's /api/v3/wavespeed-ai/infinitetalk and returns a video_url string, which you then pipe into a video loader to get it onto your canvas as actual frames.
The inputs worth knowing:
audioandimage- both required, both URL strings. Same hosted-URL rule as every node in this family: "connect from Upload Audio node" means it wants a URL, not a tensor.prompt(optional) - extra instructions to steer scene, pose, and behavior while keeping the lip-sync locked to the audio. This is the input that separates "a face that talks" from "a character acting a scene."mask_image(optional) - if your source has multiple people, mask the one to animate.seed- set for reproducible results,-1for random.enable_sync_mode- defaults to off here, unlike the image nodes. Off means the node submits the job and polls; the video takes a while, so that's the sensible default.
enable_base64_output exists if you want the result as a base64 blob instead of a URL.
Installing
Install the pack once - all WaveSpeed nodes ship together:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Restart, or use ComfyUI Manager → search Symbiotica. You need a WAVESPEED_API_KEY (Settings → Symbiotica, or the environment variable), and the audio/image must live at URLs WaveSpeed can fetch.
Common issues
- Nothing comes back.
enable_sync_modedefaults to false - make sure you're polling, or flip it on if you'd rather wait inline. - The video is a URL, not frames. Output type is STRING. You'll need a "Load Video / from URL" type node downstream to preview or composite it.
- Wrong person animates. Add a
mask_imageto tell it which face to drive. - Cancel doesn't feel like cancel. Video renders are minutes, not seconds. The client does watch ComfyUI's interrupt flag, so pressing Cancel genuinely stops the wait - but only once the current poll slice notices, which can lag a moment.
The real gotcha is cost-plus-time: a 30-second clip at 720p is real money and a real wait, so don't re-queue casually. Check the motion preview before you commit to the full render.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| audio | STRING | Audio file URL for generating lip-synced output (connect from Upload Audio node) | |
| image | STRING | Image to animate (connect from Upload Image node) | |
| resolution | COMBO | 720p | Output video resolution (480p: $0.15 per 5 seconds, 720p: $0.3 per 5 seconds) |
| enable_sync_mode | BOOLEAN | false | Wait for video generation to complete before returning |
| promptopt | STRING | Optional generation instructions to control scene, pose, and behavior while maintaining audio synchronization | |
| mask_imageopt | STRING | Optional mask image URL to specify which person to animate (connect from Upload Image node) | |
| seedopt | INT | -1-1–2147483647 | Random seed for reproducible results. -1 for random seed |
| enable_base64_outputopt | BOOLEAN | false | Enable base64 output format |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |