Agent skill

Download Video

by swyxio in swyxio/skills

Downloads embedded videos from web pages. An agent skill from swyxio/skills.

MITAuto-check passedMedia & Creative

Install Download Video

skills CLI
$ npx skills add swyxio/skills --skill download-video -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install swyxio/skills download-video --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/swyxio/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/download-video .claude/skills/download-video && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
download-video
GitHub stars
176
Token cost
~2k tokens
SKILL.md length
730 words
Files
2
Skills in repo
89
Repo updated
First seen
Licence
MIT

At a glance

Downloads embedded videos from web pages. An agent skill from swyxio/skills.

  • Works in 5 steps: Fetch the Page and Identify the Video → Resolve the Download URL → Download with yt-dlp → …
  • Someone says download this video
  • SKILL.md covers Why This Skill Exists, Prerequisites, How to Use This Skill and Troubleshooting, plus 2 more sections
  • Calls yt-dlp, brew and pip3; reaches player.vimeo.com and vimeo.com

What it does

Download Video is an agent skill from swyxio/skills. Downloads embedded videos from web pages. Fetches the page, identifies the video hosting service (Vimeo, YouTube, etc.), resolves the correct embed/player URL, and downloads using yt-dlp. Handles private/unlisted videos that require referer headers or embed URLs. Use this skill when someone says "download this video", "save this video", "grab the video from this page", "rip this video", or provides a URL and asks to download media from it. Also trigger when someone pastes a URL to a page with an embedded video…

Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `README.md`). Compatibility notes: Requires macOS or Linux with yt-dlp installed (brew install yt-dlp). curlcffi Python package recommended for impersonation support (pip3 install curlcffi)…

It sits in Media & Creative, covering Video production. It works with YouTube. The repository describes itself as: Agent skills for Claude Code and other AI agents. The licence is MIT.

When your agent uses it

  • Someone says download this video
  • Save this video
  • Grab the video from this page
  • Provides a URL and asks to download media from it

Example prompts

  • “download this video”
  • “save this video”
  • “grab the video from this page”
  • “/download-video”

Requirements

  • Python 3
  • Compatibility (from SKILL.md): Requires macOS or Linux with yt-dlp installed (brew install yt-dlp). curl_cffi Python package recommended for impersonation support (pip3 install curl_cffi). Internet connection required.

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Fetch the Page and Identify the Video
  2. Resolve the Download URL
  3. Download with yt-dlp
  4. Quality Selection (Optional)
  5. Output Location

What it can do on your machine

Read from SKILL.md and the folder at commit 038ef34. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • yt-dlp
    • brew
    • pip3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • player.vimeo.com
    • vimeo.com
    • forum.openai.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires macOS or Linux with yt-dlp installed (brew install yt-dlp). curl_cffi Python package recommended for impersonation support (pip3 install curl_cffi). Internet connection required.

    From compatibility in the SKILL.md frontmatter.

Context cost

Download Video loads about 2k tokens when it runs. Until then it costs about 141 tokens; SKILL.md has 730 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~141
When it runs · the whole SKILL.md, loaded when a task matches
~2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from swyxio/skills at commit 038ef34, republished under its MIT licence (© swyxio). 730 words, ~2,003 tokens.

Download SKILL.mdSave it as .claude/skills/download-video/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
download-video
description
Downloads embedded videos from web pages. Fetches the page, identifies the video hosting service (Vimeo, YouTube, etc.), resolves the correct embed/player URL, and downloads using yt-dlp. Handles private/unlisted videos that require referer headers or embed URLs. Use this skill when someone says "download this video", "save this video", "grab the video from this page", "rip this video", or provides a URL and asks to download media from it. Also trigger when someone pastes a URL to a page with an embedded video and wants the video file locally.
compatibility
Requires macOS or Linux with yt-dlp installed (brew install yt-dlp). curl_cffi Python package recommended for impersonation support (pip3 install curl_cffi). Internet connection required.
license
MIT
metadata.author
swyxio
metadata.version
1.1
metadata.last-updated
2026-03-28
metadata.primary-tools
yt-dlp, WebFetch

Download Video

This skill downloads embedded videos from web pages by inspecting the page source, identifying the video hosting service and embed URL, then using yt-dlp to download the video file.

Why This Skill Exists

