UDGAM LABS · Speech-to-text model · 55.9M parameters · part of the Shruti family
Shruti Bengali
Shruti Bengali turns Bengali and English speech into text, offline, from one 29.7 MB file. Bengali comes out in Bengali script and English words stay in English, the way people actually type: বাচ্চাদের রবীন্দ্রসঙ্গীতের rehearsal শনিবার বিকেল চারটে হবে. 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 12.6x faster than real time using 64 MB of memory.
On everyday Bengali conversations that mix in English, scored with the English words written in English letters, it makes fewer errors than Vosk Bengali (90 MB) and IndicConformer Bengali (137.7 MB), Bengali-only models three and five times its size. On read Bengali both of them are more accurate (see below). Shruti Bengali is the Bengali member of the Shruti family, next to Shruti Hindi, Shruti Marathi and Shruti Tamil, and is built on Cactus Whistle (Apache-2.0) via Shruti Hindi: we retrained all its weights on openly licensed Bengali and English speech and added 700 Bengali 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 (Bengali with English, AI voice) Shruti Bengali writes (in the phone's browser, unedited)
"...রবীন্দ্রসংগীতের rehearsal শনিবার..." -> পঁচিশে বৈশাখের অনুষ্ঠানের জন্য বাচ্চাদের রবীন্দ্রসঙ্গীতের rehearsal শনিবার বিকেল চারটে হবে
"কাল রাতের derby টা দেখলি?..." -> কাল রাতের ডারবিটা দেখলি শেষ মিনিটের গোলটা একদম অবিশ্বাস্য ছিল আমি তো চেয়ার থেকে লাফিয়ে উঠেছিলাম
(The first line shows two spelling differences: রবীন্দ্রসঙ্গীতের for রবীন্দ্রসংগীতের and চারটে for চারটেয়. The second shows a real error of a common kind: "derby" and "goal" written in Bengali script.)
| Developer | Udgam Labs |
| Base model | Shruti Hindi (Udgam Labs), built on Cactus Whistle (Cactus Compute); both Apache-2.0 |
| Parameters | 55.9M (8 encoder + 8 decoder layers, width 512) |
| File | shruti-bengali.cact, 29.7 MB (4-bit weights, 8-bit activations) for the Cactus needle engine |
| Input / output | 16 kHz audio of any length → text; Bengali in Bengali script, English words in lowercase Latin |
| Languages | Bengali, English, and Bengali mixed with English. For Hindi use Shruti Hindi; for Marathi, Shruti Marathi; for Tamil, Shruti Tamil |
| Runtime | Cactus needle engine (Apache-2.0): macOS, Linux, Windows, Android, iOS, WebAssembly |
| Licence | Apache-2.0 |
Quick start
pip install cactus-needle
hf download udgamlabs/shruti-bengali shruti-bengali.cact config.json --local-dir .
from needle import Whistle
model = Whistle("shruti-bengali.cact")
print(model.transcribe("clip.wav")) # Bengali 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-bengali.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 Bengali in its on-device engine on a Mac. Measured 2 November 2026. Size is the file as published by its makers.
| Model | File size | FLEURS (read) | Kathbath test-unknown (read) | DiarBench, English in English (conversation, held out) | DiarBench, native reference |
|---|---|---|---|---|---|
| Shruti Bengali | 29.7 MB | 29.9 | 22.2 | 36.0 | 41.8 |
| Whisper tiny | 43.5 MB | 361.6 | 403.7 | 540.9 | 543.2 |
| Whisper base | 81.8 MB | 176.7 | 214.5 | 339.9 | 341.6 |
| Vosk Bengali int8 (third-party copy) | 28.6 MB | 20.9 | 22.4 | 43.3 | 39.1 |
| Vosk Bengali (Zipformer) | 90.0 MB | 20.8 | 21.65 | 42.8 | 38.5 |
| Dolphin base (int8) | 103.7 MB | 41.1 | 45.9 | 93.0 | 93.2 |
| IndicConformer Bengali (int8) | 137.7 MB | 20.65 | 12.07 | 39.3 | 34.8 |
| Dolphin small (int8) | 249.7 MB | 40.3 | 33.6 | 99.4 | 99.4 |
| Whisper small | 264.5 MB | 184.3 | 173.2 | 167.1 | 167.9 |
| SraVaani-1.0 | 908.8 MB | 15.7 | 11.3 | 34.6 | 27.1 |
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 Bengali does; the native column drops the English words from the reference. FLEURS and Kathbath are read Bengali.
- Conversations that mix in English: Shruti Bengali makes fewer errors than Vosk Bengali (36.0 vs 42.8; paired 95% interval of the difference -9.3 to -4.3 points) and IndicConformer Bengali (36.0 vs 39.3; -5.5 to -1.0). The much larger SraVaani-1.0 is level with it (34.6). On the native reference, all three are ahead.
- English inside Bengali: Shruti Bengali writes 49.7% of DiarBench's English words in English; Vosk Bengali and IndicConformer Bengali write none (0%), and the other models above 15% or fewer.
- One file for two languages: Vosk Bengali and IndicConformer Bengali are Bengali-only. Shruti Bengali also transcribes English: LibriSpeech test-clean 6.30 (Shruti Hindi: 5.95), Svarah (Indian English) 23.33.
- Read Bengali: on Kathbath it is level with Vosk Bengali (22.2 vs 21.65, paired interval -1.6 to +2.7); on FLEURS both rivals are clearly ahead. Under 100 MB, Whisper tiny and base get more Bengali words wrong than right (Whisper adds words, so its rates pass 100%).
- 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.
- Sizes: a third-party int8 copy of Vosk Bengali is 28.6 MB, slightly smaller than Shruti Bengali. We measured it on the same clips (3 Nov 2026): FLEURS 20.9, Kathbath 22.4, DiarBench (English in English) 43.3. It is clearly more accurate on read Bengali; on mixed conversations Shruti Bengali makes fewer errors and it writes no English words in English.
Speed and memory (offline): Samsung Galaxy F62 (2021, 6 GB RAM), native engine, 12.6x faster than real time, 64 MB peak memory (20 clips). In that phone's Chrome, the page reports about 4-4.5 s on the device for 8.4-9.6 s of speech.
Where it falls short
- Read Bengali accuracy. Vosk Bengali (3x larger) makes about 30% fewer errors on FLEURS; IndicConformer Bengali (about 5x larger) about 31% fewer on FLEURS and 46% fewer on Kathbath; SraVaani-1.0 (30x larger) is ahead on every set.
- Conversations on the native reference. When English words are dropped from the reference, Vosk Bengali (38.5) and IndicConformer Bengali (34.8) are ahead of Shruti Bengali (41.8).
- English words in Bengali script: only about half of the English words come out in English letters; others are written in Bengali script ("derby" as ডারবিটা, "goal" as গোলটা, "metro" as মেট্রোতে). A Bengali place name can come out in English (কলেজ স্ট্রিটে as "college street এ").
- Spelling variants count as errors and are common (বেরোব/বেরোবো, রবীন্দ্রসংগীত/রবীন্দ্রসঙ্গীত), and endings can be dropped (চারটেয় as চারটে).
- Names it has never heard are spelt by sound. Not tested: 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 Bengali vocabulary pieces and used Shruti Hindi's language tag for Bengali, then trained all weights with 4-bit quantisation-aware training.
- Data: openly licensed Bengali 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, Bengali | CC-BY-4.0 |
| AI4Bharat Kathbath, Bengali | CC-BY-4.0 |
| SPRING-INX Bengali R1 and R2 (SPRING Lab, IIT Madras) | CC-BY-4.0 |
| ARTPARK-IISc Vaani, Bengali (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 Bengali 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 Bengali 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{udgamlabs2026shrutibengali,
title = {Shruti Bengali: offline speech-to-text for Bengali and English in 29.7 MB},
author = {{Udgam Labs}},
year = {2026},
url = {https://huggingface.co/udgamlabs/shruti-bengali}
}
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
- -
