Indic Tiny TTS: Tamil
A tiny Tamil text-to-speech model: 22.5 million parameters, a female and a male voice, reads Tamil script. On FLORES-200 news sentences it makes fewer recognition errors (2.0 % CER) than 6 other open Tamil models tested. It runs 38× faster than real time on one Apple M1 CPU thread and 7× on one x86 CPU thread, with PyTorch or ONNX Runtime; no GPU needed.
Part of the INDIC TINY TTS MODELS collection: 12 tiny open models, one per language, for 11 Indian languages and Indian English, with the datasets they were trained on.
Training data: sulabhkatiyar/indic-tts-mini-24k: the Tamil female and male voices of AI4Bharat Rasa, 24 kHz, derived from the full-resolution sulabhkatiyar/indic-tts-multilingual-prepared.
Other open Tamil models, same test
FLORES-200 news sentences (100)
Fewer recognition errors than these 6 open Tamil models; the same as 2 larger models.
| Model | Size | CER, % | Extra errors vs this model, points (95 % CI) | Result |
|---|---|---|---|---|
| This model | 22.5 M | 2.05 | ||
ai4bharat/IndicF5 |
350.6 M | 1.74 | -0.31 [-0.64, +0.03] | same |
github.com/AI4Bharat/Indic-TTS (ta.zip) |
65.6 M | 1.96 | -0.08 [-0.43, +0.26] | same |
tinisoft/piper-ta_IN-rasa_female-medium + tinisoft/piper-ta_IN-rasa_male-medium |
15.9 M | 2.49 | +0.44 [+0.09, +0.82] | ours better |
ai4bharat/vits_rasa_13 |
31.3 M | 2.87 | +0.82 [+0.44, +1.24] | ours better |
ai4bharat/indic-parler-tts |
937.8 M | 3.03 | +0.98 [+0.47, +1.58] | ours better |
facebook/mms-tts-tam |
29.1 M | 4.57 | +2.53 [+1.91, +3.21] | ours better |
Jeyaram-K/piper-tamil-voices (ta_IN-HemaLatha-medium, ta_IN-ValluvarNeural-medium) |
15.9 M | 5.70 | +3.65 [+2.90, +4.46] | ours better |
multilingual-tts/VITS-OpenBible-Tamil |
29.1 M | 6.20 | +4.15 [+2.68, +6.16] | ours better |
Held-out test sentences (299)
Fewer recognition errors than these 4 open Tamil models.
| Model | Size | CER, % | Extra errors vs this model, points (95 % CI) | Result |
|---|---|---|---|---|
| This model | 22.5 M | 4.88 | ||
github.com/AI4Bharat/Indic-TTS (ta.zip) |
65.6 M | 6.63 | +1.75 [+0.55, +3.03] | ours better |
Jeyaram-K/piper-tamil-voices (ta_IN-HemaLatha-medium, ta_IN-ValluvarNeural-medium) |
15.9 M | 10.94 | +6.06 [+5.00, +7.13] | ours better |
facebook/mms-tts-tam |
29.1 M | 12.03 | +7.14 [+5.79, +8.67] | ours better |
multilingual-tts/VITS-OpenBible-Tamil |
29.1 M | 15.96 | +11.07 [+8.02, +14.48] | ours better |
| Also trained on same speaker voices: | ||||
tinisoft/piper-ta_IN-rasa_female-medium + tinisoft/piper-ta_IN-rasa_male-medium |
15.9 M | 5.95 | +1.07 [+0.15, +2.05] | ours better |
ai4bharat/vits_rasa_13 |
31.3 M | 6.09 | +1.21 [+0.52, +1.89] | ours better |
Larger models, same held-out sentences
- ~116× faster than
ai4bharat/indic-parler-ttson a T4 - Same error rate as
ai4bharat/IndicF5at 1/16 the size, ~174× faster on a T4
| Model | Size | Sentences | CER, % | This model, same sentences, % | Extra errors vs this model, points (95 % CI) | Result |
|---|---|---|---|---|---|---|
| Also trained on same speaker voices: | ||||||
ai4bharat/indic-parler-tts |
937.8 M | 295 | 7.45 | 4.94 | +2.52 [+1.46, +3.75] | ours better |
ai4bharat/IndicF5 |
350.6 M | 40 | 4.98 | 4.18 | +0.80 [-0.85, +2.99] | same |
CER = character error rate, lower is better; size = parameters. Method: see the Appendix.
Speed
| Hardware | Setting | Faster than real time | Real-time factor |
|---|---|---|---|
| x86 CPU (Kaggle notebook, Intel Xeon @ 2.20GHz, 4 vCPU) | PyTorch, 1 thread | 7× | 0.136 |
| Apple M1 laptop, CPU | PyTorch, 1 thread | 38× | 0.026 |
| NVIDIA T4 GPU | PyTorch | 62× | 0.016 |
Real-time factor = total synthesis time ÷ total audio length over 30 held-out sentences (lower is faster).
Listen
Clips made by this model for sentences from the held-out evaluation set; never used in training.
Female voice (voice="female")
இது விட்டுவிடுவது நல்லது; இது இறுதி கணக்கீட்டில் ஒரு மகத்தான வித்தியாசத்தை ஏற்படுத்தாது.
Transliteration: Idu vittuviduvadu nalladu; idu irudi kanakkittil oru magattana vittiyasattai erpaduttadu.
Translation (approx.): It is better to leave this out; it will not make a huge difference to the final calculation.
அதே சமயம், ஒரு சில ஸ்டூடண்ட்ஸுக்கு ஸ்ப்ரேனால அலர்ஜி ஆகலாம், அதனால அத கொண்டு வரக் கூடாது.
Transliteration: Ade samayam, oru sila studantsukku sprenala alarji agalam, adanala ada kondu varak kudadu.
Translation (approx.): At the same time, some students may be allergic to spray, so it should not be brought.
இந்தியா, நேபாள் மற்றும் பூட்டான் ஆகிய நாடுகளில் குரு பூர்ணிமா கொண்டாடப்படுகிறது.
Transliteration: Indiya, nepal matrum puttan agiya nadugalil guru purnima kondadappadugiradu.
Translation (approx.): Guru Purnima is celebrated in India, Nepal and Bhutan.
நான் புது சாக்ஸ், ஷூ எல்லாம் இந்த இடத்துல வாங்கிக்கவா?
Transliteration: Nan pudu saks, shu ellam inda idattula vangikkava?
Translation (approx.): Shall I buy new socks, shoes and all at this place?
Male voice (voice="male")
அப்போ உங்க ஃபேமிலியோட பாரம்பரிய ரெஸிபி எல்லாமே உனக்கு தெரியுமா?
Transliteration: Appo unga phemiliyoda parambariya resipi ellame unakku teriyuma?
Translation (approx.): So do you know all of your family's traditional recipes?
அவங்க ரிவிஷன் பண்றாங்க எல்லாம் சரி தான், ஆனால் முதல்ல இருந்தே கொஞ்சம் மெதுவா பாடம் எடுக்கலாம்.
Transliteration: Avanga rivishan panranga ellam sari tan, anal mudalla irunde konjam meduva padam edukkalam.
Translation (approx.): They are doing revision, that is all fine, but they could teach a little more slowly right from the start.
நகரங்களில் சட்டம் ஒழுங்கு தேவைப்படும் சூழ்நிலைகளை அவரது அதிகாரிகள் ஆய்வு செய்தனர், குற்றங்கள் குறைந்திருந்தது.
Transliteration: Nagarangalil sattam ozhungu tevaippadum suzhnilaigalai avaradu adigarigal ayvu seydanar, kutrangal kuraindirundadu.
Translation (approx.): His officers reviewed situations in the towns that needed law and order; crime had come down.
சோழகுலத்தில் பிறந்த அந்த இணையில்லாப் பெண்ணரசியின் எழிலையும் புலமையையும் அறிவுத்திறனையும் பற்றி அவன் எவ்வளவோ கேள்விப்பட்டதுண்டு.
Transliteration: Sozhagulattil piranda anda inaiyillap pennarasiyin ezhilaiyum pulamaiyaiyum arivuttiranaiyum patri avan evvalavo kelvippattadundu.
Translation (approx.): He had heard a great deal about the beauty, learning and intelligence of that peerless queen born into the Chola dynasty.
If the players do not show, the files are in samples/.
Quick start
pip install torch numpy safetensors huggingface_hub
import sys
from huggingface_hub import snapshot_download
sys.path.insert(0, snapshot_download("sulabhkatiyar/indic-tiny-tts-tamil", ignore_patterns=["onnx/*"])) # model + its small Python package
from indic_tiny_tts import TinyTTS
tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-tamil") # uses the NVIDIA GPU if there is one, else the CPU
wav = tts.synthesize("வணக்கம்! இன்று வானிலை மிகவும் நன்றாக இருக்கிறது.", voice="female")
tts.save_wav(wav, "hello.wav")
wav is a NumPy array of 24 kHz audio. voice is "female" or "male". Optional: speed=1.2 speaks faster, and seed=0 gives the same output every time.
Choose where it runs
tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-tamil", device="cpu") # any computer
tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-tamil", device="cuda") # NVIDIA GPU
tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-tamil", device="cpu", threads=1) # Mac with Apple silicon (fastest there)
On a Mac, device="mps" (the Apple GPU) also works, but for a model this small the CPU with one thread is faster.
Without PyTorch (ONNX Runtime)
The onnx/ folder holds the same model as three ONNX graphs. This path needs only NumPy and ONNX Runtime:
pip install onnxruntime numpy huggingface_hub
import sys
from huggingface_hub import snapshot_download
folder = snapshot_download("sulabhkatiyar/indic-tiny-tts-tamil", ignore_patterns=["*.safetensors"])
sys.path.insert(0, folder)
from indic_tiny_tts import TinyTTSOnnx
tts = TinyTTSOnnx.from_pretrained(folder)
wav = tts.synthesize("வணக்கம்! இன்று வானிலை மிகவும் நன்றாக இருக்கிறது.", voice="male")
tts.save_wav(wav, "hello.wav")
Install as a package (optional)
This adds an indic-tiny-tts command:
hf download sulabhkatiyar/indic-tiny-tts-tamil --local-dir indic-tiny-tts-tamil
pip install ./indic-tiny-tts-tamil
indic-tiny-tts "வணக்கம்! இன்று வானிலை மிகவும் நன்றாக இருக்கிறது." --model ./indic-tiny-tts-tamil --voice male -o hello.wav
Measure the speed
Inside the downloaded folder:
python -m indic_tiny_tts.latency --model . --device cpu --threads 1
python -m indic_tiny_tts.latency --model . --backend onnx --threads 4 # the ONNX version
Details
| Language | Tamil (Tamil script) |
| Voices | female, male |
| Audio | 24 kHz, mono |
| Size | 22.5 million parameters (about 90 MB per format: PyTorch or ONNX) |
| Runs on | CPU (Windows, Linux, Mac), NVIDIA GPU (CUDA), Apple silicon |
| Needs | Python 3.9+ and PyTorch, or ONNX Runtime. No eSpeak or other system packages. |
How good is it?
On held-out sentences a speech recogniser understood this model about as well as the real recordings: 4.88 % vs 4.56 % of characters misheard.
Good to know
- Tamil script only. English words in Latin letters (
hello) are skipped with a warning. Write them in Tamil script. - Numbers are read out in Tamil:
25becomes இருபத்து ஐந்து,3.5%becomes மூன்று புள்ளி ஐந்து சதவீதம், and₹500becomes ஐநூறு ரூபாய். Times such as10:30and phone numbers are not read correctly yet, so write them out in words if that matters. - Long text is fine. It is split into sentences at
।,?,!and., which are spoken one after another. - Style: a calm reading voice. The model learned from about 32 hours of studio speech by two speakers.
- The male voice is the weaker one. It makes more recognition errors (5.67 % against 4.09 % for the female voice) and sounds less like the real speaker: speaker similarity 0.70, where the speaker's own recordings reach 0.78 (female voice 0.84 against 0.84).
- Speaking rate: each voice has a default speed matched to its speaker on held-out data (
length_scaleinconfig.json: ta_F 0.960, ta_M 0.978).speed=scales it further. - Please use it responsibly. Do not use it to pass yourself off as the original speakers or to mislead people.
Training data and credits
- Voices: the Rasa dataset by AI4Bharat (ai4bharat/Rasa), licence CC-BY-4.0. We used the Tamil female (14.4 h) and male (17.6 h) speakers: the read, conversation and command recordings, leaving out the emotional ones. Our changes: audio resampled from 48 kHz to 24 kHz; clips shorter than 0.5 s or longer than 20 s left out; text normalised (for example, numbers written out in words); training clips that a speech recogniser could not match to their text (character error rate above 25 %, or a length mismatch) left out: 0.54 % of the female and 2.31 % of the male clips. Prepared data: sulabhkatiyar/indic-tts-mini-24k (revision
8fe16c93). - Vocoder: Vocos, with the pretrained charactr/vocos-mel-24khz weights used unchanged (MIT licence; trained by its authors on LibriTTS).
- Model design: based on Matcha-TTS (MIT licence). The acoustic model (8.9 million parameters) reads characters directly (no phonemiser) and was trained from scratch on the data above for 125,000 steps (batch 32, about 10 hours on one NVIDIA T4); the released weights are the averaged (EMA) weights at that step.
- Number reading: word tables adapted from AI4Bharat's indic-numtowords (MIT licence).
- Evaluation tools: AI4Bharat IndicConformer (speech recognition) and SpeechBrain ECAPA (speaker similarity).
Licence
- Acoustic model weights (
model.safetensors,onnx/text_encoder.onnx,onnx/flow_decoder.onnx): CC-BY-4.0. You may use them, also commercially, if you give credit to this model and to the Rasa dataset (see Citation). - Vocoder weights (
vocoder.safetensors,onnx/vocoder.onnx): the unchanged pretrained Vocos weights, MIT licence by their authors. - Code (
indic_tiny_tts/): MIT. - Details and third-party notices: LICENSE.md.
Citation
If you use this model, please cite it:
@misc{katiyar2026indictinyttstamil,
author = {Sulabh Katiyar},
title = {Indic Tiny TTS: Tamil},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/sulabhkatiyar/indic-tiny-tts-tamil}}
}
Please also cite the dataset and the work it builds on:
@inproceedings{ai4bharat2024rasa,
author = {Praveen Srinivasa Varadhan and Ashwin Sankar and Giri Raju and Mitesh M. Khapra},
title = {{Rasa: Building Expressive Speech Synthesis Systems for Indian Languages in Low-resource Settings}},
booktitle = {Proc. INTERSPEECH 2024},
year = {2024}
}
@inproceedings{mehta2024matcha,
author = {Shivam Mehta and Ruibo Tu and Jonas Beskow and {\'E}va Sz{\'e}kely and Gustav Eje Henter},
title = {{Matcha-TTS}: A fast {TTS} architecture with conditional flow matching},
booktitle = {Proc. ICASSP 2024},
year = {2024}
}
@inproceedings{siuzdak2024vocos,
author = {Hubert Siuzdak},
title = {Vocos: Closing the gap between time-domain and Fourier-based neural vocoders for high-quality audio synthesis},
booktitle = {Proc. ICLR 2024},
year = {2024}
}
Appendix: how we evaluated
Every model spoke the same text: 299 held-out test sentences from both voices, never used in training, and 100 FLORES-200 news sentences. A speech recognition model (AI4Bharat IndicConformer-600M) transcribed each clip, and the score is its character error rate (CER). A paired bootstrap 95 % confidence interval of the CER difference over the same sentences decides each result: better when the whole interval favours this model, the same when it includes zero, worse when it favours the other model. The larger models read the first 40 of the held-out sentences (20 per voice) unless the table shows a larger number, and all 100 FLORES-200 sentences.
- Downloads last month
- 75