Many event replays, webinars, and talks are embedded on pages using private/unlisted video hosting (especially Vimeo). The direct video URL often returns 404 because the video is only accessible through the embed player with the correct referer. This skill handles that automatically.

Prerequisites

Ensure yt-dlp is installed and up to date (older versions hit different errors):

bash
which yt-dlp || brew install yt-dlp
brew upgrade yt-dlp

Install the impersonation library. On modern macOS (Python installed via Homebrew), the --break-system-packages flag is required:

bash
pip3 install --break-system-packages curl_cffi

Note: curl_cffi alone does not fix private Vimeo downloads. The embed URL approach (Step 2) is what actually works. But curl_cffi prevents a misleading OAuth 400 error that obscures the real issue.

How to Use This Skill

Step 1: Fetch the Page and Identify the Video

Use WebFetch to inspect the target URL. Look for:

  1. iframe src attributes pointing to video players
  2. video/source tags with direct media URLs
  3. Schema.org VideoObject metadata (contentUrl, embedUrl)
  4. JavaScript variables containing video URLs or config objects
  5. Data attributes on player container elements

Extract the video hosting service and any identifying info:

HostURL PatternEmbed Pattern
Vimeovimeo.com/{id}player.vimeo.com/video/{id}
YouTubeyoutube.com/watch?v={id}youtube.com/embed/{id}
Wistiafast.wistia.com/medias/{id}fast.wistia.com/embed/medias/{id}
Brightcovevariesplayers.brightcove.net/{account}/{player}/index.html?videoId={id}
Loomloom.com/share/{id}loom.com/embed/{id}
Step 2: Resolve the Download URL

The direct URL (e.g., vimeo.com/123456) often fails for private/unlisted videos. Use the embed/player URL instead:

  • Vimeo: Use https://player.vimeo.com/video/{id} instead of https://vimeo.com/{id}
  • YouTube: The direct URL usually works, but embed URL works too
  • Wistia: Use the embed URL with the media hash

If the video has a privacy hash (Vimeo h= parameter), include it:

https://player.vimeo.com/video/{id}?h={hash}
Step 3: Download with yt-dlp

For Vimeo specifically, skip the direct URL and go straight to the embed URL. The direct URL almost always fails for private/unlisted videos. For other hosts, try in order and stop at the first that works.

Attempt 1 — Embed/player URL (start here for Vimeo):

bash
yt-dlp "https://player.vimeo.com/video/{id}"

Attempt 2 — With referer header (if Attempt 1 returns 403):

bash
yt-dlp --referer "{source_page_url}" "https://player.vimeo.com/video/{id}"

Attempt 3 — With referer + origin headers:

bash
yt-dlp --referer "{source_page_url}" --add-header "Origin: {source_origin}" "https://player.vimeo.com/video/{id}"

Attempt 4 — Direct URL (only for public videos or non-Vimeo hosts):

bash
yt-dlp "{video_url}"
Step 4: Quality Selection (Optional)

If the user wants a specific quality:

bash
# List available formats
yt-dlp -F "{url}"

# Download best quality (default)
yt-dlp -f "bestvideo+bestaudio" "{url}"

# Download specific resolution
yt-dlp -f "bestvideo[height<=1080]+bestaudio" "{url}"

# Download audio only
yt-dlp -f "bestaudio" -x --audio-format mp3 "{url}"
Step 5: Output Location

By default yt-dlp saves to the current directory. To specify an output path:

bash
yt-dlp -o "~/Downloads/%(title)s.%(ext)s" "{url}"

Troubleshooting

OAuth Token Error (Vimeo)
ERROR: Failed to fetch OAuth token: HTTP Error 400: Bad Request

This happens when yt-dlp tries the direct vimeo.com/{id} URL without impersonation support. Two things to do:

  1. Install curl_cffi: pip3 install --break-system-packages curl_cffi
  2. More importantly, switch to the embed URL — this is the actual fix. Even with curl_cffi, the direct URL will likely fail with a 404 (see below) because the video is private.
Show full SKILL.md (278 more words)Show less
404 Not Found (Vimeo)
ERROR: Unable to download macos API JSON: HTTP Error 404: Not Found

This is what you get after installing curl_cffi and updating yt-dlp — the OAuth error goes away but the video still can't be found because it's private/unlisted on the direct URL. Switch to the embed URL:

  • vimeo.com/{id} -> player.vimeo.com/video/{id}

