Downloads · 30 days
0
berrkkaayy/IndexTTS-2.5-Turkish-LoRA
IndexTTS-2.5-Turkish-LoRA is a text-to-speech model from berrkkaayy. Use it when you need text read aloud. It is set up for indextts. The card lists the license as other.
Fine-tuned GPT weights that add Turkish to 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.
Downloads · 30 days
0
Access
Public
Updated Oct 8, 2026
Repo size
6.5 GB
Likes
4
Public
Click a slice to open those files.
.pth6.5 GB · 100%
From the Hugging Face model README
Fine-tuned GPT weights that add Turkish to 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.
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 has 495 everyday Turkish sentences. We ran it with the protocol of the PatientDesk re-run: 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 |
num_beams=3). This is not comparable with the L4 numbers in the re-run.benchmark/.Same sentence, reference voice and seed (take 0). The v1 column shows what Whisper heard.
<table> <tr><th>Sentence</th><th>v1 (Whisper heard)</th><th>v1</th><th>v2</th></tr> <tr><td>Yağmur birden bastırınca hepimiz sırılsıklam olduk!</td><td><i>Arkadaş mur</i> birden bastırınca hepimiz <i>kırılsıklam</i> olduk.</td> <td><audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/0129_v1.wav"></audio></td> <td><audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/0129_v2.wav"></audio></td></tr> <tr><td>Ne demek istediğini bilmiyorum.</td><td>Ne <i>biraz geldiğimi zatım</i>.</td> <td><audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/0320_v1.wav"></audio></td> <td><audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/0320_v2.wav"></audio></td></tr> <tr><td>Akşamüstü kuaföre uğrayıp saçlarımı biraz kestirmek istiyorum.</td><td><i>Akşam düşüğü</i> kuaföre uğrayıp <i>hasırlarımı</i> biraz kestirmek istiyorum.</td> <td><audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/0232_v1.wav"></audio></td> <td><audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/0232_v2.wav"></audio></td></tr> <tr><td>Dünkü yemekten kalanları ısıtıp öğle yemeğinde afiyetle yedik.</td><td><i>Dört geçten</i> kalanları <i>sırtıp</i> öğle yemeğinde <i>afasırla</i> yedik.</td> <td><audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/0108_v1.wav"></audio></td> <td><audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/0108_v2.wav"></audio></td></tr> <tr><td>Birlikte sinemaya gitmeyeli neredeyse iki ay olmuş.</td><td><i>Artık</i> sinemaya gitmeyeli <i>söyleyse 2 ayıdır</i>.</td> <td><audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/0083_v1.wav"></audio></td> <td><audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/0083_v2.wav"></audio></td></tr> </table>Reference voice: <audio controls src="https://huggingface.co/berrkkaayy/IndexTTS-2.5-Turkish-LoRA/resolve/main/samples/reference_anka_male.wav"></audio>
The reference is the AI-generated male voice of 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.
| 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.
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).
| 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 |
webui.py does not apply it.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.
@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},
}