The current implementation of audio loading in LatentSync's whisper module relies on ffmpeg-python, which causes compatibility issues with the following error: AttributeError: module 'ffmpeg' has no attribute 'Error' This PR replaces the ffmpeg-python dependency with direct subprocess calls to ffmpeg, which is more reliable and has fewer dependencies. The change affects only the audio loading functionality while maintaining the same behavior and output quality. Changes: - Removed ffmpeg-python dependency - Implemented audio loading using subprocess to call ffmpeg directly - Added error handling with informative messages - Maintained original sampling rate and audio format compatibility Testing: - Tested with MP3 and WAV audio files - Verified audio processing quality remains unchanged - Confirmed compatibility with the rest of the whisper pipeline Note: This change requires ffmpeg to be installed on the system, which is already a requirement for the original implementation.
ComfyUI-LatentSyncWrapper
Unofficial LatentSync implementation for ComfyUI on windows.
This node provides lip-sync capabilities in ComfyUI using ByteDance's LatentSync model. It allows you to synchronize video lips with audio input.
https://github.com/user-attachments/assets/49c40cf4-5db1-46c5-99a4-7fbb2031c907
Prerequisites
Before installing this node, you must install the following in order:
- ComfyUI installed and working
- Python 3.8-3.11 (mediapipe is not yet compatible with Python 3.12)
- FFmpeg installed on your system:
- Download from here to your root C:\ drive, extract it, and add 'C:\ffmpeg\bin' to system PATH
- If you get PYTHONPATH errors:
- Make sure Python is in your system PATH
- Try running ComfyUI as administrator
Installation
Only proceed with installation after confirming all prerequisites are installed and working.
- Clone this repository into your ComfyUI custom_nodes directory:
cd ComfyUI/custom_nodes
git clone https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper.git
cd ComfyUI-LatentSyncWrapper
pip install -r requirements.txt
Required Dependencies
diffusers
transformers
huggingface-hub
omegaconf
einops
opencv-python
mediapipe>=0.10.8
face-alignment
decord
ffmpeg-python
safetensors
soundfile
Model Setup
The models can be obtained in two ways:
Option 1: Automatic Download (First Run)
The node will attempt to automatically download required model files from HuggingFace on first use. If automatic download fails, use Option 2.
Option 2: Manual Download
- Visit the HuggingFace repo: https://huggingface.co/chunyu-li/LatentSync
- Download these files:
latentsync_unet.ptwhisper/tiny.pt
- Place them in the following structure:
ComfyUI/custom_nodes/ComfyUI-LatentSyncWrapper/checkpoints/
├── latentsync_unet.pt
└── whisper/
└── tiny.pt
Usage
- Select an input video file
- Load an audio file using ComfyUI audio loader
- (Optional) Set a seed value for reproducible results
- Connect to the LatentSync node
- Run the workflow
The processed video will be saved in ComfyUI's output directory.
Node Parameters:
video_path: Path to input video fileaudio: Audio input from AceNodes audio loaderseed: Random seed for reproducible results (default: 1247)
Known Limitations
- Works best with clear, frontal face videos
- Currently does not support anime/cartoon faces
- Video should be at 25 FPS (will be automatically converted)
- Face should be visible throughout the video
NEW - Video Length Adjuster Node
A complementary node that helps manage video length and synchronization with audio.
Features:
- Displays video and audio duration information
- Three modes of operation:
normal: Passes through video frames with added padding to prevent frame losspingpong: Creates a forward-backward loop of the video sequenceloop_to_audio: Extends video by repeating frames to match audio duration
Usage:
- Place the Video Length Adjuster between your video input and the LatentSync node
- Connect audio to both the Video Length Adjuster and Video Combine nodes
- Select desired mode based on your needs:
- Use
normalfor standard lip-sync - Use
pingpongfor back-and-forth animation - Use
loop_to_audioto match longer audio durations
- Use
Example Workflow:
- Load Video (Upload) → Video frames output
- Load Audio → Audio output
- Connect both to Video Length Adjuster
- Video Length Adjuster → LatentSync Node
- LatentSync Node + Original Audio → Video Combine
Troubleshooting
mediapipe Installation Issues
If you encounter mediapipe installation errors:
- Ensure you're using Python 3.8-3.11 (Check with
python --version) - If using Python 3.12, you'll need to downgrade to a compatible version
- Try installing mediapipe separately first:
pip install mediapipe>=0.10.8
Credits
This is an unofficial implementation based on:
- LatentSync by ByteDance Research
- ComfyUI
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.