theoracleguy/Pyannote-Community-1-CoreML
Pyannote Community-1 Core ML
Precompiled Core ML neural stages and native VBx data for the offline Pyannote Community-1 speaker-diarization pipeline on Apple platforms.
Part of the soniqo.audio speech toolkit. See the speaker-diarization guide, inspect the native Swift Community-1 runtime, or browse the Core ML Speech Models collection.
This is a pipeline bundle, not one end-to-end model. The host must run powerset decoding, speaker counting, overlap-aware mask selection, VBx clustering, and timeline reconstruction exactly as described by config.json.
Model
The WeSpeaker graph includes the exact Kaldi filterbank and weighted statistics pooling used by Community-1. Its vectors are intentionally not normalized before PLDA. Both Core ML graphs use fixed batch size one and require iOS 17 or macOS 14 or later.
Files
Performance
Lower diarization error rate (DER) and Jaccard error rate (JER) are better. Throughput above 1x means faster than realtime.
Tested on Apple M5 Pro with cpu-and-neural-engine. Peak process memory was 863 MiB. The five-file speaker-count estimate was exact for 3 of 5 recordings, so callers should allow a known or bounded count when available.
The neural stages themselves processed one 10-second window in a median 7.44 ms for segmentation and 33.24 ms for all three masked embeddings. The benchmark used the official Community-1 host processing and revision 3533c8cf8e369892e6b79ff1bf80f7b0286a54ee. Scores and speaker counts matched the upstream PyTorch/MPS run for every evaluated recording.
The VoxConverse result is a small five-recording release check, not a claim over the full dataset. The AMI row is one meeting and is shown as a limitation, not a representative AMI score.
Swift runtime integration
The matching native runtime is available in `soniqo/speech-swift` on `feat/community1-coreml` at commit `a6ed5a5`. It runs both Core ML graphs, powerset decoding, speaker counting, PLDA, VBx, constrained assignment, and timeline reconstruction without Python.
speech diarize meeting.wav --engine community1
speech diarize meeting.wav --engine community1 --num-speakers 2
speech diarize meeting.wav --engine community1 --min-speakers 2 --max-speakers 6let diarizer = try await Community1DiarizationPipeline.fromPretrained()
try diarizer.prewarm()
let result = try diarizer.diarize(
audio: samples,
sampleRate: 16_000,
speakerBounds: Community1SpeakerBounds(minimum: 2, maximum: 6)
)The runtime returns diarized segments plus one 256-dimensional centroid for each detected speaker. Speaker IDs are local to one result; use the centroids for recording-local or persistent identity matching.
Download
hf download aufklarer/Pyannote-Community-1-CoreML --local-dir Pyannote-Community-1-CoreMLPython example
The following runs the segmentation stage. Complete diarization also needs the host steps and PLDA data described in config.json.
import json
from pathlib import Path
import coremltools as ct
import numpy as np
root = Path("Pyannote-Community-1-CoreML")
config = json.loads((root / "config.json").read_text())
model = ct.models.CompiledMLModel(
str(root / config["segmentation"]["model"]),
compute_units=ct.ComputeUnit.CPU_AND_NE,
)
# One 10-second, 16 kHz mono window in [-1, 1].
waveform = np.zeros((1, 1, 160_000), dtype=np.float32)
log_probabilities = model.predict({"waveform": waveform})["log_probabilities"]
print(log_probabilities.shape) # (1, 589, 7)On Apple platforms, load the .mlmodelc directories directly. Do not compile an .mlpackage at runtime; compiled artifacts are provided to keep behavior stable across macOS, iOS, and simulator runtimes.
Source and license
Derived from pyannote/speaker-diarization-community-1 at revision 3533c8cf8e369892e6b79ff1bf80f7b0286a54ee. Community-1 combines Pyannote segmentation, WeSpeaker embeddings, and VBx clustering and is distributed under CC BY 4.0. Preserve this attribution when redistributing the bundle.
Links
- Speaker diarization guide — concepts and public APIs
- speech-swift — Apple speech SDK
- Native Community-1 runtime — pinned Swift implementation
- Community-1 runtime branch — CLI, tests, and documentation
- Core ML Speech Models — related Apple bundles
- Getting started — installation and CLI guide
- soniqo.audio — website
- Blog — updates and technical articles
