Sync Lipsync 2 Pro (Replicate)
Sync Lipsync 2 Pro — video-to-video lipsync with an actual mismatch mode
- audio
- video_path
Sync Lipsync 2 Pro is the "replace the voice in an existing video" node. Unlike the still-image avatar nodes in this pack, it takes a video - a real clip of someone talking - and re-animates that person's lips to match a new audio track. If you have a talking-head recording and want to change the dialogue without re-shooting, this is the node. It's also the pack's most opinionated lipsync, because it actually thinks about what to do when the audio and video durations don't line up.
That's the headline feature and it's genuinely uncommon: sync_mode gives you five strategies for length mismatch. loop repeats the video to cover longer audio, bounce plays it forward then backward, cut_off stops early, silence pads with silence, and remap stretches. Default is loop, which is the safe choice for "audio is a bit longer than the clip."
How it works
Standard engine around sync/lipsync-2-pro. The key mechanism detail from the pack's source: video inputs expect a URL string - Replicate's workers need fetchable files, so the video input is a STRING pointing at an .mp4 somewhere reachable, not a local file you've dropped on the canvas. The audio is different: it's a native AUDIO input, uploaded as WAV. The output comes back as an MP4 saved to output/video/ with video_path returned as a STRING.
The inputs that matter
- video (required) - an .mp4 URL. This is the input that surprises people: it's a string field, not a video upload. Host the clip somewhere public or on a signed URL first.
- audio (required) - the replacement audio as native ComfyUI AUDIO (.wav under the hood).
- sync_mode -
loop(default),bounce,cut_off,silence, orremap. Pick based on how your audio and video lengths relate and what end-state you want. - temperature - 0–1, default 0.5. The tooltip's framing is the best summary: how expressive the lipsync can be. Higher = more animation energy, lower = tight, conservative mouth movement.
- active_speaker - off by default. Turn it on to let the model detect who is speaking in the clip and lipsync only that person - the right call for multi-person footage.
Output: video_path, a STRING.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Pharma-Lobby/ComfyUI-Replicate-Select
Or ComfyUI Manager → Install Custom Nodes → "Replicate Select", restart. Dependency: replicate>=1.0.7. Token via environment variable:
export REPLICATE_API_TOKEN=r8_...
Where people get burned
- Video is a URL, audio is a file. It's a weird split, and it's easy to drag a local video in and watch the call fail. URL for the video, AUDIO for the voice.
- Ignoring sync_mode. The default
loopis fine, but if your audio is much shorter than the clip,cut_offorsilencegives a cleaner result than a looping avatar. - Temperature as a quality dial. Crank it to 1.0 and you get an expressive - sometimes overcooked - performance. For natural talking-head work, keep it near 0.5.
- Multi-person footage without active_speaker. If two people are on screen and you only replace one voice, the model guesses - and guesses wrong.
active_speakerexists for exactly this.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| video | STRING | Input video file (.mp4) | |
| audio | AUDIO | Input audio file (.wav) | |
| sync_modeopt | COMBO | loop | Lipsync mode when audio and video durations are out of sync |
| temperatureopt | FLOAT | 0.500–1 | How expressive lipsync can be (0-1) |
| active_speakeropt | BOOLEAN | false | Whether to detect active speaker (i.e. whoever is speaking in the clip will be used for lipsync) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_path | STRING | — |