A video downloader that doesn't watch you back.
A Chrome extension that sees past <video> tags — into HLS playlists, DASH manifests, AES‑128 encrypted segments, and cross‑origin iframe embeds — and pulls a single offline file out the other side. Free. No sign‑in. No analytics. Nothing leaves your browser except the segments it takes to download what you asked for. Built for journalists, researchers, educators, and engineers who need what they're watching to stay watchable.
Built for the hard cases
other downloaders quietly skip.
Plain .mp4 files are easy. The extension goes after what everybody else leaves on the page: adaptive streams, encrypted segments, cross‑origin players, and authenticated embeds.
HLS & DASH, parsed in the browser
Master playlists and media playlists. .m3u8 and .mpd. Adaptation sets, representations, segment templates, and timelines. Pick a quality; the extension fetches every segment, handles continuity, and writes one file.
AES‑128 CBC, decrypted natively
When a playlist declares #EXT-X-KEY, the extension fetches the key, reads the IV, and decrypts each segment through the browser's Web Crypto API — no WASM, no ffmpeg, no server.
Cross‑origin players
Classifies embeds from Medius, Vimeo, Mux, Wistia, Brightcove, and generic /embed/, /player/, /video/ paths — then resolves their manifests.
JWT + cookie forwarding
Extracts JWT tokens from iframe query strings and pulls session cookies via chrome.cookies. Authenticated streams are fetched with your existing credentials.
Detects, never circumvents
Surfaces Widevine, PlayReady, and FairPlay markers in the manifest and warns clearly. Protected content is identified — not broken.
Pause, resume, cancel
Segment‑level progress: SEG 42/128 · 33% · 2.4 MB/s · 1m left. Pause a 200‑segment download, switch networks, resume where you left off.
MutationObserver built in
React, Vue, Svelte, and any lazy‑loaded page: the detector re‑scans when new <video> elements or iframes appear. No refresh required.
Local‑only, no telemetry
No analytics. No accounts. No third‑party network calls. Every parse, fetch, decrypt, and assembly happens inside your browser.
From click to file
in six deliberate stages.
The extension is six cooperating components — content detector, service worker, network layer, manifest parsers, segment pipeline, and a popup UI. Each stage does one thing.
// content/detector.js — runs in every frame at document_idle SCAN ── <video> · og:video · JSON‑LD VideoObject · data‑src · <object> · <iframe> CLASSIFY ── host match (medius, vimeo, mux, wistia, brightcove) + path heuristics OBSERVE ── MutationObserver re‑scan on DOM mutation // background/service-worker.js — MV3 coordinator INTERCEPT ── chrome.webRequest.onHeadersReceived → build per‑tab manifest map RESOLVE ── iframe URL → captured manifest · or fetch embed HTML · parse AUTH ── extract JWT(query) + chrome.cookies.getAll(origin) → headers EXPAND ── fetch master .m3u8 / .mpd → hls-parser / dash-parser DETECT ── Widevine · PlayReady · FairPlay UUIDs → DRM warning // utils/segment-downloader.js — parallel fetch + decrypt FETCH ── parallel segment GETs (with retry, backoff) DECRYPT ── AES‑128 CBC via crypto.subtle (per segment, per IV) ASSEMBLE ── Blob concat → chrome.downloads.download() REPORT ── postMessage segment progress → popup (pause · resume · cancel)
Built for people who need video
to stay reachable.
Journalists & researchers
Archive primary‑source video before it disappears behind a paywall, a takedown, or a broken CDN. Keep a durable record you can cite, quote, and re‑review offline.
Educators & learners
Pull down training sessions, conference recordings, and university lectures for offline review. Field work, flights, rural bandwidth — the video travels with the learner.
Creators & production teams
Reclaim your own streams and embeds as source files for editing, captioning, highlight reels, and multi‑platform redistribution. Your content, your archive.
Compliance & legal
Capture webinars, depositions, regulatory briefings, and public hearings as evidence. Timestamps, sources, and the stream exactly as it was delivered.
Accessibility workflows
Download once; transcribe, caption, translate, and re‑time locally. Works with tools like Whisper and ffmpeg without depending on a platform's accessibility roadmap.
Engineers & QA
Reproduce playback bugs from real HLS and DASH sources. Inspect segment boundaries, IVs, codec fingerprints. Debug adaptive bitrate logic against actual production manifests.
Load unpacked.
Done.
No build step. No package manager. No account. Clone, load, use. The Chrome Web Store listing is in review.
Get the source
Download the latest release zip, or clone the repository.
git clone https://github.com/ChiefInnovator/videodownloader.git
Open Chrome extensions
Navigate to the extensions page and enable Developer mode.
chrome://extensions/
Load unpacked
Click Load unpacked, select the videodownloader/ directory. The fire‑orange play icon appears in your toolbar.
Use it
Navigate to a page with video. Click the toolbar icon. Download direct videos, or click Resolve Stream on iframe embeds to expand HLS/DASH manifests and pick quality.
Use it the way it was built.
Video Downloader exists because legitimate content keeps getting harder to save — conferences that vanish, training portals that expire, courses that lock, journalism that gets taken down. This tool is for video you are authorized to access and have a reason to keep.
It does not attempt to break Widevine, PlayReady, or FairPlay. DRM is detected and respected. Respect copyright, platform terms of service, and the rights of creators. When in doubt, ask permission.
Questions, answered.
Can Video Downloader download AES‑128 encrypted HLS streams?
Yes. When a master or media playlist declares AES‑128 encryption via #EXT-X-KEY, the extension fetches the key URI, reads the IV, downloads each segment, and decrypts using AES‑CBC through the browser's native Web Crypto API. Decrypted segments are concatenated into a single .ts file you can play in VLC or mpv, or remux to MP4 with ffmpeg -i input.ts -c copy output.mp4.
Does it work with cross‑origin iframe embeds?
Yes. The extension scans every <iframe> on the page, classifies each one by domain and path (Medius, Vimeo, Mux, Wistia, Brightcove, and generic /embed/, /video/, /player/ paths), and resolves streams by combining network‑level manifest capture with embed‑page parsing. JWT tokens from the iframe URL and session cookies from the origin are forwarded on manifest, segment, and key requests so authenticated streams just work.
Can it bypass Widevine, PlayReady, or FairPlay DRM?
No. Video Downloader detects DRM‑protected content and clearly warns the user that it cannot be downloaded. The extension respects content protection — it does not attempt to circumvent Widevine, PlayReady, FairPlay, or any other DRM system. It is intended for legitimate offline viewing of content you are authorized to access.
Does it support DASH (.mpd) streams?
Yes. The extension parses DASH Media Presentation Description (.mpd) manifests — adaptation sets, representations, segment templates, and timelines — to enumerate available qualities and download the chosen representation as a single file.
What browsers does it support?
Any Chromium‑based browser with Manifest V3 support: Google Chrome 114+, Microsoft Edge 114+, Brave, Arc, Vivaldi, Opera, and similar. Firefox is not currently supported.
Does it collect data, analytics, or telemetry?
No. Video Downloader has no analytics, no telemetry, and no third‑party network calls. All processing — manifest parsing, segment fetching, decryption, and assembly — happens locally in your browser. There is no account, no sign‑in, and nothing is sent to any server owned by the developer.
How do I convert the downloaded .ts file to MP4?
Use ffmpeg. A fast, lossless remux: ffmpeg -i input.ts -c copy output.mp4. This repackages the MPEG‑TS container into MP4 without re‑encoding, so it finishes in seconds and preserves original quality.
Who built this?
Video Downloader was built by Rich Crane, a Microsoft Most Valuable Professional, founder and Chief AI Officer of MILL5, and host of the Inventing Fire with AI podcast. It is part of the Inventing Fire with AI initiative exploring what can be built with AI‑assisted development.
Save what you're
actually watching.
Free. No account. No telemetry. Works on any Chromium browser.