LipSync GAP Sampler (Legacy Alias)
Old name, same sampler — the LipSync GAP sampler's Legacy Alias
- models
- images
- audio
- images
- audio
GapPerfectSyncSampler - "LipSync GAP Sampler (Legacy Alias)" - is the full lip-sync sampler under a pre-rename name. In the pack's node mapping it resolves to the same class as GapLipSyncSampler, so there's zero functional difference. If you're building a new workflow, use the current name; if you're loading an old "PerfectSync"-era graph, this alias is what keeps it running untouched.
What it does
The complete LatentSync inference pass: take the PERFECT_SYNC_MODELS bundle from the loader, a batch of video frames (images), and an audio track, and it runs a masked latent diffusion that resynchronizes the mouth to the speech. Internally it resamples audio to 16 kHz mono for Whisper, finds the face with Mediapipe, applies the feathered mask, and steps the UNet with a DDIM scheduler.
The inputs you'll actually touch, same as the current sampler:
- steps - 20 default, 20–30 for good sync.
- guidance_scale - 1.5 default; how hard the mouth tracks the audio.
- frame_rate - match your source video, or the sync drifts.
- video_resize_limit - default 1280, your VRAM escape hatch on 12 GB cards.
Plus seed, audio_offset_seconds, and audio_duration_seconds for trimming without pre-editing audio. Outputs are images (synced frames → video encoder) and audio (your input track, for muxing).
Install and gotchas
Identical pack install: ComfyUI Manager search LipSync GAP, or clone + install.bat, then restart. The alias reads the same latentsync_unet.pt, Whisper checkpoints, and face_landmarker.task as the current node - no separate model setup.
Watch the same traps: gray or artifacted frames (drop video_resize_limit, debug with tiny Whisper), flat articulation (bump Whisper size in the loader, not here), and OOM (fp8 first, resize second, shorter clips third). The one genuinely alias-specific annoyance: if an old workflow references this name and ComfyUI doesn't recognize it after restart, refresh the node list - stale registries are the usual culprit, and it's a restart fix, not a code problem.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| models | PERFECT_SYNC_MODELS | — | |
| images | IMAGE | — | |
| audio | AUDIO | — | |
| seed | INT | 1247 | — |
| steps | INT | 201–100 | — |
| guidance_scale | FLOAT | 1.50–100 | — |
| frame_rate | INT | 251–60 | — |
| video_resize_limit | COMBO | 1280 | 5 options: None, 1280, 1024, 768, 512 |
| audio_offset_seconds | FLOAT | 0.00–3600 | — |
| audio_duration_seconds | FLOAT | 0.00–3600 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |