How to run Wan2.1 VACE on a cloud GPU

Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install from the official Wan-Video/Wan2.1 repository or the official ali-vilab/VACE repository the way those READMEs print, download a VACE checkpoint those files name, run the documented reference-to-video or editing command, and copy the mp4 off the instance before you destroy it. Destroying the instance deletes its disk.

Wan 2.2 is a different repository: How to run Wan 2.2 video generation on a cloud GPU. Which card the Wan README names for other tasks is Which GPU for Wan video generation. A Wan 2.2 LoRA, a different task, is How to train a Wan 2.2 LoRA with musubi-tuner on a cloud GPU. SkyReels-V2 is a different repository: How to run SkyReels-V2 on a cloud GPU. The ComfyUI file layout for the official VACE example is below, and the install of ComfyUI itself is How to install ComfyUI and ComfyUI-Manager on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. The Gradio scripts below default to port 7860: How to use SSH port forwarding on a cloud GPU. How published FLUX and SDXL weight sizes are read: How much VRAM do I need for FLUX and SDXL.

LICENSE.txt in Wan-Video/Wan2.1 is the Apache License, Version 2.0, January 2004, with the unfilled copyright template. The README license agreement says the models in that repository are licensed under the Apache 2.0 License. The GitHub license field on 2026-11-13 was Apache-2.0. LICENSE.txt in ali-vilab/VACE is the same Apache license with the unfilled copyright template. The GitHub license field that day was Apache-2.0. The VACE models table labels VACE-Wan2.1-1.3B-Preview, Wan2.1-VACE-1.3B, and Wan2.1-VACE-14B as Apache-2.0, and VACE-LTX-Video-0.9 as RAIL-M. The same table says all models inherit the license of the original model. The RAIL-M file linked from that row defines Permitted Purpose as academic or research purposes only, and says that purpose explicitly excludes commercialization such as downstream selling of the Model or Derivatives of the Model. The model cards for Wan-AI/Wan2.1-VACE-1.3B and Wan-AI/Wan2.1-VACE-14B on 2026-11-13 had cardData.license apache-2.0, top-level license null, and gated false, lastModified 2025-05-19T03:18:05.000Z and 2025-05-19T03:16:32.000Z. Read the license file that matches the checkpoint you download before you redistribute the program or the weights.

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 READMEs say about memory

The Wan2.1 README’s VACE section prints no GPU GB figure. The ali-vilab/VACE README prints no GPU GB figure. The Wan2.1 introduction says the T2V-1.3B model requires only 8.19 GB VRAM. That sentence names T2V-1.3B. It does not name VACE. The same sentence also gives a time on an RTX 4090. This page does not copy that time. The VACE model-card READMEs repeat the Wan2.1 README, including that T2V-1.3B sentence. This page does not apply 8.19 GB to VACE-1.3B or VACE-14B.

The computational-efficiency section says its results are total time and peak GPU memory in GB, and the results are an image. This page does not transcribe numbers from that image. The notes under the image say that for the 14B model on 1 GPU the test used --offload_model True, and that for the 1.3B model on a single 4090 GPU the test used --offload_model True --t5_cpu. Those notes do not say the rows are VACE.

The text-to-video section says that if you encounter OOM, you can use --offload_model True and --t5_cpu to reduce GPU memory usage, and it gives an RTX 4090 example for task t2v-1.3B. The VACE commands printed below do not pass --t5_cpu. generate.py defaults --offload_model to None, and when it is None the script sets it to False if WORLD_SIZE is greater than 1, otherwise True, and logs that choice. The VACE single-GPU command does not pass --offload_model, so that default applies. This page did not run it and did not measure memory.

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-13T15:11:42.412Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T15:11:42.831Z) 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. Every catalog row has min_gpu_count 1. The multi-GPU commands below pass --nproc_per_node=8. This page does not claim a listing with eight GPUs, and it does not mark a row as enough. Which listing you can start is on Deploy.

The catalog template list had no VACE template. The catalog template named ComfyUI has id flux-1-dev, recommended_gpu RTX 4090 48G, and min_vram_gb 24. Those are template fields. The ComfyUI example in the next sections is not that 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 the Wan2.1 repository

On Deploy, choose Raw GPU. The README install, copied. requirements.txt at the same commit starts with torch>=2.4.0 and torchvision>=0.19.0.

git clone https://github.com/Wan-Video/Wan2.1.git
cd Wan2.1
# Ensure torch >= 2.4.0
pip install -r requirements.txt

