Shruti: every language
Models · Shruti · 29.7 MB · released 6 November 2026

Shruti Urdu

Speech to text for Urdu and English, on your device, with no server.

Try it now · in your browser · free, no login

Speak Urdu, English or both. Shruti Urdu writes it down on your device.

Shruti · checking this device

Audio never leaves your device. Shruti and its open-source engine run inside this page.

Load Shruti, then press Record and speak Urdu, English or both.

Speak Urdu, English or both. English words stay in English (Latin script) and are underlined here; Urdu is written in Perso-Arabic script. While you speak, words appear once they have settled, a second or two behind you; when you stop, Shruti reads the whole recording once more for the final text.

Shruti Urdu · 29.7 MB · Urdu and English · 6 November 2026

On Urdu conversations that mix in English, counting English words only in English letters, about 21% fewer errors than IndicConformer Urdu.

Shruti Urdu writes Urdu in Perso-Arabic script and keeps English words in English, the way people type, right to left with the English in place:

میری bike کا tyre puncture ہو گیا

On real Urdu conversations that mix in English, counting English words only when they are written in English letters, its word error rate is 22.9 and IndicConformer Urdu’s is 29.1: DiarBench, 74 turns from 25 conversations, same clips and scorer, 2 November 2026. It writes about two thirds of the English words in English letters (64.1%); IndicConformer Urdu writes none (0%), and Whisper small 10.8%. It runs offline on a five-year-old phone, about 11× faster than real time in 64 MB of memory with the native engine, and it invented no words on 100 silent clips.

ModelFileDiarBench, English in EnglishDiarBench, nativeFLEURSKathbath
Shruti Urdu29.7 MB22.931.333.518.2
Whisper tiny43.5 MB257.3255.8108.8107.4
Whisper base81.8 MB111.7111.055.655.3
Dolphin base103.7 MB98.599.063.057.5
IndicConformer Urdu137.7 MB29.119.524.713.4
Dolphin small249.7 MB98.599.075.351.3
Whisper small264.5 MB50.850.041.745.7

Word error rate %, lower is better; FLEURS and Kathbath 200 clips each, DiarBench 74 turns, the same scorer for every model, measured 2 November 2026. DiarBench is real conversation that mixes in English, held out for every model; 251 of its 1,704 reference words are English. FLEURS and Kathbath are read Urdu. IndicConformer Urdu’s gap on the English-in-English column holds in a paired bootstrap (interval -10.22 to -1.64 points) and with whole conversations resampled (-9.99 to -1.51). The check that ignores script does not work for Perso-Arabic. Whisper adds words, so its rates pass 100%. Other Urdu speech models exist that we have not measured, among them Urdu-Streaming-Zipformer-20M (43.9 MB, gated); these results cover only the models listed here.

Where it falls short

  • The lead rests on English letters. Against the native reference, which writes the English words in Urdu script, IndicConformer Urdu is well ahead on the same turns (19.5 against 31.3), and we cannot show that Shruti Urdu does better beyond writing English in English letters.
  • On read Urdu, IndicConformer Urdu makes about 26% fewer errors (FLEURS 24.7 against 33.5; Kathbath 13.4 against 18.2). Character errors on the conversation test’s native reference are almost four times as high: 28.69% against 7.40%.
  • 74 turns is a small test: the paired interval of -10.22 to -1.64 points shows a lead, but does not pin down its size.
  • No test set here is checked to be speakers from Pakistan (FLEURS carries an ur_pk label, and that is all we know), and the training collections’ cards don’t document speakers from Pakistan. No Urdu reader has reviewed this output yet.
  • In a phone’s browser, leaving the language to the engine went wrong: 1 of 8 lines played into this page on 5 November came out as English words for the whole line. This page now tells the engine the language you picked, and 3 of 3 lines played in that way on 6 November stayed in Urdu script with English in Latin; that line stayed in Urdu script in a Mac’s browser, but has not been played again on the phone. On the other Shruti languages where we measured it, plain English loses a little accuracy this way. Not yet tested with a live microphone.
  • About a third of the English words on the conversation test don’t come out in English letters; about 41 of 251 are written in Urdu script (delhi as دہلی). Real errors happen in ordinary words too (ساتھ رکھ as سات ہٹ), and joined words and spelling variants count as errors.
  • No punctuation, and numbers come out as words. Noise, music, far-field and speaker-played audio were not tested. In loud noise, Shruti models sometimes repeat a phrase over and over (measured on Hindi-family models, not on Urdu).

Try Shruti Urdu Shruti Urdu on Hugging Face the model file, the full results and how each model was run

Use it in your app

Every Shruti model runs in Cactus’s open-source needle engine. Download the engine for your platform and the file for your language, and pass it a WAV file or 16 kHz audio.

# Command line (Mac, Linux, Windows)
# Engine: huggingface.co/Cactus-Compute/needle3, your platform
# Model:  shruti-urdu.cact, from Shruti Urdu's Hugging Face repo
./needle --model shruti-urdu.cact --audio clip.wav
# for speech that is only English: --audio-language en

# Python
pip install cactus-needle

import needle
shruti = needle.Whistle(weights="shruti-urdu.cact")
print(shruti.transcribe("clip.wav")["text"])
  • Android, iOS and the web: call the engine’s C API. needle_load takes the model file, needle_transcribe a clip, and needle_stream_transcribe_process about a second of live audio at a time. The demo on this page makes the same calls, from WebAssembly in a Web Worker.
  • Leave the language unset for Hindi and Hinglish: detection does as well as setting it on Hindi, Hinglish, accented Hindi and US English. Set English when the speech is only English with an Indian accent, which detection often takes for Hindi. On a subset of Svarah: 21.13% word errors with English set, 25.75% detected.
  • Keywords, one per line, favour the names, places and product words your users say.
  • Cactus’s Python package (cactus-needle) sends anonymous usage counts by default; set NEEDLE_TELEMETRY=0 to turn that off. The command-line engine and the WebAssembly engine on this page make no network requests of their own.

Credits

Every Shruti model is built on Cactus Whistle and runs in the needle engine, both by Cactus Compute under Apache-2.0. The engine files on this page are Cactus’s WebAssembly build, unmodified, served with its licence and notice. Shruti Urdu’s model card on Hugging Face lists its training datasets and their licences.

Every Shruti language