Shruti Marathi · Udgam Labs

UDGAM LABS · Speech-to-text model · 55.7M parameters · part of the Shruti family

Shruti Marathi

Shruti Marathi turns Marathi and English speech into text, offline, from one 29.7 MB file. Marathi comes out in Devanagari and English words stay in English, the way people actually type: उद्या सकाळी नऊ वाजता physics ची exam आहे. 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 12x faster than real time using 64 MB of memory.

Of the open speech-to-text models under 100 MB that we measured, it is the most accurate on Marathi. IndicConformer Marathi, which is more accurate on read Marathi, is about 5x larger. Shruti Marathi is the Marathi member of the Shruti family, next to Shruti Hindi, and is built on Cactus Whistle (Apache-2.0) via Shruti Hindi: we retrained all its weights on openly licensed Marathi and English speech and added 400 Marathi 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 (Marathi with English, AI voice)              Shruti Marathi writes (on the phone, unedited)
"Order pick केली आहे, दहा minute मध्ये..."   ->  order pick केली आहे दहा minute मध्ये deliver करतो location share करा
"यंदा पाऊस उशिरा आला..."                     ->  यंदा पाऊस उशिरा आला म्हणून सोयाबीनची पेरणी पुढच्या आठवड्यात करू
English: "Please send me the final report..."      please send me the final report by five o clock to day
Developer Udgam Labs
Base model Shruti Hindi (Udgam Labs), built on Cactus Whistle (Cactus Compute); both Apache-2.0
Parameters 55.7M (8 encoder + 8 decoder layers, width 512)
File shruti-marathi.cact, 29.7 MB (4-bit weights, 8-bit activations) for the Cactus needle engine
Input / output 16 kHz audio of any length → text; Marathi in Devanagari, English words in lowercase Latin
Languages Marathi, English, and Marathi mixed with English. Not Hindi: for Hindi use Shruti Hindi
Runtime Cactus needle engine (Apache-2.0): macOS, Linux, Windows, Android, iOS, WebAssembly
Licence Apache-2.0

Quick start

Python (macOS, Linux, Windows):

pip install cactus-needle
hf download udgamlabs/shruti-marathi shruti-marathi.cact config.json --local-dir .
from needle import Whistle

model = Whistle("shruti-marathi.cact")
print(model.transcribe("clip.wav"))   # Marathi or English is detected automatically
# {'text': 'उद्या सकाळी नऊ वाजता physics ची exam आहे मला reminder लावून दे', 'language': 'mr', ...}

The cactus-needle Python package sends anonymous usage counts (function name, versions, OS) by default; set NEEDLE_TELEMETRY=0 to turn that off. The command-line engine and the WebAssembly build make no network calls.

Command line: download the needle binary for your platform from Cactus-Compute/needle3, then:

./needle --model shruti-marathi.cact --audio clip.wav                  # language detected automatically
./needle --model shruti-marathi.cact --audio talk.wav --audio-stream   # live, word by word

In the browser: the wasm/ build of the same engine runs Shruti Marathi inside a web page (single-threaded, no special server headers). udgamlabs.com/models/shruti is a working page.

In an app (Android, iOS): link the engine's C library (needle.h) and ship shruti-marathi.cact with the app.

Results

Word error rate (%, lower is better), 200 clips per set. Every model was run by us on the same clips with the same text normaliser and scorer; Shruti Marathi in its on-device engine on a Mac, the others as listed in eval/comparison.md. Measured 30 October to 2 November 2026. Size is the file as published.

Model File size FLEURS (read) Kathbath (read) DiarBench (conversation, held out) IndicVoices SPRING-INX (phone calls) Vaani (spontaneous)
Shruti Marathi 29.7 MB 29.9 24.5 38.2 22.2 42.9 32.2
Whisper tiny 44 MB 273.1 278.1 373.9 321.8 375.6 338.7
Whisper base 82 MB 177.9 193.2 402.9 450.2 420.6 412.3
Dolphin base (int8) 103.7 MB 71.6 74.0 97.0 95.8 96.2 94.4
marathi-conformer-33m-moe (fp32) 136.7 MB 41.0 32.2 76.7 66.0 77.3 64.0
IndicConformer Marathi (int8) 137.7 MB 22.4 14.1 41.5 27.6 53.0 44.0

