Skip to main content

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.

License: AGPL v3 or later Python 3.11+ Platform: macOS Apple Silicon Status: alpha

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.json with permissions 0600. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plaudio-0.1.0.tar.gz (43.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

plaudio-0.1.0-py3-none-any.whl (42.1 kB view details)

Uploaded Python 3

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

Hashes for plaudio-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3706073290060fc505f63ba252ac66ecc108b7b707b84d6ace860eb2e8d1fbba
MD5 53e5d0a5d8652f24821725683b3f6c31
BLAKE2b-256 5149d2182359a06e66aa419345d641218b8c262fc1cc03077252b906bd473ba8

See more details on using hashes here.

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

Hashes for plaudio-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aebce1c1186356484c6877fe5acf517e006d129fd652c9a4bf78f36356760046
MD5 9e3eb00134cc8d815d15b82aab734909
BLAKE2b-256 cffc7ff0d36aacb896ecda403d44c4c042eba772402a1c4643c63b630dfdc563

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page