Indic Tiny TTS: Marathi

A tiny Marathi text-to-speech model: 22.5 million parameters, a female and a male voice, reads Devanagari script. On FLORES-200 news sentences it makes fewer recognition errors (1.8 % CER) than 4 other open Marathi 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 Marathi female voice (AI4Bharat Rasa, derived from the full-resolution sulabhkatiyar/indic-tts-multilingual-prepared) and the Marathi male voice (LIMMITS / SYSPIN corpus), 24 kHz.

Other open Marathi models, same test

FLORES-200 news sentences (100)

Fewer recognition errors than these 4 open Marathi models; the same as 3 larger models.

Character error rate: this model and the other open Marathi models

Model Size CER, % Extra errors vs this model, points (95 % CI) Result
This model 22.5 M 1.79
ai4bharat/IndicF5 350.6 M 1.40 -0.39 [-0.65, -0.15] theirs better
github.com/AI4Bharat/Indic-TTS (mr.zip) 65.6 M 1.54 -0.26 [-0.61, +0.08] same
ai4bharat/vits_rasa_13 31.3 M 1.99 +0.20 [-0.14, +0.55] same
ai4bharat/indic-parler-tts 937.8 M 2.37 +0.58 [-0.37, +2.13] same
SYSPIN/vits_Marathi_Female + SYSPIN/vits_Marathi_Male 29.1 M 2.48 +0.68 [+0.28, +1.11] ours better
rhasspy/piper-voices (mr_IN-google-medium) 19.2 M 3.44 +1.64 [+1.14, +2.17] ours better
facebook/mms-tts-mar 29.1 M 5.41 +3.62 [+2.87, +4.48] ours better
multilingual-tts/VITS-OpenBible-Marathi 29.1 M 9.37 +7.58 [+6.38, +8.91] ours better

Held-out test sentences (300)

Fewer recognition errors than these 3 open Marathi models.

Character error rate: this model and the other open Marathi models

Model Size CER, % Extra errors vs this model, points (95 % CI) Result
This model 22.5 M 4.04
github.com/AI4Bharat/Indic-TTS (mr.zip) 65.6 M 6.94 +2.90 [+1.35, +4.80] ours better
rhasspy/piper-voices (mr_IN-google-medium) 19.2 M 8.45 +4.41 [+3.29, +5.67] ours better
facebook/mms-tts-mar 29.1 M 12.81 +8.78 [+7.04, +10.63] ours better
Also trained on same speaker voices:
ai4bharat/vits_rasa_13 31.3 M 3.83 -0.21 [-1.24, +0.76] same
SYSPIN/vits_Marathi_Female + SYSPIN/vits_Marathi_Male 29.1 M 6.28 +2.25 [+1.18, +3.42] ours better

Larger models, same held-out sentences

  • Same error rate as ai4bharat/indic-parler-tts at 1/42 the size, ~113× faster on T4
  • Same error rate as ai4bharat/IndicF5 at 1/16 the size, ~150× faster on T4

Character error rate: this model and the larger open Marathi 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/IndicF5 350.6 M 40 2.70 5.01 -2.31 [-6.35, +1.32] same
ai4bharat/indic-parler-tts 937.8 M 40 6.00 5.01 +0.99 [-3.50, +5.51] 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: Korade nesun punha amhi gadit basalo. Gadi ghari ali, to bara vajavayas ale hote
Translation (approx.): We put on dry clothes and got back into the cart. By the time the cart reached home, it was nearly twelve o'clock.

एक जून रोजी बाल संरक्षण दिन साजरा केला जातो.
Transliteration: Ek jun roji bal sanrakshan din sajara kela jato.
Translation (approx.): Child Protection Day is celebrated on 1 June.

शिवाय तिकडे घरी तरी कोण आहे. पुष्कळ वर्षांनी दोघी भेटलो, हेच पुष्कळ झाले
Transliteration: Shivay tikade ghari tari kon ahe. Pushkal varshanni doghi bhetalo, hech pushkal jhale
Translation (approx.): Besides, who is there at home anyway? We two met after many years; that itself is plenty.

हॅलो! वैष्णोदेवी श्राईन बोर्ड ग्राहक सेवेतून बोलताय का?
Transliteration: Helo! Vaishnodevi shrain bord grahak sevetun bolatay ka?
Translation (approx.): Hello! Is this Vaishno Devi Shrine Board customer service?

Male voice (voice="male")

ज्याचे मन, मेंदू व मनगट बळकट असेल,तेच राष्ट्राच्या विकासाचा आधार होऊ शकतील
Transliteration: Jyache man, mendu va managat balakat asel, tech rashtrachya vikasacha adhar hou shakatil
Translation (approx.): Only those whose mind, brain and wrist are strong can become the foundation of the nation's progress.

