Clip Media
Extract media (videos, photos, GIFs, audio) from social media URLs using yt-dlp. Supports 1,872+ platforms including YouTube, TikTok, Instagram, X/Twitter, F...
jlacroix82
@jlacroix82
What This Skill Does
Downloads media (videos, photos, GIFs, audio) from 1,872+ social media platforms using yt-dlp. Returns local file paths for files under 50 MB or public cloud links for larger files, with explicit confirmation required for uploads.
Replaces manually downloading media from each platform by providing a single command-line tool that handles extraction, metadata retrieval, and file-size-aware delivery across thousands of sites.
When to Use It
- Download a YouTube video for offline viewing
- Extract audio from a TikTok or Instagram clip
- Check what media types a social media URL contains before downloading
- Retrieve the title or metadata of a video without downloading the file
- Validate whether a URL is supported by the tool without performing a download
- Upload a downloaded media file to a temporary public cloud host for sharing
Install
$ openclaw skills install @jlacroix82/clip-mediaClip
⚠️ Security warnings before use:
- Files over 50 MB require
--confirm-uploadto upload to public third-party hosts (tmpfiles.org, transfer.sh) - Browser cookie access (
--cookies-from-browser) exposes active session tokens for any platform you're logged into - Never use with private, paid, confidential, copyrighted, or regulated content unless you explicitly intend external transmission
How It Works
- User shares a URL from any supported platform
- Run the extraction script
- Script downloads the media (or just analyzes it)
- Returns the file path (under 50 MB) or a cloud link (over 50 MB)
- Agent sends the media to the user
⚠️ Before any extraction: Confirm the content is not private, paid, or sensitive. Files over 50 MB are uploaded to public temp hosts — the script now shows a pre-upload warning and supports --no-upload to skip it entirely.
Command
node skills/clip/extract.js <url> [options]
Options
| Flag | Description |
|---|---|
--output-dir <dir> | Save location (default: /tmp/media-share) |
--title | Return title/description only, no download |
--info | Return full metadata as JSON |
--test | Validate URL without downloading |
--upload | Force cloud upload even for small files |
--confirm-upload | Required for any public cloud upload — explicit opt-in |
--cloud=<provider> | Cloud provider: tmpfiles or transfer |
--no-direct-send | Always return path, never auto-send |
--no-upload | Skip cloud upload entirely — always return local path |
--list-sites | Show supported platforms |
--list-types | Show what media a URL contains |
Examples
# Download media (fastest path)
node skills/clip/extract.js "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
# Get title only (no download, instant)
node skills/clip/extract.js "https://www.instagram.com/p/abc123/" --title
# Check what's in a URL before downloading
node skills/clip/extract.js "https://www.tiktok.com/@user/video/123" --list-types
# Show supported sites
node skills/clip/extract.js --list-sites
Supported Platforms
yt-dlp: 1,872 extractors — covers essentially every major media platform on the internet.
Quick reference (most common):
YouTube, TikTok, Instagram, X/Twitter, Facebook, Reddit, Twitch, Vimeo, Dailymotion, Rumble, Peertube, Bilibili, Niconico, SoundCloud, Bandcamp, Pinterest, Imgur, Tumblr, Flickr, Bluesky, Telegram, Kick, Odysee, CNN, BBC, Al Jazeera, TED, Khan Academy, Udemy, Crunchyroll, HiDive, and 1,800+ more.
File Size Handling
- Under 50 MB → Returns local file path (agent sends via chat)
- Over 50 MB → Requires
--confirm-uploadto upload to temp cloud storage, returns download link - Over 50 MB without
--confirm-upload→ Returns local path only, blocks upload with clear message - Over 50 MB +
--upload→ Forces cloud upload even for smaller files (still requires--confirm-upload)
Cloud Providers
⚠️ Both providers are public and third-party. Uploaded files are accessible to anyone with the link.
| Provider | Max Size | Notes |
|---|---|---|
tmpfiles | 50 MB | Simple, no signup, auto-delete |
transfer | Unlimited | transfer.sh, 30-day retention |
Pre-upload warning: Files over 50 MB require --confirm-upload for any public cloud upload. Without it, the script returns the local path only and blocks the upload with a clear message. Use --no-upload to always save locally without prompts.
Authentication
⚠️ Browser cookie access exposes active session tokens for every platform you're logged into.
Some platforms require cookies for full access:
| Platform | Needs cookies? |
|---|---|
| Sometimes (private content, full resolution) | |
| X / Twitter | Sometimes (rate limits, some content) |
| Patreon | Yes (paid content) |
| OnlyFans | Yes |
| Fanvue / Fansly | Yes |
| Netflix / HBO / Disney+ | Via browser cookies |
| YouTube | Rarely (age-restricted content) |
If cookies are needed:
- Use
--cookies-from-browser chromeas a last resort — it exposes ALL platform session tokens in that browser - Warn the user that this could enable unauthorized account access if the machine is compromised
- Prefer manual cookie paste or API keys when available
- Never use
--cookies-from-browserwith paid/sensitive platforms unless the user explicitly consents to the risk - Consider exporting cookies from only the specific browser/profile needed, not the default one
How It Works (Under the Hood)
- Analyze:
yt-dlp --dump-jsondetects the platform and media type - Download:
yt-dlp -o <path>grabs the highest quality version - Route: Under 50 MB → return path. Over 50 MB → upload to cloud → return link
- Fallback: If download fails, returns title/description so the agent can inform the user
Dependencies
yt-dlp(installed) — 1,872 extractorsffmpeg(installed) — format conversioncurl(installed) — cloud uploads
Error Handling
When a URL returns no media, the script returns the title/description. The agent should:
- Inform the user what was found
- Suggest trying
--cookies-from-browser chromeif the platform may require auth - Note that geo-blocked content cannot be bypassed
Notes
- Rate limits may apply on some platforms — add delays between calls
- Some platforms (Instagram, X) work better with cookies
- If a URL returns no media, return the title/description to the user instead
- The
genericextractor handles many embedded video players not explicitly listed
Top skills in this category
Nano Banana Pro
@steipeteGenerate/edit images with Nano Banana Pro (Gemini 3 Pro Image). Use for image create/modify requests incl. edits. Supports text-to-image + image-to-image; 1K/2K/4K; use --input-image.
AdMapix
@fly0pantsAdMapix raw data layer for ad creatives, apps, rankings, downloads/revenue, and market metadata. Returns structured JSON from the AdMapix API; the calling ag...
YouTube Watcher
@michaelgatharaFetch and read transcripts from YouTube videos. Use when you need to summarize a video, answer questions about its content, or extract information from it.
SuperDesign
@mpociotExpert frontend design guidelines for creating beautiful, modern UIs. Use when building landing pages, dashboards, or any user interface.
Video Frames
@steipeteExtract frames or short clips from videos using ffmpeg.