YouTube Minutes Synthesis
A skill for extracting transcripts from YouTube videos, processing and analyzing them, and producing structured meeting-minutes-style summaries or timestamped overviews as Markdown (.md) documents.
When to Use
- When the user needs meeting minutes from a recorded meeting or stream posted on YouTube.
- When summarizing key points from a long live stream, interview, or educational video with timestamps for easy reference.
- When repurposing a video transcript into an article or guide.
Process Flow
digraph youtube_flow {
"Parse link and extract Video ID" [shape=box];
"Fetch transcript via Python script" [shape=box];
"Group content and sequence timestamps" [shape=box];
"Summarize key points and observations" [shape=box];
"Compile into report following template" [shape=box];
"Verify reference links and save file" [shape=doublecircle];
"Parse link and extract Video ID" -> "Fetch transcript via Python script";
"Fetch transcript via Python script" -> "Group content and sequence timestamps";
"Group content and sequence timestamps" -> "Summarize key points and observations";
"Summarize key points and observations" -> "Compile into report following template";
"Compile into report following template" -> "Verify reference links and save file";
}
Checklist
You MUST always follow these steps when this skill is activated:
[!IMPORTANT]
REQUIRED SUB-SKILL (FIRST): Before anything else, run preparing-tools to verify all system dependencies (yt-dlp, python3). Do NOT proceed if any tool is missing.
- Verify Video ID & Publish Date — REQUIRED: Extract the 11-character Video ID from the user-provided URL AND verify the video's public publish date (e.g.
upload_date or release_timestamp from yt-dlp --dump-json <URL>, or look it up on the video's YouTube page) to establish the correct temporal context before analyzing any content. Always record the publish date in the report metadata.
- If the video is older than 6 months, add a note: "Old video — context may differ from the present" in the report.
- NEVER attribute events or information that occurred after the publish date to the speaker as if they said it, unless clearly labelled as Post-stream Developments.
- Extract Transcript:
- REQUIRED SUB-SKILL: To load or fetch a transcript, ALWAYS invoke the cleaning-auto-transcripts skill to download and correct errors from the Auto-Transcript system or unclear speech.
- CRITICAL for Low-Context AIs (e.g. gemma4:e2b or gemma:31b): Do NOT use complex python scripts (e.g.,
python3 "/absolute/path/to/scripts/prepare_video.py" "VIDEO_URL" --format json) or guess dynamic filenames. Download the transcript into a predictable JSON file (literally named raw_transcript.json in your current directory) using this native command. ALWAYS prioritize original language (--sub-lang "th-orig" or "en-orig") over English (en):
yt-dlp --write-auto-subs --sub-lang "th-orig" --sub-format json3 --skip-download --ignore-no-formats-error -o "raw_transcript" "<URL>" ; mv raw_transcript.*.json3 raw_transcript.json
- Anti-Bot Block Handling (YouTube 429 Error):
- Local run: Ask the user which browser they use (e.g.,
chrome, brave) and retry with --cookies-from-browser <browser_name>.
- OpenCode / Cloud Sandbox run:
--cookies-from-browser WILL FAIL. Ask the user to run the yt-dlp command locally and upload raw_transcript.json to the session.
- If no speaker-specific error mapping file exists, just proceed with the
raw_transcript.json using the standard filters.
- Organize Agenda:
- Divide the video timeline into main agenda items using a Hierarchical MapReduce approach:
- Map: Group transcript records into 10-15 minute blocks with a 2-minute sliding overlap to ensure sentence cohesion.
- Reduce: Synthesize the block summaries into high-level agenda sections, aligning main points with sub-ideas.
- Summarize Core Points:
- Summarize who said what, what conclusions or opinions were expressed during each segment.
- NEVER skip important details and preserve the accuracy of the original context.
- Translate & Refine Language:
- Write the report in consistent, polished language throughout the entire document (e.g. all Thai or all English).
- Save to Markdown: Save the document to the output store and provide the user with an accessible link.
Recommended Template
# Content Summary & Key Agenda from Video: [Topic/Video Title]
> **Source Video**: [Video clip name](real_YouTube_link)
> **Video Publish Date**: [Day/Month/Year the video was first published publicly]
> **Video Duration**: [e.g. 1 hour 30 minutes]
> **Date Recorded**: [Specify the date this report was last updated]
> **Primary Speaker / Host**: [Name if available]
---
## 1. Executive Summary
[2-3 sentences summarizing the key substance of the video]
## 2. Discussion Agenda with Timestamps
### [HH:MM:SS] Segment 1: [Key Topic]
* **Main Point**: [Details of what was discussed]
* **Suggestions & Conclusions**: [Opinions or agreements reached]
### [HH:MM:SS] Segment 2: [Next Topic]
* **Main Point**: [Details of what was discussed]
## 3. Action Items & Takeaways
- [ ] **Action Item 1** - [Specify responsible party or target]
- **Key crystallized insight**: [Major conclusion from the clip]
---
## References
- [Channel Name / Original Video Title](real_YouTube_link) - Original video that is the source of this report
Troubleshooting & Fallback Strategies
For videos with access restrictions (age-restricted, private, or captions disabled):
- Age-restricted / Sign-in required:
- Since YouTube blocks bots from logging in to fetch captions for age-restricted content, switch to a "Fallback to Web Search" plan.
- Search for summaries, reports, official press releases, or timestamps of that video online via Web Search.
- Use the gathered data to map against activity timeframes and write the meeting report following the template.
- Manual Input:
- If the content is highly sensitive and not publicly disclosed, ask the user to open the clip in their main browser, copy the text from the captions panel (Show transcript), and paste it directly into the chat.
Iron Rules
- ALWAYS verify publish date first (REQUIRED): NEVER skip the
upload_date / release_timestamp check. Always record the publish date in the report before starting, and NEVER attribute post-publish-date events to the speaker as if said during the clip.
- Preserve timestamp accuracy: Timestamp markers in the report must match the actual video time.
- No Hallucinated Links: YouTube reference links must be real, working links.
- Write concisely yet comprehensively: Summarize precisely without dropping the speaker's key substance.
Subagent Dispatch Contract
For videos > 40 minutes:
- Pre-Grant Workspace Permissions: Call sk_permission for
ead_file on working directory before spawning.
- Canonical Prompt Building: Use ../scripts/subagent-prompt-builder.py with ../anibon-timestamper/references/subagent-prompt-template.md.
- Parallel Dispatch: Spawn chunk subagents using invoke_subagent per 40-50 minute group.
- Assembly: Collect agent reports and assemble via ../anibon-timestamper/references/summarizer-subagent-guide.md.
1---2name: youtube-minutes-synthesis3description: Use when extracting a transcript from a YouTube video to summarize it like meeting minutes or generating a timestamped overview in a Markdown file.4---56# YouTube Minutes Synthesis78A skill for extracting transcripts from YouTube videos, processing and analyzing them, and producing structured meeting-minutes-style summaries or timestamped overviews as Markdown (.md) documents.910## When to Use1112- When the user needs meeting minutes from a recorded meeting or stream posted on YouTube.13- When summarizing key points from a long live stream, interview, or educational video with timestamps for easy reference.14- When repurposing a video transcript into an article or guide.1516## Process Flow1718```dot19digraph youtube_flow {20 "Parse link and extract Video ID" [shape=box];21 "Fetch transcript via Python script" [shape=box];22 "Group content and sequence timestamps" [shape=box];23 "Summarize key points and observations" [shape=box];24 "Compile into report following template" [shape=box];25 "Verify reference links and save file" [shape=doublecircle];2627 "Parse link and extract Video ID" -> "Fetch transcript via Python script";28 "Fetch transcript via Python script" -> "Group content and sequence timestamps";29 "Group content and sequence timestamps" -> "Summarize key points and observations";30 "Summarize key points and observations" -> "Compile into report following template";31 "Compile into report following template" -> "Verify reference links and save file";32}33```3435## Checklist3637You MUST always follow these steps when this skill is activated:3839> [!IMPORTANT]40> **REQUIRED SUB-SKILL (FIRST):** Before anything else, run `preparing-tools` to verify all system dependencies (`yt-dlp`, `python3`). Do NOT proceed if any tool is missing.41421. **Verify Video ID & Publish Date — REQUIRED**: Extract the 11-character Video ID from the user-provided URL **AND verify the video's public publish date** (e.g. `upload_date` or `release_timestamp` from `yt-dlp --dump-json <URL>`, or look it up on the video's YouTube page) to establish the correct temporal context before analyzing any content. Always record the publish date in the report metadata.43 - If the video is older than 6 months, add a note: **"Old video — context may differ from the present"** in the report.44 - **NEVER attribute events or information that occurred after the publish date** to the speaker as if they said it, unless clearly labelled as **Post-stream Developments**.452. **Extract Transcript**:46 - **REQUIRED SUB-SKILL**: To load or fetch a transcript, ALWAYS invoke the [cleaning-auto-transcripts](../cleaning-auto-transcripts/SKILL.md) skill to download and correct errors from the Auto-Transcript system or unclear speech.47 - **CRITICAL for Low-Context AIs (e.g. gemma4:e2b or gemma:31b)**: Do NOT use complex python scripts (e.g., `python3 "/absolute/path/to/scripts/prepare_video.py" "VIDEO_URL" --format json`) or guess dynamic filenames. Download the transcript into a predictable JSON file (literally named `raw_transcript.json` in your current directory) using this native command. **ALWAYS prioritize original language** (`--sub-lang "th-orig"` or `"en-orig"`) over English (`en`):48 `yt-dlp --write-auto-subs --sub-lang "th-orig" --sub-format json3 --skip-download --ignore-no-formats-error -o "raw_transcript" "<URL>" ; mv raw_transcript.*.json3 raw_transcript.json`49 - **Anti-Bot Block Handling (YouTube 429 Error)**:50 - **Local run**: Ask the user which browser they use (e.g., `chrome`, `brave`) and retry with `--cookies-from-browser <browser_name>`.51 - **OpenCode / Cloud Sandbox run**: `--cookies-from-browser` WILL FAIL. Ask the user to run the `yt-dlp` command locally and upload `raw_transcript.json` to the session.52 - If no speaker-specific error mapping file exists, just proceed with the `raw_transcript.json` using the standard filters.533. **Organize Agenda**:54 - Divide the video timeline into main agenda items using a **Hierarchical MapReduce** approach:55 - **Map**: Group transcript records into 10-15 minute blocks with a 2-minute sliding overlap to ensure sentence cohesion.56 - **Reduce**: Synthesize the block summaries into high-level agenda sections, aligning main points with sub-ideas.574. **Summarize Core Points**:58 - Summarize who said what, what conclusions or opinions were expressed during each segment.59 - **NEVER skip important details** and preserve the accuracy of the original context.605. **Translate & Refine Language**:61 - Write the report in consistent, polished language throughout the entire document (e.g. all Thai or all English).626. **Save to Markdown**: Save the document to the output store and provide the user with an accessible link.6364## Recommended Template6566```markdown67# Content Summary & Key Agenda from Video: [Topic/Video Title]6869> **Source Video**: [Video clip name](real_YouTube_link)70> **Video Publish Date**: [Day/Month/Year the video was first published publicly]71> **Video Duration**: [e.g. 1 hour 30 minutes]72> **Date Recorded**: [Specify the date this report was last updated]73> **Primary Speaker / Host**: [Name if available]7475---7677## 1. Executive Summary78[2-3 sentences summarizing the key substance of the video]7980## 2. Discussion Agenda with Timestamps8182### [HH:MM:SS] Segment 1: [Key Topic]83* **Main Point**: [Details of what was discussed]84* **Suggestions & Conclusions**: [Opinions or agreements reached]8586### [HH:MM:SS] Segment 2: [Next Topic]87* **Main Point**: [Details of what was discussed]8889## 3. Action Items & Takeaways90- [ ] **Action Item 1** - [Specify responsible party or target]91- **Key crystallized insight**: [Major conclusion from the clip]9293---9495## References96- [Channel Name / Original Video Title](real_YouTube_link) - Original video that is the source of this report97```9899## Troubleshooting & Fallback Strategies100101For videos with access restrictions (age-restricted, private, or captions disabled):1021031. **Age-restricted / Sign-in required**:104 - Since YouTube blocks bots from logging in to fetch captions for age-restricted content, switch to a **"Fallback to Web Search"** plan.105 - Search for summaries, reports, official press releases, or timestamps of that video online via Web Search.106 - Use the gathered data to map against activity timeframes and write the meeting report following the template.1073. **Manual Input**:108 - If the content is highly sensitive and not publicly disclosed, ask the user to open the clip in their main browser, copy the text from the captions panel (Show transcript), and paste it directly into the chat.109110## Iron Rules111- **ALWAYS verify publish date first (REQUIRED)**: NEVER skip the `upload_date` / `release_timestamp` check. Always record the publish date in the report before starting, and **NEVER attribute post-publish-date events** to the speaker as if said during the clip.112- **Preserve timestamp accuracy**: Timestamp markers in the report must match the actual video time.113- **No Hallucinated Links**: YouTube reference links must be real, working links.114- **Write concisely yet comprehensively**: Summarize precisely without dropping the speaker's key substance.115116117## Subagent Dispatch Contract118119For videos > 40 minutes:1201. **Pre-Grant Workspace Permissions**: Call sk_permission for 121ead_file on working directory before spawning.1222. **Canonical Prompt Building**: Use ../scripts/subagent-prompt-builder.py with ../anibon-timestamper/references/subagent-prompt-template.md.1233. **Parallel Dispatch**: Spawn chunk subagents using invoke_subagent per 40-50 minute group.1244. **Assembly**: Collect agent reports and assemble via ../anibon-timestamper/references/summarizer-subagent-guide.md.