SF WaveSpeed InfiniteTalk Multi
Two characters, two audio clips, one image — an actual animated conversation
- client
- video_url
Single-character talking avatars are everywhere now. What's still rare is the conversation - two people in one image, each lip-syncing their own audio track. SF WaveSpeed InfiniteTalk Multi is that node. You give it a picture containing two characters, a left-channel audio clip and a right-channel clip, and it produces a video of the two of them talking, either simultaneously or taking turns.
It's a niche tool, honestly. But if your use case is interviews, dialogues, character sketches, or any workflow where two voices need two animated faces in one frame, there isn't much else that does this out of the box. Like every node in the comfyui-stillfront pack, it's an API call to WaveSpeed - no local model, no GPU.
How it works
WaveSpeed's InfiniteTalk Multi model takes the character image, the two audio files, and a pairing order, then renders a video with the corresponding character animating on each audio track. The node sends all that to the infinitetalk/multi endpoint and returns the video's URL.
The core inputs:
left_audioandright_audio- URLs to the two audio files, connected from an Upload Audio node. These map to the two characters in the image.image- URL of an image with multiple characters in it (from an Upload Image node).audio_order- the conversation structure:meanwhile(both talk simultaneously, the default),left_right, orright_left(turn-taking).resolution- 480p or 720p, and the tooltip gives you the pricing straight: $0.15 per 5 seconds at 480p, $0.30 at 720p. That's the number to budget around - longer audio means a longer and pricier video.enable_sync_mode- default off, which is worth knowing. Either way the node waits for the result and returns a URL, but the async path has a longer 20-minute timeout, which matters for long multi-character clips.
Optional extras worth knowing: prompt for controlling scene, pose, and multi-character behavior; mask_image to specify which characters get animated when the image has more than two; seed for reproducibility; and enable_base64_output if you'd rather get the video back as base64 than a URL.
Output is a single video_url STRING - wire it to a video loader or display that can fetch from a URL, or save it with a text node.
Installing it
Same pack install as all the WaveSpeed nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/comfyui-stillfront
cd comfyui-stillfront
pip install -r requirements.txt
Restart, then set your WaveSpeed key - either in the SF WaveSpeed Client node you wire in, in config.ini (copy from config.ini.tmp), or via the WAVESPEED_API_KEY env var. You'll also want the Upload Audio and Upload Image nodes that produce the URLs this node expects.
Troubleshooting
- Characters animate wrong or in the wrong order. The
imageneeds the two characters clearly separated (left/right), matchingaudio_order. If the model can't tell them apart, trymask_imageto say who's who. - Only one person talks. Usually an
audio_ordermismatch or an audio file that's empty/silent on one side. Also double-check the character image isn't tightly cropped around a single face. - Video never arrives. Long clips + async mode can outlast the timeout. Run a short clip first to sanity-check, then scale up.
- Cost surprise. Remember it's billed per 5 seconds. A 30-second dual-720p conversation is 6 × $0.30, plus the fact that long generations tie up the job. Budget it before you commit.
This is very much a "one specific job" node - but for that job, it's about as close to plug-and-play as hosted talking-avatar tech gets.
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 | — |