UDGAM LABS · Speech-to-text model · about 56M parameters · part of the Shruti family
Shruti Kashmiri
Kashmiri in Perso-Arabic script and English in one 29.7 MB file that runs on your device. Kashmiri comes out in Perso-Arabic script, and English words can stay in English letters, as here: اَز چھُ واریاہ تُرُن heater چھُنہٕ چَلان. It runs on a phone, a laptop or in a browser, with no server and no internet connection. On a 2021 Samsung Galaxy F62 it transcribes about 9x faster than real time using 64 MB of memory.
Its one lead is on the set that shares a source with its training data. On IndicVoices valid it has fewer word errors than IndicConformer Kashmiri (43.0 vs 48.7), but that set flatters both models, and IndicConformer Kashmiri has fewer character errors there (15.71% vs 23.16%). The independent check, DiarBench, is 32 turns with no English in its reference, too small to agree or disagree (56.4 vs 58.2, an interval that includes 0). No Kashmiri reader has reviewed this output yet.
Shruti Kashmiri is part of the Shruti family, one small model per language, and is built on Cactus Whistle (Apache-2.0) via Shruti Hindi: we retrained all its weights on Kashmiri and English speech and added 700 Kashmiri vocabulary pieces.
Shruti (شرُتی) is Sanskrit for "that which is heard".
Try it: on udgamlabs.com, on your own device · demo on Hugging Face · Code and examples: github.com/udgamlabs/shruti
An example of how it writes, from a test clip read by an AI voice, not real speech. It is the phone's unedited output, and no Kashmiri speaker has checked it:
اَز چھُ واریاہ تُرُن heater چھُنہٕ چَلان
| Developer | Udgam Labs |
| Base model | Shruti Hindi (Udgam Labs), built on Cactus Whistle (Cactus Compute); both Apache-2.0 |
| Parameters | About 56M (55,875,913; 8 encoder + 8 decoder layers, width 512) |
| File | shruti-kashmiri.cact, 29.7 MB (4-bit weights, 8-bit activations) for the Cactus needle engine |
| Input / output | 16 kHz audio of any length → text; Kashmiri in Perso-Arabic script, English words in lowercase Latin when it keeps them in English |
| Languages | Kashmiri, English, and Kashmiri mixed with English. Other languages have their own Shruti models |
| Runtime | Cactus needle engine (Apache-2.0), native and WebAssembly; we measured it on a Mac, an Android phone and that phone's Chrome |
| Licence | Apache-2.0 for this model; see the data section for the terms of its training data |
Quick start
pip install cactus-needle
hf download udgamlabs/shruti-kashmiri shruti-kashmiri.cact config.json --local-dir .
from needle import Whistle
model = Whistle("shruti-kashmiri.cact")
print(model.transcribe("clip.wav")) # Kashmiri or English is detected automatically
The cactus-needle Python package sends anonymous usage counts by default; set NEEDLE_TELEMETRY=0 to turn that off.
Command line: ./needle --model shruti-kashmiri.cact --audio clip.wav with the needle binary for your platform from
Cactus-Compute/needle3. In the browser, the wasm/ build of the same
engine runs it inside a web page; udgamlabs.com/models/shruti/kashmiri is a working page.
Results
Word error rate (%, lower is better), the same clips and scorer for every model; Shruti Kashmiri in its on-device engine on a Mac. Measured 3 November 2026. Size is the file as published by its makers.
| Model | File size | IndicVoices valid | DiarBench |
|---|---|---|---|
| Shruti Kashmiri | 29.7 MB | 43.0 | 56.4 |
| IndicConformer Kashmiri (int8) | 137.7 MB | 48.7 | 58.2 |
How to read this. DiarBench Kashmiri's reference holds no English glosses, so its native and English-in-English references are the same; only one DiarBench column is shown. IndicVoices valid is IndicVoices' own held-out split: its speakers are kept out of training and its sentences blocked, but it is the same source as our training data, so it flatters us. DiarBench is real conversation from outside it: 32 turns from 14 conversations, 748 reference words, 0 of them English, in 0 turns.
Paired 95% intervals below are Shruti Kashmiri minus the other model, in word error points (1,000 resamples of clips; "by conversation" resamples whole conversations). A negative number means Shruti Kashmiri made fewer errors; an interval that includes 0 shows no lead either way.
- IndicConformer Kashmiri: IndicVoices valid -8.39 to -3.17 by clip; DiarBench native -7.93 to +4.45 by clip, -9.08 to +3.85 by conversation.
- English inside Kashmiri: on IndicVoices valid it writes 75.6% of glossed English words in English letters (303 words). DiarBench Kashmiri has no English to test.
- One file for two languages: Shruti Kashmiri also transcribes English: LibriSpeech test-clean 6.08 (Shruti Hindi: 5.95).
- Silence: 0 words invented on 100 silent clips.
Other Kashmiri speech models exist that we have not measured, and these results cover only the models listed here.
Speed and memory (offline): Samsung Galaxy F62 (2021, 6 GB RAM), native engine, 8.6x faster than real time, 64 MB peak memory (20 clips, 120.2 s of audio; slowest clip 3.5x). In that phone's Chrome, on 4 lines played into the page, it took 1.4-3.2 s on the device for 6.5-8.3 s of speech.
Where it falls short
- Its one lead is on the flattering set. IndicVoices valid shares a source with our training data. DiarBench agrees in direction only (56.4 vs 58.2; -7.93 to +4.45), on 32 turns.
- Character errors are higher. 23.16% vs 15.71% on IndicVoices valid, 34.9% vs 25.01% on DiarBench. Word error alone hides this.
- High error rates. 43.0 on IndicVoices valid and 56.4 on conversation: expect to correct a lot.
- No English test on conversation. DiarBench Kashmiri's reference holds no English words. On IndicVoices valid it writes 75.6% of glossed English words in English letters (303 words).
- Perso-Arabic only. It does not write Kashmiri in Devanagari.
- Unmeasured rivals. Kashmiri models have appeared within weeks, including
Aazu34/kashmiri-asr-ctc(186.6 MB). We have not measured them. - Browser: tested on 4 test clips only, played into the page on one phone's Chrome with the language set. All 4 came out in Perso-Arabic script. These are test clips read by an AI voice, not real speech. Not tested with a live microphone. On the other Shruti languages where we measured it, plain English loses a little accuracy with the language set.
- No Kashmiri reader has reviewed this output yet.
- Loud noise: Shruti models sometimes repeat a phrase over and over in loud noise (measured on Shruti Hindi-family models, not on Kashmiri).
- Not tested on Kashmiri: noise, music, far-away or speaker-played audio, Linux, Windows and iOS. No punctuation; numbers come out as words.
How it was trained
- Start: Shruti Hindi (itself a full fine-tune of Cactus Whistle). We added 700 Kashmiri vocabulary pieces and used Shruti Hindi's language tag for Kashmiri, then trained all weights with 4-bit quantisation-aware training.
- Data: Kashmiri speech, with English words kept in English where the dataset marks them, plus English from Shruti Hindi's own training data. Test sentences were removed.
| Source | Licence |
|---|---|
| AI4Bharat IndicVoices, Kashmiri | CC-BY-4.0 |
| ARTPARK-IISc Vaani, Kashmiri (transcribed part) | CC-BY-4.0 |
| English from Shruti Hindi's training data: LibriSpeech, Mozilla Common Voice 17 English, AI4Bharat NPTEL | CC-BY-4.0, CC0, CC-BY-4.0 |
Intended use and limitations
For transcribing Kashmiri and English on devices where privacy, cost or connectivity rule out a cloud service: voice notes, dictation, captions, field apps. If accuracy matters more than size, use a larger model. Not for high-stakes use without human review. Accuracy drops on noisy audio, strong accents, rare names, numbers and long technical English.
Licence
Apache-2.0 for this model. Shruti Kashmiri is a modified version of Shruti Hindi (Udgam Labs) and of Cactus Whistle by Cactus Compute (both Apache-2.0); see NOTICE. That licence covers this model, not its training data: the data section above gives each source's terms. Please credit the datasets if you build on it.
Citation
@misc{udgamlabs2026shrutikashmiri,
title = {Shruti Kashmiri: offline speech-to-text for Kashmiri and English in 29.7 MB},
author = {{Udgam Labs}},
year = {2026},
url = {https://huggingface.co/udgamlabs/shruti-kashmiri}
}
About Udgam Labs. Udgam Labs is an independent AI research lab. We work from first principles: before we build, we understand why things work, whether we are training a model, fine-tuning one or applying AI to a new problem. Udgam (उद्गम) is Sanskrit for origin. udgamlabs.com
- Downloads last month
- 1
