A self-hosted, open-source video and audio downloader with a clean web UI. Paste links from YouTube, TikTok, Instagram, Twitter/X, and 1000+ other sites — download as MP4 or extract audio in multiple formats.
- Download videos from 1000+ supported sites (via yt-dlp)
- MP4 video or audio extraction in multiple formats (MP3, AAC, OPUS, FLAC, WAV, M4A)
- Quality/resolution picker with codec selection (AVC1, VP9, AV01)
- Bulk downloads — paste multiple URLs at once
- Automatic URL deduplication
- Cookie-based authentication for age-restricted or bot-protected videos
- Clean, responsive UI — no frameworks, no build step
- Single Python file backend
# Prerequisites: Python 3.12+, ffmpeg, Deno
brew install ffmpeg deno # macOS
# or: apt install ffmpeg && curl -fsSL https://deno.land/install.sh | sh # Linux
pip install -r requirements.txt
python app.pyOpen http://localhost:8899.
docker build -t reclip .
docker run -p 8899:8899 reclipThe Docker image includes ffmpeg and Deno — no extra setup needed.
services:
reclip:
build: .
ports:
- "8899:8899"
restart: unless-stopped- Paste one or more video URLs into the input box
- Choose MP4 (video) or MP3 (audio)
- Click Fetch to load video info and thumbnails
- Select quality/resolution (and codec if multiple are available)
- Click Download on individual videos, or Download All
Some YouTube videos require authentication. If a fetch fails with a "Sign in to confirm you're not a bot" error, an auth upload option will appear automatically.
Getting your YouTube cookies:
- Open a private/incognito browser window
- Log into youtube.com in that window
- In the same tab, navigate to
https://www.youtube.com/robots.txt - Install the EditThisCookie browser extension (Chrome / Firefox)
- Click the EditThisCookie icon → Export (copies JSON cookies to clipboard)
- Paste into a
.txtfile and save - Upload the file via the in-app "Choose session file" button
- Close the private window immediately so the session cookies are never rotated
Why private/incognito? YouTube rotates account cookies on open browser tabs as a security measure. Exporting from an active session may result in already-invalid cookies. The private window technique ensures cookies remain valid.
Privacy: Uploaded cookies are stored in RAM only (sessionStorage) and are never written to disk on the server. They are automatically deleted when you close the browser tab. The server writes them to a temporary file for the duration of the yt-dlp subprocess only, then deletes it.
JSON and Netscape formats are both supported — EditThisCookie exports JSON, which is automatically converted to Netscape format internally.
| Component | Purpose |
|---|---|
| Python 3.12+ | Backend runtime |
| ffmpeg | Audio/video merging and transcoding |
| Deno | JavaScript runtime for YouTube challenge solving |
| yt-dlp | Download engine |
Why Deno? YouTube requires solving JavaScript challenges to access video streams. yt-dlp uses Deno (or Node.js) to execute these challenges. Without a JS runtime, only image/storyboard formats will be available.
Anything yt-dlp supports, including:
YouTube, TikTok, Instagram, Twitter/X, Reddit, Facebook, Vimeo, Twitch, Dailymotion, SoundCloud, Loom, Streamable, Pinterest, Tumblr, Threads, LinkedIn, and many more.
- Backend: Python + Flask
- Frontend: Vanilla HTML/CSS/JS (single file, no build step)
- Download engine: yt-dlp + ffmpeg
- JS runtime: Deno (for YouTube challenge solving)
This tool is intended for personal use only. Please respect copyright laws and the terms of service of the platforms you download from. The developers are not responsible for any misuse of this tool.