Name anonymous diarized SRT speakers from a persistent local voiceprint library and repair speaker drift; local, CPU-only, no API key.

MITAuto-check passedMedia & Creative

Install Speaker Id

skills CLI
$ npx skills add BlackBeltTechnology/pi-agent-dashboard --skill speaker-id -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install BlackBeltTechnology/pi-agent-dashboard speaker-id --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/BlackBeltTechnology/pi-agent-dashboard.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/video-transcription/.pi/skills/speaker-id .claude/skills/speaker-id && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
speaker-id
GitHub stars
315
Token cost
~1.8k tokens
SKILL.md length
819 words
Files
3
Skills in repo
70
Repo updated
First seen
Licence
MIT

At a glance

Name anonymous diarized SRT speakers from a persistent local voiceprint library and repair speaker drift; local, CPU-only, no API key.

  • Works in 3 steps: Check for drift first → Enroll a voice → Label a transcript
  • Who is speaker 2
  • SKILL.md covers How it works, Setup (one time), Voiceprint library and Procedure, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Speaker Id is an agent skill from BlackBeltTechnology/pi-agent-dashboard. Name anonymous diarized SRT speakers from a persistent local voiceprint library and repair speaker drift; local, CPU-only, no API key. Triggers "who is speaker 2", "put names on the transcript", "label the meeting SRT", "the diarization split one person into three", "enroll my voice". Backed by the pi-voiceid CLI.

Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `AGENTS.md` and `BENCHMARK.md`).

It sits in Media & Creative, covering Transcription. The repository describes itself as: Real-time web dashboard for pi coding-agent sessions. Multi-session view, live chat mirroring, integrated terminal, diff viewer, pi-flows execution, and mobile-first remote… The licence is MIT.

When your agent uses it

  • Who is speaker 2
  • Put names on the transcript
  • Label the meeting SRT
  • The diarization split one person into three

Example prompts

  • “who is speaker 2”
  • “put names on the transcript”
  • “label the meeting SRT”
  • “/speaker-id”

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Check for drift first
  2. Enroll a voice
  3. Label a transcript

What it can do on your machine

Read from SKILL.md and the folder at commit 7a2d171. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Speaker Id loads about 1.8k tokens when it runs. Until then it costs about 82 tokens; SKILL.md has 819 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~82
When it runs · the whole SKILL.md, loaded when a task matches
~1.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from BlackBeltTechnology/pi-agent-dashboard at commit 7a2d171, republished under its MIT licence (© BlackBeltTechnology). 819 words, ~1,808 tokens.

Download SKILL.mdSave it as .claude/skills/speaker-id/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
speaker-id
description
Name anonymous diarized SRT speakers from a persistent local voiceprint library and repair speaker drift; local, CPU-only, no API key. Triggers "who is speaker 2", "put names on the transcript", "label the meeting SRT", "the diarization split one person into three", "enroll my voice". Backed by the pi-voiceid CLI.

Speaker ID enrollment

Give diarized transcripts real names, and repair the drift that clustering diarizers produce on long recordings. Post-hoc relabeling — it does not create diarization, it relabels an existing one.

bash
pi-voiceid analyze --srt talk.srt            # drift report, no enrollment needed
pi-voiceid enroll  --name "Alice" --srt talk.srt --label "Speaker 1"
pi-voiceid label   --srt talk.srt --dry-run  # always dry-run first
pi-voiceid label   --srt talk.srt            # writes talk.named.srt

The source SRT is never overwritten. Everything runs locally on CPU via sherpa-onnx; no audio or embedding leaves the machine.

How it works

  1. Each anonymous cluster is profiled with a speaker-embedding model, sampling segments across the whole timeline (drift is temporal).
  2. Cluster centroids are centered (a multi-speaker mean subtracted) and compared by cosine to the enrolled voiceprints.
  3. A cluster is named only when the absolute threshold, the margin over the runner-up, and a minimum share of agreeing segments all pass. Otherwise the anonymous label is kept — never guessed.
  4. Several clusters may map to one name: that is the drift repair.

Setup (one time)

