Dwnldr

Yarr! Plunder videos from the seven seas of the internet — YouTube, TikTok, Instagram, X, Reddit & 1000+ ports o' call. Drop a link, get full quality loot with metadata scrubbed clean. No traces, no evidence, just pure content booty delivered straight to yer Telegram. Supports MP4, MP3, playlists, and more.

Audits

Warn

Install

openclaw skills install dwnldr

Video Downloader

Download videos from YouTube, TikTok, Instagram, Twitter/X, and 1000+ sites. Just paste a link — the video gets downloaded at full quality and sent back to you.

URL Detection (AUTO-TRIGGER)

CRITICAL: When the user sends a message that contains a URL from any of these domains, AUTOMATICALLY treat it as a download request. Do NOT ask "what do you want me to do with this?" — just download it.

Auto-detect domains:

  • youtube.com, youtu.be, m.youtube.com
  • tiktok.com, vm.tiktok.com
  • instagram.com (reels, posts, stories)
  • x.com, twitter.com
  • reddit.com (video posts)
  • twitch.tv (clips)
  • vimeo.com
  • facebook.com (videos, reels)

Pattern: If user message contains a URL matching these domains → skip questions, download immediately.

Download Flow

Step 1 — Download

yt-dlp --js-runtimes nodejs \
  -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" \
  --merge-output-format mp4 \
  --no-playlist \
  --output "/home/rami/.openclaw/workspace/_incoming/%(title).50s.%(ext)s" \
  "<URL>"

Fallback for stubborn sites (TikTok, Instagram):

yt-dlp --js-runtimes nodejs \
  -f "best" \
  --no-playlist \
  --output "/home/rami/.openclaw/workspace/_incoming/%(title).50s.%(ext)s" \
  "<URL>"

Step 2 — Strip metadata

Remove ALL metadata (title, author, GPS, comments, timestamps, source URL) for clean clips:

ffmpeg -i "/home/rami/.openclaw/workspace/_incoming/<filename>" \
  -map_metadata -1 \
  -fflags +bitexact \
  -flags:v +bitexact \
  -flags:a +bitexact \
  -c copy \
  "/home/rami/.openclaw/workspace/_incoming/<filename>_clean.mp4" \
  && mv "/home/rami/.openclaw/workspace/_incoming/<filename>_clean.mp4" \
        "/home/rami/.openclaw/workspace/_incoming/<filename>"

This strips: title, artist, comment, description, source URL, creation date, encoder info, GPS coordinates — everything.

Step 3 — Get file info

ls -lh /home/rami/.openclaw/workspace/_incoming/<filename>

Step 3 — Send to user

If file is under 50MB — send directly via Telegram:

openclaw message send \
  --channel telegram \
  --target <user_id> \
  --message "🎬 Downloaded: <title>" \
  --media /home/rami/.openclaw/workspace/_incoming/<filename>

If file is over 50MB — use LocalSend:

  1. Notify user: "Video is <size> — too big for Telegram. Sending via LocalSend."
  2. Start LocalSend send flow:
    localsend-cli send --to "<user_device>" /home/rami/.openclaw/workspace/_incoming/<filename>
    

Buttons after send:

buttons: [
  [
    { "text": "🎬 Download Another", "callback_data": "dl:another" },
    { "text": "📱 Send via LocalSend", "callback_data": "dl:localsend" }
  ],
  [
    { "text": "🗑️ Delete File", "callback_data": "dl:delete" }
  ]
]

Step 4 — Cleanup

After confirmed delivery, offer to delete the file to save disk space.

Quality Options

Default is best quality MP4. If user asks for specific quality:

RequestFlag
"1080p"-f "bestvideo[height<=1080]+bestaudio/best[height<=1080]"
"720p"-f "bestvideo[height<=720]+bestaudio/best[height<=720]"
"audio only" / "mp3"-x --audio-format mp3
"thumbnail"--write-thumbnail --skip-download

Audio-Only Downloads

If user says "mp3", "audio only", "just the audio":

yt-dlp --js-runtimes nodejs \
  -x --audio-format mp3 \
  --output "/home/rami/.openclaw/workspace/_incoming/%(title).50s.%(ext)s" \
  "<URL>"

Batch Downloads (Playlists)

If user sends a playlist URL and says "download all":

yt-dlp --js-runtimes nodejs \
  -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" \
  --merge-output-format mp4 \
  --output "/home/rami/.openclaw/workspace/_incoming/%(title).50s.%(ext)s" \
  "<URL>"

Remove --no-playlist flag for playlists.

Error Handling

ErrorFix
"Video unavailable"Private/deleted video — notify user
"Sign in to confirm"Age-restricted — try with --cookies-from-browser chrome
Geographic restrictionTry with --geo-bypass
Rate limitedWait 30s and retry once
Merge failedFallback to -f best (single stream)

Callback Reference

callback_dataAction
dl:anotherPrompt for another URL
dl:localsendSend last downloaded file via LocalSend
dl:deleteDelete the downloaded file
dl:audioRe-download as MP3

CLI Reference

CommandUsage
Best qualityyt-dlp -f "bestvideo+bestaudio/best" --merge-output-format mp4 URL
Audio onlyyt-dlp -x --audio-format mp3 URL
List formatsyt-dlp -F URL
Thumbnailyt-dlp --write-thumbnail --skip-download URL