
A small Flask app that wraps yt-dlp behind a clean web UI. Paste one or many URLs, pick MP4 or MP3, choose resolution, hit download. The whole backend is one Python file at ~150 lines, the frontend is vanilla HTML/CSS/JS with no build step. The right amount of code for the job.
What it is for
A tiny self-hosted alternative to commercial downloader sites. Useful when:
- You want a permanent local URL (
http://localhost:8899) instead of pasting into ad-laden web tools. - You need to bulk-download from a list of links (paste them all, deduped automatically).
- You want video as MP4 or audio-only as MP3 with a resolution picker.
Stack
| Layer | Tech |
|---|---|
| Backend | Python + Flask, ~150 lines |
| Frontend | Vanilla HTML/CSS/JS, single file, no build |
| Download engine | yt-dlp + ffmpeg |
| Dependencies | 2 (Flask, yt-dlp) |
| License | MIT |
Install
brew install yt-dlp ffmpeg # macOS
# or: apt install ffmpeg && pip install yt-dlp
git clone https://github.com/averygan/reclip.git
cd reclip
./reclip.sh
Open http://localhost:8899.
Docker version:
docker build -t reclip . && docker run -p 8899:8899 reclip
Supported sites
Anything yt-dlp supports — YouTube, TikTok, Instagram, Twitter/X, Reddit, Facebook, Vimeo, Twitch, Dailymotion, SoundCloud, Loom, Streamable, Pinterest, Tumblr, Threads, LinkedIn, and ~1000 more.
Value
The yt-dlp CLI is already excellent. What reclip adds:
- A persistent UI on the home network instead of remembering CLI flags.
- Bulk paste with dedup — handy for pulling a bunch of links from a chat or notes file.
- A separation between "fetch info / pick format" and "actually download", so you can sanity-check before committing.
Good fit for a Docker container on a home server next to other small tools. Not a replacement for yt-dlp itself when you want full control or scheduling.