A lightweight cross-browser extension that detects video/audio stream URLs (HLS, DASH, MP4, WebM, audio…) on any page and lets you copy them, open them, or download with one click via vsd (Rust) → N_m3u8DL-RE → yt-dlp → ffmpeg.
Works on Chrome, Edge, Brave, Opera, Vivaldi and Firefox (Manifest V3).
Linux (any systemd distro):
bash <(curl -fsSL https://raw.githubusercontent.com/chethan62/mediasniff/main/bootstrap.sh)Windows (PowerShell):
irm https://raw.githubusercontent.com/chethan62/mediasniff/main/bootstrap.ps1 | iexClones the repo, installs vsd (Rust, 27 MB binary) + checks deps, and sets up the Grab helper to autostart. Falls back to N_m3u8DL-RE → yt-dlp → ffmpeg. The only thing left is loading the unpacked extension — it prints the exact step at the end. (Set MEDIASNIFF_DIR to choose the clone location.)
If anything breaks (deleted files, missing tools, dead service), run:
./mediasniff-check.shIt restores the repo from GitHub, rebuilds the extension, installs missing binaries (vsd, yt-dlp), fixes the systemd service path, restarts the grabber, and runs a health + download test. Alias: mediasniff-check.
- Sniffs media requests live via
webRequestAPI; per-tab toolbar badge shows count - Filters out segments (
.ts/.m4s/init), ad/cookie-sync/?error=URLs — you see manifests, not fragments - Color-coded types:
HLS,DASH,MP4,WEBM,AUDIO,TS,MKV,AVI,MOV,WAV,SRT,VTT,ASS - Type emoji icons (🎬🎵💬📦📄) on every row
- Filter by type + free-text search
- HLS master playlists — auto-parsed into collapsible variant rows showing resolution, bitrate, codec
- DASH MPD manifests — auto-parsed with AdaptationSet detection (audio vs video tracks)
- Correct combined / audio-only / video-only variant detection
- File size display via Content-Length capture
- One-click Grab — POSTs URL + headers to local grabber helper
- Engine priority: vsd (Rust, 5ms startup) → N_m3u8DL-RE (C#) → yt-dlp → ffmpeg
- vsd auto-merges separate audio/video tracks into one file
- Cookie capture — Cookie header captured + passed to all downloaders for authenticated streams
- Resume support —
--enable-resumefor N_m3u8DL-RE - Retry endpoint —
POST /retry/<id>to retry failed downloads - Browser notification on completion
- Live progress (
34%→Done✓/Failed✗) - Downloads panel lists active jobs
- Quality picker (Best/≤1080p/≤720p/≤480p/Worst) + Subs toggle
- Grab All — batch download every detected URL
- Saves to
~/Downloads
- Copy URL, Cmd (copy download command), DM (send to AB Download Manager), Open in new tab
- Cookie + Referer + User-Agent baked into generated commands for protected streams
- Bulk: Copy all URLs, Copy all cmds, Export to
.txt/.json/.m3u(opens in VLC) - Remembers tool choice across sessions
bash install.sh # or: npm run setupInstalls vsd + N_m3u8DL-RE, builds the extension, and registers the Grab helper as an autostart systemd user service. Idempotent — safe to re-run.
Then load the unpacked extension (the one manual step):
Chromium / Vivaldi → chrome://extensions → enable Developer mode → Load unpacked → this folder.
Works on any systemd Linux (Debian/Ubuntu, Fedora, Arch, openSUSE, …). Needs python3 + curl; ffmpeg/yt-dlp recommended.
Manage the helper:
systemctl --user {status,restart,stop} mediasniff-grabberpowershell -ExecutionPolicy Bypass -File .\install.ps1Installs N_m3u8DL-RE (win-x64), checks yt-dlp/ffmpeg, registers Grab helper as a Scheduled Task. Then load unpacked extension.
Chromium and Firefox require opposite MV3 background formats — two manifests:
manifest.json (Chromium — service worker) and manifest.firefox.json (Firefox — background.scripts).
- Open
chrome://extensions - Enable Developer mode
- Load unpacked → select this folder
npm run build— createsdist/firefox/- Open
about:debugging#/runtime/this-firefox - Load Temporary Add-on → select
dist/firefox/manifest.json- …or:
npx web-ext run --source-dir dist/firefox
- …or:
- Signed XPI: download from releases
npm run buildOutputs:
dist/chrome/+mediasniff-chrome-<ver>.zip— Chromium / Chrome Web Storedist/firefox/+mediasniff-firefox-<ver>.zip— Firefox / AMO
- Open a page that plays/loads media
- Click the MediaSniff toolbar icon
- Use Copy / Cmd / Grab / DM / Open on any row
- Footer buttons for bulk copy/export
vsd (Rust, 27 MB) → primary: fast startup, machine-readable progress
↓ (fallback)
N_m3u8DL-RE (C#, .NET) → robust HLS/DASH, resume, ad filtering
↓ (fallback)
yt-dlp (Python) → universal: YouTube, 1000+ sites
↓ (fallback)
ffmpeg (C) → direct remux/copy
All engines receive captured Cookie + Referer + User-Agent headers.
| Permission | Why |
|---|---|
webRequest + <all_urls> |
observe media response URLs + capture Referer/User-Agent/Cookie |
tabs |
scope results per tab and open URLs |
storage |
remember tool choice; persist results across background restarts |
notifications |
download completion notifications |
clipboardWrite |
copy buttons |
npm test
# or: node tests/media.test.js && node tests/integration.test.jstests/media.test.js— detection, labelling, command generation, shell-quoting safety, exportstests/integration.test.js— full capture → detect → persist → command pipeline
GitHub Actions runs npm test + npm run build on every push and PR (.github/workflows/ci.yml).
./mediasniff-check.shRestores repo, rebuilds, installs missing tools, fixes service, runs health check + test download.
HLS/DASH download powered by:
- vsd — Rust stream downloader (fork of clitic/vsd)
- N_m3u8DL-RE — C# stream downloader (fork of nilaoda/N_m3u8DL-RE)
- yt-dlp — universal video downloader
- ffmpeg — media muxing/transcoding
MIT © 2026 chethan62