Diarization
Who spoke when, anonymously — diart (live) and TD, our own post-pass model.
Diarization answers who spoke when — as anonymous speaker labels (Speaker 1, Speaker 2),
never names. Naming is a separate, consented step (voiceprints).
This is the load-bearing boundary: Capture emits {start, end, local_speaker} and nothing else.
Two engines
| Engine | When | Where | Accuracy (DER) | Notes |
|---|---|---|---|---|
| diart | Live, streaming | CPU | ~0.190 | our streaming diarizer; drives the on-screen live preview |
| TD | Post-meeting, authoritative | GPU | ~0.088 | our own trained model (WavLM-based); overwrites the live labels with the accurate pass |
The live path shows a diart preview immediately; after the meeting, the authoritative TD post-pass re-diarizes for accuracy, then hands spans to VFTEE for identity.
How a meeting resolves
The headline is the merged transcript
Diarization quality is judged by the merged [speaker] text transcript, not DER in isolation:
Whisper (what was said) runs alongside the diarizer (who said it), and the two are merged by
timestamp. A great DER with a garbled merge is still a bad transcript.
Our models & the managed fallback
TD is our own model — we trained it (WavLM-based) so the authoritative post-pass runs on a model we own end to end. diart is the firm choice for the real-time path; TD is post-pass only. While we scale our own models on TEE GPUs, a managed engine (Deepgram) currently serves as a temporary fallback so every meeting still gets an accurate diarized transcript. Ongoing diarization work is tracked as P0: diarization.