Nodes/ComfyUI/sync.so Lip Sync
ComfyUI Node Runs on cloud

sync.so Lip Sync

Re-time a face to new audio

By Comfy-Org·Created 4 years ago·Updated about 5 hours ago· 128,055
sync.so Lip Sync
  • video
  • audio
  • VIDEO
seed42
model

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 ends
  • loop - video restarts until the audio ends
  • remap - video is time-stretched to fit the audio
  • cut_off - the longer track is trimmed
  • silence - 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 holding sync_mode and speaker_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.

Categorypartner/video/sync.so

Inputs (4)

NameTypeDefaultDescription
videoVIDEOFootage of the speaker to re-sync. Up to 4K (4096x2160); a constant frame rate of 24/25/30 fps works best.
audioAUDIOSpeech audio to sync the mouth to.
seedINT420–2147483647Seed controls whether the node should re-run; results are non-deterministic regardless of seed.
modelCOMBOsync.so generation model.

Outputs (1)

NameTypeDescription
VIDEOVIDEO