On this page
Why there is no ranking of open-source Hindi TTS yet
Most "best Hindi TTS" lists rank models on someone's listening impressions, or on speed and quality figures that each model's authors published about their own work. Those figures use different sentences, different hardware and different scoring, so they cannot be lined up against each other. The large Indian-language listening studies of 2026 rank listener preference and accent rather than self-hosted speed, and none was designed to pick a model for your workload; what the published Indic TTS benchmarks measure explains each one.
So this guide does not rank. It compares seven models on properties you can check on their model pages: licence, languages, voices, size, output, streaming and maintenance, each read on 24 October 2026. Then it sets out the test that would rank them for your use, and which failures to look for first.
"Open source" is used loosely here, as it is in most threads. Strictly, these are open-weight models: anyone can download the trained weights, but what you may do with them, and with the audio they produce, depends on the licence. Sonex Labs, which publishes this page, sells its own text-to-speech model, Pāṇini, with native Hindi voices. It is not open source and is not part of this comparison.
The licence decides first
A model whose licence forbids commercial use is out for a business, however good it sounds, so read the licence before any listening test. The seven models fall into three groups.
Permissive licences: MIT and Apache 2.0
IndicF5 is released under the MIT licence, and a member of the AI4Bharat organisation wrote on its discussion board that it is "completely open for commercial usage" (IndicF5 discussion 34). Its card adds a condition of use: clone only voices you have explicit permission to clone (IndicF5 model card). The files are gated, which means you log in and accept those terms before downloading.
Indic Parler-TTS, Veena and Kokoro-82M are under Apache 2.0, another permissive licence. One open question remains for Indic Parler-TTS. A user asked in September whether conditions from its training datasets, which include GLOBE, IndicTTS, LIMMITS and Rasa, carry over to generated audio used commercially, and the question had no reply when we read it (Indic Parler-TTS discussion 31). Veena's card says its training data is proprietary and not public (Veena model card).
Commercial use with conditions: Indic-Speak
Indic-Speak, released by Bodhan AI in early September 2026 and now recommended on both AI4Bharat model cards in their place, uses its own Indic Open Model License v1.0 (Indic-Speak model card). Its card describes no-cost commercial use, with conditions: credit the authors, release derivatives under the same licence, and get Bodhan AI's written sign-off before offering the model to others as an API or hosted service.
That last condition matters if you are building a voice platform rather than a product for your own callers. A separate commercial licence is also needed above 500 million monthly active users or $250 million in annual revenue, and cloning real people's voices without consent is prohibited.
Non-commercial: XTTS-v2 and MMS-TTS
XTTS-v2 uses the Coqui Public Model License, which "allows only non-commercial use of a machine learning model and its outputs" (XTTS-v2 licence). Companies may use it for testing and evaluation, but not to produce audio they earn from. Coqui stopped its paid services in December 2023 and has since shut down (Analytics India Magazine), so there is no longer anyone selling a commercial licence.
Meta's MMS-TTS Hindi model, part of its Massively Multilingual Speech project, is under CC BY-NC 4.0, where NC means non-commercial (MMS-TTS Hindi model card). Both are useful for research and for hearing what an open model can do, and neither belongs in a commercial product.
Languages, voices and model size
After the licence, the next filter is whether a model covers your languages and offers the kind of voice control you need. The table summarises what each model page documents; blank or "not documented" entries mean the page does not say, not that the feature is missing.
How each model chooses a voice
The models give you voices in three different ways. IndicF5 and XTTS-v2 clone a voice from a short reference recording; IndicF5 also needs the exact transcript of that clip, and XTTS-v2 asks for about 6 seconds of audio. Indic Parler-TTS has 69 named speakers and lets you describe the voice in a sentence of English, such as a female speaker with a moderate pace and clear, close-up audio.
Indic-Speak offers 95 library voices recorded by contracted artists and does not support cloning. Veena has four voices for Hindi and English. Kokoro has four Hindi voices, and its own voice list grades each one C and puts its total Hindi training data at between 1 and 10 hours (Kokoro VOICES.md). For cloning, the legal question is consent as much as quality: India's rules on voice cloning cover what you need from the speaker.
What size tells you about memory
Size is the best documented clue to hardware. The weights alone of a model stored in 32-bit floating point take 4 bytes per parameter, and 16-bit weights take 2. By that arithmetic, IndicF5's 0.35 billion parameters need about 1.4 GB and Indic Parler-TTS's 0.94 billion about 3.8 GB. A 3.8-billion-parameter model such as Veena needs about 7.6 GB in 16-bit form, or roughly a quarter of that with the 4-bit loading its card shows.
Kokoro, at 82 million parameters, is small enough to try on a CPU. These figures cover the weights only: generation also needs memory for intermediate results, and that grows with sentence length and the number of streams. Treat them as a floor and measure the peak on your own hardware.
| Model (maker) | Licence | Languages | Size | Output | Streaming documented | Page last updated |
|---|---|---|---|---|---|---|
| IndicF5 (AI4Bharat) | MIT; clone only with permission | 11 Indian | 0.35B | 24 kHz | No | Oct 2026 |
| Indic Parler-TTS (AI4Bharat, Hugging Face) | Apache 2.0; output terms asked, unanswered | 21 incl. English | 0.94B | Set in model config | Yes, via the parler-tts library | Oct 2026 |
| Indic-Speak (Bodhan AI) | Indic Open Model License: commercial with conditions | 13, plus 10 in preview | 3B-class (Llama 3.2 3B base) | 24 kHz | Not stated | Sep 2026 |
| Veena (Maya Research) | Apache 2.0 | Hindi, English | 3B-class (3.8B weights) | 24 kHz | Listed as future work | Oct 2025 |
| Kokoro-82M (hexgrad) | Apache 2.0 | 8, incl. Hindi (4 voices, grade C) | 82M | 24 kHz | Segment by segment | Apr 2025 |
| XTTS-v2 (Coqui) | Coqui Public Model License: non-commercial | 17, incl. Hindi | Not stated | 24 kHz | Yes | Dec 2023 |
| MMS-TTS Hindi (Meta) | CC BY-NC 4.0: non-commercial | Hindi (one model per language) | 36M | 16 kHz | No | Sep 2023 |
Streaming and hardware for live calls
For narration, a model can take its time. For a phone agent, what matters is how soon the first audio arrives, and that depends on whether the model streams, meaning it hands over audio in pieces while it is still generating the rest. A model that returns audio only when the whole sentence is finished makes the caller wait for the full generation time.
Three of the seven document some form of streaming. The parler-tts library has a streamer that starts playback after a set number of decoding steps, and its inference guide claims first audio in less than half a second on a modern GPU with its optimisations (Parler-TTS inference tips). XTTS-v2's documentation describes streaming inference and notes that it is typically slower overall but delivers a first chunk sooner (XTTS documentation). Kokoro's pipeline yields audio one text segment at a time, so playback can start after the first sentence (Kokoro model card).
IndicF5's card documents no streaming mode, Veena lists streaming as future work, and Indic-Speak's card gives a response time before audio starts but describes no streaming mode. Treat every published speed figure, including those above, as the author's claim until you have timed it on your own hardware.
Apart from the small Kokoro, these models expect a GPU for live use, and silent fall-back to the CPU is the most common reason for very slow results in public threads. On a phone line the output is also converted from 24 kHz to 8 kHz, which the guide to 8 kHz phone audio explains. How many simultaneous calls a card can carry is a separate measurement, covered in concurrent calls per 24 GB GPU.
Maintenance and the failures users report
Maintenance matters because Hindi failures get fixed only where someone is still working on the code. IndicF5's GitHub code last changed in September 2025, and both AI4Bharat cards now point users to Indic-Speak, which suggests where the team's effort has moved. The parler-tts library's last commit was in December 2024. Coqui's original repository has had no new commit since early 2024, and development of its toolkit continues in a fork run by the Idiap Research Institute (idiap/coqui-ai-TTS), though the XTTS-v2 weights and their licence are unchanged.
Each model also has open reports of Hindi going wrong, mostly on ordinary input: long paragraphs, numbers or short phrases. The list at the end of this section is a test plan rather than a verdict, because each item is one user's report with their own settings.
Two patterns run through those reports. Long input fails more often than short input, which is why the usual workaround is to split text into sentences before synthesis. Numbers break more often than words, so the suggested fix is a text normaliser that writes ₹1,499 or 4582 out in Hindi words first. How Hindi TTS should read rupees, lakh, crore and dates covers what it must handle.
- IndicF5 skipping or half-saying many Hindi words in long paragraphs, despite good voice cloning, clean reference audio and chunked text (Hugging Face discussion 39).
- IndicF5 producing garbled fragments, different on every run, when a user tried Telugu with the model's own reference prompts (discussion 25).
- IndicF5 failing to load with "Cannot copy out of meta tensor; no data!" on Colab and Kaggle; a user's .to_empty() workaround stopped the error but sometimes gave wrong audio (GitHub issue 10, open).
- IndicF5 turning OTPs, amounts and dates into garbled noise until they were spelt out as words (GitHub issue 31, open).
- Kokoro crashing on a long Hindi passage; another user found the same text generated fine and recommended splitting long text (kokoro issue 241).
- XTTS-v2 adding unintelligible extra sounds to a short Hindi phrase; a project contributor replied that this can happen with short text, and that fine-tuning helps but cannot avoid it completely (coqui-ai/TTS issue 4125).
What you have to test yourself
Once the licence and languages have narrowed the list, only a test on your own sentences and hardware can choose between the survivors. Use the same GPU, driver and library versions for every model, and write them down, because results change with each.
Measure five things. Time to first audio is how long a listener waits before hearing anything. Real-time factor (RTF) is synthesis time divided by the length of the audio produced, so 0.5 means a 4-second sentence takes 2 seconds, and anything at or above 1.0 cannot keep up with speech. Peak VRAM is the most GPU memory the model used. Concurrency is how many streams can run at once while each stays below an RTF of 1.0 and your first-audio target. Number and Hinglish handling is scored right or wrong per item by native listeners.
Decide what matters before you listen. A phone agent needs fast first audio and steady output on short sentences, and can live with less expressive speech. Narration and dubbing can wait longer for each sentence but punish skipped words and odd pacing across a long script. Self-hosting also costs money whether or not anyone is calling, so the break-even guide to self-hosting voice models is worth reading before you commit.
Getting a model running on Colab or a first GPU
Most questions on these models' discussion boards are about getting them to run at all. Confirm that PyTorch can see the GPU before loading anything, because a CPU fall-back is silent and very slow. Install each model's package from its own repository, as the cards instruct: Indic Parler-TTS from the parler-tts GitHub repository, and IndicF5 from its GitHub repository in a Python 3.10 environment.
For IndicF5, pass a reference clip together with its exact transcript, because a mismatched transcript is a common cause of strange output. The script below wraps the Indic Parler-TTS example from its model card with the measurements above, and the same timing wrapper works around any model's generate call.
# pip install git+https://github.com/huggingface/parler-tts.git soundfile
import time
import soundfile as sf
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
assert torch.cuda.is_available(), "No GPU visible: check the runtime type and your CUDA build"
device = "cuda:0"
model = ParlerTTSForConditionalGeneration.from_pretrained("ai4bharat/indic-parler-tts").to(device)
tokenizer = AutoTokenizer.from_pretrained("ai4bharat/indic-parler-tts")
description_tokenizer = AutoTokenizer.from_pretrained(model.config.text_encoder._name_or_path)
prompt = "आपकी EMI पंद्रह तारीख तक भरनी है, यानी अगले गुरुवार तक।"
description = ("A female speaker delivers a slightly expressive and animated speech with a moderate "
"speed and pitch. The recording is of very high quality, with the speaker's voice "
"sounding clear and very close up.")
description_ids = description_tokenizer(description, return_tensors="pt").to(device)
prompt_ids = tokenizer(prompt, return_tensors="pt").to(device)
torch.cuda.reset_peak_memory_stats()
torch.cuda.synchronize()
t0 = time.perf_counter()
generation = model.generate(
input_ids=description_ids.input_ids,
attention_mask=description_ids.attention_mask,
prompt_input_ids=prompt_ids.input_ids,
prompt_attention_mask=prompt_ids.attention_mask,
)
torch.cuda.synchronize()
seconds = time.perf_counter() - t0
audio = generation.cpu().numpy().squeeze()
rate = model.config.sampling_rate
duration = len(audio) / rate
print(f"generated {duration:.2f} s of audio in {seconds:.2f} s, RTF {seconds / duration:.2f}, "
f"peak VRAM {torch.cuda.max_memory_allocated() / 2**30:.1f} GiB")
sf.write("indic_parler_hi.wav", audio, rate)Sources
- ai4bharat/IndicF5 model cardOfficial
- ai4bharat/IndicF5 discussion 34: licenceSecondary
- ai4bharat/indic-parler-tts model cardOfficial
- ai4bharat/indic-parler-tts discussion 31: Apache-2.0 scope for outputsSecondary
- huggingface/parler-tts: inference tips (streaming)Official
- bodhan-ai/indic-speak model card and Indic Open Model License v1.0Official
- maya-research/Veena model cardOfficial
- hexgrad/Kokoro-82M model cardOfficial
- hexgrad/Kokoro-82M VOICES.mdOfficial
- coqui/XTTS-v2 model cardOfficial
- Coqui Public Model License (XTTS-v2 LICENSE.txt)Official
- Coqui TTS documentation: XTTS (streaming inference)Official
- idiap/coqui-ai-TTS: maintained fork of the Coqui TTS toolkitOfficial
- Analytics India Magazine: Conversational AI startup Coqui shuts downSecondary
- facebook/mms-tts-hin model cardOfficial
- ai4bharat/IndicF5 discussion 39: skipping words during generationSecondary
- ai4bharat/IndicF5 discussion 25: random garbled fragmentsSecondary
- AI4Bharat/IndicF5 issue 10: meta tensor errorSecondary
- AI4Bharat/IndicF5 issue 31: numbers causing gibberish noiseSecondary
- hexgrad/kokoro issue 241: Running Hindi, kokoro crashesSecondary
- coqui-ai/TTS issue 4125: Random Talk (XTTS Hindi)Secondary
Change log: 24 Oct 2026, Rewritten for publication without the planned GPU results: retitled, no ranking; expanded from four to seven models (added Indic-Speak, Veena and MMS-TTS Hindi) compared on documented licence, languages, size, streaming and maintenance; corrected the Kokoro and XTTS-v2 failure reports




