## Identify and name speakers

Olenji can group similar voices into labels such as Speaker 1 and Speaker 2. It does not know their real names. Naming a speaker is your decision or your agent's informed action.

### Turn on speaker grouping

Prepare the speaker model, then request speaker grouping when you transcribe or record:

```sh
olenji models install diarization.wespeaker.en
olenji transcribe interview.wav --diarize --retain-audio
```

The speaker model is separate from the model that recognizes words. Installing it alone does not rerun earlier transcripts. For an existing session, [re-transcribe saved audio](/docs/1.4.0/source/#source-0ad5c2ab5fb57132df1f) with speaker grouping enabled.

### Choose another speaker-detection backend

Your agent can inspect `olenji_speaker_models` through MCP or search the model catalog:

```sh
olenji models search diarization --json
olenji models plan-install --profile diarization --json
```

The profile is a download plan for all speaker choices, not a requirement to install them all. Choose one model and inspect its license, compatibility, supported presets and actual readiness. The new timeline backends work on recordings and retained-audio refinement; they are not interchangeable live decoders.

| Model ID | Speaker-detection approach | Presets |
| --- | --- | --- |
| `diarization.wespeaker.en` | Embeddings and clustering; the existing live/file default | `default` |
| `diarization.pyannote.onnx` | Pyannote-style segmentation plus speaker embeddings | `default`, `split`, `merge` |
| `diarization.nemotron-3.onnx` | Nemotron speaker timeline | `default` |
| `diarization.sortformer.v2.onnx` | Sortformer v2 | `default`, `high-context` |
| `diarization.sortformer.v2.1.onnx` | Sortformer v2.1 | `default`, `fast`, `balanced`, `high-context` |
| `diarization.ls-eend.ami.onnx` | LS-EEND AMI | `default` |
| `diarization.ls-eend.callhome.onnx` | LS-EEND CALLHOME | `default` |
| `diarization.ls-eend.dihard2.onnx` | LS-EEND DIHARD II | `default` |
| `diarization.ls-eend.dihard3.onnx` | LS-EEND DIHARD III | `default` |

For example:

```sh
olenji models install diarization.sortformer.v2.1.onnx
olenji transcribe interview.wav --speaker-model diarization.sortformer.v2.1.onnx --speaker-preset balanced --retain-audio
olenji models install diarization.pyannote.onnx
olenji sessions refine SESSION_ID --speaker-model diarization.pyannote.onnx --speaker-preset split
```

`--speaker-model` enables speaker detection; `--model` still selects the recognizer that produces words. Unsupported model/preset combinations fail explicitly. Offline-only speaker choices are rejected before live capture opens. The browser upload/refinement forms expose the same choices; live controls offer only live-compatible models.

These portable artifacts and implementations are distinct from OVE's Apple-only Core ML exports. A shared model family or preset name does not establish identical results. Presets change the backend's processing policy, not its neural-weight identity. Splitting and merging estimates can improve one recording and worsen another.

Offline timeline inference is bounded to one hour of normalized audio and releases its model worker before recognition starts. Longer recordings need separate inputs or the existing WeSpeaker route. Where concurrent speakers or word boundaries are ambiguous, Olenji records uncertainty and overlap evidence without duplicating or inventing source text. Diarization detects who spoke when; it does not isolate clean audio for each simultaneous voice. Compare representative recordings before relying on speaker assignments.

### Recover from changed speaker weights

Before starting a speaker worker, Olenji checks its model files against the saved integrity manifest. A same-size content change can pass the initial readiness check but fails this verification with `model_corrupt`, before the worker loads the changed weights.

Stop capture and wait for jobs using the speaker model to finish, then check its files:

```sh
olenji models verify diarization.wespeaker.en --json
```

If verification reports damaged files, reinstall the speaker model:

```sh
olenji models install diarization.wespeaker.en
```

After verification succeeds, retry transcription or start a new live capture with speaker grouping. Reinstalling does not automatically restart capture or change earlier speaker assignments.

### Change a name, color, or assignment

Use the browser's speaker controls, or read the speaker IDs and edit a label:

```sh
olenji speakers list SESSION_ID --json
olenji speakers rename SESSION_ID SPEAKER_ID "Ada"
olenji speakers color SESSION_ID SPEAKER_ID "#1565C0"
```

To correct one turn's speaker, use that turn's edit control. Its **Speaker** menu includes **Unassigned**. You can also create a label before assigning turns to it.

### Combine duplicate labels

Use **Merge assignments** in the speaker dialog, or:

```sh
olenji speakers merge SESSION_ID SOURCE_SPEAKER_ID TARGET_SPEAKER_ID
```

The target label remains. Merging changes assignments and can make related translations need review. This is more than changing a display name. There is no one-command unmerge, so inspect the turns first.

Short speech, similar voices, background sound, and overlapping speakers can be difficult to separate. An unknown assignment is preferable to a guessed identity. Speaker labels apply to this session, not a verified identity across recordings.
