Local live transcription for macOS, built for following real speech in another language.
Live Transcriber listens to a microphone or virtual audio device, turns speech into a running transcript, adds helpful English translations, and saves conversations you can come back to later. It is designed for local use on macOS, with special care for German learning, YouTube audio, meetings, and interviews.
- Captures audio continuously so Whisper can process speech without stopping the recorder.
- Shows fast live partials while someone is still speaking.
- Saves cleaner finalized transcript lines after pauses.
- Adds full English translations for finalized lines.
- Adds noun and verb word hints above German words.
- Builds a vocabulary list as new words appear.
- Optionally labels speakers as
A,B,C. - Uses local Ollama models for meeting minutes.
- Saves and loads tabbed
.transtranscript files.
The easiest path is the setup script:
chmod +x setup.sh
./setup.shThe setup script can:
- install Homebrew system dependencies
- create the Python virtual environment
- install Python requirements
- optionally install BlackHole 2ch for Mac system audio
- optionally install the German spaCy model
- optionally build the German-English dictionary
- optionally download a Whisper model
Then launch the desktop app:
venv/bin/python ui_app.pyIn the app:
- Open the
Settingstab. - Download or confirm a Whisper model, usually
basefirst. - Pull an Ollama model if you want meeting minutes or richer word hints.
- Install spaCy and build the dictionary for better live word hints.
- Return to
Live, choose an input device, and pressStart.
Use this if you prefer to install pieces yourself:
brew install portaudio ffmpeg
brew install python@3.13
/opt/homebrew/opt/python@3.13/bin/python3.13 -m venv venv
source venv/bin/activate
venv/bin/python -m pip install -r requirements.txtLaunch the UI:
venv/bin/python ui_app.pyList audio inputs:
venv/bin/python app.py --list-devicesFor YouTube, podcasts, meetings, or any audio playing on your Mac, use BlackHole 2ch.
Install it:
brew install --cask blackhole-2chThen:
- Open
Audio MIDI Setup. - Create a
Multi-Output Device. - Add your speakers or headphones and
BlackHole 2ch. - Set macOS system output to the Multi-Output Device.
- In Live Transcriber, choose
BlackHole 2chas the input.
If BlackHole does not appear, restart the audio app or restart your Mac.
For live transcription:
tiny: fastest, lowest qualitybase: best first choice for low latencysmall: better German accuracy, more latencymediumandlarge-v3: higher quality, usually slower than you want for live use
For local LLM features:
llama3.1:latest: default for meeting minutes and careful finalized word hintsllama3.2:3b: smaller and faster if available in your Ollama librarymistral:7b: useful alternative local model
Settings shows Whisper as ready if a model is usable from either the app-managed cache or the normal Hugging Face cache. That means a model can work even if it was downloaded before this app had its own Settings tab.
Better German word hints:
venv/bin/python -m pip install spacy
venv/bin/python -m spacy download de_core_news_sm
venv/bin/python scripts/build_dictionary.pyOllama minutes:
ollama pull llama3.1
ollama serveOptional speaker labels:
venv/bin/python -m pip install speechbrain torch torchaudioThe desktop UI is the friendliest way to use the app, but the CLI is still useful for testing.
Default input:
venv/bin/python app.py --model base --language deSpecific device:
venv/bin/python app.py --device <DEVICE_ID> --model base --language deLower latency live partials:
venv/bin/python app.py --device <BLACKHOLE_ID> --model base --language de --beam-size 1Disable partials:
venv/bin/python app.py --model base --language de --partial-seconds 0Add translation and word hints:
venv/bin/python app.py --model base --language de --full-translation --selective-translationEnable speaker labels:
venv/bin/python app.py --model base --language de --speaker-labelsThe UI saves tabbed transcript sessions as .trans files. These files include:
- transcript events
- partial and final lines
- translations
- vocabulary
- meeting minutes
- tab title
- splitter sizes and scroll positions
The CLI appends text and JSONL output by default:
transcripts/transcript.txt
transcripts/transcript.jsonl
Clear output files at startup:
venv/bin/python app.py --overwriteDisable JSONL:
venv/bin/python app.py --no-jsonl- App icon source:
assets/app_icon.png - macOS app icon:
assets/app_icon.icns - Transparent branding logo:
assets/branding/live_transcriber_logo_transparent.png
Build a local .app with PySide6 deployment:
./scripts/build_macos_app.shCreate a simple DMG from the generated app:
APP_PATH="$(find . -name 'Live Transcriber.app' -type d -print -quit)"
rm -rf dist/dmg-root
mkdir -p dist/dmg-root
cp -R "$APP_PATH" dist/dmg-root/
ln -s /Applications dist/dmg-root/Applications
hdiutil create \
-volname "Live Transcriber" \
-srcfolder dist/dmg-root \
-ov \
-format UDZO \
"dist/Live Transcriber.dmg"For public distribution, you will eventually want Developer ID signing and notarization so macOS Gatekeeper does not warn users.
Open macOS Sound settings and confirm that your microphone or virtual device is visible. Then run:
venv/bin/python app.py --list-devicesOpen System Settings > Privacy & Security > Microphone and make sure your terminal app has microphone access.
Restart the app playing audio, restart Live Transcriber, or restart your Mac. Then check devices again:
venv/bin/python app.py --list-devicesWhisper may already be available in the Hugging Face system cache. The Settings tab now checks both the app cache and the system cache.
Try the manual commands:
venv/bin/python -m pip install spacy
venv/bin/python -m spacy download de_core_news_smIf Homebrew's latest python3 fails while creating venv, install Python 3.13 and recreate the environment:
brew install python@3.13
rm -rf venv
/opt/homebrew/opt/python@3.13/bin/python3.13 -m venv venv
source venv/bin/activate
venv/bin/python -m pip install -r requirements.txtDocker is not a good fit for this app on macOS because containers do not get simple, reliable access to CoreAudio input devices. A normal Python virtual environment can talk directly to microphones and virtual devices like BlackHole 2ch through sounddevice.

