All projects

Voice

macOS menu-bar dictation with local Whisper — speech to text in any app, on-device.

SwiftWhispermacOS
WebEdge Voice logoDev-story
01

Challenge

Dictation built into the OS or cloud apps sends your voice off-device and often misses technical terms; we wanted fast, private dictation that works in any app.

02

What we did

WebEdge Voice is a Swift macOS menu-bar app that runs Whisper locally: pick a microphone and language, press a shortcut to dictate, and the transcribed text is inserted wherever you are typing — nothing is sent to a server.

03

Result

Speech-to-text anywhere on the Mac, on-device and private, with per-language and per-microphone settings straight from the menu bar.

Dev-story article

Voice: how the project was built

Cloud dictation is fast but sends your voice off the machine; local dictation keeps it private but is usually slow enough to feel broken. This app takes the second path and refuses the slowness: press a shortcut, speak, and the transcript lands in whatever field has focus, with Whisper doing the decode on the same Mac. Most of the engineering is not the transcription itself but the milliseconds around it and the macOS plumbing that lets pasted text reach other apps.

Sections

05

Modules

05

Stack

Swift + Whisper

01

Why the project exists

Dictation built into the OS or cloud apps sends your voice off-device and often misses technical terms; we wanted fast, private dictation that works in any app.

Cloud dictation is fast but sends your voice off the machine; local dictation keeps it private but is usually slow enough to feel broken. This app takes the second path and refuses the slowness: press a shortcut, speak, and the transcript lands in whatever field has focus, with Whisper doing the decode on the same Mac. Most of the engineering is not the transcription itself but the milliseconds around it and the macOS plumbing that lets pasted text reach other apps.

02

What was built

WebEdge Voice is a Swift macOS menu-bar app that runs Whisper locally: pick a microphone and language, press a shortcut to dictate, and the transcribed text is inserted wherever you are typing — nothing is sent to a server.

A macOS 14+ menu-bar dictation app for Apple Silicon, built on whisper.cpp with Metal, triggered by Ctrl+Shift+Space. The whisper model is not bundled - you pick one on first launch as a separate ~1.6 GB download - and everything from mic capture to inference to insertion runs locally. It ships as a deliberately Russian-only build rather than pretend to serve languages the model transcribes badly.

03

Main modules and user path

M01

Warm-up decode at launch: the first dictation paid 407 ms building Metal pipelines and the compute graph, so a one-second silent decode on the launch task moves that cost off the user's first words, dropping the first dictation to ~104 ms.

M02

Unblocking the paste path: insertText slept twice on the main thread (~56 ms of real cost); the pasteboard restore moved to asyncAfter with a changeCount guard so a second dictation cannot clobber the first, and paste now measures 1-6 ms.

M03

The Accessibility-grant signing saga: macOS keys the Accessibility permission to the app's code-signing identifier and cdhash, so ad-hoc-signed rebuilds read as a new app and dropped the grant every time - fixed by re-signing with a fixed identifier and a stable self-signed local cert that pins the requirement to the cert, not the changing binary.

M04

Hallucination and dead-stream filtering: reject mic streams that are all-zero silence before inference, scale audioCtx and token limits to clip length to stop long-clip truncation and repetition loops, and strip known subtitle-corpus artifacts after decode (validated 53/53 caught, zero false positives over 2439 recordings).

M05

Optional Silero VAD, off by default and honest about it: worthless on the short clips the app targets (~2 ms saved), but on long dictation it drops silence to pull a clip back under Whisper's 30 s window and halve encoder passes - a 92 s recording went from two passes to one.

04

Architecture and technology decisions

Built with Swift, Whisper, macOS.

Swift with a hand-mirrored bridge to whisper.cpp (pinned to v1.9.1) running on Metal, Apple Silicon only, with text insertion via the Accessibility API and pasteboard; run.sh handles the local self-signed signing path, with notarized-DMG release scripts for distribution.

05

Result and lessons

Speech-to-text anywhere on the Mac, on-device and private, with per-language and per-microphone settings straight from the menu bar.

A private, on-device dictation tool where Whisper itself runs ~90 ms end to end and the press-to-paste loop feels instant - honest about being one machine, one model, one language rather than a cloud service in disguise.

Read next

These projects share nearby technical or product decisions, so they show how the same principle behaves in another context.

Have a similar idea?

Discuss your project