v1 · Hindi, English, Hinglish · Apache 2.0
India's speech to text.
AksharSTT writes down Hindi, English and the Hinglish in between, on an ordinary CPU and without the internet. The whole model is one 29.5 MB file that you can download, ship and keep. Hindi is the first Indian language. More are on the way.
akshar-v1.cact · 29.5 MB · Hugging Face · files and checksums
- Languages
- Hindi, English, Hinglish
- Size
- 29.5 MB, 4-bit
- Runs on
- Any CPU, offline
- Made by
- ByteKnot Labs
जैसे कि आप देख सकते हैं workspace में पांच tabs हैं
Made for the way India talks.
Hinglish in one line
Hindi stays in Devanagari and English words stay in English, in the same sentence, the way people type it. Numbers come out as words and there is no punctuation, so your app formats the text its own way.
Nothing leaves the device
The model runs where the audio is. It works on a train, in a clinic with bad signal, or behind a company firewall.
Fast on a plain CPU
96 times faster than real time on 12 threads of a Ryzen 9 7900X, in under 150 MB of memory. Each clip above took a laptop CPU about a tenth of a second.
Timing for every word
Every word comes with when it was said and how sure the model was. That is what captions, search inside recordings and highlighting need.
One small file
4-bit weights in a single 29.5 MB file for the needle engine from Cactus Compute. Small enough to ship inside an app.
Open weights
Apache 2.0, with the full precision weights and every training record on Hugging Face. Use it, train it further, sell what you build.
Hear it for yourself.
Record a few seconds or drop in a clip. Our demo server runs the same files you can download, and you can pick which version answers or run them all.
Honest numbers, including where we lose.
Word error rate is the share of words a model gets wrong, so lower is better. Every number here comes from one harness, on one machine, on the full test sets. Shruti by Udgam Labs is the yardstick: the open model AksharSTT learned from, and the one we set out to beat.
| Test set | Clips | Shruti | AksharSTT v1 | Difference | 010203040 |
|---|---|---|---|---|---|
| MonsoonUnscripted two person phone conversations | 753 | 20.54 | 21.78 | 1.24 behind | |
| FLEURSHindi sentences read aloud | 418 | 20.21 | 19.37 | 0.84 ahead | |
| LahajaHindi from speakers with accents from across India | 6,152 | 26.29 | 26.49 | 0.20 behind | |
| MUCS 2021Technical tutorials that switch between Hindi and English | 3,136 | 35.26 | 34.41 | 0.85 ahead | |
| SvarahEnglish spoken with Indian accents | 6,656 | 22.45 | 24.68 | 2.23 behind | |
| LibriSpeechEnglish audiobooks, test clean | 2,620 | 5.95 | 6.92 | 0.97 behind | |
| Mean of the six | 21.78 | 22.28 | 0.50 behind |
How we measured: word error rate in percent after the normaliser nfc-lower-punct2space-v1, decoding with needle engine build 3.3.3 (cactus-needle 3.2.8) and its default 5 beams, language flag hi for the Hindi and Hinglish sets and en for the English ones. Monsoon is scored with OIWER, which accepts any spelling its references list for a word. Both models ran on the same AMD Ryzen 9 7900X. The harness and every number are in the akshar repository.
test sets where v1 already beats Shruti: FLEURS Hindi and the MUCS Hinglish tutorials. On Lahaja it is 0.2 behind.
points behind on Indian accented English (Svarah), its weakest set. Phone calls (Monsoon) are 1.24 behind.
words written on 100 clips of silence and background noise. Shruti also writes none.
Every version, scored the same way.
Each one is measured on the same clips, so you can see exactly what changed. The big number is the mean word error rate over the six test sets.
AksharSTT v1
7 November 2026 · 29.5 MB, 4-bit · 524 hours
22.28mean WERAhead of Shruti on FLEURS Hindi and MUCS Hinglish. The last training step learned from human transcripts.
Download from Hugging Faceakshar v0
6 November 2026 · 29.5 MB, 4-bit · 364 hours
23.11mean WERThe first version, trained only on the teacher's transcripts, on less data.
akshar lite v0
6 November 2026 · 20.4 MB, 2-bit with a 4-bit encoder · 364 hours
24.03mean WERA third smaller, for apps with a tight size budget. A lite version of v1 comes next.
| Version | Monsoon | FLEURS | Lahaja | MUCS | Svarah | LibriSpeech | Mean |
|---|---|---|---|---|---|---|---|
| AksharSTT v1 | 21.78 | 19.37 | 26.49 | 34.41 | 24.68 | 6.92 | 22.28 |
| akshar v0 | 23.53 | 20.92 | 27.70 | 34.75 | 24.81 | 6.98 | 23.11 |
| akshar lite v0 | 24.79 | 21.78 | 28.18 | 35.06 | 26.45 | 7.91 | 24.03 |
| Shruti, for reference | 20.54 | 20.21 | 26.29 | 35.26 | 22.45 | 5.95 | 21.78 |
Four steps from Whistle to AksharSTT.
About 55 million parameters, trained over two nights on a single RTX 5080.
- 01
Teach it Devanagari
Whistle, the open model from Cactus Compute that AksharSTT starts from, was built for English and European languages. We gave it the 714 Devanagari word pieces and the Hindi tag from Shruti's tokenizer, each new piece starting from the bytes it replaces.
- 02
Learn from a teacher
56,000 updates on up to 364 hours of audio, with Shruti's transcripts as targets and its full predictions as a second signal. The weights were 4-bit from the first update, so the model learned to live with them.
- 03
Hear more of India
64,000 more updates on 524 hours from nine sources, adding the rest of Kathbath, Hindi lectures from NPTEL and more of IndicVoices. Phone calls improved the most.
- 04
Learn from people
2,400 last updates where the targets are the datasets' own human transcripts, converted to the same output style. That took the mean error from 22.45 to 22.28.
- Architecture
- Whistle encoder and decoder transformer, 8 + 8 layers, width 512
- Parameters
- About 55 million
- Precision
- 4-bit weights and 8-bit activations, trained that way from the start
- File
akshar-v1.cact, 29.5 MB, for the needle engine- Tokenizer
- Whistle's, plus 714 Devanagari pieces and a Hindi language tag
- Output
- Hindi in Devanagari, English words in lowercase Latin, numbers as words, no punctuation
- Speed and memory
- 96 times real time on 12 threads of a Ryzen 9 7900X, under 150 MB
- Training
- About 11.5 GPU hours on one RTX 5080 over two nights
524 hours of open speech data.
Nine sources, mostly Hindi, with Indian English lectures and Hinglish tutorials, all published under licences that allow commercial use. Every clip that matched a test clip, by its audio or by its text, was removed before training, so the scores above are on speech the model never heard.
| Dataset | Speech | Hours | Licence |
|---|---|---|---|
| KathbathAI4Bharat, Hindi | Sentences read aloud and recorded on phones | 135 | CC BY 4.0 |
| MUCS 2021Hindi and English | Technical tutorials that switch between Hindi and English | 92 | CC BY SA 4.0 |
| IndicVoicesAI4Bharat, Hindi | Read, spontaneous and conversational speech from many districts | 83 | CC BY 4.0 |
| Rural Women ASR v2AI4Bharat, Hindi | Women in rural India speaking freely | 80 | CC BY 4.0 |
| NPTELAI4Bharat, Hindi | University lectures in Hindi, full of English technical terms | 60 | CC BY 4.0 |
| NPTELAI4Bharat, English | University lectures in Indian English | 53 | CC BY 4.0 |
| LibriSpeechpart of train clean 100 | English audiobooks | 22 | CC BY 4.0 |
| FLEURSGoogle, Hindi | Wikipedia sentences read aloud | 3 | CC BY 4.0 |
| Silence and noisegenerated | Clips with no speech, so the model learns to stay quiet | 2 | Ours |
| Total | 1% held out for validation, 524 hours trained on | 530 |
Hindi first. The rest of India next.
Version 1 understands Hindi, English and the Hinglish in between. We are bringing the same approach to more Indian languages, one at a time, and each will ship with its scores in public.
- हिन्दी
- English
- हिन्दी + English
- मराठी
- বাংলা
- தமிழ்
- తెలుగు
- ગુજરાતી
- ಕನ್ನಡ
- മലയാളം
- ਪੰਜਾਬੀ
- ଓଡ଼ିଆ
Run it on your own machine.
The model file runs on the needle engine from Cactus Compute. Point it at the file from Hugging Face and you have a transcript in a few lines of Python.
# pip install cactus-needle==3.2.8 huggingface_hub import os os.environ.setdefault("NEEDLE_TELEMETRY", "0") # needle reports usage unless these are set os.environ.setdefault("DO_NOT_TRACK", "1") from huggingface_hub import hf_hub_download from needle import Whistle model = Whistle(hf_hub_download("byteknotlabs/AksharSTT-V1", "akshar-v1.cact")) result = model.transcribe("speech.wav", language="hi") print(result["text"])
# with the akshar server package running on this machine curl http://localhost:8765/v1/transcribe \ -F [email protected] \ -F model=akshar-v1 \ -F language=hi
- Model on Hugging Face
The model file, the full precision weights, the model card and the training records.
- Code on GitHub
Training code, the data pipeline, the evaluation harness behind every score, and the server package.
- Licences and credits
What AksharSTT is built from: Whistle, Shruti and every training dataset, with their licences.
The honest list. Read it before you build on it.
Indian English is its weakest spot
On Svarah it is 2.2 points behind Shruti. It has 53 hours of Indian English lectures to learn from today, and more accented English is on our list.
Plain text out
No punctuation, and numbers as words: "नौ बजे" rather than "9:00". Formatting is left to your app, which knows its own rules.
Tell it the language
Use hi for Hindi and Hinglish and en for English. Detection is there, but every score on this page was measured with the language set.
Borrowed words can go either way
English words Hindi has borrowed, like time or phone, sometimes come out in Devanagari and sometimes in Latin letters, depending on how the training data wrote them.
Measured on Linux so far
Our numbers come from x86 Linux machines. The needle engine runs on other platforms too, but we have not published measurements there yet.
Two languages for now
It understands Hindi and English only, so other Indian languages will not transcribe well until they ship.
Questions people ask first.
Is AksharSTT free to use?
Yes. The weights are released under Apache 2.0, which allows commercial use. The NOTICE file on Hugging Face credits the models and datasets it is built from.
Does it need the internet?
No. Once the model file is on the machine, transcription happens there. The demo on this page is the exception: it sends your clip to our server so you can try it without installing anything.
How is it related to Whistle and Shruti?
Whistle, an open model from Cactus Compute, is the starting point for the architecture and the weights. Shruti, from Udgam Labs, was the teacher during training. AksharSTT has its own weights and its own training recipe. All three are Apache 2.0.
What hardware does it need?
A CPU. On 12 threads of a Ryzen 9 7900X it runs 96 times faster than real time in under 150 MB of memory, and a laptop CPU handles the clips at the top of this page in about a tenth of a second each.
Can I train it further on my own data?
Yes. The full precision weights are on Hugging Face in the format our training code reads, and the code is on GitHub.
When will other Indian languages arrive?
We are working on them now and will not promise dates we cannot keep. Each language will ship with its scores on public test sets, like Hindi.
Why does it write Hindi and English in different scripts?
Because that is how people text. A Hinglish sentence written fully in Devanagari or fully in Latin letters is harder to read and harder to search.
Start with a recording.
Thirty seconds of your own voice tells you more than any table on this page.