DiarBench, IndicVoices, SPRING-INX and Vaani are conversations that mix in English. Their references here write English words in English (Latin script), as Shruti Marathi does; models that write English in Devanagari are penalised for it. With the English words dropped from the references (the "native" view), IndicConformer Marathi is ahead: DiarBench 32.3 vs 40.9, IndicVoices 21.3 vs 26.6, Vaani 37.6 vs 41.7. FLEURS and Kathbath have one Devanagari reference.

  • Size class: every other open model under 100 MB we measured gets more Marathi words wrong than right (Whisper tiny and base add words too, so their rates pass 100%). Shruti Marathi is within 1.33x of IndicConformer Marathi's error rate on FLEURS (29.9 vs 22.4) and 1.73x on Kathbath (24.5 vs 14.1), at about a fifth of its size.
  • English inside Marathi: Shruti Marathi writes 40-76% of the English words in English on the four mixed sets; the other models in the table write none (Whisper tiny and base write some, among many errors).
  • English: LibriSpeech test-clean 6.23 (Shruti Hindi: 5.95), Svarah (Indian English) 23.46.
  • Silence: 0 words invented on 100 silent clips (marathi-conformer-33m-moe: 75).
  • Held-out sets: we did not train on FLEURS or DiarBench. IndicVoices, Kathbath, SPRING-INX and Vaani share corpora with our training data; their test speakers and every test sentence were kept out. IndicConformer also trained on Kathbath and IndicVoices. Kathbath's public valid split stands in for its test split.

Speed and memory (offline):

Device Result
Samsung Galaxy F62 (2021, Exynos 9825, 6 GB RAM, Android 13), native engine 12.1x faster than real time, 64 MB peak memory (20 clips); text identical to the Mac on 16 of 20
Galaxy F62, Chrome, the browser demo (WebAssembly, one thread) a 3-5 s audio file transcribed in 1.4-2.8 s
Desktop Chrome on a Mac (WebAssembly) a 5.0 s clip in 0.4 s

Where it falls short

  • Pure Marathi accuracy. IndicConformer Marathi (about 5x larger) makes about a quarter fewer errors on FLEURS and about 40% fewer on Kathbath; 0.6B models such as Hima-ASR and IndicConformer-600M (40-90x larger) fewer still. Choose them if you only need Marathi in Devanagari and have the memory.
  • Spelling variants count as errors and are common: उशिरा/उशीरा, words joined or split (वेळेवर घे → वेळेवर्गे).
  • English loanwords sometimes come out in Devanagari (फेसिक्स for "physics" with one of our two test voices), and acronyms split into letters (UPI → "u p आय").
  • Not Hindi. It was retrained for Marathi; Hindi speech comes out as Marathi-like text. Use Shruti Hindi for Hindi.
  • English is a little weaker than Shruti Hindi's (LibriSpeech 6.23 vs 5.95), and far behind large English models.
  • Names it has never heard are spelt by sound. Pass names and terms as keywords to help.
  • Not tested: noisy audio, music, far-away or speaker-played audio, and Linux, Windows and iOS (the engine runs there). Long audio is processed in 30 s windows. No punctuation; numbers come out as words.

How it was trained

  • Start: Shruti Hindi (55M, itself a full fine-tune of Cactus Whistle). We added 400 Marathi vocabulary pieces (each starting from how Shruti Hindi spelt it) and used Shruti Hindi's language tag for Marathi, then trained all weights with 4-bit quantisation-aware training, so the exported file behaves like the trained model.
  • Data: openly licensed Marathi 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, Marathi CC-BY-4.0
AI4Bharat Kathbath, Marathi CC-BY-4.0
SPRING-INX Marathi R1 and R2 (SPRING Lab, IIT Madras) CC-BY-4.0
ARTPARK-IISc Vaani, Marathi (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 Marathi 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 and long technical English.

Licence

Apache-2.0. Shruti Marathi 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{udgamlabs2026shrutimarathi,
  title  = {Shruti Marathi: offline speech-to-text for Marathi and English in 29.7 MB},
  author = {{Udgam Labs}},
  year   = {2026},
  url    = {https://huggingface.co/udgamlabs/shruti-marathi}
}

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
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for udgamlabs/shruti-marathi

Finetuned
udgamlabs/Shruti
Finetuned
(4)
this model

Datasets used to train udgamlabs/shruti-marathi

Space using udgamlabs/shruti-marathi 1

Collection including udgamlabs/shruti-marathi