On-device · macOS 15+

Real-time speech translation, English ⇄ German.

A native macOS app that listens to your mic, transcribes what you say, and translates it as you speak — without sending audio to a server, without API keys, and without downloading any models of its own.

12:34:08 en S1 ● active
It's working pretty well, right?
12:34:08 de S1 ● active
Es funktioniert ziemlich gut, oder?
12:33:51 en S1
Apple's speech recognizer is surprisingly good.
12:33:42 en S1
Everything runs on-device.
12:33:30 en S1
It is May 16.
12:33:51 de S1
Apples Spracherkennung ist überraschend gut.
12:33:42 de S1
Alles läuft auf dem Gerät.
12:33:30 de S1
Es ist der 16. Mai.
What's in the box

Built for clarity and speed.

The whole pipeline is Apple's system frameworks, wired up with structured concurrency. No third-party Swift dependencies.

Two-column transcript

Source and translation share a single scroll, vertically aligned, with the active in-progress line pinned at the top.

On-device only

Apple's speech recognizer + Translation framework do the work. No keys, no cloud, no data leaves the Mac.

One-click direction

Toggle EN ⇄ DE in the status bar. Engines and translation session reincarnate with the new locale instantly.

Diagnostics

Optional bottom pane with a live mic-peak meter and a 30 s sliding latency chart, redrawn via SwiftUI's TimelineView.

Debug log built in

Every event in a ring buffer inside the app, plus mirrored to os.log so log stream works the way you'd expect.

Export to .txt

Save the transcript with timestamps. Choose source-only, translation-only, or both paired side-by-side.

Architecture

One pipeline. Three frameworks.

Audio is captured on the audio thread, republished as an AsyncStream, fed to Apple's speech recognizer, then each finalized utterance is translated and paired back to the source row.

🎙
Capture
AVAudioEngine
🅰
Recognize
SFSpeechRecognizer
🌐
Translate
Translation framework
Quick start

Build from source.

No package managers to set up. Just clone, run the build script, open the bundle.

# clone $ git clone git@github.com:alileza/ben.git $ cd ben # build the .app (compiles Swift, signs ad-hoc, bundles the icon) $ ./build.sh # launch $ open Ben.app # watch debug logs from any terminal $ log stream --predicate 'subsystem == "com.local.ben"' --style compact
RequirementNotes
macOS 15 (Sequoia) or later The Translation framework needs 15+.
Xcode + Swift 6 swift --version should report Swift 6.x.
Dictation enabled System Settings → Keyboard → Dictation. Without it the recognizer errors with "Siri and Dictation are disabled".
EN ⇄ DE translation pair macOS prompts to download on first use.