Technology
The technology inside echo99
Native macOS audio capture, open speech models, and every bit of AI inference running on the Mac in front of you. Here is the exact stack.
Native capture — no virtual audio driver
echo99 is a native Swift menu-bar app. It records the two sides of a call as two separate tracks, using only what macOS itself provides:
- System audio — captured with Core Audio process taps, the API Apple added in macOS 14.4. No BlackHole, no Loopback, no kernel extension, no virtual output device to reroute your sound through.
- Microphone — captured with AVAudioEngine, the standard macOS audio engine, with automatic recovery when you switch devices mid-call.
The tracks are written as plain WAV files and kept separate on purpose: your mic is always “Me”, and the system track carries everyone else — the foundation for accurate speaker labeling. More detail in how system-audio capture works.
Speech-to-text models
Transcription uses NVIDIA’s open Parakeet model family, converted to Core ML so it runs entirely on your Mac. You pick the model in the app’s Config window:
- Parakeet TDT v3 (0.6B parameters) — the default: multilingual transcription with word-level timestamps.
- Parakeet TDT v2 (0.6B parameters) — English-only alternative.
- Parakeet Unified — an English streaming model, available as an optional download.
- Parakeet CTC 110M — an optional companion model that powers the custom-vocabulary feature, boosting names and jargon you tell echo99 to expect.
Speaker labeling
Diarization — telling the other voices apart — runs on the system track only and also happens on-device:
- Online diarizer (default) — pyannote segmentation together with WeSpeaker voice embeddings, labeling speakers as the audio streams through.
- Offline diarizer (optional download) — a global-clustering (VBx) pipeline built on the pyannote community model; it looks at the whole recording at once and can be capped to the number of speakers actually on the call.
Recognizing people across recordings
Diarization only separates voices within a single recording. Putting a name to a voice — and having echo99 recognize that person next time — is a second step, and it also runs on-device:
- A voiceprint is an embedding. Diarization already turns each far-end speaker into a compact numeric embedding — a vector that captures how a voice sounds. When you name someone in Manage People, echo99 saves that embedding as their voiceprint in a gallery file on your disk.
- Matching is a distance comparison. On every later recording, echo99 compares each speaker’s embedding to the voiceprints in your gallery by cosine distance. If the nearest one falls within a confidence threshold — measured against a private test set and kept deliberately strict — that speaker is labeled with the person’s name; otherwise they stay “Them-N.”
- It never guesses, and never learns on its own. An uncertain match is left as “Them-N” rather than risk the wrong name, and an automatic match never writes back to the gallery — the gallery grows only when you name someone. Recognition is off by default.
The matching is plain vector math and needs no network; the embeddings come from the same on-device models that do the diarization. Voiceprints are biometric data and stay on your Mac — speaker identification covers what that means for your privacy and control.
All inference on your Mac
Every model above runs through Core ML, accelerated by the Apple Neural Engine on Apple silicon. Models are downloaded once from the internet; after that, recording, transcription, and speaker labeling all work with Wi-Fi off. Your audio is never sent to a server — there is no server-side transcription at all.
The on-device model runtime is FluidAudio, the open-source Swift SDK by Fluid Inference that brings these speech models to Core ML.
Try echo99 on your next call
Free download. No account. Recording and transcription stay on your Mac.
Free · macOS 14.4+ · Notarized by Apple