Back to rankings

puemos/hls-downloader

TypeScriptpuemos.gitbook.io/hls-downloader/

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

hlshls-streamchromechrome-extensionreactreduxstyled-componentshls-downloaderweb-extensionclean-architectureredux-observablehacktoberfest
Star Growth
Stars
2.6k
Forks
303
Weekly Growth
โ€”
Issues
212
1k2k
May 2018Jan 2021Oct 2023Jul 2026
Artifactsnpmnpm install hls-downloader
README

HLS Downloader

Capture and download HTTP Live Streams (HLS) straight from your browser.
Freeย โ€ขย Openย Sourceย โ€ขย MIT Licensed

Test Coverage

Extension promo tile

Popup screenshot


๐Ÿ“– Table of Contents

โœจ Features

  • Automatic stream discovery Detects HLS playlists on the page the moment you open it. No DevTools sniffing required.
  • Fine-grained quality control Pick any combination of video resolution (240p โ†’ 4K) and audio language/bit-rate before you download, so you never waste bandwidth on the wrong track.
  • 100% local merge with ffmpeg.wasm A WebAssembly build of FFmpeg runs right inside your tab, muxing the chosen audio + video into a single MP4. *โ€ƒNothing is uploaded, keeping your files private.
  • Works everywhere you browse Verified on Firefox, Edge, Chrome, Brave, Arc, and other Chromium-based browsers, on Windows, macOS, and Linux.

๐Ÿ“ฆ Get It

Browser Download / availability
Google Chrome logoย ย Google Chrome Experimental MV3 build available from source (see Development section).
Firefox logoย ย Firefox Get it on Firefox Add-ons or use manual installation
Microsoft Edge logoย ย Microsoft Edge Get it from Edge Add-ons
Brave logoย ย Brave Use manual installation
Arc logoย ย Arc Use manual installation
Opera logoย ย Opera Use manual installation

*For Brave/Arc/etc. download the ZIP from the latest release and follow the manual-install steps below.


๐Ÿ› ๏ธ Installation

Newer versions (โ‰ฅ 4.1.2) ship only a ZIP archive.
Older versions can still be installed from the CRX (see the collapsible notes).

Manual install for versions < 4.1.2 (CRX)
  1. Grab hls-downloader.crx from the corresponding legacy release.
  2. Open chrome://extensions/, enable Developer mode.
  3. Drag and drop the CRX onto the extensions page.
  4. Confirm any prompts.

Google Chrome logo Chrome

  1. Download extension-mv3-chrome.zip from the latest release.
  2. Extract the ZIP to a convenient folder.
  3. Open chrome://extensions/ and enable Developer mode.
  4. Click Load unpacked and select the extracted folder (the one that contains manifest.json).
  5. Enjoy ๐ŸŽ‰

Brave logo Brave

  1. Download extension-mv3-chrome.zip from the latest release.
  2. Extract the ZIP to a convenient folder.
  3. Open brave://extensions/ and enable Developer mode.
  4. Click Load unpacked and select the extracted folder (the one that contains manifest.json).
  5. Enjoy ๐ŸŽ‰

Arc logo Arc

  1. Download extension-mv3-chrome.zip from the latest release.
  2. Extract the ZIP to a convenient folder.
  3. Open Arc Menu โ†’ Extensions โ†’ Manage Extensions (or press Command+T or Ctrl+T and type Manage Extensions), then enable Developer mode.
  4. Click Load unpacked and select the extracted folder (the one that contains manifest.json).
  5. Enjoy ๐ŸŽ‰

Opera logo Opera

  1. Download extension-mv3-chrome.zip from the latest release.
  2. Extract the ZIP to a convenient folder.
  3. Open opera://extensions/ and enable Developer mode.
  4. Click Load unpacked and select the extracted folder (the one that contains manifest.json).
  5. Enjoy ๐ŸŽ‰

Firefox logo Firefox

  1. Opem about:debugging#/runtime/this-firefox.
  2. Click Load Temporary Add-on... and pick the XPI.

For Dear Testers โ€“ concise build/install steps for Firefox & Chromium reviewers.


