How to run Wan 2.2 S2V (speech-to-video) 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.2 README, download the S2V-14B weights that README’s model table links, and run the documented speech-to-video command with an audio file. Copy the mp4 off the instance before you destroy it. Destroying the instance deletes its disk.

Text-to-video and image-to-video from the ComfyUI Wan 2.2 tutorial, a different task, is How to run Wan 2.2 video generation on a cloud GPU. This repository’s Wan-Animate section is also a different task. This site does not have a Wan2.2-Animate guide. Sparse-frame dubbing whose README prints no GPU GB figure is How to run InfiniteTalk on a cloud GPU. Audio-driven portrait animation whose requirements section prints 24GB, 80GB, and 96GB is How to run HunyuanVideo-Avatar 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. Audio-driven lip sync from a different repository is How to run MuseTalk on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU.

The README’s license agreement says the models in this repository are licensed under the Apache 2.0 License, and that the authors claim no rights over generated contents. LICENSE.txt is the Apache License, Version 2.0. The GitHub license field on 2026-11-13 was Apache-2.0. The model API for Wan-AI/Wan2.2-S2V-14B that day reported gated false and cardData.license apache-2.0. lastModified was 2025-09-17T03:02:38.000Z. sha was dab4e9c55bbe4c8c4d03db1c2c98c7f0ac9c454b. That license text is not a CloudGPU price. Read LICENSE.txt before you redistribute the program or the weights. The pose example is a person singing. Only use a person you have the right to use.

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 speech-to-video section of the GitHub README says this command can run on a GPU with at least 80GB VRAM. That note sits under the single-GPU block. The single-GPU commands pass --offload_model True and --convert_model_dtype. They do not pass --t5_cpu, and the S2V section does not print a second GB figure for those flags. The text-to-video section, a different task, says that if you encounter OOM you can use --offload_model True, --convert_model_dtype, and --t5_cpu to reduce GPU memory usage. This page does not treat that sentence as an S2V figure. The model card repeats the 80GB note. This page did not remeasure it.

The same README’s todo list marks “ComfyUI integration” done for Wan2.2-S2V. The 28 July 2025 news line links the ComfyUI Wan 2.2 tutorial at https://docs.comfy.org/tutorials/video/wan/wan2_2. That tutorial’s markdown, fetched 2026-11-13, contains no s2v and no speech. This page does not add a ComfyUI folder layout the tutorial does not print. A community line links https://github.com/kijai/ComfyUI-WanVideoWrapper. That line is not an official ComfyUI document. This page does not follow 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-13T22:12:44.591Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T22:12:44.965Z) 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 example sets --nproc_per_node=8. That is separate from the catalog column. This page does not claim a listing with 8 GPUs. Catalog rows whose vram_gb is 80 or greater are the values that match the number in “at least 80GB VRAM”. This page does not mark a row as enough. Which listing you can start is on Deploy.

The catalog template list had no Wan2.2-S2V 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 install, copied. The comment above the torch line is the README’s.

git clone https://github.com/Wan-Video/Wan2.2.git
cd Wan2.2
# Ensure torch >= 2.4.0
# If the installation of `flash_attn` fails, try installing the other packages first and install `flash_attn` last
pip install -r requirements.txt
# If you want to use CosyVoice to synthesize speech for Speech-to-Video Generation, please install requirements_s2v.txt additionally
pip install -r requirements_s2v.txt

requirements.txt pins torch>=2.4.0, torchvision>=0.19.0, and flash_attn. It does not pass a CUDA wheel index. requirements_s2v.txt lists 18 packages and does not pin torch. pyproject.toml repeats torch>=2.4.0. This page did not run the install. A separate CosyVoice repository, which this requirements file does not clone, is How to run CosyVoice on a cloud GPU.

Download the weights

The model table’s S2V-14B row says “Speech-to-Video model, supports 480P & 720P” and links Wan-AI/Wan2.2-S2V-14B. The printed download block names a different repository. Copied:

pip install "huggingface_hub[cli]"
huggingface-cli download Wan-AI/Wan2.2-T2V-A14B --local-dir ./Wan2.2-T2V-A14B

The S2V commands pass --ckpt_dir ./Wan2.2-S2V-14B/. The block below is added on this page. It keeps the README’s arguments, changes the repository id and the local directory to the S2V row and that --ckpt_dir, and replaces huggingface-cli with hf. The Hub v1.0 migration doc says the deprecated huggingface-cli command has been removed and that hf (introduced in v0.34) replaces it. This page did not download the repository. How to download a Hugging Face model prints pip install -U "huggingface_hub" and hf download.

# Added on this page. The README's printed download names Wan-AI/Wan2.2-T2V-A14B
# and calls huggingface-cli. The S2V row links Wan-AI/Wan2.2-S2V-14B.
# The S2V command passes --ckpt_dir ./Wan2.2-S2V-14B/.
hf download Wan-AI/Wan2.2-S2V-14B --local-dir ./Wan2.2-S2V-14B

Speech-to-video commands

The section says the repository supports Wan2.2-S2V-14B at 480P and 720P. The single-GPU block, copied:

python generate.py  --task s2v-14B --size 1024*704 --ckpt_dir ./Wan2.2-S2V-14B/ --offload_model True --convert_model_dtype --prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard."  --image "examples/i2v_input.JPG" --audio "examples/talk.wav"
# Without setting --num_clip, the generated video length will automatically adjust based on the input audio length

# You can use CosyVoice to generate audio with --enable_tts
python generate.py  --task s2v-14B --size 1024*704 --ckpt_dir ./Wan2.2-S2V-14B/ --offload_model True --convert_model_dtype --prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard."  --image "examples/i2v_input.JPG" --enable_tts --tts_prompt_audio "examples/zero_shot_prompt.wav" --tts_prompt_text "希望你以后能够做的比我还好呦。" --tts_text "收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。"

The note under that block says this command can run on a GPU with at least 80GB VRAM.

The multi-GPU block, copied. The heading is “Multi-GPU inference using FSDP + DeepSpeed Ulysses”.

torchrun --nproc_per_node=8 generate.py --task s2v-14B --size 1024*704 --ckpt_dir ./Wan2.2-S2V-14B/ --dit_fsdp --t5_fsdp --ulysses_size 8 --prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard." --image "examples/i2v_input.JPG" --audio "examples/talk.wav"

The pose block, copied:

torchrun --nproc_per_node=8 generate.py --task s2v-14B --size 1024*704 --ckpt_dir ./Wan2.2-S2V-14B/ --dit_fsdp --t5_fsdp --ulysses_size 8 --prompt "a person is singing" --image "examples/pose.png" --audio "examples/sing.MP3" --pose_video "./examples/pose.mp4"

The README then says that for the speech-to-video task, size represents the area of the generated video, with the aspect ratio following the original input image. It says the model can generate videos from audio input combined with a reference image and an optional text prompt. It says --pose_video enables pose-driven generation. It says --num_clip controls the number of video clips generated, useful for quick preview with shorter generation time. In generate.py, --num_clip defaults to None, and the help text says the whole video will not exceed the length of the audio. --enable_tts defaults to false. The help text says “Use CosyVoice to synthesis audio”. --tts_prompt_audio help says “Must be greater than 16khz, and between 5s to 15s.” Those words are the argparse help. They describe the prompt audio file. --infer_frames defaults to 80. Its help says “Number of frames per clip, 48 or 80 or others (must be multiple of 4) for 14B s2v”. The printed S2V commands do not pass --infer_frames or --num_clip. --ulysses_size defaults to 1. The single-GPU commands do not pass it.

The repository root on commit 1ea34ff48f87168174e12956e200b1d908b1c5ff lists generate.py and does not list a Gradio app. The README points at hosted Gradio spaces. It does not print a local Gradio launch. This page does not add one, and it does not assign a port.

When it fails

CUDA out of memory. The S2V note says at least 80GB VRAM for the single-GPU command, which already passes --offload_model True and --convert_model_dtype. The S2V section does not print a lower number. 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. requirements.txt says torch>=2.4.0 and does not pass a CUDA wheel index. That line does not name 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

The printed S2V commands do not pass --save_file. In generate.py, when rank is 0 and save_file is None, the script sets formatted_time from datetime.now().strftime("%Y%m%d_%H%M%S"), replaces spaces and slashes in the prompt with underscores, keeps the first 50 characters, and sets save_file to {task}_{size}_{ulysses_size}_{that prompt}_{time}.mp4. On a platform other than win32 the size keeps the * character. The string has no directory prefix. The script logs that path and calls save_video. If the task contains s2v and --enable_tts is false, it merges args.audio into that file. If --enable_tts is true, it merges tts.wav. Copy the mp4 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 does the S2V section print?

The README’s single-GPU Speech-to-Video note says this command can run on a GPU with at least 80GB VRAM. The model card repeats that note. The S2V commands that include --offload_model True and --convert_model_dtype do not print a second GB figure. The text-to-video section’s sentence about those flags reducing GPU memory usage is under a different task. This page does not mark a catalog row as enough. Which listing you can start is on https://cloudgpu.app/deploy.

Which commands does the README print for audio?

The single-GPU block runs python generate.py --task s2v-14B --size 1024*704 --ckpt_dir ./Wan2.2-S2V-14B/ --offload_model True --convert_model_dtype with --image examples/i2v_input.JPG and --audio examples/talk.wav. A second command adds --enable_tts and the three tts arguments. The multi-GPU block is torchrun --nproc_per_node=8 with --dit_fsdp --t5_fsdp --ulysses_size 8 and the same audio file. A pose block adds --pose_video ./examples/pose.mp4. This page did not run the commands.

Where are the videos saved?

The printed S2V commands do not pass --save_file. generate.py, when save_file is None and rank is 0, sets save_file to the task, the size, the ulysses size, the first 50 characters of the prompt with spaces replaced by underscores, a timestamp, and .mp4. It then calls save_video. For a task that contains s2v, it merges audio from args.audio when enable_tts is false, and from tts.wav when enable_tts is true. The constructed name has no directory prefix. This page did not run the script.

What license does the README print?

The license agreement says the models in this repository are licensed under the Apache 2.0 License. LICENSE.txt is the Apache License, Version 2.0. The GitHub license field on 2026-11-13 was Apache-2.0. The model API reported cardData.license apache-2.0 and gated false. That license text is not a CloudGPU price.

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

  • Wan-Video/Wan2.2 README.md (clone, requirements, S2V-14B table row, T2V download block, single-GPU and multi-GPU S2V commands, pose command, 80GB note, --num_clip sentence, Apache 2.0 agreement, ComfyUI todo checkbox, 28 July 2025 ComfyUI link): repository HEAD 1ea34ff48f87168174e12956e200b1d908b1c5ff, committed 2026-09-21T06:16:22Z. https://github.com/Wan-Video/Wan2.2/blob/main/README.md
  • generate.py (--save_file default None, filename f-string, s2v audio merge, --enable_tts default false, --tts_prompt_audio help, --infer_frames default 80, --ulysses_size default 1): read from that HEAD
  • requirements.txt (torch>=2.4.0), requirements_s2v.txt (18 packages, no torch pin), pyproject.toml, LICENSE.txt: read from that HEAD. GitHub license field Apache-2.0
  • Hugging Face model card Wan-AI/Wan2.2-S2V-14B (the 80GB note and the Apache 2.0 agreement): read 2026-11-13. Model API the same day: gated false, cardData.license apache-2.0, pipeline_tag image-to-video, lastModified 2025-09-17T03:02:38.000Z, sha dab4e9c55bbe4c8c4d03db1c2c98c7f0ac9c454b
  • ComfyUI Wan 2.2 tutorial markdown https://docs.comfy.org/tutorials/video/wan/wan2_2.md: fetched 2026-11-13, no s2v and no speech
  • Hub v1.0 migration doc (huggingface-cli removed, hf replaces it): https://huggingface.co/docs/huggingface_hub/en/concepts/migration, read 2026-11-13
  • Public GPU memory: https://cloudgpu.app/gpu-prices.json (updated_at 2026-11-13T22:12:44.591Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at 2026-11-13T22:12:44.965Z). GET /v1/public/compute-capabilities returned feature flags and no GPU list. The catalog had no Wan2.2-S2V 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).