# Transcribe And Extract

> Transcribe voice memos/recordings with the local Qwen3-ASR pipeline in ~/LocalRepos/tools-playground/asr-tools, then extract structured information (summary, decisions, action items, people, notable quotes with timestamps) into a vault note. Use when the user wants to "转写录音", "转录并提取信息", asks to process new voice memos, or wants a meeting/interview/testimony recording turned into notes.

- Skill: `goodluckz/transcribe-and-extract` (Agent Skill)
- Install (CLI): `npx skillmds@latest add goodluckz/transcribe-and-extract`
- Raw SKILL.md: https://api.skillmd.com/api/skills/goodluckz/transcribe-and-extract/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: goodluckz (https://skillmd.com/u/goodluckz)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/goodluckz/transcribe-and-extract

---


# Transcribe and Extract

Two-stage pipeline over voice memos: (1) local, offline ASR transcription with
timestamped chunks, resumable across crashes; (2) an extraction pass that
turns the raw transcript into a structured vault note. General-purpose —
works for daily voice-memo journaling, meeting/group recordings, and
interview/testimony recordings alike; the extraction shape adapts to which
one it is (see step 3).

## 0. Locate the engine and inputs

The transcription engine already exists at
`~/LocalRepos/tools-playground/asr-tools/` —
do NOT reimplement it. Key pieces:
- `transcribe_one.py`: one audio file = one process (crash isolation), each
  5-min chunk flushed to a `.part` file as it completes (crash loses at most
  one chunk), auto-resumes from an existing `.part` on rerun. Uses the local
  MLX Qwen3-ASR model (`mlx-community/Qwen3-ASR-1.7B-4bit` by default, or
  `-bf16` for higher quality — set via `ASR_MODEL` env var).
- `.venv/`: has `mlx`, `qwen3_asr_mlx`, ffmpeg dependency already installed.
- Past run scripts (`run0814.sh`, `run0819.sh`) show the calling pattern —
  read one before writing a new one to match the idiom exactly.

Default voice memo source: `/Users/zhaoliang/Resources/voice memo` (the
curated archive — 2018-present, both old `.m4a` and recent `.qta` files;
distinct from the live, auto-pruned system buffer at `~/Library/Group
Containers/group.com.apple.VoiceMemos.shared/Recordings`, which only holds
the last few weeks and isn't itself a transcription source), transcripts
land in `voice memo/transcripts/*.txt`. If the user gives a different path or a
specific file, use that instead.

## 1. Find what needs transcribing

List the source directory and cross-reference against
`voice memo/transcripts/` — anything without a matching `.txt` (or with a
stale `.part` from a previous crash) needs a run. Ask the user to confirm the
batch (file list + a one-line label each, e.g. "18:33-20:26 韩涛送别饭
前段(113min)") before running anything — labels matter for step 3 and the
user knows context (who/where/what) that the filename alone doesn't carry.

## 2. Run transcription

Write a run script following the `run0819.sh` pattern: one process per file
(`.venv/bin/python transcribe_one.py <src> <out.txt> "<label>"`), skip files
whose output already exists, and run it. This can take a long time for long
recordings — run it with `run_in_background` or in a `fork` agent, and don't
block the conversation on it if the user has other things to do meanwhile.

Every transcript file carries a machine-transcription disclaimer in its
header already (written by `transcribe_one.py`) — never strip it when
copying content elsewhere, and never treat transcript text as a verified
quote without checking the timestamp against the source audio, especially
for anything used as testimony/evidence (see `pages/PI-*.md` precedent in
this vault for how source reliability gets tracked).

## 3. Extract into a vault note

Read the finished transcript(s) and produce a structured note. Shape depends
on what kind of recording it is — infer from the label/context, or ask if
unclear:

- **Daily voice memo / personal reflection**: short summary + key points,
  appended into that day's `journals/YYYY-MM-DD.md` under `# Quick Notes`
  (matching the existing manual Quick Notes entries — timestamp prefix,
  `[[wikilinks]]` for people/places/concepts mentioned), same as how manual
  entries already look in this vault.
- **Meeting / group discussion**: summary, decisions made, open questions,
  action items (who owns what), as a new `pages/YYYY-MM-DD <topic>.md` note
  — model the structure on `pages/2026-08-16 项目全景与文档分析.md` or
  `pages/2026-08-16 数据处理方法概要.md`.
- **Interview / testimony recording**: extract per-speaker claims with
  timestamps, flag anything that reads as motivated/self-serving (see the
  "flattery motive" downgrade already done in `pages/PI-姜汉博.md` for the
  pattern), and file into or link from the relevant person's page under
  `pages/` (or `acquaintances/` if it's about a person rather than a
  project). Carry the disclaimer forward explicitly in this note's own text,
  not just implicitly via the linked transcript.

Always link back to the source transcript file (not just summarize it away)
so the original wording stays one hop away for verification.

## 4. Report back

Tell the user which files were transcribed (skipped vs newly run), where the
transcripts landed, and which vault note(s) got the extracted content —
don't re-paste the whole note in chat.