The typical Vimeo error progression is: OAuth 400 -> (install curl_cffi + update yt-dlp) -> 404 -> (use embed URL) -> success.

403 Forbidden
ERROR: HTTP Error 403: Forbidden

Fix: Add the referer header from the source page:

bash
yt-dlp --referer "{source_page_url}" "{embed_url}"
Impersonation Warning
WARNING: The extractor is attempting impersonation, but no impersonate target is available

Fix: Install curl_cffi. This is a non-fatal warning but may cause downstream failures.

Geo-restricted Content
ERROR: This video is not available in your country

Fix: Consider using a VPN. yt-dlp supports --proxy flag:

bash
yt-dlp --proxy socks5://127.0.0.1:1080 "{url}"

Real-World Example: OpenAI Forum Vimeo Embed

This is the exact sequence that works, tested on forum.openai.com event replay pages (2026-03-28):

bash
# 1. Page has schema.org VideoObject with contentUrl: https://vimeo.com/1174947711
#    Direct URL fails (private video).

# 2. This works — use the player embed URL:
yt-dlp --referer "https://forum.openai.com/" "https://player.vimeo.com/video/1174947711"

# 3. yt-dlp downloads HLS fragments (484 in this case), merges video+audio.
#    Result: ~683MB MP4 file.

The referer wasn't strictly required for this specific video (Attempt 1 worked), but including it is good practice for Vimeo embeds.

Common Video Page Patterns

OpenAI Forum Events
  • Videos are Vimeo embeds, video ID found in schema.org contentUrl
  • Direct Vimeo URLs return 404 (private)
  • Use player.vimeo.com/video/{id} — referer optional but recommended
  • Downloads as HLS stream (many fragments), yt-dlp merges automatically
Conference Talk Pages
  • Often use Vimeo or YouTube embeds
  • Check for iframe elements in the page source
  • Some use custom players that wrap YouTube/Vimeo — look for the underlying embed URL
Course/LMS Platforms
  • Often use Wistia or Vimeo with domain restrictions
  • Referer header is usually required
  • May require cookies — use --cookies-from-browser chrome if needed
Gradual/Event Platforms
  • Many event replay platforms (like the one OpenAI Forum uses) are built on Gradual
  • They store video metadata in schema.org VideoObject in the page head
  • The contentUrl field has the Vimeo URL, but it's the public-facing URL that won't work for download
  • Always convert to the player.vimeo.com embed form

© swyxio, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in download-video of swyxio/skills.

  • SKILL.md
  • README.md

Open the folder on GitHubat commit 038ef34

Compare with similar skills

Download Video next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Download Video compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Download Video this skillswyxio/skills176—~2kAutomated safety check: PassMIT
Yt Dlp DownloaderMapleShaw/yt-dlp-downloader-skill2091 repos~1.5kAutomated safety check: PassNone
Media Downloaderyizhiyanhua-ai/media-downloader4031 repos~824Automated safety check: PassNone
Youtube Thumbnailhassancs91/claude-youtube-editor328—~2.1kAutomated safety check: NotesMIT
Shorts Video Makeruxjoseph/content-marketing-team107—~665Automated safety check: PassNone
Motion Video in Remotionooiyeefei/ccc495—~2.9kAutomated safety check: PassMIT

Similar skills

  • Yt Dlp Downloader

    MapleShaw/yt-dlp-downloader-skill

    Download videos from YouTube, Bilibili, Twitter, and thousands of other sites using yt-dlp.

    209 GitHub starsUsed in 1 repo~1.5k tokens
    Media & CreativeAuto-check passed
  • Media Downloader

    yizhiyanhua-ai/media-downloader

    智能媒体下载器。根据用户描述自动搜索和下载图片、视频片段,支持视频自动剪辑. An agent skill from yizhiyanhua-ai/media-downloader.

    403 GitHub starsUsed in 1 repo~824 tokens
    Media & CreativeAuto-check passed
  • Youtube Thumbnail

    hassancs91/claude-youtube-editor

    Dedicated YouTube thumbnail generator — interviews you for exactly the style elements you want (environment, text budget, extras, accent color), then renders high-contrast, vibrant, face-consistent…

    328 GitHub stars~2.1k tokensUpdated 1 mo ago
    Media & CreativeAuto-check: notes
  • Shorts Video Maker

    uxjoseph/content-marketing-team

    YouTube 영상에서 쇼츠 클립 3개를 자동 제작합니다. An agent skill from uxjoseph/content-marketing-team.

    107 GitHub stars~665 tokensUpdated 9 mo ago
    Media & CreativeAuto-check passed
  • Builds marketing and explainer videos in Remotion from rendered scenes, with one real product capture as proof, and cuts them for each platform's formats.

    495 GitHub stars~2.9k tokensUpdated 2 mo ago
    Media & CreativeAuto-check passed
  • Watchless

    chenzixin1/watchless

    A skill your agent uses when turning a YouTube URL or local presentation, explainer, interview, podcast, or product-demo video into complete screenshot-led notes, faithful light-polished text, HTML…

    144 GitHub stars~3.7k tokensUpdated 25 days ago
    Media & CreativeAuto-check: warnings