The download table lists VACE-1.3B as Wan-AI/Wan2.1-VACE-1.3B and says it supports 480P, and VACE-14B as Wan-AI/Wan2.1-VACE-14B and says it supports both 480P and 720P. The README’s huggingface-cli example uses a different id. Copied as printed:

pip install "huggingface_hub[cli]"
huggingface-cli download Wan-AI/Wan2.1-T2V-14B --local-dir ./Wan2.1-T2V-14B

The Hugging Face Hub v1.0 migration page says the deprecated huggingface-cli has been removed, that hf (introduced in v0.34) replaces it, and that the [cli] extra has been removed because the CLI ships with the core huggingface_hub package. The CLI guide’s install line is pip install -U "huggingface_hub", and its local-folder option is --local-dir. The VACE inference commands below pass --ckpt_dir ./Wan2.1-VACE-1.3B and --ckpt_dir ./Wan2.1-VACE-14B. This page adds download lines that use the current CLI, the VACE ids from the table, and those directory names. They were not the README’s example, and they were not run.

# Added on this page. The README prints huggingface-cli and huggingface_hub[cli].
# The v1.0 migration page says that command and that extra have been removed.
# The CLI guide prints pip install -U "huggingface_hub" and hf download --local-dir.
pip install -U "huggingface_hub"
hf download Wan-AI/Wan2.1-VACE-1.3B --local-dir ./Wan2.1-VACE-1.3B
hf download Wan-AI/Wan2.1-VACE-14B --local-dir ./Wan2.1-VACE-14B

The model API file list for Wan-AI/Wan2.1-VACE-1.3B on 2026-11-13 included diffusion_pytorch_model.safetensors, Wan2.1_VAE.pth, and models_t5_umt5-xxl-enc-bf16.pth, plus a tokenizer directory whose path this page does not print. The 14B list used seven diffusion_pytorch_model-0000N-of-00007.safetensors shards and diffusion_pytorch_model.safetensors.index.json, with the same VAE and encoder names. This page did not download either repository.

The Wan2.1 VACE commands

The README says VACE supports 1.3B and 14B, and 480P and 720P. The table says Wan2.1-VACE-14B is marked for both 480P (~81x480x832) and 720P (~81x720x1280), and Wan2.1-VACE-1.3B is marked for 480P and not for 720P. It says users can input a text prompt and optional video, mask, and image. For R2V it says you may skip preprocessing. For V2V and MV2V it says preprocessing is required. The single-GPU command is the reference-image example. Copied:

python generate.py --task vace-1.3B --size 832*480 --ckpt_dir ./Wan2.1-VACE-1.3B --src_ref_images examples/girl.png,examples/snake.png --prompt "在一个欢乐而充满节日气氛的场景中,穿着鲜艳红色春服的小女孩正与她的可爱卡通蛇嬉戏。她的春服上绣着金色吉祥图案,散发着喜庆的气息,脸上洋溢着灿烂的笑容。蛇身呈现出亮眼的绿色,形状圆润,宽大的眼睛让它显得既友善又幽默。小女孩欢快地用手轻轻抚摸着蛇的头部,共同享受着这温馨的时刻。周围五彩斑斓的灯笼和彩带装饰着环境,阳光透过洒在她们身上,营造出一个充满友爱与幸福的新年氛围。"

The multi-GPU command, copied:

torchrun --nproc_per_node=8 generate.py --task vace-14B --size 1280*720 --ckpt_dir ./Wan2.1-VACE-14B --dit_fsdp --t5_fsdp --ulysses_size 8 --src_ref_images examples/girl.png,examples/snake.png --prompt "在一个欢乐而充满节日气氛的场景中,穿着鲜艳红色春服的小女孩正与她的可爱卡通蛇嬉戏。她的春服上绣着金色吉祥图案,散发着喜庆的气息,脸上洋溢着灿烂的笑容。蛇身呈现出亮眼的绿色,形状圆润,宽大的眼睛让它显得既友善又幽默。小女孩欢快地用手轻轻抚摸着蛇的头部,共同享受着这温馨的时刻。周围五彩斑斓的灯笼和彩带装饰着环境,阳光透过洒在她们身上,营造出一个充满友爱与幸福的新年氛围。"

