diff --git a/README.md b/README.md index a5eece5..a72cb08 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ A collection of agent skills (slash commands and behaviors) loaded into Steve Be - [lsp-code-analysis](common/engineering/lsp-code-analysis/SKILL.md) — Semantic code analysis via LSP. Navigate code (definitions, references, implementations), search symbols, preview refactorings, and get file outlines. Use for exploring unfamiliar codebases or performing safe refactoring. - [pkm-curation](common/pkm/pkm-curation/SKILL.md) — Curate an Obsidian vault — classify notes, normalize frontmatter, add wikilinks, extract atomic notes. Use when curating, batch-processing, reviewing, or doing a serendipity pick. +- [youtube-video-capture](common/pkm/youtube-video-capture/SKILL.md) — Fetch subtitles from a YouTube video, summarize the content, and save the summary and raw subtitles to the Video bundle. - [forge-gitea](common/deprecated/forge-gitea/SKILL.md) — Use the Gitea CLI (`tea`) to interact with Gitea issues, pull requests, releases, CI, and repository state. - [forge-github](common/deprecated/forge-github/SKILL.md) — Use the GitHub CLI (`gh`) to interact with GitHub issues, pull requests, releases, CI, and repository state. - [forge-interaction](common/deprecated/forge-interaction/SKILL.md) — Use when the user wants forge work such as opening a PR, creating or listing issues, checking CI, looking at the repo, pushing a branch, publishing changes, or making a release on GitHub or Gitea. This skill now delegates to specialized skills for better predictability. diff --git a/common/pkm/README.md b/common/pkm/README.md index 5f332be..6292f24 100644 --- a/common/pkm/README.md +++ b/common/pkm/README.md @@ -9,3 +9,4 @@ ## Model-invoked - [pkm-curation](pkm-curation/SKILL.md) — Curate an Obsidian vault — classify notes, normalize frontmatter, add wikilinks, extract atomic notes. Use when curating, batch-processing, reviewing, or doing a serendipity pick. +- [youtube-video-capture](youtube-video-capture/SKILL.md) — Fetch subtitles from a YouTube video, summarize the content, and save the summary and raw subtitles to the Video bundle. diff --git a/common/pkm/youtube-video-capture/SKILL.md b/common/pkm/youtube-video-capture/SKILL.md new file mode 100644 index 0000000..00fcaea --- /dev/null +++ b/common/pkm/youtube-video-capture/SKILL.md @@ -0,0 +1,80 @@ +--- +name: youtube-video-capture +description: Fetch subtitles from a YouTube video, summarize the content, and save both the summary and raw subtitles to the Video bundle in the Obsidian vault. Use when the user wants to capture a YouTube video, mentions "summarize this video", "capture this talk", or pastes a YouTube URL wanting it saved to vault. +disable-model-invocation: true +--- + +Capture a YouTube video into the Obsidian vault. Extract subtitles, produce a summary, and save both to the `Video/` bundle as OKF-conformant notes. + +## Dependencies + +`yt-dlp` must be installed. Check with `which yt-dlp`. If missing, tell the user to install it (`pip install yt-dlp` or `brew install yt-dlp`) and stop. + +## Extract subtitles + +Run `yt-dlp` to download auto-generated English subtitles as SRT: + +```bash +yt-dlp --write-auto-subs --sub-lang en-orig --convert-subs srt --skip-download -o "/tmp/yt-subs-%(id)s.%(ext)s" "" +``` + +If no subtitles are available, tell the user and stop. + +Read the SRT file. Strip timestamps and sequence numbers to produce clean, contiguous text for summarization. + +## Summarize + +Produce a prose summary from the full subtitle text. Synthesize the content — do not regurgitate the transcript. Then extract **key takeaways** as a bulleted list. + +## Write to vault + +The vault root is `/home/sjb/Documents/sjb-brain/`. The `Video/` bundle is an OKF bundle. Create the directory if it doesn't exist, with an `index.md` and `log.md` following the pattern of other bundles in the vault. + +### Filenames + +- Summary: `YYYY-MM-DD_HH-mm_.md` +- Subtitle: `YYYY-MM-DD_HH-mm_.srt` + +Use the video title, kebab-cased. + +### Summary note + +Write a markdown note with OKF v0.1 frontmatter: + +```yaml +--- +id: +type: Video Summary +aliases: [] +tags: [video, youtube, ] +area: +project: '' +--- +``` + +Body: + +- Video title as the note's `#` heading +- Link to the original YouTube URL +- The prose summary +- `## Key Takeaways` with bulleted list +- `## Subtitle` with a markdown link to the `.srt` file + +Use standard markdown links, never `[[wikilinks]]`. + +### Subtitle file + +Copy the SRT file into `Video/` alongside the summary. No frontmatter. + +### Bundle maintenance + +After writing the pair: + +1. Update `Video/index.md` — add the new summary under a `## Flat Notes` or appropriate heading, with a one-line description. +2. Append an entry to `Video/log.md` noting the addition with a timestamp. + +### Safety + +- If a filename collides, append a numeric suffix. +- Redact likely credentials, secrets, or tokens from any inline content. +- If the video has no subtitles, stop — do not attempt to transcribe.