UDGAM LABS · Speech-to-text model · about 56M parameters · part of the Shruti family
Shruti Gujarati
Shruti Gujarati turns Gujarati and English speech into text, offline, from one 29.7 MB file. Gujarati comes out in Gujarati script and English words stay in English, the way people actually type: દસ વાગ્યે party plot પર મળીએ. It runs on a phone, a laptop or inside a web page, with no server and no internet connection. On a 2021 Samsung Galaxy F62 it transcribes 10.3x faster than real time using 64 MB of memory.
On Gujarati conversations that mix in English, scored with the English words written in English letters, it makes fewer errors than every model we measured, including SraVaani-1.0, a model about 30 times its size (28.5 vs 32.4), and IndicConformer Gujarati, almost five times its size (44.9). On read Gujarati those two larger models are more accurate (see below). Shruti Gujarati is the Gujarati member of the Shruti family, next to Shruti Hindi, Shruti Marathi, Shruti Tamil, Shruti Bengali and Shruti Telugu, and is built on Cactus Whistle (Apache-2.0) via Shruti Hindi: we retrained all its weights on openly licensed Gujarati and English speech and added 700 Gujarati vocabulary pieces.
Shruti (શ્રુતિ) is Sanskrit for "that which is heard".
Try it: in your browser, on your own device · demo on Hugging Face · Code and examples: github.com/udgamlabs/shruti
Audio (Gujarati with English, AI voice) Shruti Gujarati writes (on the phone, native engine, unedited)
"...દસ વાગ્યે party plot પર મળીએ" -> આજે રાત્રે ગરબા રમવા નવી ચણિયા ચોળી પહેરીશ દસ વાગ્યે party plot પર મળીએ
"બેન, થોડી ખાંડ ઉછીની આપશો?..." -> બેન થોડી ખાંડ ઓછીની આપશો મહેમાન આવ્યા છે ને ઘરમાં ખાંડ ખલાસ થઈ ગઈ છે
(The first line shows one spacing difference: ચણિયાચોળી written as two words. In the phone's browser the same clip wrote party plot in Gujarati script, as પાર્ટી પ્લોટ. The second shows a real error: ઉછીની, "on loan", written as ઓછીની.)
| 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-gujarati.cact, 29.7 MB (4-bit weights, 8-bit activations) for the Cactus needle engine |
| Input / output | 16 kHz audio of any length → text; Gujarati in Gujarati script, English words in lowercase Latin |
| Languages | Gujarati, English, and Gujarati mixed with English. For Hindi use Shruti Hindi; for Marathi, Shruti Marathi; for Tamil, Shruti Tamil; for Bengali, Shruti Bengali; for Telugu, Shruti Telugu |
| 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 |
Quick start
pip install cactus-needle
hf download udgamlabs/shruti-gujarati shruti-gujarati.cact config.json --local-dir .
from needle import Whistle
model = Whistle("shruti-gujarati.cact")
print(model.transcribe("clip.wav")) # Gujarati 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-gujarati.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 is a
working page.
Results
Word error rate (%, lower is better), 200 clips per set, the same clips and scorer for every model; Shruti Gujarati in its on-device engine on a Mac. Measured 2 November 2026. Size is the file as published by its makers (whisper.cpp q8_0 for Whisper).
| Model | File size | FLEURS (read) | Kathbath test-unknown (read) | DiarBench, English in English (conversation, held out) | DiarBench, native reference |
|---|---|---|---|---|---|
| Shruti Gujarati | 29.7 MB | 27.9 | 20.7 | 28.5 | 33.6 |
| Whisper tiny | 43.5 MB | 205.9 | 222.9 | 469.1 | 472.4 |
| Whisper base | 81.8 MB | 191.1 | 189.4 | 278.6 | 280.9 |
| Dolphin base (int8) | 103.7 MB | 74.7 | 64.0 | 77.6 | 79.5 |
| Vosk Gujarati (small, 0.42) | 108.1 MB | 36.5 | 28.0 | 71.9 | 70.2 |
| IndicConformer Gujarati (int8) | 137.7 MB | 18.8 | 14.5 | 44.9 | 40.2 |
| Dolphin small (int8) | 249.7 MB | 61.6 | 47.3 | 92.9 | 93.4 |
| Whisper small | 264.5 MB | 131.9 | 136.0 | 131.8 | 132.4 |
| Whisper-base Gujarati (vasista22) | 290.5 MB | 32.3 | 29.8 | 72.5 | 70.0 |
| SraVaani-1.0 | 908.8 MB | 16.1 | 12.5 | 32.4 | 22.8 |
| Whisper-small Gujarati (vasista22) | 967.1 MB | 26.8 | 35.1 | 65.4 | 62.3 |
DiarBench is real conversation that mixes in English. The "English in English" column scores against references that write English words in English (Latin script), as Shruti Gujarati does; the native column drops the English words from the reference. FLEURS and Kathbath are read Gujarati.
- Conversations that mix in English: Shruti Gujarati makes fewer errors than SraVaani-1.0 (28.5 vs 32.4; paired 95% interval of the difference -5.66 to -2.14 points), IndicConformer Gujarati (44.9; -19.03 to -13.91), the Whisper-small Gujarati fine-tune (65.4; -39.32 to -34.50), the Whisper-base Gujarati fine-tune (72.5; -46.56 to -41.59) and Vosk Gujarati (71.9; -45.92 to -40.79). The other models above are further behind. On the native reference, SraVaani-1.0 is ahead (22.8 vs 33.6); IndicConformer Gujarati is behind (40.2; -9.48 to -4.09).
- English inside Gujarati: Shruti Gujarati writes 50.4% of DiarBench's English words in English; IndicConformer Gujarati, Vosk Gujarati, SraVaani-1.0 and the Whisper Gujarati fine-tunes write none (0%), and the other models above 24.0% or fewer.
- Against Vosk Gujarati (over three times its size): fewer errors on every set (FLEURS 27.9 vs 36.5, Kathbath 20.7 vs 28.0, DiarBench 28.5 vs 71.9).
- One file for two languages: Shruti Gujarati also transcribes English: LibriSpeech test-clean 6.17 (Shruti Hindi: 5.95).
- Silence: 0 words invented on 100 silent clips.
- Held-out sets: we did not train on FLEURS or DiarBench, or on Kathbath's unseen-speaker test set.
Other Gujarati speech models exist that we have not measured. A scan of Hugging Face on 4 November 2026 found none under about 190 MB outside this table; these results cover only the models listed here.
Speed and memory (offline): Samsung Galaxy F62 (2021, 6 GB RAM), native engine, 10.3x faster than real time, 64 MB peak memory (20 clips). In that phone's Chrome, the page reports 2.9-3.6 s on the device for 7.2-8.3 s of speech.
Where it falls short
- Read Gujarati accuracy. IndicConformer Gujarati (almost 5x larger) makes about 33% fewer errors on FLEURS (18.8 vs 27.9) and 30% fewer on Kathbath (14.5 vs 20.7); SraVaani-1.0 (about 30x larger) is ahead on both read sets, and the Whisper-small Gujarati fine-tune is level with it on FLEURS (26.8; paired interval -1.17 to +3.55).
- Conversations on the native reference. When English words are dropped from the reference, SraVaani-1.0 is ahead (22.8 vs 33.6; +8.92 to +12.74).
- English words in Gujarati script: only about half of the English words come out in English letters; others are written in Gujarati script (party plot as પાર્ટી પ્લોટ, stock as સ્ટોક).
- Real errors and spelling variants: real errors happen (ઉછીની, "on loan", as ઓછીની), and joins and spelling variants count as errors (ચણિયાચોળી as ચણિયા ચોળી).
- Loud noise: Shruti models sometimes repeat a phrase over and over in loud noise (9 of 3,400 clips at 5 dB on an everyday-speech test, measured on Shruti Hindi-family models, not on Gujarati).
- Not tested on Gujarati: 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 Gujarati vocabulary pieces and used Shruti Hindi's language tag for Gujarati, then trained all weights with 4-bit quantisation-aware training.
- Data: openly licensed Gujarati speech, with English words kept in English where the dataset marks them, plus English from Shruti Hindi's own training data. Test speakers and test sentences were removed.
| Source | Licence |
|---|---|
| AI4Bharat IndicVoices, Gujarati | CC-BY-4.0 |
| AI4Bharat Kathbath, Gujarati | CC-BY-4.0 |
| SPRING-INX Gujarati R1 and R2 (SPRING Lab, IIT Madras) | CC-BY-4.0 |
| ARTPARK-IISc Vaani, Gujarati (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 Gujarati and English speech on devices where privacy, cost or connectivity rule out a cloud service: voice notes, dictation, voice commands, captions, field apps. Not for high-stakes use (medical, legal) without human review. Accuracy drops on noisy audio, strong accents, rare names, numbers and long technical English.
Licence
Apache-2.0. Shruti Gujarati is a modified version of Shruti Hindi (Udgam Labs) and of Cactus Whistle by Cactus Compute
(both Apache-2.0); see NOTICE. The training data licences are listed above; please credit the datasets if you build on
it.
Citation
@misc{udgamlabs2026shrutigujarati,
title = {Shruti Gujarati: offline speech-to-text for Gujarati and English in 29.7 MB},
author = {{Udgam Labs}},
year = {2026},
url = {https://huggingface.co/udgamlabs/shruti-gujarati}
}
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
- 16