generate.py also accepts --src_video, --src_mask, --offload_model, and --t5_cpu. The two commands above do not pass those flags. When --save_file is omitted, the script builds {task}_{size}_{ulysses_size}_{ring_size}_{prompt}_{time}.mp4 for a task whose name does not contain t2i. The prompt piece is the prompt with spaces and slashes replaced, cut at 50 characters. The time piece is %Y%m%d_%H%M%S. This page did not run the command, so it does not print a finished filename.

The prompt-extension section’s first method is a hosted API. This page does not print that method’s name or its model ids. The second method is --prompt_extend_method local_qwen. The README names Qwen/Qwen2.5-14B-Instruct, Qwen/Qwen2.5-7B-Instruct, Qwen/Qwen2.5-3B-Instruct, Qwen/Qwen2.5-VL-7B-Instruct, and Qwen/Qwen2.5-VL-3B-Instruct for that method. generate.py defaults --prompt_extend_method to local_qwen and does not set --use_prompt_extend unless you pass it. The VACE commands above do not pass it.

Install the VACE repository

The ali-vilab/VACE README says the codebase was tested with Python 3.10.13, CUDA version 12.4, and PyTorch >= 2.5.1. The inference setup, copied. The last line is the LTX-Video install. The README says it may conflict with Wan. This page copies it because it is in the block, and the commands further down are the Wan2.1 ones.

git clone https://github.com/ali-vilab/VACE.git && cd VACE
pip install torch==2.5.1 torchvision==0.20.1 --index-url https://download.pytorch.org/whl/cu124  # If PyTorch is not installed.
pip install -r requirements.txt
pip install wan@git+https://github.com/Wan-Video/Wan2.1  # If you want to use Wan2.1-based VACE.
pip install ltx-video@git+https://github.com/Lightricks/LTX-Video@ltx-video-0.9.1 sentencepiece --no-deps # If you want to use LTX-Video-0.9-based VACE. It may conflict with Wan.

The README says to download your preferred base model to <repo-root>/models/. It does not print a huggingface-cli line. The suggested tree includes models/VACE-Wan2.1-1.3B-Preview. vace/vace_wan_inference.py defaults --ckpt_dir to models/Wan2.1-VACE-1.3B/ and --model_name to vace-1.3B.

The end-to-end examples, copied. The README says the output video together with the intermediate video, mask, and images is saved into ./results/ by default.

# run V2V depth
python vace/vace_pipeline.py --base wan --task depth --video assets/videos/test.mp4 --prompt 'xxx'

# run MV2V inpainting by providing bbox
python vace/vace_pipeline.py --base wan --task inpainting --mode bbox --bbox 50,50,550,700 --video assets/videos/test.mp4 --prompt 'xxx'

The preprocess examples, copied. The README says those outputs go to ./processed/ by default.

# process video depth
python vace/vace_preproccess.py --task depth --video assets/videos/test.mp4

# process video inpainting by providing bbox
python vace/vace_preproccess.py --task inpainting --mode bbox --bbox 50,50,550,700 --video assets/videos/test.mp4

The Wan2.1 inference commands in that README, copied. The 14B line passes --size 720p and --model_name 'vace-14B'.

# For Wan2.1 single GPU inference (1.3B-480P)
python vace/vace_wan_inference.py --ckpt_dir <path-to-model> --src_video <path-to-src-video> --src_mask <path-to-src-mask> --src_ref_images <paths-to-src-ref-images> --prompt "xxx"

# For Wan2.1 Multi GPU Acceleration inference (1.3B-480P)
pip install "xfuser>=0.4.1"
torchrun --nproc_per_node=8 vace/vace_wan_inference.py --dit_fsdp --t5_fsdp --ulysses_size 1 --ring_size 8 --ckpt_dir <path-to-model> --src_video <path-to-src-video> --src_mask <path-to-src-mask> --src_ref_images <paths-to-src-ref-images> --prompt "xxx"

# For Wan2.1 Multi GPU Acceleration inference (14B-720P)
torchrun --nproc_per_node=8 vace/vace_wan_inference.py --dit_fsdp --t5_fsdp --ulysses_size 8 --ring_size 1 --size 720p --model_name 'vace-14B' --ckpt_dir <path-to-model> --src_video <path-to-src-video> --src_mask <path-to-src-mask> --src_ref_images <paths-to-src-ref-images> --prompt "xxx"

When --save_dir and --save_file are omitted, vace_wan_inference.py writes results/{model_name}/{timestamp}/out_video.mp4. The timestamp format in that script is %Y-%m-%d-%H-%M-%S. The README’s ./results/ sentence is the shorter form of that path. This page did not run the script.

