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)
- IndexTTS README (clone,
uv sync --all-extras, Hugging Face downloads,uv run webui.py, emotion andduration_factor, license link): https://github.com/index-tts/index-tts - webui.py (default port 7860, host
0.0.0.0, version2.5, output path underoutputs/): https://github.com/index-tts/index-tts/blob/main/webui.py - pyproject.toml (
requires-python >=3.10,<3.12,torch==2.8.*, cu128 index): https://github.com/index-tts/index-tts/blob/main/pyproject.toml - LICENSE (bilibili Model Use License Agreement): https://github.com/index-tts/index-tts/blob/main/LICENSE
- IndexTeam/IndexTTS-2.5 model card (roughly 6 GB, API
gated: false,bilibili-model-license): https://huggingface.co/IndexTeam/IndexTTS-2.5 - IndexTeam/IndexTTS-2 model card (no GB figure, API
gated: false): https://huggingface.co/IndexTeam/IndexTTS-2 - Public GPU memory: https://cloudgpu.app/gpu-prices.json and https://cloudgpu.app/v1/public/gpu-catalog.
GET /v1/public/compute-capabilitiesreturned feature flags and no GPU list.
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).