Skip to content

Speaker Diarization and Voice ID

OpenASR treats speaker diarization and Voice ID as two related but separate stages:

  • Diarization answers who spoke when inside one recording. Unknown people receive session-relative labels such as SPEAKER_00 and SPEAKER_01.
  • Voice ID compares those speaker tracks with people you chose to enroll, so a later transcript can show a display name. It is a labeling convenience, not authentication or legal identity verification.

Both stages run locally by default.

Desktop: one switch for every local file model

Section titled “Desktop: one switch for every local file model”

The Voice ID switch in file transcription works with every local ASR model. The app chooses the speaker source without exposing a second workflow:

  • A model with native speaker tracks (currently MOSS) keeps those tracks.
  • Every other ASR model uses OpenASR’s shared external diarization pipeline.
  • ReDimNet2-B6 supplies the shared speaker-embedding space used for enrollment, cross-recording matching, and external diarization.

You can enable Voice ID before enrolling anyone. The transcript will still be split into anonymous speakers, and you can assign or create identities on the completed-transcript page. Future recordings can then reuse those names.

Voice ID is deliberately limited to local file transcription in Desktop. Desktop Dictation, Live Captions, and Remote Compute do not expose or enable it.

For ASR models without native speaker tracks, OpenASR composes four independent components around the recognizer:

  1. Built-in FireRedVAD finds speech regions.
  2. pyannote segmentation-3.0 detects speaker activity, changes, and overlap.
  3. ReDimNet2-B6 extracts speaker embeddings.
  4. Automatic clustering and overlap reconstruction map speakers back to the ASR timeline.

segmentation-3.0 is the permissively licensed baseline and default provider. OpenASR also has an optional enhanced-provider path pinned to the FP16 DiariZen Large-s80-md-v2 package, but it is not currently offered for download in the public catalog. If it is offered later, its CC BY-NC 4.0 weights will require a separate, explicit acknowledgement that they are for personal, non-commercial use; OpenASR will never download them automatically. After an explicitly installed and enabled package is present, the Auto policy selects it automatically. Disabling or removing it deliberately returns to segmentation-3.0; an invalid installed DiariZen package fails the Voice ID job instead of silently changing providers.

The selected ASR model remains independent of this pipeline. Marketplace cards that say Built-in speaker separation identify native one-pass speaker tracks; they do not limit which local file models can use Voice ID.

The open-core CLI exposes anonymous diarization through --diarize:

bash
openasr transcribe --diarize recording.wav
openasr live --diarize

For offline file transcription, an exact cluster count can be supplied when it is known:

bash
openasr transcribe --diarize --speakers 3 recording.wav

--speakers requires --diarize and is not available on live. Required capability packs must be installed or explicitly approved for installation. In --offline mode, or when a required pack/provider is unavailable, OpenASR fails closed rather than inventing speaker labels.

The CLI does not have an openasr speaker enroll command. Cross-recording identity management is exposed through the local server’s operator-only Voice ID API and through the Desktop product flow.

One enrollment sample must contain at least 10 seconds of effective speech. Desktop and the from-audio API routes accept common source formats through the normal local conversion path; the source media is only temporary.

OpenASR stores embeddings, consent records, and identity metadata in SQLite at $OPENASR_HOME/diarize/voice-id.db. Set OPENASR_VOICE_ID_DB to override the path. Raw enrollment audio is not persisted in the Voice ID store.

An enrolled person is named only when the available speech clears the matching evidence gates. Otherwise the transcript safely retains its anonymous SPEAKER_NN label.

All routes below are operator-only when pairing authentication is active. Paired Remote Compute device credentials cannot read or mutate the operator’s Voice ID data.

MethodPathPurpose
GET, POST/v1/voice-id/personsList people or enroll from prepared clips
GET, PATCH, DELETE/v1/voice-id/persons/{person_id}Read, edit, or delete a person
POST/v1/voice-id/persons/from-audioEnroll from common source audio
POST/v1/voice-id/persons/{person_id}/samplesAdd a prepared sample
POST/v1/voice-id/persons/{person_id}/samples/from-audioAdd a sample from common source audio
POST/v1/voice-id/persons/{person_id}/consent/revokeRevoke consent and disable matching
PATCH, DELETE/v1/voice-id/samples/{sample_id}Rename or remove one sample
POST/v1/voice-id/exportExport Voice ID metadata
PUT/v1/history/{id}/speaker-assignmentsSave reviewed speaker assignments

See Server API for the full endpoint table and authentication model, and Live transcription for the separate anonymous CLI live-diarization surface.

  • Processing and matching run locally by default; there is no telemetry.
  • Raw enrollment audio is not retained in the Voice ID database.
  • Model downloads are explicit and use the signed catalog.
  • DiariZen’s non-commercial license boundary is independent from the permissive segmentation-3.0 default.
  • Voice ID must not be used as authentication, access control, or proof of identity.