youtube-to-markdown
Use when user asks YouTube video extraction, get, fetch, transcripts, subtitles, or captions.
Skill by teaglebuilt
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/teaglebuilt-youtube-to-markdown
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/youtube-to-markdown
What's inside
- Skill name
youtube-to-markdown- Description
- Use when user asks YouTube video extraction, get, fetch, transcripts, subtitles, or captions. Writes video details and transcription into structured markdown file.
- License
- MIT
- Instructions
- 205 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Agent Skills spec issues
- allowed-tools: must be a space-separated string
Files (15)
- LICENSE
- SKILL.md
- UPDATE_MODE.md
- apply_paragraph_breaks.py
- check_existing.py
- deduplicate_vtt.py
- extract_data.py
- extract_transcript.py
- extract_transcript_whisper.py
- file_ops.py
- finalize.py
- shared_types.py
- summary_formats.md
- template.md
- template_transcript.md
SKILL.md (first lines)
# YouTube to Markdown
Multiple videos: Process one video at a time, sequentially. Do not run parallel extractions.
Execute all steps sequentially without asking for user approval. Use TodoWrite to track progress.
## Step 0: Check extracted before
```bash
python3 ./check_existing.py "<YOUTUBE_URL>" "<output_directory>"
```
**Integrity check:**
- If `summary_valid: false`: Show issues to user, ask "Tiedosto epätäydellinen: [issues]. Prosessoidaanko uudelleen?" If yes, continue to Step 1.
- If `transcript_valid: false`: Ask user, if yes re-run Steps 2-3, 7-9.
- If `comments_valid: false`: Ask user, if yes re-run comment analysis.
If returns `exists: true` AND all valid fields are true: Read and follow UPDATE_MODE.md for update workflow.
## Step 1: Extract data (metadata, description, chapters)
```bash
python3 extract_data.py "<YOUTUBE_URL>" "<output_directory>"
```
Creates: youtube_{VIDEO_ID}_metadata.md, youtube_{VIDEO_ID}_description.md, youtube_{VIDEO_ID}_chapters.json
IMPORTANT: If you ask which language transcript to extract then do not translate that language to english and require that subagent do not translate either. Only if the user requests another language that the original then translate.
## Step 2: Extract transcript
### Primary method (if transcript available)
If video language is `en`, proceed directly. If non-English, ask user which language to download.
```bash
python3 extract_transcript.py "<YOUTUBE_URL>" "<output_directory>" "<LANG_CODE>"
```
Creates: youtube_{VIDEO_ID}_transcript.vtt
IMPORTANT: All file output must be in the same language as discovered in Step 2. If language is not English, explicitly instruct all subagents to preserve the original language.
The download may fail if a video is private, age-restricted, or geo-blocked.
### Fallback (only if transcript unavailable)
Ask user: "No transcript available. Proceed with Whisper transcription?
- Mac/Apple Silicon: Uses MLX Whisper if installed (faster, see SETUP_MLX_WHISPER.md)
- All platforms: Falls back to OpenAI Whisper (requires: brew install openai-whisper OR pip3 install openai-whisper)"
```bash
python3 extract_transcript_whisper.py "<YOUTUBE_URL>" "<output_directory>"
```
Script auto-detects MLX Whisper on Mac and uses it if available, otherwise uses OpenAI Whisper.
## Step 3: Deduplicate transcript
Set BASE_NAME from Step 1 output (youtube_{VIDEO_ID})
```bash
python3 ./deduplicate_vtt.py "<output_directory>/${BASE_NAME}_transcript.vtt" "<output_directory>/${BASE_NAME}_transcript_dedup.md" "<output_directory>/${BASE_NAME}_transcript_no_timestamps.txt"
```
## Step 4: Add natural paragraph breaks
Parallel with Step 5.
task_tool:
- subagent_type: "general-purpose"
- model: "sonnet"
- prompt:
```
INPUT: <output_directory>/${BASE_NAME}_transcript_no_timestamps.txt
CHAPTERS: <output_directory>/${BASE_NAME}_chapters.json
OUTPUT: <output_directory>/${BASE_NAME}_transcript_paragraphs.txt
Analyze INPUT and identify natural paragraph break line numbers.
Read CHAPTERS. If it contains chapters, use chapter timestamps as primary break points.
Target ~500 chars per paragraph. Find natural break points at topic shifts or sentence endings.
Write to OUTPUT in format:
15,42,78,103,...
```
```bash
python3 ./apply_paragraph_breaks.py "<output_directory>/${BASE_NAME}_transcript_dedup.md" "<output_directory>/${BASE_NAME}_transcript_paragraphs.txt" "<output_directory>/${BASE_NAME}_transcript_paragraphs.md"
```
## Step 5: Summarize transcript
Parallel with Step 4.
task_tool:
- subagent_type: "general-purpose"
- model: "sonnet"
- prompt:
```
INPUT: <output_directory>/${BASE_NAME}_transcript_no_timestamps.txt
OUTPUT: <output_directory>/${BASE_NAME}_summary.md
FORMATS: ./summary_formats.md
1. Classify content type:
- TIPS: gear reviews, rankings, "X ways to...", practical advice lists
- INTERVIEW: podcasts, conversations, Q&A, multiple perspectives
- EDUCATIONAL: concept explanations, analysis, "how X works"
- TUTORIAL: step-by-step instructions, coding, recipes
2. Analyze content structure:
- Identify meaningful content units (topic shifts, argument structure, narrative breaks)
- If single continuous topic, omit content unit headers
- Skip ads, sponsors, self-promotion ("like and subscribe", merch, etc.)
- Merge content spanning ad breaks if thematically connected
3. Read FORMATS file and use format for detected content type. Target <10% of transcript bytes.From teaglebuilt/skillz, MIT.
More from teaglebuilt/skillz
- 0.524score
github-repo-explore
teaglebuilt
Guide for searching and exploring external GitHub repositories using the gh CLI.
SkillBFreshness: BClaude Code +9 - 0.517score
architect
teaglebuilt
universal architecture
SkillBFreshness: BClaude Code +9 - 0.278score
n8n-workflow
teaglebuilt
No description from the publisher yet.
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Aug 20, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/teaglebuilt/skillz
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from teaglebuilt
Cite this page
youtube-to-markdown skill. Agent Mart. https://agentmart.dev/skills/teaglebuilt-youtube-to-markdown (last updated 2026-10-24)