How to run EchoMimicV2 on a cloud GPU
Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install EchoMimicV2 from the official antgroup/echomimic_v2 repository the way the README prints, download BadToBest/EchoMimicV2 into pretrained_weights, and run python infer.py or python app.py. Copy the mp4 off the instance before you destroy it, because destroying the instance deletes its disk.
Long-duration audio-driven portrait animation from a different repository is How to run Hallo2 on a cloud GPU. Portrait animation from a driving video is How to run LivePortrait on a cloud GPU. Lip sync whose README states 8 GB for version 1.5 and 18 GB for version 1.6 is How to run LatentSync lip sync on a cloud GPU. A single-image talking head whose README prints no GPU GB figure is How to run SadTalker on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. app.py calls demo.launch(inbrowser=True) and does not pass a host or a port. The tunnel page is How to use SSH port forwarding on a cloud GPU.
Only animate a person you have the right to use. The repository LICENSE file is the Apache License, Version 2.0, January 2004. The appendix copyright line is still the unfilled template Copyright [yyyy] [name of copyright owner]. The GitHub license field on 2026-11-13 was Apache-2.0. The model API for BadToBest/EchoMimicV2 that day had no license field and gated false, lastModified 2025-01-06T01:42:06.000Z. The README disclaimer says the project is intended for academic research, that users are solely liable for their actions while using the generative model, and that it is imperative to use the model responsibly, adhering to both ethical and legal standards. Read LICENSE 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 manual installation section says the tested GPUs are A100(80G) / RTX4090D (24G) / V100(16G), the tested system environment is Centos 7.2/Ubuntu 22.04 with Cuda >= 11.7, and the tested Python versions are 3.8 / 3.10 / 3.11 (read 2026-11-13). The automatic installation line says CUDA >= 11.7 and Python == 3.10. Those sentences are the README’s. This page did not remeasure them. The README’s 2025.01.03 update prints a speed sentence. This page does not copy it.
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-13T13:09:18.523Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T13:09:40.223Z) 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. The README writes A100(80G), RTX4090D (24G), and V100(16G). Catalog A100 80G is 80, catalog RTX 4090D is 24, and catalog V100 16G is 16. Those catalog numbers are not a second measurement. This page did not run EchoMimicV2 and does not mark a row as enough. Which listing you can start is on Deploy.
The catalog template list had no EchoMimicV2 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’s automatic install, copied. A conda environment is the manual block’s first step: How to set up a conda environment on a cloud GPU.
git clone https://github.com/antgroup/echomimic_v2
cd echomimic_v2
sh linux_setup.sh
The README’s manual block, copied. The automatic script contains these pip lines and then more steps. This page did not run either block.
conda create -n echomimic python=3.10
conda activate echomimic
pip install pip -U
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 xformers==0.0.28.post3 --index-url https://download.pytorch.org/whl/cu124
pip install torchao --index-url https://download.pytorch.org/whl/nightly/cu124
pip install -r requirements.txt
pip install --no-deps facenet_pytorch==2.6.0
requirements.txt pins diffusers==0.31.0, gradio_client==1.4.3, and huggingface_hub==0.26.2. It does not pin torch. One line in that file is a package URL this page does not print. pip install -r requirements.txt is still the README command. The commits API for the default branch main listed 38c86809efa041884c774ee31d984a9577c0e0aa, committed 2026-02-23T05:28:31Z. README.md was the same commit. linux_setup.sh was 61f6b607d41a5ba033e4cbe494698dd01ebb5c13, committed 2024-11-28T02:15:40Z. requirements.txt was 38a82d0e2094b7facf84f7081d3b33bc11f63075, committed 2025-01-15T05:34:59Z.
The README says to download and decompress ffmpeg-static, then:
export FFMPEG_PATH=/path/to/ffmpeg-4.4-amd64-static
The path in that line is the README’s placeholder. linux_setup.sh downloads ffmpeg-4.4-amd64-static.tar.xz when that directory is absent and sets FFMPEG_PATH to $PWD/ffmpeg-4.4-amd64-static. The URL is in the README and in the script.
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 manual install pins torch==2.5.1 from the cu124 index. This page did not re-test EchoMimicV2 on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.
Download the checkpoints
The README’s weight clone, copied:
git lfs install
git clone https://huggingface.co/BadToBest/EchoMimicV2 pretrained_weights
The GitHub README’s tree under pretrained_weights lists denoising_unet.pth, reference_unet.pth, motion_module.pth, pose_encoder.pth, sd-vae-ft-mse, and audio_processor/tiny.pt. It links stabilityai/sd-vae-ft-mse. The model card README’s tree also lists sd-image-variations-diffusers and links lambdalabs/sd-image-variations-diffusers. Both files link a download for audio_processor/tiny.pt. That URL is one this page does not print. Copy it from the README or from the card.
The model API sibling list on 2026-11-13 was .gitattributes, README.md, denoising_unet.pth, denoising_unet_acc.pth, motion_module.pth, motion_module_acc.pth, pose_encoder.pth, and reference_unet.pth. It did not include sd-vae-ft-mse, sd-image-variations-diffusers, or tiny.pt. linux_setup.sh clones stabilityai/sd-vae-ft-mse and lambdalabs/sd-image-variations-diffusers when those directories are empty, and it downloads tiny.pt with the URL this page does not print.
configs/prompts/infer.yaml sets motion_module_path to ./pretrained_weights/motion_module.pth, pretrained_vae_path to ./pretrained_weights/sd-vae-ft-mse, pretrained_base_model_path to ./pretrained_weights/sd-image-variations-diffusers, and audio_model_path to ./pretrained_weights/audio_processor/tiny.pt. The same file sets audio_mapper_path to ./pretrained_weights/audio_mapper-50000.pth, auido_guider_path to ./pretrained_weights/wav2vec2-base-960h, and auto_flow_path to ./pretrained_weights/AutoFlow. The key auido_guider_path is spelled that way in the file. Those three names are not in the GitHub README tree, the model API sibling list, or linux_setup.sh. This page did not find a download command for them.
The documented inference scripts
The README’s inference lines, copied:
python infer.py --config='./configs/prompts/infer.yaml'
python infer_acc.py --config='./configs/prompts/infer_acc.yaml'
infer.py defaults --seed to 3407, --device to cuda, -W and -H to 768, and -L to 240. It builds model_flag from the parent directory name of motion_module_path and from that checkpoint’s filename, then creates outputs/{model_flag}-seed{seed}/. The file it keeps is {save_name}_sig.mp4. It deletes {save_name}_woa_sig.mp4 after writing the file with audio. infer_acc.py sets date_str with %Y%m%d and time_str with %H%M, creates output/{date_str}/{time_str}--step_{steps}-{W}x{H}--cfg_{cfg}/, and keeps a file ending in _sig.mp4. It also deletes the _woa_sig.mp4 file. This page did not run either script. The commits API listed infer.py at 204487bc4057156bb0fe04cd444e90b03c3435c8 (2024-11-22T07:21:25Z) and infer_acc.py at 9bcc88ed1ce4e5f7f1d45f19a3d377837b0b198f (2025-01-03T09:32:39Z).
Gradio
The README’s Gradio line, copied:
python app.py
The 2025.01.16 update links app_acc.py. app.py and app_acc.py both end with demo.launch(inbrowser=True). That call passes no host and no port. This page does not state a port number. app.py sets timestamp with %Y%m%d_%H%M%S and writes outputs/{timestamp}_sig.mp4. It also leaves outputs/{timestamp}_woa_sig.mp4 on disk. The function returns the _sig.mp4 path to the video widget. Forward whichever port the process prints with how to use SSH port forwarding on a cloud GPU. This page did not start the app. app.py was commit 46c0a1835fb9759e36da4b643498aad939a1aa3d (2025-01-16T03:14:45Z). app_acc.py was 01a5731008f5e8ee3273235be42a6455980b6bd8 (2025-01-16T12:00:57Z).
ComfyUI
The 2024.11.22 update says ComfyUI is available and links smthemex/ComfyUI_EchoMimic. The README does not paste that repository’s install. This page does not add it. 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. Installing ComfyUI itself is How to install ComfyUI and ComfyUI-Manager on a cloud GPU.
When it fails
CUDA out of memory. The README’s memory text is the tested-GPU line above. It prints no low-memory flag. If the process 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 pinned torch build on that card.
A checkpoint the yaml names is absent. configs/prompts/infer.yaml names audio_mapper-50000.pth, wav2vec2-base-960h, and AutoFlow. This page did not find a download command for those three names.
Save the video, then destroy
Copy outputs, and output if you ran infer_acc.py, before you destroy the instance. 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 EchoMimicV2 README print?
The manual installation section says the tested GPUs are A100(80G), RTX4090D (24G), and V100(16G). It does not print a separate minimum. Catalog A100 80G is 80, catalog RTX 4090D is 24, and catalog V100 16G is 16 in gpu-prices.json (updated_at 2026-11-13T13:09:18.523Z). Those catalog numbers are not a measurement from this page. This page did not run EchoMimicV2 and does not mark a row as enough. Which listing you can start is on https://cloudgpu.app/deploy.
Which commands does the README print for inference and Gradio?
The README prints python infer.py --config=./configs/prompts/infer.yaml, python infer_acc.py --config=./configs/prompts/infer_acc.yaml, and python app.py. The 2025.01.16 update links app_acc.py. app.py and app_acc.py both call demo.launch(inbrowser=True) and do not pass a host or a port. This page did not run the commands.
Where is the mp4 saved?
infer.py keeps a file whose name ends in sig.mp4 under outputs/{model_flag}-seed{seed}/ and deletes the earlier file whose name ends in woa_sig.mp4. The default seed is 3407. app.py writes a file in the outputs directory whose name is the timestamp plus sig.mp4, and it also leaves the woa_sig.mp4 copy. The timestamp pattern joins the date and the clock with an underscore. infer_acc.py writes under the output directory, then a date folder, then a time folder, and keeps a file whose name ends in sig.mp4. The date pattern is year, month, and day. The time pattern is hour and minute. This page did not run the scripts.
What license does the repository state?
The repository LICENSE file is the Apache License, Version 2.0, January 2004, and the appendix copyright line is still the unfilled template Copyright [yyyy] [name of copyright owner]. The GitHub license field on 2026-11-13 was Apache-2.0. The model API for BadToBest/EchoMimicV2 had no license field and gated false. Section 2 of the Apache file grants a no-charge, royalty-free copyright license. That wording is the upstream license, not a CloudGPU price and not a storage allowance. Only animate a person you have the right to use.
Sources (read 2026-11-13, Asia/Shanghai)
- EchoMimicV2 README (clone,
sh linux_setup.sh, the manual pip block, tested GPUs A100(80G) / RTX4090D (24G) / V100(16G),BadToBest/EchoMimicV2,python app.py,python infer.py,python infer_acc.py, the ComfyUI link, the disclaimer): https://github.com/antgroup/echomimic_v2/blob/main/README.md commit38c86809efa041884c774ee31d984a9577c0e0aa. Repository HEAD the same commit,pushed_at2026-02-23T05:28:31Z linux_setup.sh(the pip lines, ffmpeg-static, the two extra hub clones, thetiny.ptdownload): commit61f6b607d41a5ba033e4cbe494698dd01ebb5c13infer.py(outputs/{model_flag}-seed{seed}/,_sig.mp4, default--seed3407): commit204487bc4057156bb0fe04cd444e90b03c3435c8infer_acc.py(output/{date}/{time}--step_...,%Y%m%d,%H%M): commit9bcc88ed1ce4e5f7f1d45f19a3d377837b0b198fapp.py(demo.launch(inbrowser=True),outputs/{timestamp}_sig.mp4,%Y%m%d_%H%M%S): commit46c0a1835fb9759e36da4b643498aad939a1aa3dapp_acc.py(demo.launch(inbrowser=True)): commit01a5731008f5e8ee3273235be42a6455980b6bd8configs/prompts/infer.yaml(motion_module.pth,audio_mapper-50000.pth,auido_guider_path,AutoFlow): commitdfd9111624929dc02751f7f59491d621ff0a073erequirements.txt(diffusers==0.31.0; one package URL this page does not print): commit38a82d0e2094b7facf84f7081d3b33bc11f63075LICENSE(Apache 2.0, January 2004, unfilled copyright template): commit50c807d01c1389f4f9f81b2c58ff5f228bf314a7. GitHub license field Apache-2.0- Model card
BadToBest/EchoMimicV2(no license field,gatedfalse,lastModified2025-01-06T01:42:06.000Z, sibling list, the card README tree that also listssd-image-variations-diffusers): https://huggingface.co/BadToBest/EchoMimicV2 read 2026-11-13 - ComfyUI examples top-level directories (no EchoMimic directory): https://github.com/comfyanonymous/ComfyUI_examples commit
f9431bb000ce792094ff345446e22cac1ea6cef3 - Public GPU memory: https://cloudgpu.app/gpu-prices.json (
updated_at2026-11-13T13:09:18.523Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at2026-11-13T13:09:40.223Z).GET /v1/public/compute-capabilitiesreturned feature flags and no GPU list. The catalog had no EchoMimicV2 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).