Diarization
Who spoke when, anonymously — diart (live) and DiariZen (post-pass).
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 | pyannote streaming; drives the on-screen live preview |
| DiariZen | Post-meeting, authoritative | GPU | ~0.088 | WavLM + VBx; overwrites the live labels with the accurate pass |
The live path shows a diart preview immediately; after the meeting, the authoritative DiariZen post-pass re-diarizes for accuracy, then hands spans to VFTE for identity.
How a meeting resolves
in-person mic → diart (live) + NEAR Whisper ASR per span → live preview
finalize → DiariZen post-pass (authoritative spans)
→ VFTE identify-spans (scoped + consented names)
→ merge by timestamp → [speaker] text transcript → enrichThe 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.
Licensing & production reality
DiariZen's weights are CC-BY-NC — fine for evaluation, but a clean engine is required before commercial use, which is why replacing the post-pass model is an active workstream. The live path (diart) is the firm choice for real-time; DiariZen is post-pass only. Current latency/reliability work is tracked as P0: diarization.
Source: FEATURE-SPEC.md §3.2, DIARIZATION-MIGRATION.md.