The README also prints an LTX inference command. This page does not copy it. The LTX row’s license is the RAIL-M text above.

Gradio

The Wan2.1 VACE Gradio commands, copied. They do not pass a port.

python gradio/vace.py --ckpt_dir ./Wan2.1-VACE-1.3B
python gradio/vace.py --mp --ulysses_size 8 --ckpt_dir ./Wan2.1-VACE-14B/

gradio/vace.py defaults --server_port to 7860 and --server_name to 0.0.0.0. It defaults --save_dir to cache and writes cur_gallery_{name}.mp4 under that directory. The ali-vilab/VACE Gradio commands, copied:

python vace/gradios/vace_preprocess_demo.py
python vace/gradios/vace_wan_demo.py

vace_preprocess_demo.py and vace_wan_demo.py default --server_port to 7860 and --server_name to 0.0.0.0. Both default --save_dir to cache. vace_wan_demo.py also writes cur_gallery_{name}.mp4 under that directory. This page did not start either app. From your own computer, the script default port is 7860. How to use SSH port forwarding on a cloud GPU is the tunnel.

ComfyUI

ComfyUI examples wan/README.md has a section titled “VACE reference Image to Video”. It says the workflow requires wan2.1_vace_14B_fp16.safetensors in ComfyUI/models/diffusion_models/. The link is under Comfy-Org/Wan_2.1_ComfyUI_repackaged. The same page’s “You will first need” section says umt5_xxl_fp8_e4m3fn_scaled.safetensors goes in ComfyUI/models/text_encoders/ and wan_2.1_vae.safetensors goes in ComfyUI/models/vae/. It says the examples use the 16 bit files and that you can use the fp8 ones instead if you do not have enough memory. That sentence has no GB number. The file prints no VRAM figure for the VACE workflow. Examples wan/README.md commit was 3eb0ae663ac044729494be42cb0f17a8c4151ec5. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3. The VACE README acknowledgement says there is native code support for ComfyUI and links the ComfyUI repository. It also links a community workflow repository. This page does not copy that community repository’s install. The ComfyUI template on Deploy is a separate listing from this file copy.

When it fails

CUDA out of memory. The documented flags in the text-to-video OOM sentence are --offload_model True and --t5_cpu. The VACE commands as printed do not pass --t5_cpu. generate.py still applies the offload default described above when the flag is omitted. 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. The Wan2.1 requirements line is torch>=2.4.0. The VACE README pins torch==2.5.1 from the cu124 index. Neither line names compute capability 12.0. 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. This page did not install a torch wheel and did not re-test this package on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.

Save the videos, then destroy

Copy the mp4 that generate.py writes when --save_file is omitted, results/ from vace_wan_inference.py or vace_pipeline.py, processed/ from the preprocess script, and cache/ from the Gradio scripts, 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.

Prices are not copied here.

Frequently asked questions

How much VRAM do the VACE sections print?

The Wan2.1 VACE section and the ali-vilab/VACE README print no GPU GB figure. The Wan2.1 introduction says the T2V-1.3B model requires only 8.19 GB VRAM. That sentence names T2V-1.3B, not VACE. The efficiency table is an image, and this page does not transcribe it. This page does not mark a catalog row as enough. Which listing you can start is on https://cloudgpu.app/deploy.

Which commands are the documented VACE inference lines?

In Wan-Video/Wan2.1, the single-GPU line is python generate.py --task vace-1.3B --size 832480 --ckpt_dir ./Wan2.1-VACE-1.3B with --src_ref_images. The multi-GPU line is torchrun --nproc_per_node=8 generate.py --task vace-14B --size 1280720 --ckpt_dir ./Wan2.1-VACE-14B with --dit_fsdp --t5_fsdp --ulysses_size 8. In ali-vilab/VACE, reference and editing examples go through vace_pipeline.py, and vace_wan_inference.py is the Wan2.1 checkpoint command. This page did not run them.

Where are the videos saved, and which port does Gradio use?

generate.py, when --save_file is omitted, writes an mp4 whose name starts with the task. vace_pipeline.py saves into ./results/ by default. vace_wan_inference.py writes results/{model_name}/{timestamp}/out_video.mp4 when --save_dir and --save_file are omitted. The preprocess script saves to ./processed/. gradio/vace.py, vace_wan_demo.py, and vace_preprocess_demo.py default --server_port to 7860 and --server_name to 0.0.0.0, and default --save_dir to cache. This page did not run the scripts.

