sync.so Lip Sync
Re-time a face to new audio
- video
- audio
- VIDEO
The footage is good, the audio is wrong - or missing entirely. This node re-times the speaker's mouth to new audio: take any video with a face, give it a new speech track, and sync.so's sync-3 model re-animates the mouth to match while keeping the original expression, close-ups, even profiles and obstructions intact. It's the difference between "reshoot this scene" and "fix it in the timeline".
It's a sync.so partner node, rendered on their servers through Comfy's proxy and billed per second of output via Comfy account credits. sync-3 support landed in ComfyUI core in July 2026. The pitch is reliability: where naive lip-sync breaks on profile shots and hands-over-mouth, sync-3 is built to handle the messy real-world footage.
How it works
Your video and audio are uploaded, a generation job is created on sync.so's /v2/generate endpoint, and the node polls until the re-synced clip is ready. Two settings do the heavy lifting.
sync_mode decides how a video/audio length mismatch is handled - and it sets the output length:
bounce(default) - video plays forward then backward until the audio endsloop- video restarts until the audio endsremap- video is time-stretched to fit the audiocut_off- the longer track is trimmedsilence- the shorter track is padded
speaker_selection picks whose mouth moves when several people are on screen: default lets the model decide, auto-detect finds and follows the active speaker, and coordinates targets the face at a specific pixel (using speaker_frame, speaker_x, speaker_y).
The inputs that matter
video- the speaker footage, up to 4K (4096x2160). A constant 24/25/30 fps works best.audio- the speech to sync to, up to 10 minutes.model- the sync-3 combo holdingsync_modeandspeaker_selection.seed- controls whether the node re-runs; results are nondeterministic regardless.
Output is the re-synced VIDEO.
Gotchas
Duration mismatch is the classic confusion - your output length depends on sync_mode, not on the input, so a 20-second video with 8 seconds of audio gives you an 8-second clip under bounce, not a 20-second one. If the mouth is small or the face is turned, lower the ambition: coordinates is the reliable fix when auto-detection picks the wrong face in a crowd. And this is a cloud render with a per-second meter, so a 10-minute clip is a serious line item - trim the source before you sync, not after.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | Footage of the speaker to re-sync. Up to 4K (4096x2160); a constant frame rate of 24/25/30 fps works best. | |
| audio | AUDIO | Speech audio to sync the mouth to. | |
| seed | INT | 420–2147483647 | Seed controls whether the node should re-run; results are non-deterministic regardless of seed. |
| model | COMBO | sync.so generation model. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| VIDEO | VIDEO | — |