Voice-bank-first speaker labelling for the Plaud Note family. Local, macOS Apple Silicon.
Project description
Plaudio
Voice-bank-first speaker labelling for the Plaud Note family. Local. macOS Apple Silicon.
Plaudio takes audio from your Plaud Note (or any recorder), transcribes it locally with mlx-whisper, identifies who said what by matching each speaker against your own voice bank, and stores everything in a searchable SQLite + FTS5 corpus. Your audio, your transcripts, your bank. No cloud round-trip.
Why this exists
The standard local diarisation pipeline (pyannote-audio 3.1 in its default cluster-then-match mode) silently merges similar-pitched voices into one cluster. Put four people in their 30s with similar accents into a meeting, and the diariser will collapse them into SPEAKER_04 and confidently label every utterance with the wrong owner.
Plaudio fixes this with voice-bank-first sliding-window labelling: slide a 2-second window across the audio, embed each window with pyannote/embedding, and cosine-match it against profiles you enrolled previously. Each window picks its own match independently, so similar voices get assigned to the right person instead of being merged. Unmatched windows stay as Unknown (you enrol them next time).
The other half of the package is operational: a CLI that does the boring parts (transcribe, label, search) and stores the result in a corpus you can query in your terminal.
$ plaudio db search "decision"
-- 2026-05-30 | Strategy review (M_2026-05-30-strat) --
[12:34-12:42] Alice Smith: I think the decision is to ship by Friday.
[13:01-13:06] Bob Jones: Agreed. Let me draft the comms.
How it compares
| Tool | Local | Speaker labels | Voice bank | macOS-native | Plaud cloud sync |
|---|---|---|---|---|---|
| Plaudio (this) | yes | sliding voice-bank match | yes | mlx-whisper | v0.2 |
| whisperX | yes | pyannote cluster-then-match | no | CPU/CUDA | no |
| Riffado (formerly OpenPlaud) | yes (Docker) | none built-in | no | cross-platform | yes |
| Plaud cloud (default) | no | varies | per-recording manual labels only | n/a | yes |
The differentiator is the voice bank: enrol Alice once with a clean 30-second clip, and every future meeting auto-labels her by voice. Cluster-based pipelines redo speaker clustering from scratch on every recording.
Scope, honestly
- macOS on Apple Silicon only. mlx-whisper is the ASR backend; it doesn't run on Linux or Intel Macs.
- Plaud Note Pro family is the v0.1 target. Plaud cloud sync arrives in v0.2.
- Solo-maintained personal project. Issues welcome. No SLAs, no roadmap promises beyond v0.2.
If you need cross-platform support, a web UI, or production-grade SLAs, this isn't your tool.
Install
pip install plaudio
plaudio doctor
plaudio doctor checks ffmpeg, mlx-whisper, pyannote, the HuggingFace token (the diarisation model is gated, free, accept the agreement once), and torch MPS. It tells you exactly what to fix.
Quickstart
# 1. enrol one voice (30 seconds of someone speaking alone, with their knowledge)
plaudio enrol alice-clean.mp3 --name "Alice Smith" --start 0 --end 30 --num-speakers 1
# 2. transcribe a meeting
plaudio transcribe meeting.mp3 --language en
# 3. convert Whisper output to Plaudio's transcript shape (see examples/quickstart.md)
# 4. label speakers from your bank
plaudio match meeting.mp3 meeting.plaud.json --threshold 0.55 --report
# 5. ingest into the searchable corpus
plaudio db ingest meeting.plaud.json \
--meeting-id 2026-05-30-team \
--date 2026-05-30 \
--title "Team weekly"
# 6. search across every meeting you've ever ingested
plaudio db search "design decision"
plaudio db search "deadline" --speaker "Alice Smith"
See examples/quickstart.md for the full walkthrough.
Biometric data warning
voicebank.json contains voice fingerprints derived from real people. Treat it like a password file.
- Only enrol someone with their knowledge. Plaudio prints a reminder the first time you enrol.
- The bank lives at
~/Library/Application Support/plaudio/voicebank.jsonwith permissions0600. Plaudio never syncs it to any cloud. - If you copy the bank to iCloud, Git, or S3, that's your decision and your responsibility.
Subcommands
plaudio transcribe AUDIO [--vocab FILE] [--language LANG] [--out DIR]
plaudio match AUDIO TRANSCRIPT [--threshold T] [--report]
plaudio enrol AUDIO --name "Firstname Lastname" [--start S] [--end S]
plaudio label AUDIO TRANSCRIPT [--enrol] [--batch-label "L0=Name,L1=Name"]
plaudio clean TRANSCRIPT_MD [--corrections FILE]
plaudio db ingest|search|list ...
plaudio voicebank list|export|import|migrate|remove ...
plaudio plaud login|list|sync (v0.2; v0.1 prints a roadmap notice)
plaudio doctor
plaudio version
Stack
mlx-whisper for on-device ASR (Apple's MLX framework, runs on the Neural Engine and GPU), pyannote-audio 3.1 for diarisation and the embedding model, SQLite + FTS5 trigram tokeniser for the corpus (trigram so Chinese-English code-switched search works), argparse for the CLI (no extra dependency), AGPL-3.0. Full rationale in STACK.md.
Roadmap
- v0.1 (now): library + CLI for the audio-in pipeline. macOS Apple Silicon only. Plaud cloud sync stubbed.
- v0.2: Plaud cloud sync (auth, list, download). Schema-stable voicebank migrate.
- v0.3+: depends on what users actually need. Open an issue to vote.
License
AGPL-3.0-or-later. The full text is in LICENSE.
Commercial license available on request. Open an issue tagged license and we can talk.
Acknowledgements
- mlx-whisper for fast on-device ASR on Apple Silicon.
- pyannote-audio for the gated 3.1 diarisation pipeline and the embedding model.
- OpenAI Whisper for the ASR architecture.
- Plaud for the recorder hardware that started this project.
Contributing
PRs welcome but read CONTRIBUTING.md first. There's a leak-audit on every commit (private wordlist scan + secret scan); the --no-verify bypass is forbidden. Use fabricated names in tests and examples.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plaudio-0.1.0.tar.gz.
File metadata
- Download URL: plaudio-0.1.0.tar.gz
- Upload date:
- Size: 43.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3706073290060fc505f63ba252ac66ecc108b7b707b84d6ace860eb2e8d1fbba
|
|
| MD5 |
53e5d0a5d8652f24821725683b3f6c31
|
|
| BLAKE2b-256 |
5149d2182359a06e66aa419345d641218b8c262fc1cc03077252b906bd473ba8
|
File details
Details for the file plaudio-0.1.0-py3-none-any.whl.
File metadata
- Download URL: plaudio-0.1.0-py3-none-any.whl
- Upload date:
- Size: 42.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aebce1c1186356484c6877fe5acf517e006d129fd652c9a4bf78f36356760046
|
|
| MD5 |
9e3eb00134cc8d815d15b82aab734909
|
|
| BLAKE2b-256 |
cffc7ff0d36aacb896ecda403d44c4c042eba772402a1c4643c63b630dfdc563
|