Install
openclaw skills install @jagones84/yt-whisper-skillLocally transcribe YouTube videos with Whisper on CUDA and archive a URL/title-headed .txt under ~/Transcriptions// (auto model selection, category inference, timestamp handling, temp cleanup). Also generates a structured *_AISUMMARY.md report and a compact *_AISEARCHPLAN.md research plan from any input file. Use for transcription, summary, or research-plan requests.
openclaw skills install @jagones84/yt-whisper-skillTranscribes YouTube videos with the local scripts/yt-transcribe.sh and a self-contained Whisper
toolchain (its own .venv, created by scripts/install.sh). It can also turn a transcript (or any
input document) into a structured AI summary and a compact research plan.
t= / start= / end= timestamps in YouTube URLs~/Transcriptions/<Category>/ with a URL + title header--category*_AISUMMARY.md report from a transcript*_AISEARCHPLAN.md research plan from ANY input file# One-time setup (creates the local venv and installs yt-dlp + whisper)
bash {baseDir}/scripts/install.sh
# Transcribe a single video
{baseDir}/scripts/yt-transcribe.sh "https://youtu.be/VIDEO_ID"
# Several videos in one run
{baseDir}/scripts/yt-transcribe.sh "https://youtu.be/ID1" "https://youtu.be/ID2"
# Force a language, or force a category
{baseDir}/scripts/yt-transcribe.sh "https://youtu.be/VIDEO_ID" --language it
{baseDir}/scripts/yt-transcribe.sh "https://youtu.be/VIDEO_ID" --category Philosophy
# Live URL with a timestamp is normalized, the time range is preserved
{baseDir}/scripts/yt-transcribe.sh "https://www.youtube.com/live/VIDEO_ID?t=276s"
If install.sh has been run, the same script is also available on PATH as yt-transcribe.
ffmpeg on PATH{baseDir}/.venv (created by scripts/install.sh; holds yt-dlp and
openai-whisper)yt-dlp (node, deno, bun or quickjs)
~/.local/bin, ~/.nvm/versions/node/*, ~/.deno/bin, /usr/bin, ...) and passes the
concrete path as --js-runtimes <name>:<path>HTTP Error 403: Forbidden — this is NOT a YouTube block and NOT a
yt-dlp bug, it means no JS runtime was foundEach transcription is saved as ~/Transcriptions/<Category>/<safe_title>_<video_id>.txt and starts with:
URL: https://youtube.com/watch?v=...
Title: <Video Title>
[Full transcript content...]
Temporary media is deleted right after transcription.
Hard rules for agents:
{baseDir}/scripts/yt-transcribe.sh (or the installed yt-transcribe)youtube.com/live/<id>, youtube.com/shorts/<id>, youtu.be/<id>, and bare 11-char IDs are acceptable; the script normalizes them internallyt=, start=, and end= query params when using the user URLtimeout >= 7200 for normal full-video transcriptions unless the user explicitly wants a short cliptimeout: 300 for a normal transcription requestUnknown option, treat it as an invocation contract bug first, not a Whisper failureHTTP Error 403: Forbidden, suspect a missing JavaScript runtime before anything
else: check the JS runtime: line the script prints, and verify with command -v node deno bun qjsexitCode != 0 as failure, and also treat the run as failure if the output contains
Error:, Video unavailable, Unknown option, or Audio download failed~/Transcriptions--category is omitted, infer it from the title (falling back to Unsorted); use
--category <Category> only to force a different bucket## Detailed AI Summary section and save ~/Transcriptions/.agent/summaries/<Category>/<same-name>_AISUMMARY.md<same-name>_AISEARCHPLAN.md
(for ANY input file, not only transcriptions) following the ### Research plan subsection, staying
under ~4,600 characters...?t=276s are clipped requests, not always full-video transcriptions*_AISUMMARY.md)After a successful transcription, optionally produce a structured, implementation-oriented report of the video and archive it next to the transcript. Purpose: turn a raw transcript into a navigable knowledge artifact (macro-themes, sub-themes, fundamental concepts, quotes, actionable takeaways) that is usable for frontier implementation work.
~/Transcriptions/.agent/summaries/<Category>/
<Category> MUST mirror the transcript's category subfolder. A transcript in
~/Transcriptions/Technology/ maps to ~/Transcriptions/.agent/summaries/Technology/.~/Transcriptions/ (no category), use Unsorted._AISUMMARY.md appended
(DHH_..._NYFGCESmikA.txt -> DHH_..._NYFGCESmikA_AISUMMARY.md)mkdir -p). The .agent/ tree is metadata, never mixed with the raw transcripts._AISUMMARY.md without asking; if one exists, ask first or write a dated variant.cp -a file file.bak-YYYYMMDD-HHMMSS)..txt transcript.*_AISEARCHPLAN.md)For ANY input document - a transcription, or any other file the user provides - you can produce a research plan: a compact, formal, deterministic brief meant to be pasted into NotebookLM (or a similar deep-research tool) so it runs research across every theme of the input. It is NOT a summary, and NOT a list of keywords: it is a set of instructions plus one context-anchored prompt per theme.
Where to save
~/Transcriptions/.agent/summaries/<Category>/<same-name>_AISEARCHPLAN.md
(same folder and base name as the companion _AISUMMARY.md when one exists).<input-dir>/.agent/<input-base-name>_AISEARCHPLAN.md (create the .agent
folder next to the source file if missing).Size cap (NON NEGOTIABLE)
wc -c / .length). If over, cut words, never themes.How to build it well (do NOT compress into a keyword list)
### Tn - <theme> followed by ONE short paragraph made of a sentence of
CONTEXT plus the research objective. Anchor every technical term inside the sentence and define it
inline. NEVER emit bare term lists, entity lists or isolated keywords.Rules
_AISEARCHPLAN.md without asking; back up any file before overwriting it.