parley

Your meetings, transcribed entirely on your Mac.

Captures your mic and the far side of the call (Zoom, Teams, Meet), and turns them into speaker-attributed transcripts that never leave your machine. 100% open-source, open-model, airgapped.

macOS 15+ Apple Silicon Swift cloud: none ~62× end-to-end AGPL-3.0

Parley menu bar panel, recording in progress

Why it exists

Cloud meeting AI means uploading the raw audio of every conversation to someone else's servers. For anything confidential, that's a non-starter.

So I built the opposite: transcription that runs entirely on-device, on open models, with nothing phoning home. And the transcripts aren't just notes — they're private context my own AI agents can draw on for total recall, without renting my memory to anyone. parley covers calls and meetings; mailrag covers email. Independent tools; my agents know about both and use what fits.

Why it's built this way

Meetings are sensitive. Most of what's said in them shouldn't be uploaded to anyone's servers, and for confidential work that rules out every cloud notetaker.

What it does

Dual-stream capture

Records your mic and system audio as separate streams, so local and remote voices stay distinguishable. No virtual drivers.

On-device diarization

Automatic who-said-what (pyannote + WeSpeaker + VBx), with a quality score per segment.

Two engines

FluidAudio / Parakeet (fastest, 25 EU languages) or Apple SpeechAnalyzer. Swap in Settings.

Echo / mic-bleed removal

Strips the far-end voice that bleeds into your mic so it isn't mistaken for a phantom speaker.

Crash-safe recording

Survives UI and XPC crashes with auto-relaunch, silent re-attach, and multi-segment stitching.

Open formats

JSON, SRT, and TXT with timestamps, speaker labels, confidence scores, and local/remote tags.

Local LLM summaries

Optional meeting summaries via any OpenAI-compatible or LM Studio endpoint — point it at a local model and even the summary never leaves your Mac.

How it works — the hard parts

Speed

Measured on an M5 Pro (release build) with the bundled harness (tools/engine-benchmark), on a 4-minute AMI clip.

StageEngineReal-time
TranscriptionFluidAudio (Parakeet, ANE)~142×
TranscriptionWhisperKit (large-v3-turbo), for contrast~2.5×
Speaker diarizationpyannote + WeSpeaker + VBx~111×
Full pipelinetranscription + diarization~62×

Chunks process in the background during the meeting, so the number you actually feel is the last row: at ~62× end-to-end, the final chunk (≤30 min by default, configurable) finishes in well under a minute after you stop, whatever the meeting's length. Apple SpeechAnalyzer isn't benchmarked here — it needs a per-language model and errored on this clip.

Open models, on-device

ComponentModelLicense
Speech recognitionNVIDIA Parakeet TDT 0.6B (CoreML)CC-BY-4.0
Speaker diarizationpyannote segmentation + WeSpeakerCC-BY-4.0
Voice activitySilero VADMIT
Engine SDKFluidAudioApache-2.0

Get started: git clone https://github.com/fmasi/parley.git && cd parley && bash package_app.sh --install