๐ŸŽฌ Usage

  1. Browse to a page that plays an HLS video and start playback.
  2. Click the HLS Downloader icon โ€“ detected playlists appear in the Sniffer tab.
  3. Choose Select next to a playlist.
  4. Pick your video & audio streams, then press Download.
  5. Grab a coffee โ˜• โ€“ ffmpeg.wasm merges everything and your browser prompts you to save the MP4 when done.

๐Ÿง‘โ€๐Ÿ’ป Development

Clone & Build

Requires Node.js 20+ (includes Corepack) and the zip command.

git clone https://github.com/puemos/hls-downloader.git
cd hls-downloader

# install the pinned pnpm version
corepack enable
corepack prepare pnpm@10.11.0 --activate

pnpm install --frozen-lockfile
pnpm run build    # outputs โ†’ ./dist/, extension-chrome.zip, extension-firefox.xpi

# verify build artifacts then clean up
pnpm run clean

MV2 vs MV3 builds

The default build targets Manifest V2 (Firefox and legacy Chromium workflows). To produce a Manifest V3 bundle for Chromium-based browsers (Firefox does not fully support MV3 background service workers yet):

MV_TARGET=mv3 pnpm run build   # writes manifest v3 + offscreen page to dist/
pnpm run clean                 # optional: remove artifacts after testing

You can generate both flavors at once with pre-named artifacts:

pnpm run build:all          # outputs dist/mv2 + dist/mv3
# zips: extension-mv2-chrome.zip / extension-mv2-firefox.xpi  (MV2 contents at archive root)
#       extension-mv3-chrome.zip                            (MV3 contents at archive root; Chromium only)

For Firefox Add-ons source review, use the exact reproduction steps in AMO_SOURCE_REVIEW.md. Do not upload a stale local source-code.zip; pnpm run publish:firefox creates a fresh source archive from the committed release revision.

Tip: If pnpm is missing, run corepack enable && corepack prepare pnpm@10.11.0 --activate to match the locked toolchain.

Run tests & generate coverage badge:

pnpm test          # unit tests
pnpm test:coverage # combined coverage + badge

Run the local browser e2e smoke test:

pnpm test:e2e:local

This builds the MV3 extension, launches Brave on macOS with the unpacked extension, opens a real online HLS stream with audio/video/WebVTT subtitles, verifies Sniffer, preview, playlist selection, download, and saved .mkv or equivalent media-container output, then removes generated extension artifacts. The downloaded media file stays in a temp directory and the script prints its path so you can review it manually. It is intentionally not part of CI and skips when CI=true. Set E2E_BROWSER=/path/to/Brave Browser for a custom Brave binary path, E2E_HLS_URL=https://.../playlist.m3u8 to override the stream, or E2E_CLEAN_DOWNLOAD=1 to delete the downloaded file after the run.

Live Development

pnpm dev        # watches & rebuilds into dist/
pnpm storybook  # preview popup & design-system components

Project Structure

src/
โ”œโ”€ assets/          # extension manifest & icons
โ”œโ”€ background/      # background scripts
โ”œโ”€ core/            # shared logic & Redux store
โ”œโ”€ design-system/   # UI component library
โ””โ”€ popup/           # React popup UI

๐Ÿค Contributing

We โ™ฅ PRs! See the contributing guide and automation guide.

git checkout -b feature/my-awesome-idea
# ...code...
git commit -am "feat: add awesome idea"
git push origin feature/my-awesome-idea
# open PR ๐ŸŽ‰

๐Ÿ“œ Code of Conduct

TLDR: Be kind This project follows the Contributor Covenant.


๐Ÿšง Build Variants

HLS Downloader is available in multiple build variants to accommodate different distribution requirements:

Store Builds (Firefox Add-ons / Edge Add-ons)

Official store releases include a blocklist that respects copyright holder opt-out requests. This version complies with distribution platform policies and content owner preferences.

Independent Builds

Alternative builds are available for advanced users who prefer complete local control. These "experimental" variants contain no blocklist and allow unrestricted operation:

# MV2 without blocklist (Firefox/Edge manual install)
pnpm run build:mv2:no-blocklist

# MV3 without blocklist (Chrome/Brave/Arc manual install)
pnpm run build:mv3:no-blocklist

# Build all variants at once
pnpm run build:all-variants

