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
- Repository(opens in a new tab)
github.com/mohamedrepo/smart-media-downloader
- Documentation(opens in a new tab)
- Download release(opens in a new tab)
- Status
- Released
- Last reviewed
- 2026-10-15
Related work
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.