AI / Desktop

Transcribe

A desktop app for recording and transcribing work conversations locally, with Whisper running on the device. Audio files stay on the device. Summaries and chat over transcripts use local models or external providers, depending on the selected mode; external processing sends transcript content to that provider.

Context

Meetings, interviews and client calls carry decisions that nobody writes down. Cloud transcription sends recordings to a provider, which may not fit the confidentiality requirements of a conversation. Transcribe keeps audio processing local and supports Romanian transcription. The summarisation mode needs its own data-handling decision, because an external provider can receive transcript content.

The engineering problem is reliability on a laptop rather than cloud scale: a recording has to survive a browser crash or the lid closing, the speech model has to run on whatever GPU the machine has, and the summary layer has to treat the transcript as untrusted input.

What we built

The application covers local live recording, batch transcription of existing files and search across recordings. Structured summaries can run through local models or external providers.

  • Backend-agnostic speech engine — one interface auto-selects the Whisper backend for Apple Metal, CUDA or CPU, with fallback, so the same codebase ships on macOS and Windows without a fork.
  • Crash-resilient live recording — audio is journalled as numbered, idempotent chunks, each written with fsync, alongside a heartbeat and a durable manifest; saved chunks can be recovered after a crash or sleep interruption, and interrupted jobs resume at startup.
  • Two-pass transcription — a fast live pass shows phrases as you speak, tuned against drift, while the saved transcript comes from a separate full-quality pass over the whole audio, with voice activity detection and hallucination thresholds.
  • Sandboxed summaries — structured summaries (title, key points, decisions, actions) and chat over transcripts run either on local models or through vendor CLIs in a read-only sandbox with tools disabled, because transcript text is untrusted input. When an external provider is used, transcript content is sent to it; the sandbox limits tool access, not network processing.
  • Fail-loud limits — the app refuses prompts that exceed a local model’s context instead of letting the model silently drop instructions and produce a confident but incorrect summary.

Stack

Python with Flask bound to localhost, Whisper via mlx-whisper or faster-whisper, ffmpeg for decoding, denoising and loudness normalisation, local models through Ollama or the Claude and Codex CLIs for summaries, a dependency-free vanilla JavaScript interface, and durable JSON plus audio files on disk instead of a database. Packaged as a desktop app for macOS and Windows. The offline test suite uses fault injection (corrupt state, failed writes, concurrent completions) and static contracts for accessibility and translation parity.

Status

Internal product. Available as a private build on request; the same approach applies to any workflow where audio cannot leave the premises.

Have something worth building?

Start a project→