Skills youtube-archiver

Archive YouTube playlists into markdown notes with metadata, transcripts, AI summaries, and tags. Use when a user asks to import/sync YouTube playlists, archive Watch Later or Liked videos, enrich YouTube notes, batch process video notes, or automate recurring YouTube-to-markdown sync jobs with cron.

install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/benmillerat/youtube-archiver" ~/.claude/skills/openclaw-skills-youtube-archiver && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/benmillerat/youtube-archiver" ~/.openclaw/skills/openclaw-skills-youtube-archiver && rm -rf "$T"
manifest: skills/benmillerat/youtube-archiver/SKILL.md
source content

YouTube Archiver

Use this skill to import YouTube playlists into markdown files and optionally enrich notes with transcript, summary, and tagging.

Requirements

  • Python 3.7+
  • yt-dlp
    (
    pip install yt-dlp
    or
    brew install yt-dlp
    )
  • A browser signed into YouTube (for private playlists like Liked/Watch Later)
  • macOS: terminal needs Full Disk Access to read browser cookies
  • Windows: browser cookie extraction can be flaky;
    cookies_file
    export is the safer path
  • Linux: works on desktop installs; headless servers need
    cookies_file

First-run setup flow (interactive)

If no config exists at

<output>/.config.json
, ask these questions before running scripts.

Required questions

  1. Where should archived notes be stored?
    • Default:
      ./YouTube-Archive
  2. Which playlists should be archived?
    • Accept playlist IDs or URLs
    • Default:
      LL
      (Liked Videos),
      WL
      (Watch Later)
  3. Which browser is signed into YouTube for cookie auth?
    • Default:
      chrome

Optional enrichment questions

Ask only if the user wants summaries/tags.

  1. Generate AI summaries? (yes/no)
  2. Summary provider? (
    openai
    ,
    gemini
    ,
    anthropic
    ,
    openrouter
    ,
    ollama
    ,
    none
    )
  3. Summary model name?
  4. API key env var name?
  5. Enable auto-tagging? (yes/no)
  6. Tagging provider/model/env var?
  7. Keep default tags or define custom vocabulary?

First-run execution sequence

  1. Run init:
    • python3 <skill>/scripts/yt-import.py --output <output-dir> --init
  2. Edit
    <output-dir>/.config.json
    from the user’s answers.
  3. Verify auth with dry run:
    • python3 <skill>/scripts/yt-import.py --output <output-dir> --dry-run
  4. Run real import.
  5. Run enrichment (optional):
    • python3 <skill>/scripts/yt-enrich.py --output <output-dir> --limit 10

One-shot quick start

Use this for immediate manual sync:

python3 <skill>/scripts/yt-import.py --output <output-dir>
python3 <skill>/scripts/yt-enrich.py --output <output-dir> --limit 10

Useful import flags:

  • --dry-run
  • --playlist <ID>
    (repeatable)
  • --no-summary
  • --no-tags
  • --cookies <path/to/cookies.txt>
  • --browser <name>

Useful enrich flags:

  • --dry-run
  • --limit <N>
  • --strict-config

Idempotency and safety behavior

  • Import skips already archived videos by
    video_id
    .
  • Filenames include video ID:
    Title [video_id].md
    .
  • Enrichment skips notes where frontmatter has
    enriched: true
    .
  • Lockfile prevents concurrent runs:
    <output-dir>/.yt-archiver.lock
    .

Automation with cron (single-agent default)

Offer cron only after one successful manual run.

Example schedule (daily 11:00):

  1. Import new videos
  2. Enrich a bounded batch

Example task text:

  • Run yt-import.py for <output-dir>, then run yt-enrich.py --limit 10 for the same output.

Keep it single-agent by default. Do not assume multi-agent routing.

Troubleshooting and provider details

Read these references when needed:

  • Provider setup, model suggestions, cost:
    references/providers.md
  • Common failures and fixes:
    references/troubleshooting.md
  • Default summary prompt template:
    references/default-summary-prompt.md