How to run SadTalker on a cloud GPU
Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install SadTalker from the official OpenTalker/SadTalker repository, run bash scripts/download_models.sh, and run inference.py with an image and an audio file. Copy the mp4 off the instance before you destroy it, because destroying the instance deletes its disk.
Portrait animation from a driving video, a different repository: How to run LivePortrait on a cloud GPU. Audio-driven lip sync from a different repository: How to run MuseTalk on a cloud GPU. A long-video portrait install: How to run Hallo2 on a cloud GPU. Lip sync from a face video and an audio file, a different repository whose README prints no GPU GB figure, is How to run Wav2Lip on a cloud GPU. Face restoration from a different repository: How to restore faces with CodeFormer on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. The tunnel for the WebUI 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: “This is not an official product of Tencent.” It also says to comply with the open-source license and the intellectual-property declaration before use. The LICENSE file opens with “Tencent is pleased to support the open source community by making SadTalker available.” The next line is “Copyright ©, a Tencent company. All rights reserved.” The next sentence is “SadTalker is licensed under the Apache 2.0 License, except for the third-party components listed below.” The rest of that file is the Apache License, Version 2.0, January 2004, and this page did not find a separate component list after that sentence. The GitHub license field on 2026-11-13 was NOASSERTION. The README highlight says the license has been updated to Apache 2.0 and that the non-commercial restriction has been removed. Read that file 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, inference.py, and docs/FAQ.md print no GPU GB figure. webui.sh prints one memory sentence, and it is about AMD Renoir: “make sure to have at least 4GB of VRAM and 10GB of RAM or enable cpu mode: --use-cpu all --no-half”. Renoir is not a name in gpu-prices.json. The 10GB in that sentence is RAM in the same sentence, not a second GPU figure. This page did not remeasure it and does not treat it as a figure for the NVIDIA cards below.
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-13T07:04:10.079Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T07:04:10.751Z) 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. Catalog RTX 2080 is 8. This page did not run SadTalker and does not mark a row as enough. Which listing you can start is on Deploy.
The catalog template list had no SadTalker 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 Linux block, copied:
git clone https://github.com/OpenTalker/SadTalker.git
cd SadTalker
conda create -n sadtalker python=3.8
conda activate sadtalker
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
conda install ffmpeg
pip install -r requirements.txt
### Coqui TTS is optional for gradio demo.
### pip install TTS
The last two lines are comments in that block. requirements.txt pins numpy==1.23.4, face_alignment==1.3.5, librosa==0.9.2, basicsr==1.4.2, facexlib==0.3.0, and lists gradio, gfpgan, and safetensors with no version. The commits API for the default branch main listed cd4c0465ae0b54a6f85af57f5c65fec9fe23e7f8, committed 2023-10-10T16:10:21Z. The commits API for README.md listed 4ee832cd8664e5468c0f327d6d8ae6f552f39813, committed 2023-09-12T21:58:39Z. requirements.txt was f141edbd9c8b8d9c6440a6f8ca81a09145805a5a, committed 2023-06-12T04:28:26Z. 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 block pins torch==1.12.1+cu113. This page did not re-test SadTalker on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.
Download the checkpoints
The README’s Linux download command, copied:
bash scripts/download_models.sh
The uncommented lines in that script create ./checkpoints, then wget these four files from the v0.0.2-rc GitHub release into that directory: mapping_00109-model.pth.tar, mapping_00229-model.pth.tar, SadTalker_V0.0.2_256.safetensors, and SadTalker_V0.0.2_512.safetensors. They then create ./gfpgan/weights and wget alignment_WFLW_4HG.pth, detection_Resnet50_Final.pth, GFPGANv1.4.pth, and parsing_parsenet.pth. Older .pth lines and the BFM zip lines in the same file are comments. The commits API listed scripts/download_models.sh at ae69a4c57c9838370643dd2c9b7d1f6ba16a54d8 (2023-06-08T13:57:43Z). The README also lists Google Drive, GitHub Releases, and a Baidu link for the same model set. This page did not run the script.
The README model table says checkpoints/SadTalker_V0.0.2_256.safetensors is the packaged 256 face render and checkpoints/SadTalker_V0.0.2_512.safetensors is the packaged 512 face render. inference.py defaults --size to 256 and --checkpoint_dir to ./checkpoints.
Image, audio, and enhancers
The README’s portrait command, copied. The angle brackets are the README’s placeholders.
python inference.py --driven_audio <audio.wav> \
--source_image <video.mp4 or picture.png> \
--enhancer gfpgan
The README says the results will be saved in results/$SOME_TIMESTAMP/*.mp4.
The full-body command, copied:
python inference.py --driven_audio <audio.wav> \
--source_image <video.mp4 or picture.png> \
--result_dir <a file to store results> \
--still \
--preprocess full \
--enhancer gfpgan
inference.py defaults --driven_audio to ./examples/driven_audio/bus_chinese.wav, --source_image to ./examples/source_image/full_body_1.png, --result_dir to ./results, --enhancer to None, and --preprocess to crop with choices crop, extcrop, resize, full, and extfull. The --enhancer help string is Face enhancer, [gfpgan, RestoreFormer]. The --background_enhancer help string is background enhancer, [realesrgan]. --still is the flag the README uses for a full-body video. The script builds save_dir as args.result_dir plus a timestamp from strftime("%Y_%m_%d_%H.%M.%S"), moves the generated video to save_dir+'.mp4', prints that path, and, unless --verbose is set, deletes save_dir. The commits API listed inference.py at 1119361eec6a9807e4d737647a36325ed7e977c5 (2023-06-05T14:27:20Z). This page did not run it. docs/FAQ.md says the method only supports wav or mp3 files as input.
WebUI
The README’s local Gradio command, copied:
python app_sadtalker.py
The comment above that command says you need to install TTS in advance with pip install tts. The install block higher on the page comments pip install TTS and calls it optional for the Gradio demo. app_sadtalker.py imports TTSTalker inside the tab labeled Upload OR TTS. It calls demo.queue() and then demo.launch() with no host and no port. The commits API listed app_sadtalker.py at 8a3fee3809b96ae796da92fcd4a43362f7e94335 (2023-08-19T02:42:32Z).
The README also says Linux can start the WebUI with bash webui.sh. webui.sh sets LAUNCH_SCRIPT to launcher.py and execs that file. launcher.py prepare_environment installs requirements.txt. On a non-Windows system, if the tts package is not installed, it runs pip install TTS. start calls sadtalker_demo(), demo.queue(), and demo.launch() with no host and no port. The commits API listed launcher.py at 5355d1ae9ce2c3c379d2c784c9c41b402626e454 (2023-06-29T13:53:41Z) and webui.sh at 1119361eec6a9807e4d737647a36325ed7e977c5 (2023-06-05T14:27:20Z). This page did not start the WebUI. Forward the local URL the process prints with how to use SSH port forwarding on a cloud GPU.
The README points the local WebUI extension at docs/webui_extension.md for a stable-diffusion-webui extension. That file does not name ComfyUI. 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. docs/FAQ.md answers that question with PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128 and then python inference.py .... The Linux lines, copied:
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128
python inference.py ...
The ... is the FAQ’s placeholder. 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.
Audio format. docs/FAQ.md says the method only supports wav or mp3 files, in the answer about an invalid-data decode error.
Save the video, then destroy
Copy the mp4 path that inference.py prints, or the video the Gradio widget returns, before you destroy the instance. The README’s results/$SOME_TIMESTAMP/*.mp4 sentence and the script’s save_dir+'.mp4' move are both in the inference section. 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 SadTalker README publish?
The SadTalker README, requirements.txt, inference.py, and docs/FAQ.md do not print a GPU GB figure. webui.sh prints one memory sentence, and it is about AMD Renoir: at least 4GB of VRAM and 10GB of RAM. Renoir is not a name in gpu-prices.json. Catalog RTX 2080 is 8. This page does not treat the Renoir sentence as a figure for that row and does not mark a catalog vram_gb as enough. Which listing you can start is on https://cloudgpu.app/deploy.
Which inference command and enhancer names does the repository document?
The README portrait command is python inference.py with --driven_audio, --source_image, and --enhancer gfpgan. The full-body command adds --result_dir, --still, and --preprocess full. inference.py defaults --result_dir to ./results, --size to 256, --preprocess to crop, and --enhancer to None. The --enhancer help string lists gfpgan and RestoreFormer. The --background_enhancer help string lists realesrgan. docs/FAQ.md says the method only supports wav or mp3 input.
Where is the video saved, and which command starts the WebUI?
The README says results are saved in results/$SOME_TIMESTAMP/*.mp4. inference.py builds that timestamp directory under --result_dir, moves the video to save_dir plus .mp4, prints that path, and deletes the directory unless --verbose is set. The README starts the local Gradio demo with python app_sadtalker.py. app_sadtalker.py calls demo.queue() and demo.launch() with no host and no port. bash webui.sh execs launcher.py, which also calls demo.launch() with no host and no port. This page did not start the WebUI.
Which license covers SadTalker?
The LICENSE file says Tencent is pleased to support the open source community by making SadTalker available, then Copyright ©, a Tencent company, then that SadTalker is licensed under the Apache 2.0 License except for the third-party components listed below. The rest of the file is the Apache License, Version 2.0, January 2004, and this page did not find a separate component list after that sentence. The GitHub license field on 2026-11-13 was NOASSERTION. The README highlight says the license has been updated to Apache 2.0 and that the non-commercial restriction has been removed. Read that file before you redistribute the program.
Sources (read 2026-11-13, Asia/Shanghai)
- SadTalker README (Linux install,
bash scripts/download_models.sh, model table,python inference.py,results/$SOME_TIMESTAMP/*.mp4,python app_sadtalker.py,bash webui.sh, Apache 2.0 highlight, disclaimer): https://github.com/OpenTalker/SadTalker/blob/main/README.md commit4ee832cd8664e5468c0f327d6d8ae6f552f39813. Repository HEADcd4c0465ae0b54a6f85af57f5c65fec9fe23e7f8, committed 2023-10-10T16:10:21Z scripts/download_models.sh(uncommented v0.0.2-rc safetensors and gfpgan weights): commitae69a4c57c9838370643dd2c9b7d1f6ba16a54d8inference.py(--enhancergfpganandRestoreFormer,--background_enhancerrealesrgan,--result_dir./results,--size256,save_dir+'.mp4'): commit1119361eec6a9807e4d737647a36325ed7e977c5requirements.txt: commitf141edbd9c8b8d9c6440a6f8ca81a09145805a5aapp_sadtalker.py(demo.queue(),demo.launch()with no host or port,TTSTalkerimport): commit8a3fee3809b96ae796da92fcd4a43362f7e94335webui.sh(Renoir 4GB VRAM and 10GB RAM sentence, launcheslauncher.py): commit1119361eec6a9807e4d737647a36325ed7e977c5launcher.py(pip install TTSwhenttsis missing on non-Windows,demo.launch()with no host or port): commit5355d1ae9ce2c3c379d2c784c9c41b402626e454docs/FAQ.md(PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128, wav or mp3): commitf8ad3222b259cc0c7486fe509c7226091fa5bd23docs/webui_extension.md(no ComfyUI name): commite4bcb0bd8ad2c959b5f3dfe9ddca9eaf8122e5a3LICENSE(Apache 2.0, copyright line naming Tencent, third-party sentence with no separate list after it): commit0b141ba66d5f190cdf3f602e378d276db4e35a97. GitHub license field NOASSERTION- ComfyUI examples top-level directories (no SadTalker directory): https://github.com/comfyanonymous/ComfyUI_examples commit
f9431bb000ce792094ff345446e22cac1ea6cef3 - Public GPU memory: https://cloudgpu.app/gpu-prices.json (
updated_at2026-11-13T07:04:10.079Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at2026-11-13T07:04:10.751Z).GET /v1/public/compute-capabilitiesreturned feature flags and no GPU list. The catalog had no SadTalker 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).