How to run Wav2Lip on a cloud GPU
Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install Wav2Lip from the official Rudrabha/Wav2Lip repository, download the face-detection weights and the checkpoint the README links, and run inference.py with a face video and an audio file. Copy results/result_voice.mp4 off the instance before you destroy it, because destroying the instance deletes its disk.
A single-image talking head from a different repository: How to run SadTalker on a cloud GPU. Audio-driven lip sync from a different repository: How to run MuseTalk on a cloud GPU. Portrait animation from a driving video: How to run LivePortrait on a cloud GPU. A long-video portrait install: How to run Hallo2 on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. The documented inference command does not open a port. The tunnel page, for programs that do, is How to use SSH port forwarding on a cloud GPU.
Only animate a face you have the right to use. The README disclaimer says results from this open-source code should only be used for research, academic, or personal purposes, and that any form of commercial use is strictly prohibited because the models are trained on the LRS2 dataset. The license section repeats that this repository can only be used for personal, research, or non-commercial purposes. The repository tree has no LICENSE file. The GitHub API returned no license object on 2026-11-13. Read that disclaimer before you redistribute the program.
The commands below are copied from the upstream files named in each step. They were not run on a CloudGPU instance for this page. Anything this page adds around them is marked.
What the README says about memory
The README, requirements.txt, and inference.py print no GPU GB figure. inference.py catches a RuntimeError during face detection, halves face_det_batch_size, and prints Recovering from OOM error; New batch size: {}. If the batch size is already 1, it raises Image too big to run face detection on GPU. Please use the --resize_factor argument. Those strings are not a GPU GB figure. This page did not remeasure them.
GET /v1/public/compute-capabilities does not list GPUs. It returns feature flags. The memory column is vram_gb from gpu-prices.json, updated_at 2026-11-13T08:10:03.664Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T08:10:04.454Z) listed the same names and the same vram_gb values, plus Ascend 910B at 64, which is not in gpu-prices.json and is not listed here. The catalog response also includes an availability field. This page does not copy it. Every prices row has gpu_count 1. There is no NVIDIA GPU GB figure in the README to match these values against. How published FLUX and SDXL weight sizes are read: How much VRAM do I need for FLUX and SDXL. Those sizes are not a figure from this repository. Catalog RTX 2080 is 8. This page did not run Wav2Lip and does not mark a row as enough. Which listing you can start is on Deploy.
The catalog template list had no Wav2Lip template.
| Catalog name | vram_gb |
|---|---|
| RTX 2080 | 8 |
| RTX 3080 | 10 |
| RTX 2080 Ti | 11 |
| RTX 3080 Ti | 12 |
| V100 16G | 16 |
| A30 | 24 |
| RTX 3090 | 24 |
| RTX 4090 | 24 |
| RTX 4090D | 24 |
| RTX 4080 SUPER 32G | 32 |
| RTX 5090 | 32 |
| RTX 5090D | 32 |
| V100 32G | 32 |
| A100 40G | 40 |
| A800 40G | 40 |
| A40 | 48 |
| RTX 4090 48G | 48 |
| RTX 4090D 48G | 48 |
| RTX A6000 | 48 |
| NVIDIA RTX PRO 5000 72G | 72 |
| RTX PRO 5000 72G | 72 |
| A100 80G | 80 |
| A800 80G | 80 |
| H800 | 80 |
| RTX 6000D | 83 |
| H20 96G | 96 |
| RTX PRO 6000 96G | 96 |
| RTX PRO 6000 Max-Q | 96 |
| H20-3e 141G | 141 |
Install
On Deploy, choose Raw GPU. The README prerequisites, copied as the sentences write them: Python 3.6, ffmpeg with sudo apt-get install ffmpeg, and pip install -r requirements.txt. The README also links a gist for a docker image. This page does not copy that gist.
sudo apt-get install ffmpeg
# The next two lines are added on this page. The README does not print a clone command.
git clone https://github.com/Rudrabha/Wav2Lip.git
cd Wav2Lip
pip install -r requirements.txt
The sudo and pip lines are the commands inside those sentences. The git clone and cd lines are marked above. This page did not run them. requirements.txt pins librosa==0.7.0, numpy==1.17.1, opencv-python==4.1.0.25, torch==1.1.0, torchvision==0.3.0, tqdm==4.45.0, and numba==0.48, and it lists opencv-contrib-python>=4.2.0.34. It does not set a CUDA wheel index. The commits API for the default branch master listed bac9a81e63ecc153202353372e5724b83d9e6322, committed 2025-06-22T02:41:20Z. That commit is also the README. requirements.txt was 143e969123218405b74b7d330a09c5c063fe17db, committed 2021-01-09T17:09:43Z. This page did not install the package.
The RTX 5090 guide says that card is compute capability 12.0 (sm_120) and that PyTorch 2.7 and later, on a build for CUDA 12.8 or newer, is the line that announced support. The install file pins torch==1.1.0. This page did not re-test Wav2Lip on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.
Download the checkpoints
The README says the face-detection pre-trained model should be downloaded to face_detection/detection/sfd/s3fd.pth. The link in that sentence is https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth. The same sentence gives this alternative link if the first does not work: https://iiitaphyd-my.sharepoint.com/:u:/g/personal/prajwal_k_research_iiit_ac_in/EZsy6qWuivtDnANIG73iHjIBjMSoojcIV0NULXV-yiuiIg?e=qTasa8. The README does not print a download command. This page does not add one.
The model table names two weight rows and links a Google Drive folder or file. It does not print a .pth filename.
| Model | Description in the README | Link the README prints |
|---|---|---|
| Wav2Lip | Highly accurate lip-sync | https://drive.google.com/drive/folders/153HLrqlBNxzZcHi17PEvP09kkAfzRshM?usp=share_link |
| Wav2Lip + GAN | Slightly inferior lip-sync, but better visual quality | https://drive.google.com/file/d/15G3U08c8xsCkOqQxE38Z2XXDnPcOptNk/view?usp=share_link |
checkpoints/README.md says: “Place all your checkpoints (.pth files) here.” inference.py requires --checkpoint_path. This page did not download the files.
Face video, audio, padding, and resize
The README inference command, copied. The angle brackets are the README’s placeholders.
python inference.py --checkpoint_path <ckpt> --face <video.mp4> --audio <an-audio-source>
The README says the result is saved by default in results/result_voice.mp4. It says the audio source can be any file supported by FFMPEG containing audio data: *.wav, *.mp3, or a video file, from which the code extracts the audio.
The README’s padding example is --pads 0 20 0 0. It says you might need to increase the bottom padding to include the chin. It says to use --nosmooth if the mouth position is dislocated or if you see artifacts such as two mouths. It says to experiment with --resize_factor for a lower-resolution video, and that you might get better results for 720p videos than for 1080p videos.
inference.py defaults --outfile to results/result_voice.mp4, --pads to [0, 10, 0, 0], --resize_factor to 1, --wav2lip_batch_size to 128, --face_det_batch_size to 16, and --fps to 25. The --pads help string is Padding (top, bottom, left, right). Please adjust to include chin at least. The --resize_factor help string says the resolution is reduced by that factor and that sometimes the best results are obtained at 480p or 720p. That help string is the file’s. This page did not remeasure it. The script sets args.img_size = 96. A static image whose extension is jpg, png, or jpeg sets --static. If the audio path does not end in .wav, the script runs ffmpeg into temp/temp.wav. It writes temp/result.avi, then ffmpeg writes args.outfile. The commits API listed inference.py at d6b84272fd48d501b5ede1ee0c1795d20f445d0c (2020-11-16T03:19:29Z). This page did not run it.
The license section says the size of the generated face will be 192 x 288 in the new models. That sentence is about those models. inference.py still sets args.img_size = 96 for the command above. This page does not treat 192 x 288 as the open-source script’s face size.
Web UI and ComfyUI
The non-commercial section does not ship a Gradio app and does not name a local port. It links Colab notebooks. This page does not copy those notebooks. The README opens with a commercial hosted-API section. This page does not copy that section. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3, committed 2025-11-26T20:33:58Z. This page does not add a ComfyUI install.
When it fails
CUDA out of memory. inference.py recovers inside face detection by halving the batch size, and it raises the resize-factor message quoted in the memory section when the batch size is already 1. The README prints no GPU GB cutoff. If the process still raises that error, use how to fix CUDA out of memory on a cloud GPU.
“CUDA error: no kernel image is available for execution on the device” on an RTX 5090. See the install section. This page did not re-test the package on that card.
Face not detected. inference.py writes temp/faulty_frame.jpg and raises Face not detected! Ensure the video contains a face in all the frames.
The README also documents training
The README’s preprocess command and the two training commands, copied. The angle brackets are the README’s placeholders.
python preprocess.py --data_root data_root/main --preprocessed_root lrs2_preprocessed/
python color_syncnet_train.py --data_root lrs2_preprocessed/ --checkpoint_dir <folder_to_save_checkpoints>
python wav2lip_train.py --data_root lrs2_preprocessed/ --checkpoint_dir <folder_to_save_checkpoints> --syncnet_checkpoint_path <path_to_expert_disc_checkpoint>
The README says to run hq_wav2lip_train.py instead when training with the visual quality discriminator. It prints a duration for training without that discriminator and a longer duration for training with it. This page does not copy those durations. It says the expert discriminator’s eval loss should go down to ~0.25 and the Wav2Lip eval sync loss should go down to ~0.2. Those figures are the README’s. This page did not remeasure them and did not run the training scripts.
Save the video, then destroy
Copy results/result_voice.mp4, or the path you passed as --outfile, before you destroy the instance. results/README.md says generated results will be placed in that folder by default. Save your work before you destroy a cloud GPU is the checklist. The terms say data on local instance storage is permanently deleted when the instance is destroyed.
The pricing page FAQ states the billing rule in these words:
Per-minute options have a 1-minute minimum; unused prepaid minutes are refunded when you destroy the instance. Some configurations use whole-hour billing with a 1-hour minimum; unused time within a charged hour is not refunded on voluntary stop. The billing period, minimum charge and initial prepayment are shown before confirmation. No subscription.
Frequently asked questions
How much VRAM does the Wav2Lip README publish?
The Wav2Lip README, requirements.txt, and inference.py do not print a GPU GB figure. inference.py halves the face-detection batch size after a RuntimeError and raises a resize-factor message when that batch size is already 1. Catalog RTX 2080 is 8. This page does not mark a catalog vram_gb as enough. Which listing you can start is on https://cloudgpu.app/deploy.
Which inference command, padding, and resize flags does the repository document?
The README command is python inference.py with --checkpoint_path, --face, and --audio. It saves results/result_voice.mp4 by default. The padding example in the README is --pads 0 20 0 0. inference.py defaults --pads to 0 10 0 0, --resize_factor to 1, and --outfile to results/result_voice.mp4. The resize help string names 480p and 720p. The script sets img_size to 96. The license section in the README says the generated face in the new models is 192 x 288. Audio can be wav, mp3, or a video file.
Where is the video saved, and does the repository ship a local WebUI?
The README says the result is saved by default in results/result_voice.mp4. inference.py writes temp/result.avi and then ffmpeg writes --outfile. The non-commercial section does not ship a Gradio app and does not name a local port. It links Colab notebooks. This page did not run inference and does not add a ComfyUI install.
Which usage restriction does the README state?
The README disclaimer says results from this open-source code should only be used for research, academic, or personal purposes, and that any form of commercial use is strictly prohibited because the models are trained on the LRS2 dataset. The license section says this repository can only be used for personal, research, or non-commercial purposes. The repository tree has no LICENSE file. The GitHub API returned no license object on 2026-11-13. Read that disclaimer before you redistribute the program.
Sources (read 2026-11-13, Asia/Shanghai)
- Wav2Lip README (prerequisites, model table,
python inference.py,results/result_voice.mp4,--pads 0 20 0 0,--resize_factor,--nosmooth, training commands, eval-loss sentences, 192 x 288 sentence, non-commercial restriction): https://github.com/Rudrabha/Wav2Lip/blob/master/README.md commitbac9a81e63ecc153202353372e5724b83d9e6322. Repository HEAD is that commit, committed 2025-06-22T02:41:20Z inference.py(--outfileresults/result_voice.mp4,--pads[0, 10, 0, 0],--resize_factor1,img_size96, OOM recovery,temp/result.avi): commitd6b84272fd48d501b5ede1ee0c1795d20f445d0crequirements.txt(torch==1.1.0, no CUDA index): commit143e969123218405b74b7d330a09c5c063fe17dbcheckpoints/README.mdandresults/README.md: commitdb7bc44a861f560479bbbe1f4782bd2467120c64. NoLICENSEfile in the tree. GitHub API returned no license object- ComfyUI examples top-level directories (no Wav2Lip directory): https://github.com/comfyanonymous/ComfyUI_examples commit
f9431bb000ce792094ff345446e22cac1ea6cef3 - Public GPU memory: https://cloudgpu.app/gpu-prices.json (
updated_at2026-11-13T08:10:03.664Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at2026-11-13T08:10:04.454Z).GET /v1/public/compute-capabilitiesreturned feature flags and no GPU list. The catalog had no Wav2Lip template
Cards you can start are on the Deploy page. Prices are on https://cloudgpu.app/pricing and are not repeated here.
Last updated: 2026-11-13 (Asia/Shanghai).