A simple, free, ad-free PWA for downloading video and MP3 from YouTube, Instagram, TikTok, Facebook, X and 1000+ more sites. It runs locally on your own computer (Node.js) and the frontend is an installable web app, so you can "Add to Home Screen" on both phone and desktop.
For personal use only. Respect copyright and the terms of service of each platform.
- Video or MP3 with quality selection (best, 1080p, 720p, 480p)
- Phone-friendly video: forces H.264/MP4 so clips play on any device
- MP3 with artwork: embeds cover art and metadata (title, artist)
- Playlists: download a whole list at once as a .zip
- Real progress: percentage, speed, stage, and a Cancel button
- Share Target: on mobile, share straight from the YouTube/TikTok/Instagram app into Grabbit
- Clipboard auto-detect and a Paste button
- QR code to open it on your phone (same Wi-Fi)
- History of recent downloads with one-tap repeat
- Subtitles (optional, when available)
- Installable PWA (Install button and guide)
- Toast notifications
- Node.js (version 18 or newer): nodejs.org
- yt-dlp: the download engine
- ffmpeg: used to merge video and audio and convert to MP3
Windows (via winget, in PowerShell):
winget install yt-dlp.yt-dlp
winget install Gyan.FFmpegThen close and reopen the terminal so PATH refreshes, and verify:
yt-dlp --version
ffmpeg -versionmacOS (via Homebrew):
brew install yt-dlp ffmpegLinux (Debian/Ubuntu):
sudo apt install ffmpeg
python3 -m pip install -U yt-dlpIn the project folder:
cd grabbit
npm install # first time only
npm startThen open http://localhost:3000 in your browser.
Stop the server with Ctrl + C.
- Desktop (Chrome/Edge): click the Install icon in the address bar and Grabbit opens in its own window.
- Mobile: open the address (see below), then browser menu, then "Add to Home Screen".
- Find your computer's local IP (
ipconfigon Windows,ifconfigon macOS/Linux), for example192.168.0.15. - On your phone open
http://192.168.0.15:3000. - If it will not connect, allow port
3000through your firewall. On Windows, double-clickingallow-firewall.batdoes this for you.
Over plain HTTP, PWA install, Share Target and clipboard access do not work (a browser security limitation). Downloading still works.
PWA install and Share Target need HTTPS with a trusted certificate. The easiest way is a free Cloudflare quick tunnel:
- Install it:
winget install Cloudflare.cloudflared(or see the cloudflared docs). - On Windows, double-click
start-https.batto start the server and the tunnel. - A
https://….trycloudflare.comaddress appears. Open it on your phone (it works over mobile data too). - Browser menu, then "Install" or "Add to Home Screen". This is the full PWA, including Share Target.
The tunnel address is temporary and changes on each run. A stable address requires a Cloudflare account (named tunnel).
[Browser / PWA] -> [Node server (server.js)] -> [yt-dlp + ffmpeg]
UI job-based API + SSE progress download
POST /api/info: title, author, thumbnailPOST /api/start: starts a download, returns a jobidGET /api/progress/:id: SSE stream with progress (percentage, speed, stage)GET /api/file/:id: serves the finished file and cleans upGET /api/lanandGET /api/qr.svg: local address and QR code for mobile
grabbit/
server.js # Node backend (Express + yt-dlp)
package.json
downloads/ # optional save location
public/ # PWA frontend
index.html
style.css
app.js
manifest.json
sw.js
icons/
Change the name "Grabbit" in two places:
public/manifest.json:name,short_namepublic/index.html: the<title>and the text in.logo
| Problem | Fix |
|---|---|
yt-dlp NOT installed |
install it via winget/brew/pip and restart the terminal |
| MP3 or high-quality video fails | ffmpeg is missing, install it |
| YouTube downloads fail | update yt-dlp: yt-dlp -U |
| Private videos | yt-dlp supports cookies, but that is an advanced setup |