audio-transcriber-memory
Health Warn
- No license — Repository has no license file
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Fail
- rm -rf — Recursive force deletion command in skills/audio-transcribe/scripts/setup_env.sh
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Enhanced `audio-transcribe` skill with cross-session voiceprint matching (enroll → match → merge) for multi-speaker meeting & podcast transcription. FunASR + CAM++ diarization + optional LLM cleanup, works with Claude Code.
audio-transcriber-memory — Cross-session meeting transcription with voiceprint memory
English | 中文
Transcribe a meeting once, remember who spoke — and keep that memory across every session that follows. This is an enhanced fork of the
audio-transcribeskill (v1.9.1), built for repeated, cross-session meeting transcription: enroll a speaker's voiceprint once, and every later recording is auto-matched so the same person keeps the same label, session after session.
Why "memory" changes everything
The upstream skill labels speakers by first-appearance order in each recording — accurate within a single session, but meaningless across sessions. Speaker 1 in Monday's meeting and Speaker 1 in Friday's meeting may be two different people, and any labeling work you did in between is lost.
This fork adds a complete enroll → match → merge loop:
Session A (enroll) Session B (match)
┌──────────────────────┐ ┌──────────────────────┐
│ enroll_speakers.py │ speaker- │ transcribe.py │
│ → CAM++ voiceprint │ embeddings │ → Hungarian 1:1 match│
│ → L2 centroid vector │ ─────────────► │ → threshold filter │
│ → gender detection │ json │ → new-speaker fallback
└──────────────────────┘ └──────────────────────┘
enroll_speakers.py— extract CAM++ voiceprint centroids from a well-labeled transcripttranscribe.pyPhase 2 — match the voiceprint DB against new clusters with the Hungarian algorithm (optimal one-to-one matching, default similarity threshold 0.5), eliminating swapped labels--merge— weight-average new voiceprints back into the project DB automatically, with no hand-editing of JSON
Key enhancements
| Category | Enhancement | Status |
|---|---|---|
| 🔴 Core | Cross-session voiceprint matching (enroll → match → merge) | ✅ |
| 🔴 Core | Project-context auto-detection (voiceprint DB, hotword reuse) | ✅ |
| 🔴 Core | 6-step standardized SOP | ✅ |
| 🔴 Core | Fast-path quick channel (skips redundant questions) | ✅ |
| 🟡 Enhanced | ASR engine selection decision tree | ✅ |
| 🟡 Enhanced | Clear verify_speakers.py trigger conditions |
✅ |
| 🟡 Enhanced | Output quality checklist | ✅ |
| 🟡 Enhanced | SKILL.md / pipeline-details.md deduplication | ✅ |
| 🟢 Tooling | --merge flag (auto merge into the project DB) |
✅ |
| 🟢 Tooling | Error-recovery decision tree (4 phases) | ✅ |
| 🟢 Tooling | Complete flag reference (pipeline-details.md) |
✅ |
What's inside
The skill follows a 6-step SOP — project-context detection, environment setup, supporting files, engine selection & transcription, verification, and voiceprint-DB updates — plus a fast path that skips information-gathering when the project context is already clear.
--lang |
Best for | Diarization | Hotword | GPU |
|---|---|---|---|---|
zh ★ |
Chinese meetings / podcasts | ✅ | ✅ | No |
zh-basic |
Chinese, low memory (<8 GB) | ✅ | ❌ | No |
en |
English meetings / podcasts | ✅ | ❌ | No |
auto |
Multi-language, no speaker labels | ❌ | ❌ | No |
whisper |
99 languages, no speaker labels | ❌ | ❌ | No |
mimo |
Dialects, code-switching, rare nouns | ✅ | ❌ | ≥20 GB VRAM |
★ Default choice.
autoandwhisperlack per-sentence timestamps, so speaker diarization is unavailable. Usezh,zh-basic,en, ormimowhen you need speaker labels.
Requirements
- Python 3.12+
- ffmpeg
- FunASR (auto-installed by
setup_env.sh) - CUDA GPU recommended (CPU also works)
- MiMo-V2.5-ASR engine needs CUDA ≥ 12.0 + ≥ 20 GB VRAM (optional)
Quick start
# 1. Environment setup
SCRIPTS=./skills/audio-transcribe/scripts
AUTO_YES=1 bash $SCRIPTS/setup_env.sh
# 2. Chinese meeting transcription (local only, no data upload)
python3 $SCRIPTS/transcribe.py meeting.m4a \
--lang zh --num-speakers N --speakers "Name1,Name2,..." \
--hotwords hotwords.txt
# 3. Use the project voiceprint DB (auto-match known speakers)
python3 $SCRIPTS/transcribe.py meeting.m4a \
--lang zh --speakers "Name1,Name2,..." \
--speaker-embeddings project-speaker-embeddings.json
# 4. Enroll voiceprints from a confirmed transcript
python3 $SCRIPTS/enroll_speakers.py transcript_raw_transcript.json audio.flac \
--speakers "Name1,Name2,..." --output speaker-embeddings.json
# 5. Merge into the project DB
python3 $SCRIPTS/enroll_speakers.py transcript_raw_transcript.json audio.flac \
--speakers "Name1,Name2,NewPerson" \
--output project-speaker-embeddings.json \
--merge project-speaker-embeddings.json
Privacy: transcription is fully local by default. Adding
--model <id>enables optional LLM cleanup (AWS Bedrock / Anthropic / OpenAI-compatible) — this sends transcript excerpts to the provider. Omit--modelto keep all data on your machine.
Documentation
| Document | Description | |
|---|---|---|
| 📖 | SKILL.md | Core workflow, SOP, engine & flag reference |
| 🔧 | pipeline-details.md | Architecture, full flag table, error recovery |
| 🛠️ | scripts/ | Main pipeline and utility scripts |
License
This project inherits the license of the upstream zxkane/audio-transcriber project.
Acknowledgments
Built on top of zxkane/audio-transcriber's audio-transcribe skill — keeping its FunASR / MiMo ASR engines, VAD + CAM++ speaker diarization, and LLM cleanup. Thanks to the original author for the excellent foundation.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found