Skip to content

Repository files navigation

Grabbit

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.

Features

  • 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

Requirements (one-time)

  1. Node.js (version 18 or newer): nodejs.org
  2. yt-dlp: the download engine
  3. ffmpeg: used to merge video and audio and convert to MP3

Installing yt-dlp and ffmpeg

Windows (via winget, in PowerShell):

winget install yt-dlp.yt-dlp
winget install Gyan.FFmpeg

Then close and reopen the terminal so PATH refreshes, and verify:

yt-dlp --version
ffmpeg -version

macOS (via Homebrew):

brew install yt-dlp ffmpeg

Linux (Debian/Ubuntu):

sudo apt install ffmpeg
python3 -m pip install -U yt-dlp

Running it

In the project folder:

cd grabbit
npm install      # first time only
npm start

Then open http://localhost:3000 in your browser.

Stop the server with Ctrl + C.

Install as an app (PWA)

  • 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".

Open it on your phone (same Wi-Fi), over HTTP

  1. Find your computer's local IP (ipconfig on Windows, ifconfig on macOS/Linux), for example 192.168.0.15.
  2. On your phone open http://192.168.0.15:3000.
  3. If it will not connect, allow port 3000 through your firewall. On Windows, double-clicking allow-firewall.bat does this for you.

Over plain HTTP, PWA install, Share Target and clipboard access do not work (a browser security limitation). Downloading still works.

Full PWA (HTTPS via tunnel)

PWA install and Share Target need HTTPS with a trusted certificate. The easiest way is a free Cloudflare quick tunnel:

  1. Install it: winget install Cloudflare.cloudflared (or see the cloudflared docs).
  2. On Windows, double-click start-https.bat to start the server and the tunnel.
  3. A https://….trycloudflare.com address appears. Open it on your phone (it works over mobile data too).
  4. 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).

How it works

[Browser / PWA]  ->  [Node server (server.js)]  ->  [yt-dlp + ffmpeg]
      UI            job-based API + SSE progress         download
  • POST /api/info: title, author, thumbnail
  • POST /api/start: starts a download, returns a job id
  • GET /api/progress/:id: SSE stream with progress (percentage, speed, stage)
  • GET /api/file/:id: serves the finished file and cleans up
  • GET /api/lan and GET /api/qr.svg: local address and QR code for mobile

Project structure

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/

Renaming the app

Change the name "Grabbit" in two places:

  • public/manifest.json: name, short_name
  • public/index.html: the <title> and the text in .logo

Troubleshooting

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

License

MIT

About

Free, ad-free web app to download videos and MP3 from YouTube, Instagram, TikTok, Facebook and 1000+ more sites. Works on phone and desktop, installable as an app.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages