How to run IndexTTS2 on a cloud GPU

Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install IndexTTS from the official repository, download the checkpoint the README names, run webui.py, and copy the wav files off the instance before you destroy it. Destroying the instance deletes its disk.

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.

Use a reference clip you have the right to clone. The README does not add a permission line. The repository LICENSE is the bilibili Model Use License Agreement. Section 2.2 of that file requires a separate license above the thresholds written there. Read the file before commercial use.

The README’s latest release is IndexTTS-2.5. uv run webui.py is the IndexTTS-2.5 command. IndexTTS-2 is a separate command in the same file, uv run webui.py --version 2 --model_dir ./checkpoints_2. The IndexTTS-2 news line says precise synthesis duration control is not yet enabled in that release. duration_factor is documented on IndexTTS-2.5.

Other TTS installs on the same kind of instance: how to run CosyVoice, how to run Fish Speech, how to run GPT-SoVITS, how to run F5-TTS, how to run Kokoro TTS, and how to run Chatterbox TTS.

What the README and the model cards say about memory

The IndexTTS-2.5 model card says: “Requires Python 3.10–3.11, an NVIDIA GPU, and roughly 6 GB of VRAM for inference” (read 2026-11-12). The IndexTTS-2 model card publishes no GB figure. The 2.5 card lists parameters as “~0.8B (GPT backbone)”. This page does not treat that line as a VRAM figure. The 2.5 model API reported gated: false, pipeline_tag: text-to-speech, and license_name: bilibili-model-license. The 2 model API reported gated: false and pipeline_tag: text-to-speech, and cardData.license was null. The README says half-precision inference uses less VRAM, without a second GB figure.

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-12T12:59:08.958Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-12T12:59:08.060Z) listed the same names and the same vram_gb values, plus Ascend 910B, which is not in gpu-prices.json and is not listed here. The smallest vram_gb in the table is 8. That is above the 2.5 card’s “roughly 6 GB” sentence. This page does not re-measure that sentence and does not say which listings are available. Which listing you can start is on Deploy.

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

Install

On Deploy, choose Raw GPU. The 2.5 model card says Python 3.10–3.11. pyproject.toml (read 2026-11-12) says requires-python = ">=3.10,<3.12". .python-version is 3.11.13. The README says uv installs the Python version the project asks for.

Copied from the README. The clone line is in the README.

git clone https://github.com/index-tts/index-tts.git && cd index-tts
pip install -U uv
uv sync --all-extras

The README also prints two uv sync --all-extras --default-index mirror commands, and says --extra webui adds WebUI support. --all-extras is the command in the getting-started block. The same note says a CUDA error during installation means the CUDA Toolkit should be version 12.8 or newer. pyproject.toml pins torch==2.8.* and torchaudio==2.8.*, and the Linux torch index URL is https://download.pytorch.org/whl/cu128. How to install PyTorch with uv is the uv reference. How to install a specific PyTorch CUDA version is the wheel index. This page did not run uv sync.

Download the weights and run the WebUI

Copied from the README’s Hugging Face block:

uv tool install "huggingface-hub"

# IndexTTS-2.5
hf download IndexTeam/IndexTTS-2.5 --local-dir=checkpoints

# IndexTTS-2
hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints_2

The same section also prints ModelScope download commands. How to download a Hugging Face model is the manual download reference. cloudgpu-net is not in the IndexTTS README. The download speed guide says to leave it off during pip, then turn it on for a weight download.

The 2.5 model card says auxiliary models are not part of that repository and are downloaded into checkpoints/hf_cache/ on first run. This page does not copy the model names from that sentence.

WebUI

Copied from the README:

# IndexTTS-2.5 (default)
uv run webui.py

# IndexTTS-2
uv run webui.py --version 2 --model_dir ./checkpoints_2

The README says to open http://127.0.0.1:7860. webui.py (read 2026-11-12) defaults --port to 7860, --host to 0.0.0.0, --version to 2.5, and --model_dir to ./checkpoints. demo.launch uses server_name=cmd_args.host and server_port=cmd_args.port. The README command does not pass --share.

On your own computer. This line is added by this page:

ssh -N -L 7860:127.0.0.1:7860 -p <ssh-port> <ssh-user>@<ssh-host>

Then open http://localhost:7860. How to use SSH port forwarding is the forwarding reference. This page did not open the demo.

webui.py writes outputs/spk_ plus int(time.time()) plus .wav when it generates. For IndexTTS-2.5 (IS_V25), that call also passes duration_factor.

Emotion and duration in the Python API

The README’s IndexTTS-2.5 voice-clone call, copied. examples/voice_01.wav is filled when the WebUI starts, or by the ensure_examples_available() command printed in the README.

tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, lang="EN", output_path="gen.wav", verbose=True)

The constructor above that call, for IndexTTS-2.5, is IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_bf16=True). The IndexTTS-2 constructor in the same block sets use_fp16=False, use_cuda_kernel=False, and use_deepspeed=False, and points both paths at checkpoints_2.

Emotion control is documented for both with emo_audio_prompt, emo_alpha (range 0.0 - 1.0, default 1.0), emo_vector in the order [happy, angry, sad, afraid, disgusted, melancholic, surprised, calm], and use_emo_text. The README says that for IndexTTS-2.5, use_emo_text=True requires constructing IndexTTS2 with use_qwen_emo=True, otherwise it raises a RuntimeError. IndexTTS-2 does not require that flag.

duration_factor is in the IndexTTS-2.5 examples only. The README says a value above 1.0 slows the speech, a value below 1.0 speeds it up, the default is 1.0, and the valid range is 0.5 - 2.0. The slow example sets duration_factor=1.2 and output_path="gen_slow.wav". The fast example sets duration_factor=0.8 and output_path="gen_fast.wav".

The IndexTTS README does not document a ComfyUI route. This page does not add one. How to choose a rental GPU for ComfyUI and how to run FLUX.1-dev in ComfyUI are separate installs. The README also links a vLLM recipe. This page follows webui.py.

When it fails

CUDA out of memory. The 2.5 card says roughly 6 GB for inference. The 2 card publishes no GB figure. The README says FP16/BF16 inference uses less VRAM. Then use how to fix CUDA out of memory on a cloud GPU.

“CUDA error: no kernel image is available” on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32 GB. That is the catalog value, not an IndexTTS requirement. The Linux torch index in pyproject.toml is cu128, and the README’s install note says CUDA Toolkit 12.8 or newer. The RTX 5090 guide says that card needs a PyTorch build for CUDA 12.8 or newer. This page did not run uv sync and did not re-test it on an RTX 5090.

Save the wav files, then destroy

Copy gen.wav, gen_slow.wav, gen_fast.wav, and the files under outputs/ 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 billing rule is on the pricing page. Prices are not copied here.

Frequently asked questions

How much VRAM does IndexTTS publish?

The IndexTeam/IndexTTS-2.5 model card says inference needs roughly 6 GB of VRAM (read 2026-11-12). The IndexTeam/IndexTTS-2 model card publishes no GB figure. The 2.5 card lists parameters as about 0.8B for the GPT backbone. This page does not treat that line as VRAM. The smallest vram_gb in gpu-prices.json on 2026-11-12 is 8. This page does not re-measure the 6 GB sentence and does not say which listings are available. Which listing you can start is on https://cloudgpu.app/deploy.

How do I open the IndexTTS WebUI?

The README clones https://github.com/index-tts/index-tts, then runs pip install -U uv and uv sync --all-extras. hf download IndexTeam/IndexTTS-2.5 --local-dir=checkpoints is the 2.5 weight command. uv run webui.py is the IndexTTS-2.5 WebUI. webui.py defaults --port to 7860, --host to 0.0.0.0, and --version to 2.5. IndexTTS-2 is uv run webui.py --version 2 --model_dir ./checkpoints_2 after hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints_2. These commands were not run for this page. Use a reference clip you have the right to clone.

Does IndexTTS-2 enable duration control?

The README’s IndexTTS-2 news line says precise synthesis duration control is not yet enabled in that release. Emotion control is documented for IndexTTS-2 and IndexTTS-2.5 with emo_audio_prompt, emo_vector, and use_emo_text. duration_factor is documented on IndexTTS-2.5, valid range 0.5 to 2.0, default 1.0. For IndexTTS-2.5, use_emo_text=True requires constructing IndexTTS2 with use_qwen_emo=True, otherwise it raises a RuntimeError. IndexTTS-2 does not require that flag. The README does not document ComfyUI.

Will the IndexTTS wav files stay after the instance is destroyed?

No. The Python examples write gen.wav, and the duration examples write gen_slow.wav and gen_fast.wav. webui.py writes outputs/spk_ plus a timestamp plus .wav. Copy them before you destroy the instance. The terms say data on local instance storage is permanently deleted when the instance is destroyed. The repository LICENSE is the bilibili Model Use License Agreement. The billing rule is on https://cloudgpu.app/pricing.

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


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-12 (Asia/Shanghai).