docs/README_es.md
Un sistema de texto a voz zero-shot, controlable y eficiente, de nivel industrial
简体中文 | English | 日本語 | Español | العربية
</div>IndexTTS es un sistema de texto a voz zero-shot que clona una voz a partir de un único clip de audio de referencia. La última versión, IndexTTS-2.5, admite chino, inglés, japonés, español y árabe, con control de emociones de grano fino, control de la velocidad de habla, control de la pronunciación (Pinyin / fonemas CMU / Kana japonés) y una inferencia más rápida que IndexTTS-2.
| Modelo | Demos | Artículo | ModelScope | HuggingFace |
|---|---|---|---|---|
| IndexTTS-2.5 | ||||
| IndexTTS-2 | ||||
| IndexTTS-1.5 | ||||
| IndexTTS |
2026/08/10 🔥 Lanzamos IndexTTS-2.5
duration_factor (0.5x–2.0x de duración).2025/09/08 🔥 Lanzamos IndexTTS-2
2025/05/14 🔥 Lanzamos IndexTTS-1.5, que mejora significativamente la estabilidad del modelo y su rendimiento en inglés.2025/03/25 🔥 Lanzamos IndexTTS-1.0 con los pesos del modelo y el código de inferencia.2025/02/12 🎉 Enviamos nuestro artículo a arXiv y publicamos nuestras demos y conjuntos de prueba.IndexTTS-2.5: El futuro de la voz, generándose ahora
IndexTTS-2: El futuro de la voz, generándose ahora
</div>Asegúrate de tener git instalado y luego descarga este repositorio:
git clone https://github.com/index-tts/index-tts.git && cd index-tts
Los archivos de audio de ejemplo se descargan bajo demanda desde HuggingFace/ModelScope en la primera ejecución, por lo que Git LFS ya no es necesario.
Usamos uv para gestionar el entorno de dependencias del proyecto. Es obligatorio para una instalación fiable:
pip install -U uv # or see the link above for other install methods
uv sync --all-extras
Esto crea automáticamente un directorio de proyecto .venv e instala las
versiones correctas de Python y de todas las dependencias necesarias.
Si la descarga es lenta, usa un espejo local, por ejemplo uno de estos espejos en China:
uv sync --all-extras --default-index "https://mirrors.aliyun.com/pypi/simple"
uv sync --all-extras --default-index "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
[!TIP] Funciones adicionales disponibles:
--all-extras: Añade automáticamente todas las funciones adicionales enumeradas a continuación. Puedes quitar este indicador si quieres personalizar tu instalación.--extra webui: Añade compatibilidad con la WebUI (recomendado).--extra deepspeed: Añade compatibilidad con DeepSpeed (puede acelerar la inferencia en algunos sistemas).
[!IMPORTANT] Windows: DeepSpeed puede ser difícil de instalar. Puedes omitirlo quitando el indicador
--all-extrasy añadiendo manualmente los demás indicadores de funciones.Linux/Windows: Si ves un error de CUDA durante la instalación, asegúrate de que el CUDA Toolkit de NVIDIA versión 12.8 (o superior) esté instalado en tu sistema.
Descarga los modelos necesarios mediante uv tool:
Mediante huggingface-cli:
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
O mediante modelscope:
uv tool install "modelscope"
# IndexTTS-2.5
modelscope download --model IndexTeam/IndexTTS-2.5 --local_dir checkpoints
# IndexTTS-2
modelscope download --model IndexTeam/IndexTTS-2 --local_dir checkpoints_2
[!IMPORTANT] Si los comandos anteriores no están disponibles, lee atentamente la salida de
uv tool: te indicará cómo añadir las herramientas al PATH de tu sistema.
[!NOTE] Algunos modelos pequeños se descargan automáticamente en la primera ejecución. Si tu red accede lentamente a HuggingFace, configura un espejo antes de ejecutar el código:
bashexport HF_ENDPOINT="https://hf-mirror.com"
Para diagnosticar tu entorno y ver qué GPU se detectan, usa la utilidad incluida:
uv run tools/gpu_check.py
# IndexTTS-2.5 (default)
uv run webui.py
# IndexTTS-2
uv run webui.py --version 2 --model_dir ./checkpoints_2
Abre tu navegador y visita http://127.0.0.1:7860 para ver la demo.
Puedes ajustar la configuración para habilitar la inferencia en BF16 (IndexTTS-2.5) / FP16 (IndexTTS-2) (menor uso de VRAM), la aceleración con DeepSpeed, núcleos CUDA compilados para mayor velocidad, etc. Todas las opciones disponibles se pueden ver con:
uv run webui.py -h
[!IMPORTANT] La inferencia en FP16/BF16 (media precisión) es más rápida y usa menos VRAM, con una pérdida de calidad muy pequeña.
DeepSpeed puede acelerar la inferencia en algunos sistemas, pero también podría hacerla más lenta: depende de tu hardware, controladores y sistema operativo. Pruébalo de ambas formas.
Todos los comandos
uvactivan automáticamente el entorno virtual correcto del proyecto. No actives manualmente ningún entorno antes de ejecutar comandosuv, ya que eso puede causar conflictos de dependencias.
Para el despliegue en producción, consulta la receta de vLLM para IndexTTS.
Para ejecutar scripts, usa uv run <file.py> de modo que el código se ejecute
dentro del entorno de uv. Es posible que también necesites añadir el
directorio actual a PYTHONPATH:
# IndexTTS2
PYTHONPATH="$PYTHONPATH:." uv run indextts/infer_v2.py
# IndexTTS2.5
PYTHONPATH="$PYTHONPATH:." uv run indextts/infer_v2_5.py \
--cfg_path checkpoints/config.yaml \
--model_dir checkpoints \
--text "Hello world" \
--lang EN
# IndexTTS2
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints_2/config.yaml", model_dir="checkpoints_2", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
# IndexTTS2.5
from indextts.infer_v2_5 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_bf16=True)
text = "Translate for me, what is a surprise!"
# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, output_path="gen.wav", verbose=True)
# IndexTTS2.5 (multilingual, with language selection)
tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, lang="EN", output_path="gen.wav", verbose=True)
text = "酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。"
# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", verbose=True)
# IndexTTS2.5
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, lang="ZH", output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", verbose=True)
emo_alphaCuando se especifica un audio de referencia emocional, emo_alpha ajusta
cuánto afecta al resultado. Rango válido: 0.0 - 1.0, valor por defecto:
1.0 (100%).
text = "酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。"
# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", emo_alpha=0.9, verbose=True)
# IndexTTS2.5
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, output_path="gen.wav", lang="ZH", emo_audio_prompt="examples/emo_sad.wav", emo_alpha=0.9, verbose=True)
Puedes omitir el audio de referencia emocional y, en su lugar, proporcionar una
lista de 8 valores flotantes que especifican la intensidad de cada emoción, en
el orden
[alegre, enfadado, triste, asustado, disgustado, melancólico, sorprendido, tranquilo].
Usa use_random para introducir estocasticidad durante la inferencia
(valor por defecto: False).
[!NOTE] Activar el muestreo aleatorio reduce la fidelidad de la clonación de voz.
text = "对不起嘛!我的记性真的不太好,但是和你在一起的事情,我都会努力记住的~"
# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_09.wav', text=text, output_path="gen.wav", emo_vector=[0, 0, 0.8, 0, 0, 0, 0, 0], use_random=False, verbose=True)
# IndexTTS2.5
tts.infer(spk_audio_prompt='examples/voice_09.wav', text=text, lang="ZH", output_path="gen.wav", emo_vector=[0, 0, 0.8, 0, 0, 0, 0, 0], use_random=False, verbose=True)
use_emo_text)Activa use_emo_text para convertir automáticamente tu guion text en
vectores de emociones. Se recomienda un emo_alpha en torno a 0.6 (o menor)
para una voz más natural. Se puede introducir aleatoriedad con use_random
(valor por defecto: False).
text = "快躲起来!是他要来了!他要来抓我们了!"
# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_12.wav', text=text, output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, use_random=False, verbose=True)
# IndexTTS2.5
tts.infer(spk_audio_prompt='examples/voice_12.wav', text=text, lang="ZH", output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, use_random=False, verbose=True)
emo_text)Proporciona una descripción textual específica de la emoción mediante
emo_text, que se convierte en vectores de emociones, lo que te permite
controlar por separado el guion del texto y la descripción de la emoción:
text = "快躲起来!是他要来了!他要来抓我们了!"
emo_text = "你吓死我了!你是鬼吗?"
# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_12.wav', text=text, output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, emo_text=emo_text, use_random=False, verbose=True)
# IndexTTS2.5
tts.infer(spk_audio_prompt='examples/voice_12.wav', text=text, lang="ZH", output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, emo_text=emo_text, use_random=False, verbose=True)
duration_factor)Un valor mayor que 1.0 ralentiza el habla; un valor menor que 1.0 la
acelera. Valor por defecto: 1.0 (velocidad normal). Rango válido:
0.5 - 2.0.
text = "大家好,欢迎来到IndexTTS的语速控制演示。"
# IndexTTS2.5
# Slow down (1.2x duration)
tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, lang="ZH", output_path="gen_slow.wav", duration_factor=1.2, verbose=True)
# Speed up (0.8x duration)
tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, lang="ZH", output_path="gen_fast.wav", duration_factor=0.8, verbose=True)
IndexTTS2.5 — Pinyin / fonemas CMU / Kana japonés:
IndexTTS2.5 admite estas sustituciones de caracteres con una mejor capacidad
de seguimiento de instrucciones. Para ver la lista completa de entradas
válidas, consulta checkpoints/pinyin.vocab para el Pinyin y el
diccionario CMU
para los fonemas en inglés.
他在银<行|XING2>里<行|HANG2>走了半天,发现这笔业务办不<行|HANG2>。
He had a <minute|M IH1 . N AH0 T> to examine the <minute|M AY0 . N UW1 T> details of the contract.
彼は料理が<上手|じょうず>だが、囲碁では<上手|うわて>に負けた。
IndexTTS2 — Pinyin:
IndexTTS2 admite el modelado mixto de caracteres chinos y Pinyin. Para activar
el control por Pinyin, proporciona texto con anotaciones específicas de Pinyin.
Ten en cuenta que el control por Pinyin no funciona para todas las
combinaciones posibles de consonante y vocal; solo se admiten los casos de
Pinyin chino válidos (consulta checkpoints/pinyin.vocab).
之前你做DE5很好,所以这一次也DEI3做DE2很好才XING2,如果这次目标完成得不错的话,我们就直接打DI1去银行取钱。
También puedes usar el modelo anterior IndexTTS1 importando un módulo diferente:
from indextts.infer import IndexTTS
tts = IndexTTS(model_dir="checkpoints", cfg_path="checkpoints/config.yaml")
voice = "examples/voice_07.wav"
text = "大家好,我现在正在bilibili 体验 ai 科技,说实话,来之前我绝对想不到!AI技术已经发展到这样匪夷所思的地步了!比如说,现在正在说话的其实是B站为我现场复刻的数字分身,简直就是平行宇宙的另一个我了。如果大家也想体验更多深入的AIGC功能,可以访问 bilibili studio,相信我,你们也会吃惊的。"
tts.infer(voice, text, 'gen.wav')
Para más detalles, consulta README_INDEXTTS_1_5, o visita el repositorio de IndexTTS1 en index-tts:v1.5.0.
Tabla 1: TTS zero-shot en CV3-Eval (el árabe usa un conjunto de prueba interno). †Citado del artículo original.
<table> <thead> <tr> <th rowspan="2">Modelo</th> <th rowspan="2">Parámetros</th> <th colspan="2">zh</th> <th colspan="2">en</th> <th colspan="2">es</th> <th colspan="2">ja</th> <th colspan="2">ar</th> <th colspan="2">Prom.</th> </tr> <tr> <th>WER↓</th><th>SS↑</th> <th>WER↓</th><th>SS↑</th> <th>WER↓</th><th>SS↑</th> <th>WER↓</th><th>SS↑</th> <th>WER↓</th><th>SS↑</th> <th>WER↓</th><th>SS↑</th> </tr> </thead> <tbody> <tr><td>VoxCPM2</td><td>2B</td><td>3.88</td><td>74.99</td><td>5.13</td><td>71.57</td><td>5.49</td><td>74.67</td><td>6.69</td><td>72.90</td><td>14.94</td><td>65.99</td><td>7.22</td><td>72.02</td></tr> <tr><td>OmniVoice</td><td>0.8B</td><td>3.41</td><td>72.99</td><td>3.62</td><td>70.13</td><td>3.52</td><td>74.14</td><td>5.38</td><td>70.49</td><td>17.88</td><td>64.22</td><td>6.76</td><td>70.39</td></tr> <tr><td>Moss-TTS 1.5</td><td>8B</td><td>4.02</td><td>72.68</td><td>4.45</td><td>67.46</td><td>3.83</td><td>71.75</td><td>10.97</td><td>68.71</td><td>23.71</td><td>62.21</td><td>9.40</td><td>68.56</td></tr> <tr><td>CosyVoice3-0.5B</td><td>0.5B</td><td>3.84</td><td>80.01</td><td>4.88</td><td>74.16</td><td>4.04</td><td>78.85</td><td>-</td><td>76.36</td><td>-</td><td>-</td><td>-</td><td>-</td></tr> <tr><td>CosyVoice3-1.5B</td><td>1.5B</td><td>3.91†</td><td>-</td><td>4.99†</td><td>-</td><td>4.47†</td><td>-</td><td>7.57†</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr> <tr><td>FireRedTTS-2</td><td>1.5B</td><td>8.22</td><td>68.10</td><td>14.92</td><td>56.93</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr> <tr><td>Fish Audio S2 Pro</td><td>4B</td><td>3.62</td><td>67.79</td><td>3.83</td><td>61.66</td><td>2.93</td><td>67.44</td><td>5.15</td><td>66.15</td><td>14.15</td><td>59.43</td><td>5.94</td><td>64.49</td></tr> <tr><td>Qwen3-TTS</td><td>1.7B</td><td>3.27</td><td>73.02</td><td>5.06</td><td>67.17</td><td>2.87</td><td>73.17</td><td>5.89</td><td>70.18</td><td>-</td><td>-</td><td>-</td><td>-</td></tr> <tr><td><b>IndexTTS2.5</b></td><td>0.8B</td><td>4.36</td><td>77.10</td><td>5.12</td><td>68.06</td><td>3.75</td><td>76.39</td><td>5.66</td><td>74.62</td><td>14.88</td><td>69.74</td><td>6.75</td><td>73.18</td></tr> <tr><td><b>IndexTTS2.5-RL</b></td><td>0.8B</td><td>3.93</td><td>77.92</td><td>3.89</td><td>67.79</td><td>3.33</td><td>76.68</td><td>5.30</td><td>75.41</td><td>13.58</td><td>70.36</td><td>6.00</td><td>73.63</td></tr> </tbody> </table>Tabla 2: TTS multilingüe en CV3-Eval (prompt en chino → idioma de destino; el árabe usa un conjunto de prueba interno).
<table> <thead> <tr> <th rowspan="2">Modelo</th> <th rowspan="2">Parámetros</th> <th colspan="2">zh→en</th> <th colspan="2">zh→es</th> <th colspan="2">zh→ja</th> <th colspan="2">zh→ar</th> <th colspan="2">Prom.</th> </tr> <tr> <th>WER↓</th><th>SS↑</th> <th>WER↓</th><th>SS↑</th> <th>WER↓</th><th>SS↑</th> <th>WER↓</th><th>SS↑</th> <th>WER↓</th><th>SS↑</th> </tr> </thead> <tbody> <tr><td>VoxCPM2</td><td>2B</td><td>4.48</td><td>64.25</td><td>16.38</td><td>64.89</td><td>11.84</td><td>71.54</td><td>11.09</td><td>67.62</td><td>10.95</td><td>67.08</td></tr> <tr><td>OmniVoice</td><td>0.8B</td><td>3.74</td><td>64.91</td><td>5.84</td><td>62.08</td><td>9.09</td><td>69.06</td><td>19.80</td><td>65.27</td><td>9.62</td><td>65.33</td></tr> <tr><td>Moss-TTS 1.5</td><td>8B</td><td>6.13</td><td>59.23</td><td>4.32</td><td>56.63</td><td>11.52</td><td>65.54</td><td>17.03</td><td>62.93</td><td>9.75</td><td>61.08</td></tr> <tr><td>CosyVoice3-0.5B</td><td>0.5B</td><td>3.23</td><td>62.79</td><td>4.58</td><td>64.04</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr> <tr><td>CosyVoice3-1.5B</td><td>1.5B</td><td>4.32</td><td>-</td><td>-</td><td>-</td><td>13.70</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr> <tr><td>FireRedTTS-2</td><td>1.5B</td><td>9.34</td><td>53.19</td><td>12.25</td><td>58.31</td><td>19.05</td><td>64.12</td><td>-</td><td>-</td><td>-</td><td>-</td></tr> <tr><td>Fish Audio S2 Pro</td><td>4B</td><td>4.14</td><td>55.89</td><td>4.46</td><td>55.57</td><td>10.48</td><td>61.74</td><td>14.49</td><td>59.80</td><td>8.39</td><td>58.25</td></tr> <tr><td>Qwen3-TTS</td><td>1.7B</td><td>5.74</td><td>63.04</td><td>5.15</td><td>68.02</td><td>36.09</td><td>65.71</td><td>-</td><td>-</td><td>-</td><td>-</td></tr> <tr><td><b>IndexTTS2.5</b></td><td>0.8B</td><td>3.62</td><td>63.83</td><td>5.17</td><td>65.48</td><td>6.57</td><td>74.16</td><td>9.51</td><td>71.02</td><td>6.22</td><td>68.62</td></tr> <tr><td><b>IndexTTS2.5-RL</b></td><td>0.8B</td><td>3.55</td><td>67.47</td><td>4.86</td><td>64.47</td><td>6.38</td><td>75.82</td><td>9.89</td><td>73.05</td><td>6.17</td><td>70.20</td></tr> </tbody> </table>¡Te invitamos a unirte a nuestra comunidad! 🌏 欢迎大家来交流讨论!
[!CAUTION] ¡Gracias por tu apoyo al proyecto IndexTTS de bilibili! Ten en cuenta que el único canal oficial mantenido por el equipo central es: https://github.com/index-tts/index-tts. Cualquier otro sitio web o servicio no es oficial y no podemos garantizar su seguridad, exactitud ni actualidad. Para conocer las últimas novedades, consulta siempre este repositorio oficial.
Para uso comercial y colaboraciones, contacta con <u>[email protected]</u>.
🌟 Si nuestro trabajo te resulta útil, déjanos una estrella y cita nuestros artículos.
IndexTTS2.5:
@misc{li2026indextts25technicalreport,
title={IndexTTS 2.5 Technical Report},
author={Yunpei Li and Xun Zhou and Jinchao Wang and Lu Wang and Yong Wu and Siyi Zhou and Yiquan Zhou and Yining Wang and Yaogen Yang and Zhetao Hu and Shiyao Duan and Jiacheng Xu and Bin Xia and Jingchen Shu},
year={2026},
eprint={2601.03888},
archivePrefix={arXiv},
primaryClass={cs.SD},
url={https://arxiv.org/abs/2601.03888},
}
IndexTTS2:
@article{zhou2025indextts2,
title={IndexTTS2: A Breakthrough in Emotionally Expressive and Duration-Controlled Auto-Regressive Zero-Shot Text-to-Speech},
author={Siyi Zhou and Yiquan Zhou and Yi He and Xun Zhou and Jinchao Wang and Wei Deng and Jingchen Shu},
journal={arXiv preprint arXiv:2506.21619},
year={2025}
}
IndexTTS:
@article{deng2025indextts,
title={IndexTTS: An Industrial-Level Controllable and Efficient Zero-Shot Text-To-Speech System},
author={Wei Deng and Siyi Zhou and Jingchen Shu and Jinchao Wang and Lu Wang},
journal={arXiv preprint arXiv:2502.05512},
year={2025},
doi={10.48550/arXiv.2502.05512},
url={https://arxiv.org/abs/2502.05512}
}
Este proyecto se publica bajo el Acuerdo de Licencia de Uso de Modelos de bilibili. Lee también el DESCARGO DE RESPONSABILIDAD antes de usarlo.