finds.dev← search

// the find

puemos/hls-downloader

★ 2,737 · TypeScript · MIT · updated Oct 2026

Web Extension for sniffing and downloading HTTP Live streams (HLS)

A browser extension that sniffs HLS (.m3u8) streams on a page and lets you pick quality/audio tracks, then muxes them into an MP4/MKV locally via ffmpeg.wasm. Built for people who want to grab video off sites that stream via HLS without a server-side service doing the work — the use case is explicitly scoped to content you have rights to download.

The core logic (entities, use-cases, redux-observable epics) is split into its own package with no dependency on browser extension APIs, so the muxing/parsing/decryption pipeline is unit- and integration-tested against a real local HLS server fixture rather than mocked browser internals. Large-file handling is taken seriously: disk-backed OPFS storage plus a dedicated mux worker/protocol exist specifically so merging doesn't blow up in-memory on long streams, with IndexedDB kept as a fallback for older browsers. It ships both MV2 and MV3 builds from one source tree instead of picking one manifest version and leaving Firefox or Chrome half-supported, and there's a real AES-based decryptor for encrypted HLS segments rather than only handling the unencrypted case. CI runs coverage reporting and dependency patching (dependabot + a committed patch for a vulnerable transitive dep), so it's not a drive-by project.

Chrome has no store listing at all — users have to download a zip and load it unpacked, which is real adoption friction for the browser with the largest HLS-streaming-site userbase, and the README doesn't explain why (likely a MV3/store-review issue worth digging into before relying on this). MV3 needs an offscreen document to run ffmpeg.wasm because service workers can't host the APIs it needs, which is extra plumbing that's easy to get wrong and a likely source of Chromium-only bugs. The project ships an official 'no-blocklist' build variant alongside the rights-holder opt-out mechanism in the same repo — legally that's a strange thing to maintain, since it's explicitly pitched as a way around the opt-out list you just told people you'd honor. There's also a known-but-unfixed rough edge called out in the README itself: downloads finalized by an older extension version can OOM and the fix is 'delete it and redownload,' not an actual migration.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →