NS WaveSpeed InfiniteTalk Multi
Two characters, two voices, one photo — InfiniteTalk Multi
- client
- video_url
InfiniteTalk Multi is the sibling of the single-character version, and the difference is the whole point: it turns a photo containing two people into a two-sided conversation, with each character lip-syncing to its own audio track. One image, two voices, one video of them talking to each other.
It's part of the Symbiotica pack's neuralsins/WaveSpeed family. Where the plain InfiniteTalk node is for "this one character needs to say something," this one is for dialogue scenes - a podcast avatar, a two-person product demo, a character reacting to another's line. Same lip-sync mechanism, just with a left/right split and an ordering rule.
How it works
You feed it one image of both characters, a left_audio and a right_audio URL, and pick a resolution (480p / 720p, with the same $0.15 / $0.30 per-5-seconds pricing the tooltip quotes). It POSTs to WaveSpeed's /api/v3/wavespeed-ai/infinitetalk/multi and returns a video_url string.
The inputs that matter beyond the basics:
audio_order-meanwhile(default: both speak simultaneously),left_right, orright_left. This is the interesting one: it controls how the two tracks interleave.meanwhileis for overlapping conversation; the ordered modes sequence them.prompt(optional) - instructions for scene, pose, and multi-character behavior, without disturbing the audio lock.mask_image(optional) - if your image has more than two people (or the model is confused about who's who), mask the two to animate.seed--1for random, otherwise reproducible.
Same shape as the single node otherwise: enable_sync_mode defaults to off (the video takes a while, so submit-and-poll is the sane default), and enable_base64_output swaps the URL for a base64 string if you need it.
Installing
Same pack, same install as the rest of the family:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Restart (or ComfyUI Manager → Symbiotica). Wire an NS WaveSpeed Client with your WAVESPEED_API_KEY into client, and give it two audio files and one image - all as reachable URLs.
Common issues
- Which audio goes where is on you.
left_audiodrives the left character,right_audiothe right. Swap them and the conversation reads wrong even though nothing errors. - The model animates the wrong pair. That's what
mask_imageis for - without it, the model guesses who's who in a crowd. - Simultaneous speech gets muddy. If both tracks are talking at once and it sounds like noise, switch
audio_ordertoleft_rightorright_leftso the API sequences them cleanly. - Output is a STRING.
video_urlneeds a video-loader node downstream to become frames on your canvas.
The trap to avoid is treating this like a two-track mixer - the audio ordering is a generation parameter, not a post-production one. Nail the ordering before you spend the render, because re-rolling a multi-character video is a paid do-over.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| left_audio | STRING | Left audio file URL for multi-character conversation (connect from Upload Audio node) | |
| right_audio | STRING | Right audio file URL for multi-character conversation (connect from Upload Audio node) | |
| image | STRING | Image containing multiple characters 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 multi-character behavior | |
| audio_orderopt | COMBO | meanwhile | Audio order for multi-character conversation: meanwhile (simultaneous), left_right, or right_left |
| mask_imageopt | STRING | Optional mask image URL to specify which characters 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 | — |