The embedding model is not vendored. On first enroll/label it is fetched into ~/.pi/models/speaker/ (28 MB). Model choice is the single biggest accuracy factor — see BENCHMARK.md. Do not "upgrade" to a bigger model without re-running the benchmark: the 114 MB VoxCeleb leader scored worse than the 28 MB default on real meeting audio.

The native binding sherpa-onnx-node is an optional dependency. When it is absent, transcription still works and pi-voiceid fails with an actionable message naming the dependency and the install command.

Voiceprint library

Default store: ~/.pi/voiceprints/voiceprints.json. Override with --store or the PI_VOICEPRINT_STORE env var. This is biometric-derived data about identifiable people: it lives outside the repo by default, it is overridable, and it must never be committed. If you point --store inside a repository, add it to that repo's .gitignore.

enroll also embeds the source recording's other speakers, so the centering mean stays multi-speaker (centering one speaker by their own mean cancels the signal). Those third parties therefore end up in the store as unnamed contributions. Erase with forget:

bash
pi-voiceid forget --name "Alice"        # drops Alice's voiceprint + her contributions
pi-voiceid forget --recording <id>      # drops a whole recording's contributions
pi-voiceid list                         # shows the cohort and which clusters are unnamed

A never-enrolled speaker swept into the pool has no name, so only forget --recording <id> reaches them. list makes that visible.

Procedure

1. Check for drift first
bash
pi-voiceid analyze --srt talk.srt

Prints per-cluster coherence and a channel-centered cluster-to-cluster cosine matrix. Pairs at or above --drift-threshold (default 0.55) are flagged as likely the same person split in two. analyze needs no library. The 0.55 default is weakly calibrated (n = 2) — treat it as a starting point.

2. Enroll a voice

Best: from a cluster you have already identified in an SRT (plenty of audio).

bash
pi-voiceid enroll --name "Csákány Róbert" --srt talk.srt --label "Speaker 1"

From a standalone clip:

bash
pi-voiceid enroll --name "Kovács Dániel" --audio sample.m4a --start 12 --end 75

Re-running the same name merges into the existing voiceprint (segment-count weighted); --replace resets it instead. Enroll the same person from several recordings — the cheapest accuracy win.

3. Label a transcript
bash
pi-voiceid label --srt talk.srt --dry-run
pi-voiceid label --srt talk.srt

Always read the dry-run decision table. --output overrides the sibling *.named.srt (and is required for the same-file refusal to be reachable). --relabel allows an already-named transcript and leaves clusters whose name is already in the library untouched, so the iterative workflow (label, enroll one more person, label again) is safe.

Show full SKILL.md (338 more words)Show less

Reading the output

ColumnMeaning
coscentered cosine of the cluster centroid to the best voiceprint
2nd / marginrunner-up and the gap — a small gap means "could be either"
voteshare of individual segments agreeing with the centroid's pick
spacewhether the cohort mean or the recording fallback produced the score

Healthy cross-recording match: cos 0.6–0.9, margin > 0.5, vote > 80 %. Correct rejection of an un-enrolled person looks like cos ≈ 0.0–0.25.

Pitfalls

  • Centering needs a cohort. Below 40 embeddings the library-wide mean is not trusted; the tool falls back to the recording's own mean, raises the threshold by one margin minimum, and says so. Enroll ≥ 3 voices.
  • Never center by one speaker's own mean — the tool refuses a pool with fewer than two speakers, or one speaker above 70 % of the pool's audio duration.
  • Channel mismatch is the dominant failure mode. A voiceprint from a phone memo scores poorly against a conference capture. Enroll per capture setup.
  • Model mismatch is refused. Voiceprints and cohort contributions record the model name and dimension; switching models requires re-enrolling.
  • Short segments are noise (--min-seg defaults to 1.2 s; do not lower it).
  • pi-voiceid needs the source media beside the SRT (or --audio). Media shorter than the last cue is refused — never embed ranges that do not exist.

Limitations

This is approach (A): post-hoc cluster relabeling. It cannot:

  • separate overlapping speech (two people at once);
  • fix a cluster that already merges two speakers (check analyze coherence — below ~0.55 the cluster itself is impure);
  • recover a speaker the diarizer never separated at all.