More from swyxio/skills

All 89 skills in this repo
  • Programmatic Agents

    swyxio/skills

    Run a selected coding-agent CLI programmatically, with latency, error, usage, cost, and trace logging.

    176 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Design, implement, audit, or refresh protected username and handle namespaces for public products.

    176 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • New Mac Setup

    swyxio/skills

    Fully automated new Mac setup for fullstack web developers and AI engineers.

    176 GitHub stars~4.3k tokensUpdated today
    Auto-check passed
  • Youtube API

    swyxio/skills

    Manage YouTube videos programmatically via the YouTube Data API v3 — upload video files, upload custom thumbnails, update video metadata (titles, descriptions, tags), and query video/channel info…

    176 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Batch YouTube Studio upload workflow for videos sourced from Airtable, Google Drive, Loom, YouTube, or local files.

    176 GitHub stars~1.5k tokensUpdated today
    Auto-check: warnings
  • Reconstruct and visually analyze paired agent, game, or policy trajectories to determine whether changed actions produced their intended effects.

    176 GitHub stars~1.8k tokensUpdated today
    Auto-check passed

Works with

Questions about Download Video

What does Download Video do?

Downloads embedded videos from web pages. An agent skill from swyxio/skills. Download Video is an agent skill from swyxio/skills. Downloads embedded videos from web pages.

When should I use Download Video?

Download Video fits situations like: someone says download this video; save this video; grab the video from this page; provides a URL and asks to download media from it.

How do I install Download Video in Claude Code?

Run `npx skills add swyxio/skills --skill download-video -a claude-code`. Or copy the skill folder (download-video in swyxio/skills) into .claude/skills/download-video in your project. Claude Code loads it when a task matches its description.

How do I install Download Video in Codex?

Run `npx skills add swyxio/skills --skill download-video -a codex`. Or copy the skill folder (download-video in swyxio/skills) into .agents/skills/download-video in your project. Codex loads it when a task matches its description.

Can I use Download Video in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add swyxio/skills --skill download-video -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/download-video, .gemini/skills/download-video, .github/skills/download-video and .opencode/skills/download-video in your project.

What does Download Video need to run?

Going by SKILL.md and its folder, Download Video needs the command-line tools its instructions call (yt-dlp, brew and pip3). Our summary lists: Python 3. Compatibility (from SKILL.md): Requires macOS or Linux with yt-dlp installed (brew install yt-dlp). curl_cffi Python package recommended for impersonation support (pip3 install curl_cffi). Internet connection required. .

Does Download Video access the network?

SKILL.md names 3 domains. In commands or code: player.vimeo.com, vimeo.com and forum.openai.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Download Video safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Download Video use?

Download Video is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Download Video use?

About 2k tokens (SKILL.md is roughly 8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Download Video?

Skills that share tags, products or a category with Download Video: Yt Dlp Downloader (MapleShaw/yt-dlp-downloader-skill, 209 stars), Media Downloader (yizhiyanhua-ai/media-downloader, 403 stars), Youtube Thumbnail (hassancs91/claude-youtube-editor, 328 stars) and Shorts Video Maker (uxjoseph/content-marketing-team, 107 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Download Video?

swyxio (a GitHub user) maintains it in swyxio/skills, which has 176 GitHub stars. The repository holds 89 skills in this directory. The repository was last updated on October 5, 2026.

Source: swyxio/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.