Youtube transcript
Transcribe YouTube videos locally with Whisper into agent-ready transcripts — no captions, no cloud. Per-channel/domain vocabulary memory makes it more accurate every time the user corrects a term. Use when given a YouTube URL to transcribe, process, summarize, or sync into a knowledge base.From its SKILL.md
npx -y skills add flamefalcon7/youtube-transcriptAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.9 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it
youtube-transcript — a local transcription layer that gets more accurate with use
Why this exists (vs. off-the-shelf tools)
Off-the-shelf tools solve "video → text". This solves "the most valuable tokens in the text are wrong, and wrong the same way every time". A transcript's value concentrates in a few dozen rare tokens — tickers, names, prices, dates — which is exactly where ASR fails. Three differentiators (market gap verified 2026-07):
- Whisper is always the path — existing tools are caption-first, and captions are empirically the inferior tier.
- Vocabulary memory loop — per-channel/domain terms feed Whisper's initial_prompt; correction rules post-process the output. Correct a term once, it stays correct.
- Provenance — every transcript header records the model and ruleset version that produced it; ambiguous tokens get flagged, never guessed.
The transcription mechanics themselves are commodity — do not invest further engineering there. If diarization or multi-platform support is ever needed, adopt an existing tool as the backend; the memory layer's interface doesn't change.
Usage
bin/yt-transcribe.sh "<youtube-url>" [outdir]
# outdir defaults: ./sources/_inbox (if it exists) > cwd; or set YT_SYNC_OUTDIR
Outputs <date>-<slug>.txt (YAML header + corrected transcript) and a matching .srt (timestamps, for citing back to audio).
Pipeline: yt-dlp download → profile resolution (default → channel → domain) → Whisper (terms in prompt) → layered glossary post-process → output.
One-time install: ./install.sh (or manually: brew install yt-dlp ffmpeg whisper-cpp, then download the model to ~/.whisper/ggml-large-v3-turbo.bin).
Memory architecture
profiles/ # vocabulary memory (feeds Whisper initial_prompt, ~224-token cap)
default.conf # BASE_PROMPT
domains/<d>.conf # DOMAIN_TERMS
channels/<id>.conf # CHANNEL_TERMS + DOMAIN declaration; auto-stubbed for new channels
memory/
corrections.log # append-only event log (RECORD layer: write freely, errors are harmless)
glossary/global.sed # correction rules (BEHAVIOR layer: changes all future output — gated)
glossary/global.local.sed # your overlay (gitignored), applied after the public file
glossary/domains/<d>.sed
glossary/domains/<d>.local.sed # your overlay (gitignored)
glossary/channels/<id>.sed # channel scope is local-only by nature
tests/golden.tsv # promotion = test: every rule ships with its evidence sentence
tests/golden.local.tsv # same, for local-overlay and channel rules (gitignored)
Channel profiles, channel glossaries, corrections.log, and all .local.sed overlays are gitignored — they stay on your machine, and git pull never conflicts. Public domain glossaries are a shared seed; nothing about your setup depends on upstream accepting anything.
Scope principle: promote to the narrowest scope where the fix is unambiguous. The narrower the scope, the more aggressive you may be — musk→Musk is dangerous globally (the fragrance) but safe on a channel that covers Tesla weekly. Global should be almost permanently empty.
Agent duties at sync time (the core of the engineering loop)
When processing a transcript into notes:
- Contextual correction: fix mishearings the glossary can't safely catch (
sequel→SQL-type real-word collisions) in the notes; annotate inferred fixes (e.g. tickers) with the basis of inference. - Log it: append every correction to
memory/corrections.log(TSV format in file header). The user's natural corrections in conversation ("that's X, not Y") count too — correction is training. - Check promotion: the same
wrong→rightin ≥2 distinct videos, unambiguous at some scope → add the sed rule at that scope's.local.sedoverlay (immediate effect, cleangit pull) + add the evidence sentence totests/golden.local.tsv+ runtests/run_tests.shall-green. New proper nouns promote into profile terms the same way. Optionally upstream domain/global rules: open a PR moving the rule + its golden tests into the public files; once merged, delete the local copy. Contribution is purely optional — local overlays are fully functional forever. - Never-promote list: mishearings that are high-frequency normal words (having, like, …) get logged as
context-onlyand stay in the contextual layer forever.
Rule: an LLM's single guess never writes to the behavior layer. Promotion = evidence (≥2 videos) + test + git commit, all three.
Quality discipline (for downstream notes)
- Transcripts are AI-transcribed; notes must state "original audio is authoritative". Ambiguous tickers/names/prices get
[UNSOURCED], never a plausible guess. - Summaries must paraphrase and condense — no bulk copying (copyright).
- Transcript file = Whisper output + mechanical fixes; notes = fully corrected canon. When in doubt, use the .srt timestamps to check the original audio.
- Knowledge-base-specific rules (note formats, prediction ledgers, …) belong to each repo's own instructions, not here.
Health check (monthly, or on request)
- KPI — corrections per video at sync time (count from the log): falling = memory is learning; flat = mostly one-off noise, fine; rising = a rule may have gone bad, check git history.
- Log entries stuck >3 months below the promotion threshold → archive with a note.
- Spot-check recent transcript headers: does glossary_version match git?
- Prompt length: any profile combination over 900 chars needs trimming (Whisper truncates silently).
Known limits
- Audio only, no frames (theses and numbers live in the audio track). If visuals are ever needed, adopt a multimodal tool — don't build.
- Quality verified on English single-speaker content (2026-07: 32-min video in ~3 min on an M3 Pro). Other languages/multi-speaker untested;
-l autoshould handle language detection. - BSD sed (macOS): word boundaries are
[[:<:]]/[[:>:]], not\b. - yt-dlp blocked →
yt-dlp -U; if needed--cookies-from-browser chrome. - whisper-cli not found → override with
WHISPER_BIN=; model path withWHISPER_MODEL=.
Maintainer notes
- Upstream PRs are reviewed best-effort; nothing blocks on review (contributors' rules already work from their local overlays).
- Trigger: when the first external PR arrives, add CI that machine-checks it — touches only
memory/glossary/{global,domains/*}.sed+tests/golden.tsv, every new rule has ≥1 positive and ≥1 negative golden test, BSD sed syntax valid, full test suite green. Review then reduces to a 30-second malicious-pattern skim.
What ships with it: 13 files
16.6 KB alongside SKILL.md, 3 of them executable
bin/
- yt-transcribe.shruns5.2 KB
memory/
profiles/
- channels/_example.conf382 B
- default.conf147 B
- domains/_example.conf407 B
tests/
- fixtures/demo.sed391 B
- golden.tsv531 B
- run_tests.shruns976 B
- .gitignore553 B
- install.shruns1.7 KB
- LICENSE1.0 KB
- README.md4.2 KB