sync.so lipsync – audio/tts input
Four ways to give a lipsync its voice — including TTS you don't run locally
- audio
- audio
This is the node that decides what your talking head actually says. SyncAudioInputNode takes audio in four different ways - a direct connection, a local file, a URL, or ElevenLabs text-to-speech - and hands the result to the generate node as a single SYNC_AUDIO output. It's part of the sync-comfyui pack from synchronicity-labs, which is a cloud wrapper around sync.so's lipsync API rather than a local model, so "provide the audio" is the whole job: the actual syncing happens on their servers.
The clever bit is the TTS path. You don't run ElevenLabs locally and you don't even need an ElevenLabs API key. You paste a voice ID and a script, and the node marks the payload as TTS mode; the main node then builds a request where sync.so itself calls ElevenLabs for the speech and lip-syncs to the result. It's genuinely handy for the "type a line, get a talking video" workflow - which is exactly how a lot of people use this pack, because it removes the step of generating or recording audio at all.
The four inputs (only one at a time)
All optional, and there's a hard priority order:
tts_voice_id+tts_script- if both are filled, they win, no questions asked. The node's own description calls it: TTS takes priority. The script is multiline, so whole paragraphs work.audio(typeAUDIO) - direct connection from a LoadAudio or similar node.audio_path- local file path (WAV, MP3, etc.). As with the video node, the README wants these inside the ComfyUI directory.audio_url- direct URL to an audio file.
Output is a single audio of type SYNC_AUDIO, wired into SyncLipsyncMainNode. The node returns a tagged dict (type: tts | path | url) and the main node branches on it.
How it packages audio
A direct connection gets converted and written to a temp .wav in ComfyUI's temp/ dir, using librosa (with soundfile as the fallback) - that's why those two are in requirements.txt and not optional decoration. Paths and URLs pass through untouched. The only real logic is the TTS check at the top: if voice ID and script are both non-empty, everything else is ignored. That means a filled audio_path sitting next to a filled TTS pair won't merge or warn - TTS just silently wins.
Installing the pack
One install, all five nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/synchronicity-labs/sync-comfyui
cd sync-comfyui
pip install -r requirements.txt
Restart, or use ComfyUI Manager and search for "sync-comfyui" / "sync". The audio node is the reason the requirements include librosa and soundfile - if you skip them you'll hit an ImportError the moment you try to use the direct-audio path, with a console message telling you exactly what to install.
Common issues
- TTS silently ignores your audio file - you filled both
tts_voice_idandtts_script, and also connected an audio node, and the audio got dropped. That's by design. Clear the TTS fields if you want the file. - ImportError on librosa/soundfile - the direct audio path needs them; install and restart.
- "Audio path not found" - same working-directory rule as the video node: files outside the ComfyUI repo won't resolve, and sync.so's servers can't reach local paths anyway.
- TTS that fails at the API - a bad voice ID or a script that exceeds ElevenLabs' limits surfaces as an API error from the main node, not here. Check the voice ID in your ElevenLabs account first.
One honest note: since the whole pack is a paid cloud service, the TTS convenience comes with a meter running on sync.so's side (and, indirectly, ElevenLabs'). Great for one-off talking-head clips and character dialogue; not the tool you'd reach for if you're generating hundreds of lines - the cost adds up exactly the way community threads about "AI lipsync pricing" keep warning.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| audioopt | AUDIO | — | |
| audio_pathopt | STRING | — | |
| audio_urlopt | STRING | — | |
| tts_voice_idopt | STRING | — | |
| tts_scriptopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | SYNC_AUDIO | — |