Non-blocklist builds are named "experimental unstable nightly beta alpha hls-downloader" and are intended for personal use onlyโ€”not for redistribution on official stores.


๐Ÿคš Disclaimer

This extension is designed for downloading video content that you own or have authorization to access. It is prohibited to use this tool for downloading copyrighted content without permission. Users are solely responsible for their actions, and the developer assumes no liability for user behavior. This tool is provided "as-is" without warranty of any kind.


We respect the intellectual property rights and legitimate interests of all websites and content operators.

If you do not wish this tool to operate on your website, you may submit an opt-out request. We will add verified domains to the project's blocklist in subsequent releases.

How to Submit an Opt-Out Request

  1. Create a new Issue using the "Opt-Out Request" template
  2. Use the title format: [Opt-Out Request] YourDomain.com
  3. Provide the following information for verification:
    • Website Domain (e.g., example.com)
    • Contact Email (for identity verification if necessary)

We commit to honoring legitimate requests and will include verified domains in the blocklist for store-distributed versions. Please note that as an open-source project, update cycles may vary. Thank you for your understanding and cooperation.


๐Ÿ“ License

MIT License โ€“ click to expand
The MIT License (MIT)

Copyright (c) 2025 Shy Alter

More: https://github.com/puemos/hls-downloader/blob/master/LICENSE

Made with โ™ฅ by puemos

Related repositories
FFmpeg/FFmpeg

Mirror of https://git.ffmpeg.org/ffmpeg.git

COtherffmpegvideo
ffmpeg.org
62.3k14k
videojs/video.js

Video.js - open source HTML5 video player

JavaScriptnpmOthervideoplayer
videojs.com
39.8k7.5k
ossrs/srs

SRS is a simple, high-efficiency, real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.

C++MIT Licensertmplive-streaming
ossrs.io
29.1k5.7k
bluenviron/mediamtx

Ready-to-use Media-over-QUIC / SRT / WebRTC / RTSP / RTMP / LL-HLS / MPEG-TS / RTP live media server and media proxy that allows to read, publish, proxy, record and playback real-time video and audio streams.

GoGo ModulesMIT Licensertsprtp
mediamtx.org
19.6k2.3k
ZLMediaKit/ZLMediaKit

WebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT/STUN/TURN server and client framework based on C++11

C++Otherrtsprtmp
docs.zlmediakit.com
17.3k4.1k
video-dev/hls.js

HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.

TypeScriptnpmOtherhlshtml5
hlsjs.video-dev.org/demo
16.8k2.7k
DIYgod/DPlayer

:lollipop: Wow, such a lovely HTML5 danmaku video player

JavaScriptnpmMIT Licensedplayervideo
dplayer.diygod.dev
16.5k2.5k
leandromoreira/digital_video_introduction

A hands-on introduction to video technology: image, video, codec (av1, vp9, h265) and more (ffmpeg encoding). Translations: ๐Ÿ‡บ๐Ÿ‡ธ ๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ‡ฏ๐Ÿ‡ต ๐Ÿ‡ฎ๐Ÿ‡น ๐Ÿ‡ฐ๐Ÿ‡ท ๐Ÿ‡ท๐Ÿ‡บ ๐Ÿ‡ง๐Ÿ‡ท ๐Ÿ‡ช๐Ÿ‡ธ

Jupyter NotebookBSD 3-Clause "New" or "Revised" Licensevideocodec
github.com/leandromoreira/introduction_video_technology
16.3k1.4k
AlexxIT/go2rtc

Ultimate camera streaming application

GoGo ModulesMIT Licenseffmpeghassio
go2rtc.org
13.5k1.2k
owncast/owncast

Take control over your live stream video by running it yourself. Streaming + chat out of the box.

GoGo ModulesMIT Licensevideostreaming-video
owncast.online
11.4k1.2k
cookpete/react-player

A React component for playing a variety of URLs, including file paths, YouTube, Facebook, Twitch, SoundCloud, Streamable, Vimeo, Wistia and DailyMotion

TypeScriptnpmMIT Licensereactmedia
cookpete.github.io/react-player
10.3k1.2k
gwuhaolin/livego

live video streaming server in golang

GoGo ModulesMIT Licenselivestreamgolang
10.2k2k