Auto-identify speakers¶
After a transcript is admitted, TranscriptX can try to replace diarized labels (SPEAKER_00, …) with readable names, and optionally link those speakers to existing longitudinal profiles.
This page is the operator reference. Manual naming walkthrough: Identify and name speakers. Invariants: speaker_profiles_voice_v1.md. USB / inbox ingest: host-stt.md.
It is probabilistic matching, not identity verification. Review badges and override names in Speaker Identification.
Two independent knobs¶
Knob |
Effect when on |
|---|---|
Auto-name |
Write display names on the speaker-map sidecar so Transcript shows people instead of |
Auto-link |
Create a longitudinal profile link with |
Both default off. They are orthogonal: names without links, links without names, or both.
What it does not do:
Overwrite an effective human name or a live profile link
Create a new profile from a first-meeting name heard in the dialogue
Enrol voice samples into the ECAPA reference corpus (
auto_identifiedstayssuggestion_assisted/ineligible_trustuntil you promote)Force a label when voice and text disagree, or when two speakers claim the same name or profile (leaves
SPEAKER_*)
Where it runs¶
Surface |
How |
|---|---|
Settings → Speakers |
“Auto-identify on ingest” stores defaults in |
Speaker Identification |
Apply auto-identify on a managed library transcript. Badges show auto-named / auto-linked. Rename or relink as usual. |
Host inbox-watch |
|
Admit helper |
|
Standalone CLI |
|
USB drop → convert → transcribe → admit → named transcript:
inbox-watch --watch --auto-name
# names only:
inbox-watch --watch --auto-name --no-auto-link
Standalone on files already in the library:
python -m transcriptx.identify_speakers --path FILE.json --auto-name --auto-link
python -m transcriptx.identify_speakers --all-unnamed --dry-run
--dry-run prints fusion decisions and does not write maps or links. CLI flags override {config_dir}/identify.json for that invocation.
Host-script merge order, env keys, and --admit-python live in host-stt.md. Returning speakers need enrolled trusted voice for the voice channel; in-transcript names can still label a first meeting (auto-name only — no new profile).
How fusion decides¶
Three local channels contribute candidates; an explicit table then apply or skip:
Voice — strong unique ECAPA suggestion against enrolled references (voice privacy on, corpus not empty).
Mentions — self-introductions and vocatives in the transcript text; unique-winner clustering; optional unique match to an existing profile display name.
Style — function-word / turn / question vectors versus prior linked text. Used as corroboration. Style-only apply stays off unless
style_only_applyis enabled inidentify.json.
Apply order (per diarized ID): strong unique voice (skip the speaker if a mention disagrees); else a unique mention; else strong style if that knob is on; else leave unnamed. A name or profile claimed by two speakers in the same transcript skips both.
Disposable review dump: speaker_profiles/.cache/identify/{managed_id}.identify.v1.json. Confirmed links and speaker-map sidecars remain the identity / display authorities.
Eval fixtures: scripts/eval_speaker_identify_fusion.py. Voice thresholds stay provisional — known limitations.
Review¶
Open Speaker Identification after ingest. Auto-named / auto-linked badges mark machine writes. Saving a name or linking a profile from the workspace replaces the auto result the same way as a manual first pass.
Downstream speaker cards and per-speaker modules still need human-readable names. A prior analysis run may keep old SPEAKER_* labels until you re-run modules that key on speaker identity.