Media & Creative AI Tools

Imla (إملاء) — Urdu speech in, clean transcripts out

A fully offline transcription app for the Mac. Drop in audio or video of Urdu or mixed Urdu–English speech and get a clean .docx transcript and a timestamped .srt subtitle file — with no audio ever leaving the machine.

Tauri (Rust) React + TypeScript whisper.cpp Apple Metal Shipped

The 90-second tour — pipeline included

Demo audio is a fictional talk, synthesized and degraded to sound far-field. The transcripts, levels and timings shown are Imla’s real output on that file.

Real Pakistani speech, recorded in real rooms

Professionals in Pakistan switch to English mid-sentence, and most recordings are a phone on a table, far from the speaker or picking up a PA system. Cloud transcription stumbles on both — and it means uploading every lecture, meeting and interview to someone else’s server.

Drag in files, get documents back — all on the Mac

Imla is a native desktop app. A one-time setup installs ffmpeg, builds whisper.cpp with Apple Metal acceleration and downloads the Whisper Large v3 model; after that it never touches the network. Drop in up to ten audio or video files, reorder the queue, and press Start. Each file gets its input level shown up front, live progress with a time estimate, and finishes as a .docx transcript and a .srt subtitle file. A vocabulary list biases recognition towards names, places and medical terms, and Urdu, English or mixed modes are available, with an optional second pass that saves a native-script archive copy.

A pipeline hardened for far-field recordings

See a bad recording before its transcript
Duration and mean level are measured on the original file before any clean-up; anything quieter than −20 dBFS is flagged as far-field in the queue.
Audio conditioning
An 80 Hz high-pass, FFT denoise and loudness normalisation to −16 LUFS. On the demo file it lifted a −48 dBFS recording to −17 dBFS in under a second — and fixed a misheard final word.
Silence-aware chunking
Files over five minutes are cut into roughly four-minute chunks at detected silences, transcribed one by one, then stitched back with corrected timestamps.
A guard against runaway loops
Repetition and compression-ratio checks catch the confident decode loops that whisper.cpp’s own checks miss, and retry that chunk once at a higher temperature.
Mixed-language mode
English spoken mid-sentence comes through as English rather than being forced into Urdu script — the way code-switched speech is actually read.
Built for a v2
An on-device LLM stage for translation and content drafts is already wired into the pipeline and disabled; a failing post-processor can never break a transcript.

Under the hood

Desktop shellTauri with a Rust backend — setup, ffmpeg extraction, whisper.cpp invocation, output writers
FrontendReact + TypeScript with Zustand driving the sequential batch queue
Speech modelWhisper Large v3 via whisper.cpp, built locally with Apple Metal acceleration
OutputsRight-to-left-aware .docx transcripts and timestamped .srt subtitles, with resume/skip of finished files

Where it stands

Shipped as an installable Mac app, with the far-field pipeline hardening added since. Version 2 will switch on the on-device language-model stage for translation and drafting.

← PreviousPhotoMind Next case studyManzar →

Hours of recordings waiting to be typed?

Lectures, interviews, grand rounds — if you have Urdu or mixed-language audio that needs to become text without leaving your hands, let’s talk.