Text-to-Speech
ONNX
Safetensors
Tamil
tts
tamil
speech-synthesis
on-device
cpu

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.

Character error rate: this model and the other open Tamil 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.

Character error rate: this model and the other 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-tts on a T4
  • Same error rate as ai4bharat/IndicF5 at 1/16 the size, ~174× faster on a T4

Character error rate: this model and the larger open Tamil models, on the same sentences

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: 25 becomes இருபத்து ஐந்து, 3.5% becomes மூன்று புள்ளி ஐந்து சதவீதம், and ₹500 becomes ஐநூறு ரூபாய். Times such as 10:30 and 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_scale in config.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
Safetensors
Model size
8.93M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Datasets used to train sulabhkatiyar/indic-tiny-tts-tamil

Collection including sulabhkatiyar/indic-tiny-tts-tamil