Skip to main content

Overview

OfflineDiarizerManager provides the full pyannote CoreML pipeline (powerset segmentation + VBx clustering) for highest accuracy offline diarization. Based on pyannote/speaker-diarization-community-1. Requires macOS 14 / iOS 17 or later.

Quick Start

File-Based API

For large files, use memory-mapped streaming:

Pipeline Stages

  1. Segmentation — 10s/160k sample chunks through Core ML segmentation (589 frame-level log probabilities)
  2. Binarization — Log probabilities to soft VAD weights
  3. Weight Interpolationscipy.ndimage.zoom-compatible half-pixel mapping
  4. Embedding Extraction — FBANK + embedding backend, L2-normalized 256-d embeddings
  5. VBx Clustering — AHC warm start + PLDA + iterative VBx refinement
  6. Timeline Reconstruction — Timestamps with minimum gap/duration constraints

Configuration

OfflineDiarizerConfig groups knobs by pipeline stage:
  • segmentation — Window length (10s), step ratio, min on/off durations
  • embedding — Batch size, overlap handling
  • clustering — VBx warm-start threshold, Fa/Fb priors
  • vbx — Max iterations, convergence tolerance
  • postProcessing — Minimum gap duration
  • export — Optional embeddingsPath for JSON dump

Benchmarks

VoxConverse (232 clips, multi-speaker conversations). Segmentation uses 10s windows: Default is ~2x faster for only ~1.2% worse DER. Use step ratio 0.1 for critical accuracy. Reference: pyannote community-1 on CPU is 1.5-2x RTFx, on MPS is 20-25x RTFx. FluidAudio on ANE is 65-122x RTFx.

CLI