Skip to main content
ReleasedBrowser Extensions

Smart Media Downloader

A Chrome extension with a multi-connection download engine, a persistent queue and subtitle support, built to work only where downloading is genuinely authorised and to refuse everything else explicitly.

A versioned download is available for this project.

The problem

Browser downloads of large media files are slow and fragile: a single connection, no resume when the browser closes, and a failed download that starts over from zero. Most downloader extensions solve this by offering to grab whatever is behind a protected player, which is both legally dubious and unreliable, and which frequently breaks when the platform changes.

The approach

A downloader that splits a file into byte ranges and fetches them concurrently, with a queue persisted in IndexedDB so downloads survive closing the popup and can resume after a browser restart. The compliance boundary is drawn in code rather than in documentation: protected media is refused at the engine level, the popup never shows controls for it, and host access is requested per-origin only when the user actually starts a download.

What is implemented

  • Multi-connection download engine with selectable concurrency, defaulting to eight connections
  • Range support probing with automatic single-stream fallback when a server does not support ranges
  • Failed-chunk retry with exponential backoff
  • Download queue with pause, resume, cancel, retry, remove and reorder
  • Queue persisted in IndexedDB, continuing while the popup is closed and resuming after a browser restart
  • Per-connection progress display alongside overall percentage, speed and estimated time remaining
  • Subtitle management with multi-language selection and local WebVTT-to-SRT conversion
  • Quality table showing only legitimately available variants
  • Deliberate refusal of DRM-protected and encrypted streams, detected through use of the Encrypted Media Extensions API
  • Deliberate refusal of segmented players that expose no downloadable file, with an explanation shown instead
  • Internet Archive support through the archive’s documented public metadata API and official download endpoints, with lending-restricted items refused
  • Per-origin optional host permissions requested only on user action
  • URL validation rejecting non-HTTP schemes, embedded credentials and private-network targets
  • Automated test suites covering the engine logic, the archive adapter, subtitle conversion and URL validation

Current status and limitations

  • Multi-connection mode needs the server to advertise byte-range support; otherwise it silently falls back to a single stream.
  • Quality variants beyond the original file exist only where a source adapter exposes them — no transmuxing or transcoding is performed.
  • Partial chunk progress is not persisted, so a paused chunk restarts from its beginning rather than from its last byte.
  • It cannot download from streaming players or protected media by design. That is a deliberate restriction, not a gap to be closed later.
  • No licence file is published.
  • No CI workflow, and one of its documented test counts is out of date relative to the current test files.

Technology

  • Chrome Manifest V3
  • TypeScript
  • React
  • Tailwind CSS
  • Vite
  • IndexedDB
  • Vitest

Links


Status
Released
Last reviewed
2026-10-15

Have a similar problem?

If this is close to something you are dealing with, describe your situation and we will tell you whether it is a good fit.