त्यात आत मटार दाणे आणि कणसाचे दाणे घातल्यामुळे कटलेट्स खाताना ते दाताखाली येतात आणि चव वाढते
Transliteration: Tyat at matar dane ani kanasache dane ghatalyamule katalets khatana te datakhali yetat ani chav vadhate
Translation (approx.): Because green peas and corn kernels are added inside, you bite on them while eating the cutlets, and it adds to the taste.

यासंदर्भात विविध बोर्डांच्या शाळांच्या संस्था प्रमुखांशी चर्चा करण्यात आल्यानंतर संबंधित शाळांनी मराठी विषय शिकवण्यास होकार दिला आहे
Transliteration: Yasandarbhat vividh bordanchya shalanchya sanstha pramukhanshi charcha karanyat alyanantar sambandhit shalanni marathi vishay shikavanyas hokar dila ahe
Translation (approx.): After discussions in this regard with the heads of schools of various boards, the schools concerned have agreed to teach Marathi as a subject.

या ख्रिसमसला तुमच्या सांताक्लॉजला त्याचे सुंदर सुंदर गिफ्ट्स घेऊन थेट कलकत्ताच गाठायला सांगा.
Transliteration: Ya khrisamasala tumachya santaklojala tyache sundar sundar giphts gheun thet kalakattach gathayala sanga.
Translation (approx.): This Christmas, tell your Santa Claus to bring his lovely gifts and head straight to Calcutta.

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-marathi", ignore_patterns=["onnx/*"]))  # model + its small Python package
from indic_tiny_tts import TinyTTS

tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-marathi")  # 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-marathi", device="cpu")               # any computer
tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-marathi", device="cuda")              # NVIDIA GPU
tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-marathi", 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-marathi", 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-marathi --local-dir indic-tiny-tts-marathi
pip install ./indic-tiny-tts-marathi
indic-tiny-tts "नमस्कार! आज हवामान खूप छान आहे." --model ./indic-tiny-tts-marathi --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 Marathi (Devanagari script)
Voices female (Rasa, AI4Bharat), male (LIMMITS 2024, IISc SYSPIN)
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 misheard 4.04 % of this model's characters, close to the 2.66 % of the real recordings.

Good to know

  • Devanagari script only. English words in Latin letters (hello) are skipped with a warning. Write them in Devanagari script.
  • Whole numbers are read out in Marathi: 25 becomes पंचवीस and 2024 becomes दोन हजार चोवीस. Decimals, percentages and currency (3.5%, ₹500) are not converted yet and are skipped, so write them in words. 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 38 hours of recorded speech by two speakers.
  • The female voice is the weaker one. It makes more recognition errors (5.70 % against 3.06 % for that speaker's recordings; male voice 2.37 % against 2.27 %), skips or repeats a word more often, and sometimes holds a sound too long. A better female voice is planned for the next version.
  • Speaker consent: the male voice comes from the LIMMITS 2024 corpus. Speaker consent for voice-model release is not documented by the source; the corpus is released under CC-BY-4.0 by its organisers.
  • Speaking rate: each voice has a default speed matched to its speaker on held-out data (length_scale in config.json: mr_F 1.034, mr_lim_M 1.004). 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

  • Rasa dataset by AI4Bharat (ai4bharat/Rasa), licence CC-BY-4.0: the Marathi female speaker (18.1 h), 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: 1.55 % of the female clips.
  • LIMMITS 2024 challenge corpus (SYSPIN project, © Indian Institute of Science, Bangalore, SPIRE Lab), licence CC-BY-4.0 through the SYSPIN Dataset Terms of Use, obtained from the Hugging Face mirror iAkashPaul/limmits-2024 (revision 9ee2415a): the Marathi male speaker (19.4 h used). Our changes: audio resampled to 24 kHz mono; written/spoken transcript pairs resolved to the spoken form; text normalised; clips shorter than 0.5 s or longer than 20 s and exact duplicates left out; held-out sentences removed from training; training capped at 20 h; leading silence longer than 0.3 s shortened to 0.15 s (4,853 of 8,211 clips); training clips failing the speech recogniser check left out: 0.16 %. The organisers note that the release contains some audio and text errors.
  • 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 129,459 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 training data (the Rasa dataset and the LIMMITS 2024 corpus; see Citation and LICENSE.md).
  • 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{katiyar2026indictinyttsmarathi,
  author       = {Sulabh Katiyar},
  title        = {Indic Tiny TTS: Marathi},
  year         = {2026},
  publisher    = {Hugging Face},
  howpublished = {\url{https://huggingface.co/sulabhkatiyar/indic-tiny-tts-marathi}}
}

Please also cite the data and the work it builds on (for the LIMMITS 2024 voice, credit the SYSPIN project and IISc SPIRE Lab as in its terms of use):

@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: 300 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
21
Safetensors
Model size
8.94M 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-marathi

Collection including sulabhkatiyar/indic-tiny-tts-marathi