{ "family": "index_tts2", "display_name": "IndexTTS2", "description": "Zero-shot TTS system with voice cloning, emotion-speaker decoupling, text or audio emotion control, and explicit duration control. Variant v2 covers Chinese and English; variant v2.5 (config version 2.5) adds multilingual tiktoken tokenization with Japanese, Spanish and Arabic support.", "category": "tts", "status": "supported", "tasks": [ "tts", "clone" ], "modes": [ "offline" ], "languages": [ "zh", "en", "ja", "es", "ar" ], "options": { "request": [ { "name": "text", "type": "string", "description": "Fallback target text when text_input is absent; prompt is also accepted.", "required": false }, { "name": "language", "type": "string", "description": "IndexTTS2.5 text language; empty or auto selects from text.", "required": false }, { "name": "emotion_alpha", "type": "float", "description": "Emotion conditioning blend strength.", "required": false, "min": 0, "max": 1, "default": 1 }, { "name": "emotion_vector", "type": "string", "description": "Eight comma-separated finite emotion strengths.", "required": false }, { "name": "use_emotion_text", "type": "bool", "description": "Use text-derived emotion conditioning.", "required": false, "default": false }, { "name": "emotion_text", "type": "string", "description": "Emotion description.", "required": false }, { "name": "use_random_emotion", "type": "bool", "description": "Use random emotion conditioning.", "required": false, "default": false }, { "name": "interval_silence_ms", "type": "int", "description": "Silence between generated segments in milliseconds.", "required": false, "min": 0, "default": 200 }, { "name": "do_sample", "type": "bool", "description": "Enable sampling.", "required": false, "default": true }, { "name": "top_p", "type": "float", "description": "Nucleus sampling probability. Must be in (0, 1].", "required": false, "default": 0.8 }, { "name": "top_k", "type": "int", "description": "Top-k sampling limit.", "required": false, "min": 1, "default": 30 }, { "name": "temperature", "type": "float", "description": "Sampling temperature. Must be positive.", "required": false, "default": 0.8 }, { "name": "length_penalty", "type": "float", "description": "Beam search length penalty.", "required": false, "default": 0 }, { "name": "num_beams", "type": "int", "description": "Beam search width.", "required": false, "min": 1, "default": 3 }, { "name": "repetition_penalty", "type": "float", "description": "Sampling repetition penalty.", "required": false, "default": 10 }, { "name": "max_tokens", "type": "int", "description": "Maximum generated mel tokens.", "required": false, "min": 1, "default": 1500 }, { "name": "duration_scale", "type": "float", "description": "Positive waveform duration rescaling, supported by both IndexTTS2 and IndexTTS2.5.", "required": false, "default": 1 }, { "name": "seed", "type": "int", "description": "Sampling seed; omitted chooses a random seed.", "required": false, "min": 0, "max": 4294967295 }, { "name": "text_chunk_size", "type": "int", "description": "Optional framework long-form text chunk size; omitted keeps the full input together. Must be positive.", "required": false }, { "name": "text_chunk_mode", "type": "enum", "description": "Framework text chunking mode.", "required": false, "values": [ "default", "tag_aware", "japanese", "endline" ], "default": "default" } ], "session": [ { "name": "weight_type", "type": "enum", "description": "Weight storage type; defaults to native.", "required": false, "preset": "weight_type_full" }, { "name": "conv_weight_type", "type": "enum", "description": "Convolution weight storage; native on HIP resolves to F16.", "required": false, "preset": "weight_type_conv", "default": "native" }, { "name": "mem_saver", "type": "bool", "description": "Release staged runtime graphs.", "required": false, "default": false }, { "name": "speaker_cache_slots", "type": "int", "description": "Reference or emotion cache slots; zero disables reuse.", "required": false, "min": 0, "default": 1 }, { "name": "emotion_cache_slots", "type": "int", "description": "Reference or emotion cache slots; zero disables reuse.", "required": false, "min": 0, "default": 1 }, { "name": "emotion_text_cache_slots", "type": "int", "description": "Reference or emotion cache slots; zero disables reuse.", "required": false, "min": 0, "default": 1 }, { "name": "gpt_graph_arena_mb", "type": "int", "description": "Context or graph arena size in MiB.", "required": false, "min": 1, "default": 32 }, { "name": "s2mel_graph_arena_mb", "type": "int", "description": "Context or graph arena size in MiB.", "required": false, "min": 1, "default": 32 }, { "name": "reference_graph_arena_mb", "type": "int", "description": "Context or graph arena size in MiB.", "required": false, "min": 1, "default": 512 }, { "name": "emotion_text_prefill_graph_arena_mb", "type": "int", "description": "Context or graph arena size in MiB.", "required": false, "min": 1, "default": 2048 }, { "name": "emotion_text_decode_graph_arena_mb", "type": "int", "description": "Context or graph arena size in MiB.", "required": false, "min": 1, "default": 512 }, { "name": "weight_context_mb", "type": "int", "description": "Context or graph arena size in MiB.", "required": false, "min": 1, "default": 32 }, { "name": "emotion_text_max_tokens", "type": "int", "description": "Emotion description generation token limit; emotion_text_max_new_tokens is also accepted.", "required": false, "min": 1, "default": 256 } ], "load": [] }, "capabilities": { "tts": [ "emotion_control" ], "clone": [ "speaker_reference", "emotion_control" ] }, "runtime": { "tags": [ "gguf" ] }, "ui": { "recommended_package": "index_tts2_q8_0", "tags": [ "TTS", "Clone", "GGUF" ], "docs": [ "docs/models/index_tts2.md", "docs/tts.md", "docs/gguf.md" ] }, "package_defaults": { "download": { "kind": "huggingface_snapshot", "repo": "audio-cpp/audio.cpp-gguf", "revision": "main", "gated": false } }, "packages": [ { "id": "index_tts2_q8_0", "display_name": "IndexTTS2 Q8_0 GGUF", "default": true, "format": "gguf", "precision": "q8_0", "target_directory": "IndexTTS2-GGUF", "files": [ "IndexTTS2-GGUF/index-tts2-q8_0.gguf" ], "strip_prefix": "IndexTTS2-GGUF" }, { "id": "index_tts2_f16", "display_name": "IndexTTS2 F16 GGUF", "format": "gguf", "precision": "f16", "target_directory": "IndexTTS2-GGUF", "files": [ "IndexTTS2-GGUF/index-tts2-f16.gguf" ], "strip_prefix": "IndexTTS2-GGUF" }, { "id": "index_tts2_orig", "display_name": "IndexTTS2 Original-Dtype GGUF", "format": "gguf", "precision": "orig", "target_directory": "IndexTTS2-GGUF", "files": [ "IndexTTS2-GGUF/index-tts2-orig.gguf" ], "strip_prefix": "IndexTTS2-GGUF" }, { "id": "index_tts2_safetensors", "display_name": "IndexTTS2 Safetensors", "format": "safetensors", "precision": "native", "target_directory": "IndexTTS-2", "files": [ "config.yaml", "bpe.model", "gpt.safetensors", "w2v-bert-2.0/config.json", "w2v-bert-2.0/preprocessor_config.json", "bigvgan/config.json", "qwen0.6bemo4-merge/config.json", "qwen0.6bemo4-merge/generation_config.json", "qwen0.6bemo4-merge/tokenizer.json", "qwen0.6bemo4-merge/tokenizer_config.json", "qwen0.6bemo4-merge/vocab.json", "qwen0.6bemo4-merge/merges.txt", "s2mel.safetensors", "feat1.safetensors", "feat2.safetensors", "wav2vec2bert_stats.safetensors", "w2v-bert-2.0/model.safetensors", "semantic_codec_model.safetensors", "campplus.safetensors", "bigvgan/model.safetensors", "qwen0.6bemo4-merge/model.safetensors" ], "download": { "kind": "huggingface_snapshot", "repo": "mlx-community/index-tts2-mlx" } }, { "id": "index_tts2_5_q8_0", "display_name": "IndexTTS2.5 Q8_0 GGUF", "format": "gguf", "precision": "q8_0", "target_directory": "IndexTTS2.5-GGUF", "files": [ "IndexTTS2.5-GGUF/index-tts2_5-q8_0.gguf" ], "strip_prefix": "IndexTTS2.5-GGUF" }, { "id": "index_tts2_5_f16", "display_name": "IndexTTS2.5 F16 GGUF", "format": "gguf", "precision": "f16", "target_directory": "IndexTTS2.5-GGUF", "files": [ "IndexTTS2.5-GGUF/index-tts2_5-f16.gguf" ], "strip_prefix": "IndexTTS2.5-GGUF" }, { "id": "index_tts2_5_orig", "display_name": "IndexTTS2.5 Original-Dtype GGUF", "format": "gguf", "precision": "orig", "target_directory": "IndexTTS2.5-GGUF", "files": [ "IndexTTS2.5-GGUF/index-tts2_5-orig.gguf" ], "strip_prefix": "IndexTTS2.5-GGUF" } ], "sources": [ { "format": "gguf", "roots": { "model": ".", "weights": "$gguf" }, "files": { "config": "model:config.yaml", "wav2vec2bert_config": "model:w2v-bert-2.0/config.json", "wav2vec2bert_preprocessor_config": "model:w2v-bert-2.0/preprocessor_config.json", "bigvgan_config": "model:bigvgan/config.json", "qwen_emotion_config": "model:qwen0.6bemo4-merge/config.json", "qwen_emotion_generation_config": "model:qwen0.6bemo4-merge/generation_config.json", "qwen_emotion_tokenizer": "model:qwen0.6bemo4-merge/tokenizer.json", "qwen_emotion_tokenizer_config": "model:qwen0.6bemo4-merge/tokenizer_config.json", "qwen_emotion_vocab": "model:qwen0.6bemo4-merge/vocab.json", "qwen_emotion_merges": "model:qwen0.6bemo4-merge/merges.txt" }, "optional_files": { "bpe": "model:bpe.model", "tiktoken": "model:multilingual_zh_ja_yue_char_del.tiktoken" }, "tensors": { "gpt": { "source": "weights:", "prefix": "gpt" }, "s2mel": { "source": "weights:", "prefix": "s2mel" }, "speaker_matrix": { "source": "weights:", "prefix": "speaker_matrix" }, "emotion_matrix": { "source": "weights:", "prefix": "emotion_matrix" }, "wav2vec2bert_stats": { "source": "weights:", "prefix": "wav2vec2bert_stats" }, "wav2vec2bert": { "source": "weights:", "prefix": "wav2vec2bert" }, "semantic_codec": { "source": "weights:", "prefix": "semantic_codec" }, "campplus": { "source": "weights:", "prefix": "campplus" }, "bigvgan": { "source": "weights:", "prefix": "bigvgan" }, "qwen_emotion": { "source": "weights:", "prefix": "qwen_emotion" } } }, { "format": "safetensors", "roots": { "model": "." }, "files": { "config": "model:config.yaml", "wav2vec2bert_config": "model:w2v-bert-2.0/config.json", "wav2vec2bert_preprocessor_config": "model:w2v-bert-2.0/preprocessor_config.json", "bigvgan_config": "model:bigvgan/config.json", "qwen_emotion_config": "model:qwen0.6bemo4-merge/config.json", "qwen_emotion_generation_config": "model:qwen0.6bemo4-merge/generation_config.json", "qwen_emotion_tokenizer": "model:qwen0.6bemo4-merge/tokenizer.json", "qwen_emotion_tokenizer_config": "model:qwen0.6bemo4-merge/tokenizer_config.json", "qwen_emotion_vocab": "model:qwen0.6bemo4-merge/vocab.json", "qwen_emotion_merges": "model:qwen0.6bemo4-merge/merges.txt" }, "optional_files": { "bpe": "model:bpe.model", "tiktoken": "model:multilingual_zh_ja_yue_char_del.tiktoken" }, "tensors": { "gpt": "model:gpt.safetensors", "s2mel": "model:s2mel.safetensors", "speaker_matrix": "model:feat1.safetensors", "emotion_matrix": "model:feat2.safetensors", "wav2vec2bert_stats": "model:wav2vec2bert_stats.safetensors", "wav2vec2bert": "model:w2v-bert-2.0/model.safetensors", "semantic_codec": "model:semantic_codec_model.safetensors", "campplus": "model:campplus.safetensors", "bigvgan": "model:bigvgan/model.safetensors", "qwen_emotion": "model:qwen0.6bemo4-merge/model.safetensors" } } ] }