Multi-platform video/audio downloader — TikTok, Instagram, Facebook, X, Pinterest, LinkedIn, Reddit. Built with Flask + yt-dlp, same base pattern as StreamDrop.
How to Use It:
- Download and run the
.exeinstaller. - Follow the installation wizard.
- Select a custom installation location if desired.
- Complete the installation.
- Done! Enjoy using the Grey Box Downloader by simply double click on the icon.
pip install -r requirements.txt
python app.py
/api/fetch— reads the link with yt-dlp (no download), returns title/thumbnail/duration or playlist count./api/start-download— kicks off a background download thread, returns ajob_id./api/progress/<job_id>— polled every second by the frontend for live percentage./api/file/<job_id>— once status isdone, this serves the finished file directly, so the Save button saves straight to disk instead of needing a second click.- Playlists are zipped automatically once every item finishes; the Save button then downloads the zip.
- TikTok needs browser impersonation (
extractor_argsset inapp.py) or requests get blocked. - Instagram needs the
Refererheader set (already handled) or you'll get 403s. Private posts need cookies. - Reddit blocks datacenter IPs at the network level — if you deploy this to a cloud VPS, Reddit links may fail even though the code is correct. Works fine when run locally on a home connection.
- LinkedIn — public video posts work; yt-dlp recently dropped LinkedIn login support, so private/authenticated content won't extract.
- Spotify is DRM-protected and intentionally blocked in the code (
UNSUPPORTED_HOSTSinapp.py) — yt-dlp cannot legally extract Spotify audio.
Same pattern as StreamDrop: wrap this Flask app in a native window instead of rewriting it.
pip install pywebview- Add a small launcher that starts Flask in a background thread and opens a
pywebviewwindow pointed athttp://127.0.0.1:5000instead of a browser tab. - Package with PyInstaller:
pyinstaller --onefile --add-data "templates;templates" --add-data "static;static" launcher.py - Build the installer with Inno Setup, same script pattern as StreamDrop.
Say the word when you're ready for step 2 (the launcher script) — it's a ~30 line addition once the web version is confirmed working the way you want.