Those need approach (B), true TS-VAD / personal VAD, where the enrollment embedding feeds a frame-level model. Requires training; out of scope.

Accuracy on real audio is a lower bound: it was measured against another diarizer's labels, not human annotation. Do not quote the segment-level figure as the product's accuracy.

Verification

bash
pi-voiceid label --srt "<enrollment source>.srt" --dry-run   # expect a 1:1 map, high cos
pi-voiceid label --srt "<unrelated recording>.srt" --dry-run # expect mostly UNKNOWN
pi-voiceid list                                              # enrolled voices must not resemble each other

Measured on the reference archive: self-consistency 3/3 at cos 0.89–0.99 with a 4th un-enrolled cluster rejected at 0.252; cross-recording matches at cos 0.72–0.89. Full numbers and the six-model comparison are in BENCHMARK.md.

© BlackBeltTechnology, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files in packages/video-transcription/.pi/skills/speaker-id of BlackBeltTechnology/pi-agent-dashboard.

  • SKILL.md
  • AGENTS.md
  • BENCHMARK.md

Open the folder on GitHubat commit 7a2d171

Compare with similar skills

Speaker Id next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Speaker Id compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Speaker Id this skillBlackBeltTechnology/pi-agent-dashboard315—~1.8kAutomated safety check: PassMIT
HyperFrames Media Useheygen-com/hyperframes60k—~2.4kAutomated safety check: PassApache-2.0
Native Subtitle Quote Imagechengyi-ai/native-subtitle-quote-image2.6k—~1.8kAutomated safety check: PassMIT
Edu Chem Videowy51ai/edulab1.4k—~2.1kAutomated safety check: NotesApache-2.0
Transcription Memory ReconstructionNxcoreAI/EverRoom3k—~714Automated safety check: PassCustom licence
Edu Math Videowy51ai/edulab1.4k—~2.5kAutomated safety check: NotesApache-2.0

