HighSync LipSync Advanced
The same lip-sync with every dial exposed — here's which ones you'll actually touch
- highsync_model
- images
- audio
- images
- audio
- frame_rate
- output_video_path
HighSync LipSync Advanced runs the exact same diffusion pipeline as plain HighSync LipSync - same face tracking, same 512×512 regeneration, same feathered blending, same ffmpeg mux - but it hands you every knob the simple node hides behind the model's config defaults. The good news: the defaults (20 inference steps, CFG 3.5) are the values from the HighSync paper's own config, so the simple node isn't secretly holding back quality. What this node holds back is control, and there's a decent argument you'll only ever want a couple of these.
The inputs a beginner actually sets
Ten required inputs, but five of them are the same core as the simple node: highsync_model, images, audio, input_fps, max_frames. The extras break down like this:
inference_steps(default 20, 1–100) - the diffusion step count. Drop to ~10–12 for quick previews of whether the lips land on the words; nudge to 25–30 if you're rendering the real thing and want cleaner mouth articulation. This is the one you'll change most.cfg_scale(default 3.5, 0–20) - standard CFG tradeoff. The lips stick harder to the audio as you raise it, but faces start to distort; lower it when things get waxy. The paper's 3.5 is a sane default, so treat this as a "when something's wrong" dial.seed(default 42) - set it to reproduce a run exactly; leave it and the mouth won't land identically every time.preprocess_chunk_frames(default 1500, min 12) - how many frames the face tracker chews through per chunk before inference. This is the memory dial. If you're hitting OOM on a long clip during the tracking stage, drop it.denoise_audio(defaultFalse) - see the caveat below; you'll probably never flip it.trim_audio_to_video(defaultTrue) - cuts or pads the audio to match the video's duration after the 25fps resample, so the two stay in sync. Leave it on.keep_intermediate_outputs(defaultTrue) - whether the per-stage files (frames, wavs) stay inComfyUI/output/highsync/<task_id>/. Flip toFalseif you're batching a lot and want the output folder tidy; you still getfinal.mp4either way.
Outputs are identical to the simple node: images, audio, frame_rate (always 25 in v1), and output_video_path pointing at the muxed mp4.
The one real caveat: denoise_audio
denoise_audio defaults to False for a specific, documented reason. The official HighSync denoiser package pins old Hydra/OmegaConf versions that clash with current ComfyUI environments, so the README's guidance is to install it without pulling those dependencies:
pip install --no-deps denoiser==0.1.5
And even when you do enable it, the final mp4 still uses the original audio track so voice quality survives - denoising only cleans the input the model conditions on. So this is a "my source audio is noisy and the lips are jittering" fix, not a general quality knob.
Install and wiring
Identical to the rest of the pack - clone into custom_nodes, pip install -r requirements.txt into ComfyUI's environment, restart, ffmpeg on PATH:
cd ComfyUI/custom_nodes
git clone https://github.com/magicwang1111/ComfyUI-HighSync-Wrapper
cd ComfyUI-HighSync-Wrapper
pip install -r requirements.txt
Feed it the highsync_model output from HighSync Model Loader, frames from VideoHelperSuite or similar, and an AUDIO track. If you're new to the pack, honestly start with the simple LipSync node first - you'll likely find the defaults are fine - and graduate here when a specific run needs more steps, a different seed, or the trim/denoise toggles. The dials are here because the underlying model's a research artifact that you're expected to tune; they're not a sign the default node is broken.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| highsync_model | HIGHSYNC_MODEL | — | |
| images | IMAGE | — | |
| audio | AUDIO | — | |
| input_fps | INT | 251–120 | — |
| max_frames | INT | 00–100000 | — |
| inference_steps | INT | 201–100 | — |
| cfg_scale | FLOAT | 3.50–20 | — |
| seed | INT | 420–4294967295 | — |
| preprocess_chunk_frames | INT | 150012–10000 | — |
| denoise_audio | BOOLEAN | false | — |
| trim_audio_to_video | BOOLEAN | true | — |
| keep_intermediate_outputs | BOOLEAN | true | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| frame_rate | INT | — |
| output_video_path | STRING | — |