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.partfile as it completes (crash loses at most one chunk), auto-resumes from an existing.parton rerun. Uses the local MLX Qwen3-ASR model (mlx-community/Qwen3-ASR-1.7B-4bitby default, or-bf16for higher quality — set viaASR_MODELenv var)..venv/: hasmlx,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.mdunder# 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>.mdnote — model the structure onpages/2026-08-16 项目全景与文档分析.mdorpages/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-姜汉博.mdfor the pattern), and file into or link from the relevant person's page underpages/(oracquaintances/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.