Kuyil 20M (குயில்)

A tiny, fast Tamil text-to-speech model: 22,651,402 parameters in all, with the vocoder. It speaks about 15 times faster than real time on one CPU thread, so it suits phones, screen readers and voice agents. It reads Tamil script, English words in Latin script, and numbers and ₹ amounts as people say them.

Made by Zhagaram Labs, a non-profit Tamil-first AI lab. Code: github.com/zhagaramlabs/kuyil. Other sizes: kuyil-1.4m · kuyil-5m · kuyil-20m.

தமிழில்

குயில், தமிழ் உரையைப் பேச்சாக மாற்றும் ஒரு சிறிய, வேகமான மாதிரி. குரல் உருவாக்கியையும் (vocoder) சேர்த்து, இதில் 22,651,402 அளவுருக்கள் (parameters) உள்ளன. ஒரு CPU thread-இலேயே நிகழ்நேரத்தைவிட சுமார் 15 மடங்கு வேகமாகப் பேசும். அதனால் கைபேசிகள், திரை வாசிப்பான்கள் (screen readers), குரல் உதவியாளர்கள் ஆகியவற்றுக்கு ஏற்றது. தமிழ் எழுத்து, ஆங்கில எழுத்தில் வரும் ஆங்கிலச் சொற்கள், எண்கள், ₹ தொகைகள் ஆகியவற்றைப் பேசும்.

  • குரல்கள்: பெண் (female), ஆண் (male). இவை சென்னை ஐஐடியின் (IIT Madras) IndicTTS தமிழ்த் தரவுத்தொகுப்பில் பேசிய இருவரின் குரல்கள்.
  • தெளிவு: பயிற்சியில் சேர்க்காத 125 வாக்கியங்களில், பேச்சு அறிதல் மாதிரியின் (IndicConformer) எழுத்துப் பிழை விகிதம், குயிலின் பேச்சில் 2.9%, மூல ஒலிப்பதிவுகளில் 2.9%. அதாவது மூலப் பதிவுகள் அளவுக்கே தெளிவு.
  • வரம்புகள்: இலக்கிய நடை வாசிப்பில் மட்டுமே பயிற்சி பெற்றது. உரையாடல் தொனியும், தங்கிலீஷ் பேச்சுப் பயிற்சியும் இன்னும் இல்லை.
  • உரிமம்: CC BY 4.0. பயன்படுத்தும்போது Zhagaram Labs-ஐயும், சென்னை ஐஐடியின் IndicTTS-ஐயும் குறிப்பிடுங்கள். இந்தக் குரல்கள் உண்மையான மனிதர்களுடையவை. அவர்களைப் போல் நடித்து ஏமாற்றப் பயன்படுத்தாதீர்கள்.

Listen

"வணக்கம், நான் குயில். உங்களுக்கு என்ன உதவி வேண்டும்?"

Voice Sample
female
male

Use it

git clone https://github.com/zhagaramlabs/kuyil && cd kuyil && uv sync
hf download zhagaramlabs/kuyil-20m --local-dir kuyil-20m
uv run python synth.py kuyil-20m "வணக்கம், நான் குயில்." --voice female --out hello.wav

In Python, from the kuyil folder: speak, voices = synth.load("kuyil-20m"), then speak(text, "female") returns 16 kHz audio as a NumPy array.

How well it works

The 125 held-out IndicTTS sentences, spoken by each size and transcribed by IndicConformer-600M, compared with the original recordings. These are literary sentences full of long compound words, so word error is high even for the recordings, and character error is the steadier measure.

Audio Character error Word error
Original recordings 2.9% 19.2%
This model (run 20m-s43) 2.9% 18.3%

All three sizes are as intelligible as the recordings, so a recognizer can't choose between them. Native listeners will. Synthesis runs at a real-time factor of 0.06–0.07 on one Apple-silicon CPU thread, vocoder included, at every size.

How it was made

  • Recipe: PiVo-1.4M's, rebuilt for Tamil. A text encoder and duration predictor, then a causal decoder that predicts 20 FARGAN features every 10 ms. PiVo's own FARGAN vocoder (in pivo/) turns those into audio.
  • Settings: {"vocab": 128, "voices": 2, "width": 384, "ff_width": 1024, "heads": 8, "kv_heads": 4, "text_layers": 10, "decoder_layers": 6, "kernel": 5, "duration_width": 256, "feature_dim": 20, "window": 64, "dropout": 0.1, "max_token_frames": 200}.
  • Data: IndicTTS Tamil from IIT Madras, via the SPRINGLab/IndicTTS_Tamil mirror. That's 9,437 sentences from one female and one male speaker. After edge trimming, 24.8 h are left. Training used 9,022 utterances of up to 30 s.
  • Alignment: phone timings from Montreal Forced Aligner 3.4.3, trained on our own Tamil phone set.
  • Training: smooth-L1 on normalized features plus 0.1 × squared error on log durations. Batch 8, learning rate 3e-4, 90 epochs on one H100 (about 6.6 h, sharing the GPU with 8 other runs). These weights come from epoch 21, which had the lowest validation loss (0.1903). PiVo's adversarial refinement wasn't done.
  • Text frontend (frontend.py in the code repo): Tamil letters to 74 phones, with the stop allophony of spoken Tamil and doubled consonants. English in Latin script goes through CMUdict mapped to Tamil phones. Numbers are read the way people say them.

Limits

  • Two voices only, both from studio reading of literary Tamil. Conversational speech will sound read.
  • Tanglish is handled by the text frontend, but the model has never heard Tanglish speech.
  • Naturalness hasn't been rated by native listeners yet.

Use it responsibly

These are the voices of two real people, recorded for IIT Madras's TTS database. Don't use them to impersonate anyone, and say that the speech is synthetic where it matters.

Licence and attribution

  • These weights: CC BY 4.0. Credit Zhagaram Labs, and IndicTTS from IIT Madras for the training data. Keep the notices in NOTICE.
  • Training data: IndicTTS. The mirror we trained from is labelled CC BY 4.0. Its notice: COPYRIGHT 2016 TTS Consortium, TDIL, Meity represented by Hema A Murthy & S Umesh, DEPARTMENT OF Computer Science and Engineering and Electrical Engineering, IIT Madras. ALL RIGHTS RESERVED.
  • Vocoder files in pivo/: PiVo-1.4M's FARGAN vocoder, Apache 2.0, with FARGAN-derived material under the Xiph/Opus BSD licence. Their licence and notices are kept in pivo/.
  • Code: Apache 2.0, at github.com/zhagaramlabs/kuyil.
@misc{kuyil2026,
  title  = {Kuyil: a tiny Tamil text-to-speech model},
  author = {{Zhagaram Labs}},
  year   = {2026},
  url    = {https://huggingface.co/zhagaramlabs/kuyil-20m}
}
Downloads last month
-
Safetensors
Model size
21.8M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train zhagaramlabs/kuyil-20m