audio-voice-id

April 19, 2026 · View on GitHub

Claude Code plugin for speaker diarization, voice enrollment, and identification. Builds a local voice-print library (with optional cloud sync) so that AI transcription and editing workflows can auto-label known speakers.

What it does

  • Diarize a recording into speaker-segmented timestamps (pyannote.audio).
  • Enroll named voices into a local library (ECAPA-TDNN embeddings via SpeechBrain).
  • Identify who's speaking in a new clip by cosine-matching against enrolled embeddings.
  • Auto-label diarization output against the library (known speakers get their real names; unknowns stay anonymous).
  • Sync the library to cloud storage (rclone: Google Drive, Dropbox, B2, S3, etc.).

Storage layout

~/.local/share/audio-voice-id/
├── voices/
│   ├── <name>/
│   │   ├── embedding.npy        # averaged ECAPA embedding
│   │   ├── samples/*.wav        # source snippets
│   │   └── meta.json            # enrollment history, notes
│   └── <other-name>/...
├── library.json                 # index of enrolled voices
└── config.json                  # HF token path, thresholds, cloud remote

Typical workflow

/setup-voice-library              # one-time
/install-diarization              # one-time: pyannote + speechbrain
/diarize-audio meeting.wav        # → meeting.rttm + meeting.diarization.json
/enroll-from-diarization meeting.diarization.json speaker_0 daniel
/enroll-from-diarization meeting.diarization.json speaker_1 sarah
/label-diarization meeting.diarization.json  # auto-renames future meetings
/sync-voice-library push          # replicate to cloud remote

Requirements

  • Python 3.10+, pipx
  • ffmpeg
  • Free Hugging Face account + token (for pyannote pipeline terms acceptance)
  • Optional: rclone for cloud sync