{"id":13591286,"url":"https://github.com/puemos/hls-downloader","last_synced_at":"2026-03-03T21:06:17.288Z","repository":{"id":37701954,"uuid":"131896967","full_name":"puemos/hls-downloader","owner":"puemos","description":"Web Extension for sniffing and downloading HTTP Live streams (HLS)","archived":false,"fork":false,"pushed_at":"2026-01-27T20:42:29.000Z","size":54193,"stargazers_count":2442,"open_issues_count":212,"forks_count":295,"subscribers_count":33,"default_branch":"master","last_synced_at":"2026-01-28T07:40:28.207Z","etag":null,"topics":["chrome","chrome-extension","clean-architecture","hacktoberfest","hls","hls-downloader","hls-stream","react","redux","redux-observable","styled-components","web-extension"],"latest_commit_sha":null,"homepage":"https://puemos.gitbook.io/hls-downloader/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/puemos.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"puemos"}},"created_at":"2018-05-02T19:30:02.000Z","updated_at":"2026-01-27T20:41:21.000Z","dependencies_parsed_at":"2024-01-07T09:41:51.563Z","dependency_job_id":"0e8fef9b-9a9a-4449-8fde-35fb849b3db5","html_url":"https://github.com/puemos/hls-downloader","commit_stats":{"total_commits":256,"total_committers":10,"mean_commits":25.6,"dds":0.46484375,"last_synced_commit":"5ac3e1d0e3cb00dd701e172606b5dbf3f5531e85"},"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/puemos/hls-downloader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puemos%2Fhls-downloader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puemos%2Fhls-downloader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puemos%2Fhls-downloader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puemos%2Fhls-downloader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/puemos","download_url":"https://codeload.github.com/puemos/hls-downloader/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puemos%2Fhls-downloader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30060862,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T18:21:05.932Z","status":"ssl_error","status_checked_at":"2026-03-03T18:20:59.341Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chrome","chrome-extension","clean-architecture","hacktoberfest","hls","hls-downloader","hls-stream","react","redux","redux-observable","styled-components","web-extension"],"created_at":"2024-08-01T16:00:55.530Z","updated_at":"2026-03-03T21:06:17.274Z","avatar_url":"https://github.com/puemos.png","language":"TypeScript","funding_links":["https://github.com/sponsors/puemos"],"categories":["TypeScript","JavaScript","HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"\u003c!-- markdownlint-disable MD041 --\u003e\n\u003ch1 align=\"center\"\u003eHLS Downloader\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  Capture and download \u003ca href=\"https://en.wikipedia.org/wiki/HTTP_Live_Streaming\"\u003eHTTP Live Streams (HLS)\u003c/a\u003e straight from your browser.\u003cbr\u003e\n  \u003cstrong\u003eFree\u0026nbsp;•\u0026nbsp;Open\u0026nbsp;Source\u0026nbsp;•\u0026nbsp;MIT Licensed\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Test Coverage\" src=\"./coverage-badge.svg\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Extension promo tile\" src=\"./store-assets/png/Small-Promo-Tile.png?raw=true\" height=\"150\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Popup screenshot\" src=\"store-assets/jpg/sceenshot-1.jpg?raw=true\" height=\"350\"\u003e\n\u003c/p\u003e\n\n---\n\n## 📖 Table of Contents\n- [Features](#-features)\n- [Get It](#-get-it)\n- [Installation](#️-installation)\n- [Usage](#-usage)\n- [Development](#-development)\n- [Contribution](#-contributing)\n- [Code of Conduct](#-code-of-conduct)\n- [License](#-license)\n\n## ✨ Features\n\n* **Automatic stream discovery**\n  Detects HLS playlists on the page the moment you open it. No DevTools sniffing required.\n* **Fine-grained quality control**\n  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.\n* **100% local merge with `ffmpeg.wasm`**\n  A WebAssembly build of FFmpeg runs right inside your tab, muxing the chosen audio + video into a single MP4.\n  * Nothing is uploaded, keeping your files private.\n* **Works everywhere you browse**  \n  Verified on Firefox, Edge, Chrome, Brave, Arc, and other Chromium-based browsers, on Windows, macOS, and Linux.\n\n---\n\n## 📦 Get It\n\n| Browser | Download / availability |\n| :-- | :-- |\n| \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/e/e1/Google_Chrome_icon_%28February_2022%29.svg\" height=\"14\" alt=\"Google Chrome logo\" /\u003e\u0026nbsp;\u0026nbsp;Google Chrome | Experimental MV3 build available from source (see Development section). |\n| \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/a/a0/Firefox_logo%2C_2019.svg\" height=\"14\" alt=\"Firefox logo\" /\u003e\u0026nbsp;\u0026nbsp;Firefox | [Get it on Firefox Add-ons](https://addons.mozilla.org/en-US/firefox/addon/hls-downloader/) or [use manual installation](#-firefox)|\n| \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/9/98/Microsoft_Edge_logo_%282019%29.svg\" height=\"14\" alt=\"Microsoft Edge logo\" /\u003e\u0026nbsp;\u0026nbsp;Microsoft Edge | [Get it from Edge Add-ons](https://microsoftedge.microsoft.com/addons/detail/hls-downloader/ldehhnlpcedapncohebgmghanffggffc) |\n| \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/9/9d/Brave_lion_icon.svg\" height=\"14\" alt=\"Brave logo\" /\u003e\u0026nbsp;\u0026nbsp;Brave | [Use manual installation](#-brave) |\n| \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/3/37/Arc_%28browser%29_logo.svg\" height=\"14\" alt=\"Arc logo\" /\u003e\u0026nbsp;\u0026nbsp;Arc | [Use manual installation](#-arc) |\n| \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/4/49/Opera_2015_icon.svg\" height=\"14\" alt=\"Opera logo\" /\u003e\u0026nbsp;\u0026nbsp;Opera | [Use manual installation](#-opera) |\n\n\u003csup\u003e*For Brave/Arc/etc. download the ZIP from the [latest release](https://github.com/puemos/hls-downloader/releases) and follow the manual-install steps below.\u003c/sup\u003e\n\n---\n\n## 🛠️ Installation\n\n\u003e **Newer versions (≥ 4.1.2)** ship only a ZIP archive.  \n\u003e Older versions can still be installed from the CRX (see the collapsible notes).\n\n\u003cdetails\u003e\n\u003csummary\u003eManual install for versions \u0026lt; 4.1.2 (CRX)\u003c/summary\u003e\n\n1. Grab `hls-downloader.crx` from the corresponding legacy release.  \n2. Open `chrome://extensions/`, enable **Developer mode**.  \n3. Drag and drop the CRX onto the extensions page.  \n4. Confirm any prompts.\n\n\u003c/details\u003e\n\n### \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/e/e1/Google_Chrome_icon_%28February_2022%29.svg\" height=\"14\" alt=\"Google Chrome logo\" /\u003e Chrome\n1. Download `extension-mv3-chrome.zip` from the [latest release](https://github.com/puemos/hls-downloader/releases).  \n2. Extract the ZIP to a convenient folder.  \n3. Open `chrome://extensions/` and enable **Developer mode**.  \n4. Click **Load unpacked** and select the **extracted folder** (the one that contains `manifest.json`).  \n5. Enjoy 🎉\n\n### \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/9/9d/Brave_lion_icon.svg\" height=\"14\" alt=\"Brave logo\" /\u003e Brave\n1. Download `extension-mv3-chrome.zip` from the [latest release](https://github.com/puemos/hls-downloader/releases).  \n2. Extract the ZIP to a convenient folder.  \n3. Open `brave://extensions/` and enable **Developer mode**.  \n4. Click **Load unpacked** and select the **extracted folder** (the one that contains `manifest.json`).  \n5. Enjoy 🎉\n\n### \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/3/37/Arc_%28browser%29_logo.svg\" height=\"14\" alt=\"Arc logo\" /\u003e Arc\n1. Download `extension-mv3-chrome.zip` from the [latest release](https://github.com/puemos/hls-downloader/releases).  \n2. Extract the ZIP to a convenient folder.  \n3. Open **Arc Menu → Extensions → Manage Extensions** (or press **Command+T** or **Ctrl+T** and type **Manage Extensions**), then enable **Developer mode**.  \n4. Click **Load unpacked** and select the **extracted folder** (the one that contains `manifest.json`).  \n5. Enjoy 🎉\n\n### \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/4/49/Opera_2015_icon.svg\" height=\"14\" alt=\"Opera logo\" /\u003e Opera\n1. Download `extension-mv3-chrome.zip` from the [latest release](https://github.com/puemos/hls-downloader/releases).  \n2. Extract the ZIP to a convenient folder.  \n3. Open `opera://extensions/` and enable **Developer mode**.  \n4. Click **Load unpacked** and select the **extracted folder** (the one that contains `manifest.json`).  \n5. Enjoy 🎉\n\n### \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/a/a0/Firefox_logo%2C_2019.svg\" height=\"14\" alt=\"Firefox logo\" /\u003e Firefox\n1. Opem `about:debugging#/runtime/this-firefox`.\n2. Click **Load Temporary Add-on...** and pick the XPI.\n\n[For Dear Testers](./FOR-DEAR-TESTERS.md) – concise build/install steps for Firefox \u0026 Chromium reviewers.\n\n---\n\n## 🎬 Usage\n\n1. Browse to a page that plays an HLS video and start playback.\n2. Click the **HLS Downloader** icon – detected playlists appear in the **Sniffer** tab.\n3. Choose **Select** next to a playlist.\n4. Pick your video \u0026 audio streams, then press **Download**.\n5. Grab a coffee ☕ – `ffmpeg.wasm` merges everything and your browser prompts you to save the MP4 when done.\n\n---\n\n## 🧑‍💻 Development\n\n### Clone \u0026 Build\n\nRequires Node.js 20+ (includes [Corepack](https://nodejs.org/api/corepack.html)) and the `zip` command.\n\n```bash\ngit clone https://github.com/puemos/hls-downloader.git\ncd hls-downloader\n\n# install the pinned pnpm version\ncorepack enable\ncorepack prepare pnpm@10.11.0 --activate\n\npnpm install --frozen-lockfile\npnpm run build    # outputs → ./dist/, extension-chrome.zip, extension-firefox.xpi\n\n# verify build artifacts then clean up\npnpm run clean\n```\n\n**MV2 vs MV3 builds**\n\nThe 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):\n\n```bash\nMV_TARGET=mv3 pnpm run build   # writes manifest v3 + offscreen page to dist/\npnpm run clean                 # optional: remove artifacts after testing\n```\n\nYou can generate both flavors at once with pre-named artifacts:\n\n```bash\npnpm run build:all          # outputs dist/mv2 + dist/mv3\n# zips: extension-mv2-chrome.zip / extension-mv2-firefox.xpi  (MV2 contents at archive root)\n#       extension-mv3-chrome.zip                            (MV3 contents at archive root; Chromium only)\n```\n\n\u003e Tip: If pnpm is missing, run `corepack enable \u0026\u0026 corepack prepare pnpm@10.11.0 --activate` to match the locked toolchain.\n\nRun tests \u0026 generate coverage badge:\n\n```bash\npnpm test          # unit tests\npnpm test:coverage # combined coverage + badge\n```\n\n### Live Development\n\n```bash\npnpm dev        # watches \u0026 rebuilds into dist/\npnpm storybook  # preview popup \u0026 design-system components\n```\n\n### Project Structure\n\n```text\nsrc/\n├─ assets/          # extension manifest \u0026 icons\n├─ background/      # background scripts\n├─ core/            # shared logic \u0026 Redux store\n├─ design-system/   # UI component library\n└─ popup/           # React popup UI\n```\n\n---\n\n## 🤝 Contributing\n\nWe ♥ PRs! See the [contributing guide](./CONTRIBUTING.md) and [automation guide](./AGENTS.md).\n\n```bash\ngit checkout -b feature/my-awesome-idea\n# ...code...\ngit commit -am \"feat: add awesome idea\"\ngit push origin feature/my-awesome-idea\n# open PR 🎉\n```\n\n---\n\n## 📜 Code of Conduct\n\n**TLDR: Be kind**\nThis project follows the [Contributor Covenant](./CODE_OF_CONDUCT.md).\n\n---\n\n## 🚧 Build Variants\n\nHLS Downloader is available in multiple build variants to accommodate different distribution requirements:\n\n### Store Builds (Firefox Add-ons / Edge Add-ons)\nOfficial store releases include a blocklist that respects copyright holder opt-out requests. This version complies with distribution platform policies and content owner preferences.\n\n### Independent Builds  \nAlternative builds are available for advanced users who prefer complete local control. These \"experimental\" variants contain no blocklist and allow unrestricted operation:\n\n```bash\n# MV2 without blocklist (Firefox/Edge manual install)\npnpm run build:mv2:no-blocklist\n\n# MV3 without blocklist (Chrome/Brave/Arc manual install)\npnpm run build:mv3:no-blocklist\n\n# Build all variants at once\npnpm run build:all-variants\n```\n\nNon-blocklist builds are named \"experimental unstable nightly beta alpha hls-downloader\" and are intended for personal use only—not for redistribution on official stores.\n\n---\n\n## 🤚 Disclaimer\n\nThis 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.\n\n---\n\n## 🚫 Copyright Protection and Opt-Out Policy\n\nWe respect the intellectual property rights and legitimate interests of all websites and content operators.\n\nIf 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.\n\n### How to Submit an Opt-Out Request\n\n1. Create a new **[Issue](https://github.com/puemos/hls-downloader/issues/new?template=opt-out-request.yml)** using the \"Opt-Out Request\" template  \n2. Use the title format: `[Opt-Out Request] YourDomain.com`  \n3. Provide the following information for verification:\n   - **Website Domain** (e.g., `example.com`)  \n   - **Contact Email** (for identity verification if necessary)\n\nWe 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.\n\n---\n\n## 📝 License\n\n\u003cdetails\u003e\n\u003csummary\u003eMIT License – click to expand\u003c/summary\u003e\n\n```text\nThe MIT License (MIT)\n\nCopyright (c) 2025 Shy Alter\n\nMore: https://github.com/puemos/hls-downloader/blob/master/LICENSE\n```\n\n\u003c/details\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eMade with ♥ by \u003ca href=\"https://github.com/puemos\"\u003epuemos\u003c/a\u003e\u003c/em\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuemos%2Fhls-downloader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpuemos%2Fhls-downloader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuemos%2Fhls-downloader/lists"}