pyannoteAI facilitates the understanding of speakers and conversation context. We focus on identifying speakers and conversation metadata under conditions that reflect real conversations rather than controlled recordings.
Speaker diarization is the process of automatically partitioning the audio recording of a conversation into segments and labeling them by speaker, answering the question "who spoke when?". As the foundational layer of conversational AI, speaker diarization provides high-level insights for human-human and human-machine conversations, and unlocks a wide range of downstream applications: meeting transcription, call center analytics, voice agents, video dubbing.
Install pyannote.audio latest release available from with either
uv (recommended) or pip:
$ uv add pyannote.audio
$ pip install pyannote.audioEnjoy state-of-the-art speaker diarization:
# download pretrained pipeline from Huggingface
from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained('pyannote/speaker-diarization-community-1', token="HUGGINGFACE_TOKEN")
# perform speaker diarization locally
output = pipeline('/path/to/audio.wav')
# enjoy state-of-the-art speaker diarization
for turn, speaker in output.speaker_diarization:
print(f"{speaker} speaks between t={turn.start}s and t={turn.end}s")Read community-1 model card to make the most of it.
pyannoteAI research team trains cutting-edge speaker diarization models, thanks to Jean Zay 🇫🇷 supercomputer managed by GENCI 💚. They come in two flavors:
pyannote.audioopen models available on Huggingface and used by 350k+ developers over the world ;- premium models available on
pyannoteAIcloud (and on-premise for enterprise customers) that provide state-of-the-art speaker diarization as well as additional enterprise features.
| Benchmark (last updated in 2026-10) | community-1 |
precision-2 |
precision-3 |
|---|---|---|---|
| AISHELL-4 | 11.7 | 11.4 | 10.4 🏆 |
| AliMeeting (channel 1) | 20.3 | 15.2 | 11.1 🏆 |
| AMI (IHM) | 17.0 | 12.9 | 10.7 🏆 |
| AMI (SDM) | 19.9 | 15.6 | 13.5 🏆 |
| AVA-AVD | 44.6 | 37.1 | 32.7 🏆 |
| CALLHOME (part 2) | 26.7 | 16.6 | 15.6 🏆 |
| DIHARD 3 (full) | 20.2 | 14.7 | 14.5 🏆 |
| Ego4D (dev.) | 46.8 | 39.0 | 36.8 🏆 |
| MSDWild | 22.8 | 17.3 | 15.3 🏆 |
| RAMC | 20.8 | 10.5 🏆 | 10.5 🏆 |
| REPERE (phase2) | 8.9 | 7.4 🏆 | 7.8 |
| VoxConverse (v0.3) | 11.2 | 8.5 🏆 | 8.6 |
Diarization error rate (in %, the lower, the better)
Our models achieve competitive performance across multiple public diarization datasets, explore pyannoteAI performance benchmark ➡️ https://www.pyannote.ai/benchmark
precision-3 premium model further improves accuracy and processing speed, and brings additional features.
| Features | community-1 |
precision-2 |
precision-3 |
|---|---|---|---|
| Set exact/min/max number of speakers | ✅ | ✅ | ✅ |
| Exclusive speaker diarization (for transcription) | ✅ | ✅ | ✅ |
| Voiceprinting & speaker identification | ❌ | ✅ | ✅ |
| STT Orchestration | ❌ | ✅ | ✅ |
| Speech & crosstalk sensitivity knobs | ❌ | ❌ | ✅ |
| Frame-level speech, crosstalk, & speaker probability | ❌ | ❌ | ✅ |
| Time to process 1h of audio (on H100) | 37s | 14s | 4s |
Create a pyannoteAI account, change one line of code, and enjoy free cloud credits to try precision-3 premium diarization:
# perform premium speaker diarization on pyannoteAI cloud
pipeline = Pipeline.from_pretrained('pyannote/speaker-diarization-precision', token="PYANNOTEAI_API_KEY")
better_output = pipeline('/path/to/audio.wav')On the API, set "model": "precision-3" in a diarization request. See docs.pyannote.ai for sensitivity controls, frame-level probabilities, and on-premise operating modes.
We host open-source transcription models like Nvidia Parakeet-tdt-0.6b-v3 and OpenAI whisper-large-v3-turbo with specialized STT + diarization reconciliation logic for speaker-attributed transcripts.
STT orchestration combines pyannoteAI diarization with transcription services. Instead of running diarization and transcription separately, then reconciling outputs manually, you make one API call and receive speaker-attributed transcripts.
To use this feature, make a request to the diarize API endpoint with the transcription:true flag.
# pip install pyannoteai-sdk
from pyannoteai.sdk import Client
client = Client("your-api-key")
job_id = client.diarize(
"[https://www.example/audio.wav](https://www.example/audio.wav)",
transcription=True)
job_output = client.retrieve(job_id)
for word in job_output['output']['wordLevelTranscription']:
print(word['start'], word['end'], word['speaker'], word['text'])
for turn in job_output['output']['turnLevelTranscription']:
print(turn['start'], turn['end'], turn['speaker'], turn['text'])

