--- language: - tr - zh - en - ja - es - ar license: other license_name: bilibili-model-license license_link: LICENSE library_name: indextts pipeline_tag: text-to-speech tags: - text-to-speech - tts - zero-shot - voice-cloning - multilingual - cross-lingual - lora - finetune - turkish base_model: IndexTeam/IndexTTS-2.5 base_model_relation: finetune datasets: - freyavoice/freya-tr-eval --- # IndexTTS-2.5 Turkish (v2) Fine-tuned GPT weights that add **Turkish** to [IndexTeam/IndexTTS-2.5](https://huggingface.co/IndexTeam/IndexTTS-2.5) with zero-shot voice cloning. The five base languages (zh, en, ja, es, ar) are kept. Trained with [index-tts-2.5-ft](https://github.com/oberkayb/index-tts-2.5-ft). **v2 cuts word errors 9×: Freya-TR-Eval WER drops from 12.36% (v1) to 1.32%.** v1 swapped short Turkish words for other words (*yağmur → "arkadaş mur"*). The cause was text-embedding rows the base model had never trained. v2 trains exactly those rows. ## Freya-TR-Eval [Freya-TR-Eval](https://huggingface.co/datasets/freyavoice/freya-tr-eval) has 495 everyday Turkish sentences. We ran it with the protocol of the [PatientDesk re-run](https://huggingface.co/datasets/PatientdeskAI/freya-tr-eval-rerun): three seeded takes per sentence, an 8 kHz band, faster-whisper large-v3 (beam 5), EMA's `score_norm` and UTMOS22-strong. The voice reference is the same one the cloning systems used there (Anka TTS `male`). | System | WER % | CER % | Clean | UTMOS | |---|---|---|---|---| | EMA Lightning | 1.04 ± 0.17 | 0.22 | 93.7% | 3.30 | | Trendyol-TTS | 1.16 ± 0.16 | 0.23 | 93.1% | 3.82 | | Gemini 3.8 Flash TTS | 1.23 ± 0.10 | 0.29 | 92.9% | 3.53 | | **IndexTTS-2.5 Turkish v2 (this model)** | **1.32 ± 0.10** | **0.26** | **92.2%** | **3.17** | | Gemini 3.8 Flash-Lite TTS | 1.34 ± 0.19 | 0.27 | 91.9% | 3.63 | | Anka TTS | 1.42 ± 0.06 | 0.30 | 91.6% | 3.52 | | ElevenLabs v4 | 1.43 ± 0.12 | 0.27 | – | – | | Chatterbox Multilingual | 1.91 ± 0.35 | 0.43 | 88.8% | 3.51 | | XTTS-v2 | 3.67 ± 0.37 | 1.50 | 77.1% | 2.97 | | FreyaTTS-small | 12.02 ± 0.00 | 4.95 | 47.1% | 2.81 | | IndexTTS-2.5 Turkish v1 | 12.36 ± 0.43 | 5.72 | 43.5% | 3.08 | - **Our rows** (bold and v1) were run by us on 2026-10-08. All other rows are quoted from the PatientDesk re-run of 2026-10-07; it lists 19 systems. - **Clean** is the share of sentences with no word error. v2 reads 427 of the 495 sentences correctly in all three takes; v1 does so for 161. - **Speed:** RTF is 0.83 on an RTX 5070 Ti (bf16, `num_beams=3`). This is not comparable with the L4 numbers in the re-run. - **Raw data:** transcripts, UTMOS per clip and timing are in [`benchmark/`](./benchmark). ## v1 vs v2: listen Same sentence, reference voice and seed (take 0). The v1 column shows what Whisper heard.
Sentencev1 (Whisper heard)v1v2
Yağmur birden bastırınca hepimiz sırılsıklam olduk!Arkadaş mur birden bastırınca hepimiz kırılsıklam olduk.
Ne demek istediğini bilmiyorum.Ne biraz geldiğimi zatım.
Akşamüstü kuaföre uğrayıp saçlarımı biraz kestirmek istiyorum.Akşam düşüğü kuaföre uğrayıp hasırlarımı biraz kestirmek istiyorum.
Dünkü yemekten kalanları ısıtıp öğle yemeğinde afiyetle yedik.Dört geçten kalanları sırtıp öğle yemeğinde afasırla yedik.
Birlikte sinemaya gitmeyeli neredeyse iki ay olmuş.Artık sinemaya gitmeyeli söyleyse 2 ayıdır.
Reference voice: The reference is the AI-generated `male` voice of [Anka TTS](https://pypi.org/project/anka-tts/) (not a real person), licensed CC-BY-NC-4.0. The clips in `samples/` are derived from it and carry the same license. ## Files | File | Description | |---|---| | `gpt.pth` | **v2**, step 13000. Merged LoRA export; drop-in replacement for `checkpoints/gpt.pth`. | | `export_metadata.json` | v2 provenance and training settings | | `v1/gpt.pth`, `v1/export_metadata.json` | Previous release (step 29000, 2026-08-19), kept for comparison | | `samples/`, `benchmark/` | Listening samples and Freya-TR-Eval raw results | All other weights (`s2mel.pth`, codec, vocoder, tokenizer, …) come from [IndexTeam/IndexTTS-2.5](https://huggingface.co/IndexTeam/IndexTTS-2.5). ## Quick start ```bash git clone https://github.com/index-tts/index-tts.git && cd index-tts uv sync --all-extras hf download IndexTeam/IndexTTS-2.5 --local-dir=checkpoints hf download berrkkaayy/IndexTTS-2.5-Turkish-LoRA gpt.pth --local-dir=checkpoints/tr cd .. && git clone https://github.com/oberkayb/index-tts-2.5-ft.git && cd index-tts-2.5-ft uv run --project ../index-tts python scripts/synthesize.py \ --gpt-checkpoint ../index-tts/checkpoints/tr/gpt.pth \ --lang tr --normalizer turkish --case tr_lower \ --prompt-audio ref.wav --text "Merhaba, bugün hava çok güzel." --output out/tr.wav ``` Turkish needs the **itts25ft text frontend** (`turkish` normalizer + `tr_lower`). Training and inference must match. If you call `IndexTTS2.infer` directly, clean the text with the frontend and pass `lang="tr", text_normalization=False`. The fine-tuning repo also ships a WebUI (`webui.bat`) and an MCP server (`mcp_server.py`). ## Training (v2) | Item | Value | |---|---| | Data | 486.5 h Turkish, 143,609 utterances, 3,652 speakers; 286,606 prompt/target pairs | | Validation | 674 pairs from 20 held-out speakers; step 13000 had the best validation loss | | Method | LoRA r32/α64 on all GPT blocks, `lang_embedding` row 9 (seeded from `es`), mel/text heads | | New in v2 | **1,530 untrained text-embedding rows** trained (`--train-text-rows`). These rows carry 37% of the Turkish token occurrences. Gradient-masked, LR ×10, no weight decay, seeded from trained sub-word pieces. | | Data quality | ASR transcripts filtered by duration, chars/s and repeated text; clips over 25 s dropped, not truncated | | Optimisation | LR 1e-4, bf16, effective batch 32, 13,000 steps (~1.45 epochs) on an RTX 5070 Ti + RTX 4070 | | Frozen | Emotion branch, speaker projection, all text rows the base model already trained | ## Limitations - Turkish requires the itts25ft frontend; stock `webui.py` does not apply it. - Numbers are best written out as words. Long text is segmented, and prosody may reset between segments. - UTMOS is an English-trained proxy and depends on the reference voice. - Use is subject to the [bilibili Model Use License Agreement](./LICENSE) inherited from IndexTTS-2.5. ## Türkçe özet **v2**, Freya-TR-Eval'de kelime hata oranını **%12,36'dan %1,32'ye** indirdi; doğru okunan cümle oranı %43,5'ten %92,2'ye çıktı. v1'deki kelime karışmasının sebebi, taban modelin Türkçe token satırlarını hiç eğitmemiş olmasıydı. v2 tam olarak bu 1.530 satırı eğitiyor. `gpt.pth` artık v2. Eski sürüm `v1/` klasöründe duruyor. Kullanım için yukarıdaki *Quick start* bölümüne bak; Türkçe metin işleme (`turkish` + `tr_lower`) şart. ## Citation ```bibtex @misc{li2026indextts25technicalreport, title={IndexTTS 2.5 Technical Report}, author={Yunpei Li and others}, year={2026}, eprint={2601.03888}, archivePrefix={arXiv}, } @misc{pamuk2026freyattstechnicalreport, title={FreyaTTS Technical Report}, author={Ahmet Erdem Pamuk and Ömer Yentür and Ahmet Tunga Bayrak and Yavuz Alp Sencer Öztürk and Mustafa Yavuz}, year={2026}, eprint={2607.09530}, archivePrefix={arXiv}, } ```