Similar skills

  • HyperFrames Media Use

    heygen-com/hyperframes

    Finds, generates and edits media for HyperFrames video projects: music, sound effects, images, icons, logos, voiceovers, captions and color grades.

    60k GitHub stars~2.4k tokensUpdated today
    Media & CreativeAuto-check passed
  • Native Subtitle Quote Image

    chengyi-ai/native-subtitle-quote-image

    将本地视频或用户有权处理的在线视频,经过来源获取、文字稿定位、选题选句、精确取帧、紧凑裁切、拼图和逐张质检,制作成 3:4 或保留画面原比例的视频字幕长图。支持两种明确分开的输出:保留画面内已烧录字幕的原生字幕模式,以及把已审核的时间点与台词绘制到真实视频帧上的脚本字幕模式。用户要求原生字幕截图、字幕帧拼图、YouTube…

    2.6k GitHub stars~1.8k tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Edu Chem Video

    wy51ai/edulab

    A skill your agent uses when asked to make an explainer / walkthrough video (讲解视频、解题视频、例题精讲、微课) for a chemistry problem (化学题: 氧化还原配平 双线桥 电子守恒, 物质的量计算, 化学平衡 三段式 平衡常数 转化率 反应速率, 离子反应, 电化学, 溶液 滴定…

    1.4k GitHub stars~2.1k tokensUpdated yesterday
    Media & CreativeAuto-check: notes
  • Reconstruct a complete, searchable memory from an untrusted meeting or conversation transcript.

    3k GitHub stars~714 tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Edu Math Video

    wy51ai/edulab

    A skill your agent uses when asked to make an explainer / walkthrough video (讲解视频、解题视频、例题精讲、微课) for a math problem (数学题, geometry, algebra, functions, motion/行程 problems), from a problem screenshot…

    1.4k GitHub stars~2.5k tokensUpdated yesterday
    Media & CreativeAuto-check: notes
  • Transcribe

    JetBrains/skills

    Official

    Transcribe audio files to text with optional diarization and known-speaker hints.

    366 GitHub starsUsed in 4 repos~776 tokens
    Media & CreativeAuto-check passed

More from BlackBeltTechnology/pi-agent-dashboard

All 70 skills in this repo
  • Browser

    BlackBeltTechnology/pi-agent-dashboard

    Browser automation via the agent-browser CLI. An agent skill from BlackBeltTechnology/pi-agent-dashboard.

    315 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • CI Troubleshoot

    BlackBeltTechnology/pi-agent-dashboard

    Diagnose failed GitHub Actions runs for pi-agent-dashboard: the 11-file workflow taxonomy, affected-test selection, the release pipeline, known failure modes, and how to read gh run logs and…

    315 GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Debug Dashboard

    BlackBeltTechnology/pi-agent-dashboard

    Diagnose problems in the running pi-agent-dashboard system: server.log, /api/health, bridge WebSocket connectivity, vitest triage, known-issue FAQ entries.

    315 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Implement

    BlackBeltTechnology/pi-agent-dashboard

    Disciplined implementation in pi-agent-dashboard: the rebuild matrix (extension→reload, server→restart, client→build+restart, openspec-apply→full rebuild) plus the project's code discipline rules.

    315 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Pi Dashboard

    BlackBeltTechnology/pi-agent-dashboard

    Monitor and control the pi-dashboard server. An agent skill from BlackBeltTechnology/pi-agent-dashboard.

    315 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Session To Guideline

    BlackBeltTechnology/pi-agent-dashboard

    Turn a pi session into a Markdown "how-we-did-it" collaboration guideline: reads the session's JSONL transcript and synthesizes a reusable playbook of which prompts worked, what had to be steered…

    315 GitHub stars~3.2k tokensUpdated today
    Auto-check passed

Questions about Speaker Id

What does Speaker Id do?

Name anonymous diarized SRT speakers from a persistent local voiceprint library and repair speaker drift; local, CPU-only, no API key. Speaker Id is an agent skill from BlackBeltTechnology/pi-agent-dashboard. Name anonymous diarized SRT speakers from a persistent local voiceprint library and repair speaker drift; local, CPU-only, no API key.

When should I use Speaker Id?

Speaker Id fits situations like: who is speaker 2; put names on the transcript; label the meeting SRT; the diarization split one person into three.

How do I install Speaker Id in Claude Code?

Run `npx skills add BlackBeltTechnology/pi-agent-dashboard --skill speaker-id -a claude-code`. Or copy the skill folder (packages/video-transcription/.pi/skills/speaker-id in BlackBeltTechnology/pi-agent-dashboard) into .claude/skills/speaker-id in your project. Claude Code loads it when a task matches its description.

How do I install Speaker Id in Codex?

Run `npx skills add BlackBeltTechnology/pi-agent-dashboard --skill speaker-id -a codex`. Or copy the skill folder (packages/video-transcription/.pi/skills/speaker-id in BlackBeltTechnology/pi-agent-dashboard) into .agents/skills/speaker-id in your project. Codex loads it when a task matches its description.

Can I use Speaker Id in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add BlackBeltTechnology/pi-agent-dashboard --skill speaker-id -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/speaker-id, .gemini/skills/speaker-id, .github/skills/speaker-id and .opencode/skills/speaker-id in your project.

What does Speaker Id need to run?

SKILL.md names no scripts, command-line tools or credentials: Speaker Id is instructions for the agent only.

Does Speaker Id access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Speaker Id safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Speaker Id use?

Speaker Id is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Speaker Id use?

About 1.8k tokens (SKILL.md is roughly 7.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Speaker Id?

Skills that share tags, products or a category with Speaker Id: HyperFrames Media Use (heygen-com/hyperframes, 60k stars), Native Subtitle Quote Image (chengyi-ai/native-subtitle-quote-image, 2.6k stars), Edu Chem Video (wy51ai/edulab, 1.4k stars) and Transcription Memory Reconstruction (NxcoreAI/EverRoom, 3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Speaker Id?

BlackBeltTechnology (a GitHub organization) maintains it in BlackBeltTechnology/pi-agent-dashboard, which has 315 GitHub stars. The repository holds 70 skills in this directory. The repository was last updated on October 10, 2026.

Source: BlackBeltTechnology/pi-agent-dashboard on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.