by JimmySadek
Claude Code skill: turn YouTube videos into structured, Obsidian-ready Markdown notes with full metadata, chapters, and transcripts
# Add to your Claude Code skills
git clone https://github.com/JimmySadek/youtube-fetcher-to-markdownGuides for using data processing skills like youtube-fetcher-to-markdown.
Last scanned: 8/27/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-08-27T15:01:28.720Z",
"npmAuditRan": true,
"pipAuditRan": false,
"promptInjectionRan": true
}youtube-fetcher-to-markdown is an open-source data processing skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by JimmySadek. Claude Code skill: turn YouTube videos into structured, Obsidian-ready Markdown notes with full metadata, chapters, and transcripts. It has 429 GitHub stars.
Yes. youtube-fetcher-to-markdown passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/JimmySadek/youtube-fetcher-to-markdown" and add it to your Claude Code skills directory (see the Installation section above). youtube-fetcher-to-markdown ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
youtube-fetcher-to-markdown is primarily written in HTML. It is open-source under JimmySadek on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other Data Processing skills you can browse and compare side by side. Open the Data Processing category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh youtube-fetcher-to-markdown against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Turn one YouTube link into one queryable Markdown knowledge note. The bundled
script uses youtube-transcript-api for captions, optionally uses yt-dlp for
richer metadata, and needs no API key.
scripts/fetch_transcript.py relative to this SKILL.md. Do not
assume a particular Codex, Claude, Skillshare, or home-directory install path.--stdout when the user wants the transcript in the conversation rather
than a saved note.--output-dir when the user names an Obsidian vault or notes directory.
A specific --output file takes precedence.Typical invocation, where SKILL_DIR is the directory containing this file:
python3 "$SKILL_DIR/scripts/fetch_transcript.py" "https://youtu.be/VIDEO_ID"
--force first. Exit code 3 means an existing note was found
and left unchanged; report that outcome and ask before overwriting.yt-dlp automatically.
If exit code 2 reports a missing required dependency, show the user the
suggested command and ask for permission before changing their system.--output, then --output-dir, then YOUTUBE_FETCHER_DIR, then
~/yt_transcripts/.# Put notes in an Obsidian vault or another directory
python3 "$SKILL_DIR/scripts/fetch_transcript.py" URL --output-dir ~/Notes/Vault
# Save to one exact file
python3 "$SKILL_DIR/scripts/fetch_transcript.py" URL --output ~/Notes/video.md
# Print Markdown instead of saving it
python3 "$SKILL_DIR/scripts/fetch_transcript.py" URL --stdout
# Request captions in a language, with truthful English fallback
python3 "$SKILL_DIR/scripts/fetch_transcript.py" URL --lang es
# Include timestamps or export raw JSON/SRT
python3 "$SKILL_DIR/scripts/fetch_transcript.py" URL --timestamps
python3 "$SKILL_DIR/scripts/fetch_transcript.py" URL --format json
python3 "$SKILL_DIR/scripts/fetch_transcript.py" URL --format srt
# Inspect available caption languages or dependencies
python3 "$SKILL_DIR/scripts/fetch_transcript.py" URL --list
python3 "$SKILL_DIR/scripts/fetch_transcript.py" --check-deps
Other useful flags are --source, --no-description, and --force.
yt-dlp contacts YouTube for descriptions, chapters, upload
dates, and duration.yt-dlp executable for metadata.youtube-transcript-api and requests; yt-dlp is
optional. The script reports missing dependencies but does not install them.| Code | Meaning |
|---|---|
0 |
Success |
1 |
Invalid input or fetch failure |
2 |
Missing required dependency |
3 |
Existing note preserved; overwrite not approved |
YouTube video in, structured archival Markdown note out. Capture the transcript, creator metadata, description, chapters, actual caption language, and provenance in one Obsidian-ready file—without an API key.
npx skills add JimmySadek/youtube-fetcher-to-markdown
Paste a YouTube link and receive a file such as:
~/yt_transcripts/2026-03-04_obsidian-the-king-of-learning-tools_[hSTy_BInQs8].md
---
title: "Obsidian: The King of Learning Tools (FULL GUIDE + SETUP)"
channel: "Odysseas"
url: "https://www.youtube.com/watch?v=hSTy_BInQs8"
video_id: "hSTy_BInQs8"
fetched: "2026-03-04"
source_project: "my-project"
language: "en"
caption_type: "manual"
duration: "36m 26s"
upload_date: "2024-04-24"
tags:
- yt-transcript
---
# Obsidian: The King of Learning Tools (FULL GUIDE + SETUP)
## Video Details
| Field | Value |
|----------|-------|
| URL | https://www.youtube.com/watch?v=hSTy_BInQs8 |
| Channel | Odysseas |
| Duration | 36m 26s |
| Uploaded | 2024-04-24 |
| Fetched | 2026-03-04 |
| Source | my-project |
| Language | en (manual) |
## Video Description
The creator's description, links, and chapter markers...
## Transcript
The complete caption text...
The YAML frontmatter makes a collection queryable through tools such as Dataview, while the Markdown remains portable to Logseq, other knowledge bases, and plain text workflows.
Most transcript extractors stop at raw caption text. An archival knowledge note also needs the source URL, creator, capture date, actual language, description, chapters, and a predictable filename. YouTube Fetcher keeps that complete record in one local file.
npx skills add JimmySadek/youtube-fetcher-to-markdown
Or clone the canonical repository:
git clone https://github.com/JimmySadek/youtube-fetcher-to-markdown.git
Python 3.8 or newer is supported.
python3 -m pip install -r requirements.txt
yt-dlp is optional but recommended for descriptions, chapters, duration, and
upload dates:
brew install yt-dlp # macOS
# or: python3 -m pip install yt-dlp
Check dependencies without fetching a video:
python3 scripts/fetch_transcript.py --check-deps
The script reports missing packages but never installs them automatically.
python3 scripts/fetch_transcript.py "https://youtu.be/VIDEO_ID"
An agent using the skill resolves scripts/fetch_transcript.py relative to its
installed SKILL.md; it does not depend on one fixed home-directory path.
The first configured option wins:
--output for one exact file--output-dir for this runYOUTUBE_FETCHER_DIR for a persistent directory~/yt_transcripts/ by default# Save this note to an Obsidian vault
python3 scripts/fetch_transcript.py URL --output-dir ~/Notes/MyVault
# Set a persistent default
export YOUTUBE_FETCHER_DIR=~/Notes/MyVault
python3 scripts/fetch_transcript.py URL
# Save to one exact file
python3 scripts/fetch_transcript.py URL --output ~/Notes/video.md
Duplicate detection uses the resolved output directory. In a non-interactive
session, an existing note exits with code 3 and remains untouched. Run again
with --force only after deciding to overwrite.
| Flag | What it does |
|---|---|
--output / -o |
Save to one exact file |
--output-dir |
Save inside a directory or knowledge vault |
--timestamps / -t |
Add timestamps to transcript lines |
--lang / -l |
Request a caption language; falls back truthfully to English |
--source / -s |
Override the capture-project name |
--format / -f |
Export json or srt instead of Markdown |
--no-description |
Skip the description and chapters section |
--stdout |
Print the result instead of saving it |
--list |
Show available caption languages |
--force |
Bypass duplicate protection |
--check-deps |
Report dependency status |
youtu.be short links/embed/, /shorts/, /live/, and legacy /v/ linksyoutube-nocookie.com/embed/ linksLookalike hosts such as youtube.com.example.org are rejected.
The repository follows the portable SKILL.md format. The same install command
works with Codex, Claude Code, Cursor, Windsurf, Gemini CLI, and other compatible
agents. Manual users can run the Python script directly.
yt-dlp
for richer metadata.yt-dlp executable when available.| Code | Meaning |
|---|---|
0 |
Success |
1 |
Invalid input or fetch failure |
2 |
Missing required dependency |
3 |
Existing note preserved; overwrite not approved |
MIT