What usage terms do the repositories print?

Wan-Video/Wan2.1 LICENSE.txt and ali-vilab/VACE LICENSE.txt are the Apache License, Version 2.0, January 2004, with the unfilled copyright template. The VACE models table labels the three Wan rows Apache-2.0 and the LTX-Video 0.9 row RAIL-M. The RAIL-M file says the permitted purpose is academic or research purposes only and excludes commercialization. The Apache grant uses the words no-charge, royalty-free. That pair is license text, not a CloudGPU price and not a storage allowance. The Apache file prints no dollar amount.

Sources (read 2026-11-13, Asia/Shanghai)

  • Wan-Video/Wan2.1 README (install, VACE table, huggingface-cli example, generate.py commands, Gradio commands, T2V-1.3B 8.19 GB sentence, OOM flags, Apache 2.0 agreement): https://github.com/Wan-Video/Wan2.1/blob/main/README.md commit 9737cba9c1c3c4d04b33fcad41c111989865d315. Repository HEAD is that commit, committed 2026-03-05T09:38:07Z. The hf download lines are not in that README
  • Hugging Face Hub v1.0 migration (huggingface-cli removed, hf introduced in v0.34, [cli] extra removed): https://huggingface.co/docs/huggingface_hub/en/concepts/migration read 2026-11-13
  • Hugging Face Hub CLI guide (pip install -U "huggingface_hub", hf download, --local-dir): https://huggingface.co/docs/huggingface_hub/en/guides/cli read 2026-11-13
  • generate.py (offload default, --save_file filename, --t5_cpu): commit 76e9427657c74f7d063f6c50fce9529900c59e28
  • gradio/vace.py (port 7860, server_name 0.0.0.0, cache, cur_gallery_{name}.mp4): commit 76e9427657c74f7d063f6c50fce9529900c59e28
  • requirements.txt (torch>=2.4.0): repository HEAD 9737cba9c1c3c4d04b33fcad41c111989865d315
  • LICENSE.txt (Apache 2.0, January 2004, unfilled copyright template): commit 65386b2e03c490796eede31b0325a6a595cc684e. GitHub license field Apache-2.0
  • ali-vilab/VACE README (install, vace_pipeline.py, vace_wan_inference.py, Gradio commands, ./results/, model-license table): https://github.com/ali-vilab/VACE/blob/main/README.md commit 48eb44f1c4be87cc65a98bff985a26976841e9f3. Repository HEAD is that commit, committed 2025-10-17T05:46:57Z
  • vace/vace_wan_inference.py (default models/Wan2.1-VACE-1.3B/, out_video.mp4): commit 7d316a4cb19107dac3a85cd4beab815660f18af6
  • vace/vace_pipeline.py: commit 7d316a4cb19107dac3a85cd4beab815660f18af6
  • vace/gradios/vace_wan_demo.py (port 7860, cache): commit 7d316a4cb19107dac3a85cd4beab815660f18af6
  • vace/gradios/vace_preprocess_demo.py (port 7860, server_name 0.0.0.0, cache): read from repository HEAD 48eb44f1c4be87cc65a98bff985a26976841e9f3
  • LICENSE.txt (Apache 2.0, January 2004, unfilled copyright template). GitHub license field Apache-2.0
  • Model cards Wan-AI/Wan2.1-VACE-1.3B and Wan-AI/Wan2.1-VACE-14B (cardData.license apache-2.0, gated false, file lists): read 2026-11-13
  • RAIL-M text linked from the VACE-LTX-Video-0.9 row (Permitted Purpose academic or research only): https://huggingface.co/Lightricks/LTX-Video/blob/main/ltx-video-2b-v0.9.license.txt read 2026-11-13
  • ComfyUI examples wan/README.md (wan2.1_vace_14B_fp16.safetensors, text encoder, VAE, no GB figure): commit 3eb0ae663ac044729494be42cb0f17a8c4151ec5. Examples HEAD f9431bb000ce792094ff345446e22cac1ea6cef3
  • Public GPU memory: https://cloudgpu.app/gpu-prices.json (updated_at 2026-11-13T15:11:42.412Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at 2026-11-13T15:11:42.831Z). GET /v1/public/compute-capabilities returned feature flags and no GPU list. The catalog had no VACE 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).