English · 简体中文
A fast download manager for Chrome and Edge that runs entirely in your browser: multi-connection downloads with pause and resume, one-click downloads of web videos (MP4, HLS/M3U8, separate audio and video tracks), saving pages and batch downloads.
The extension speaks English, 简体中文, Français, 日本語 and 한국어, following your browser's language.
| “Download video” on a web video | Toolbar popup |
|---|---|
![]() |
![]() |
More screenshots: batch download · dark mode
| Feature | Details |
|---|---|
| Multi-connection downloads | The first request doubles as a probe. Files that support Range requests are split into parts downloaded in parallel; when one connection finishes early it takes over half of the largest remaining part, so a download never ends on a single slow connection. |
| Pause and resume | Data is written in 4 MB pieces to the extension's private storage (OPFS). Downloads continue after a pause, a network drop, a crash or a browser restart. ETag, Last-Modified and size are checked, and the download starts over if the file changed on the server. |
| Robust connections | Dropped connections reconnect and continue from where they stopped; a connection that receives nothing for 15 seconds is restarted; fewer connections are used when a server limits them. |
| Web video detection | Finds the MP4/WebM/FLV files, HLS (M3U8) streams and separate audio/video tracks that a page plays. The toolbar icon shows how many were found. |
| “Download video” button | Hover over a video and pick a quality from the button in its corner. Works for players in iframes and in full screen. |
| HLS (M3U8) | Reads multi-quality master playlists; supports AES-128 encrypted segments, fMP4 segments, byte ranges and separate audio renditions. Streams are remuxed into a standard MP4 without re-encoding; codecs that can't be remuxed (such as HEVC) are saved as TS. |
| Live recording | Records a live stream from now on until you click “Stop recording and save”. |
| Merging separate tracks | Video and audio tracks fetched separately (fragmented or regular MP4) are merged into one MP4, keeping timestamps and A/V sync. |
| Browser download takeover | Downloads the browser starts (archives, installers, documents, videos…) are handed to Shuttle DM. The engine first checks it can fetch the same file; if not, the browser carries on, so no download is lost. |
| Referer and cookies | Requests carry the Referer/Origin of the page the video came from, plus its cookies. Referer rules only apply to the extension's own requests. |
| Saving pages | As a single MHTML file (with images and styles, opens offline) or as an HTML snapshot. |
| Batch download | Lists every link, image, audio and video on the page or in your selection, with type filters and wildcard search. |
| Download manager | Categories, search, sorting, context menu and keyboard shortcuts; the details panel shows each connection live. |
| Also | Global speed limit, queue, folders by file type, notifications, dark mode, five languages. |
Chrome Web Store and Edge Add-ons links will be added here once the listings are approved. Until then, install it from this repository:
- Download
shuttle-dm-<version>.zipfrom Releases and unzip it, or clone this repository and use theextensionfolder. - Open
chrome://extensions(edge://extensionsin Edge) and turn on Developer mode. - Click Load unpacked and choose the folder that contains
manifest.json. - Pin the extension to the toolbar so you can see when videos are found.
It needs Chrome 116 or later; Edge, Brave and other Chromium browsers work too.
Web videos
- Play the video, click the toolbar icon, pick a quality under “On this page” and click Download.
- Or hover over the video and click Download video in its corner.
- Or right-click the video and choose Download this video or audio with Shuttle DM.
If nothing shows up, let the video play for a few seconds: many sites only request the stream after playback starts.
Files
- Right-click a link and choose Download link with Shuttle DM.
- Click New download in the manager or the popup and paste one or more links (one per line;
.m3u8addresses work too). - With Take over browser downloads on, just click download links as usual.
Download manager (Alt+Shift+D)
| Action | How |
|---|---|
| Pause / resume | Select and press Space, or double-click an unfinished download |
| Open a file | Double-click a finished download, or press Enter |
| Delete | Select and press Delete; you can also delete the file from your computer |
| Select several | Ctrl/⌘-click, Shift-click, Ctrl/⌘+A |
| New download | Ctrl/⌘+N |
| More | Right-click: show in folder, copy link, open source page, download again… |
Settings: connections per download, simultaneous downloads, speed limit, retries, subfolder, folders by file type, the video button, M3U8 output format (MP4/TS), which downloads to take over, and sites to leave alone.
Web page / player Background service worker
┌──────────────────┐ webRequest ┌───────────────────────────────┐
│ <video>, hls.js, │ ────────────────▶│ detects video/audio/HLS/tracks │
│ download links │ │ context menus, takeover │
│ content.js: │ ◀── messages ──▶ │ declarativeNetRequest: sets │
│ “Download video” │ │ Referer/Origin on its own │
└──────────────────┘ │ requests │
└───────────────┬───────────────┘
Popup / manager ◀── BroadcastChannel (live progress) ─┐ │ messages
│ ▼
┌───────────────────────────────┐
│ Offscreen document: engine │
│ multi-connection Range │
│ downloads, dynamic splits │
│ HLS segments + AES-128 │
│ mux.js: TS → fMP4 │
│ MP4 muxer: fMP4 / tracks → │
│ standard MP4 (moov first) │
│ pieces stored in OPFS │
└───────────────┬───────────────┘
│ Blob URL
▼
chrome.downloads saves the file
- The engine runs in an offscreen document, so it isn't stopped when the service worker sleeps; it closes itself after 5 idle minutes.
- Downloaded data goes to the extension's private file system first. When a download finishes, the pieces are joined into a disk-backed Blob (not held in memory), saved through
chrome.downloads, and the temporary data is removed. - The MP4 muxer (
extension/common/mp4.js) readsmoof/trunboxes or regular sample tables, writes a newmoov(with edit lists to keep audio and video in sync) and references the media data as Blob slices.
Some limits come from the browser itself:
- Connections: browsers open at most 6 connections to one HTTP/1.1 server (the page's own requests included), so the default is 6 per download. HTTP/2 servers don't have this limit.
- Disk space: data is kept in the extension's storage until the download finishes and is then copied to your downloads folder, so large files temporarily need about twice their size.
- DRM: videos protected by Widevine, FairPlay or PlayReady (most paid streaming services) can't be downloaded. Shuttle DM says so and does not try to get around it.
- YouTube: not supported.
- DASH:
.mpdmanifests can't be downloaded directly, but the audio and video tracks a player fetches are detected and merged. - Codecs: TS → MP4 supports H.264 + AAC; HEVC/H.265, AC-3 and others are saved as TS (VLC and PotPlayer play them).
- Takeover: downloads that need a form submission (POST) or a one-time token can't be requested again; the browser then finishes them itself. Downloads in incognito windows are not taken over.
- Service workers on pages: a few sites fetch video through their own service worker; the browser doesn't tie those requests to the tab, so they may not be detected.
Please only download content you have the right to save, and follow the terms of the websites you use.
Shuttle DM has no accounts, analytics or ads, and nothing leaves your computer. See the privacy policy.
extension/ the extension (this folder is what you load or package)
├── manifest.json
├── _locales/ translations: en, zh_CN, fr, ja, ko
├── background/ service worker: messages, menus, media detection, takeover, Referer rules
├── engine/ download engine (offscreen document): HTTP, HLS, OPFS storage, speed limit
├── common/ shared code: MP4 muxer, M3U8 parser, TS probe, detection rules, i18n
├── content/ the “Download video” button and panel
├── ui/ popup, download manager, settings, batch download page
└── icons/
tests/ test server, unit tests and browser tests (see tests/README.md)
store/ store listing texts, privacy answers and images
scripts/ build-zip.sh (store package), make-icons.py
- Load
extension/with Load unpacked; reload it fromchrome://extensionsafter changes. - Tests: see tests/README.md.
- Translations live in
extension/_locales/<locale>/messages.json. To add a language, copyen/messages.json, translate everymessage, add the locale toLOCALESinextension/common/i18n.js, and runnpm run test:unitintests/— it checks that every locale has every message with the same placeholders. - Package for the stores:
bash scripts/build-zip.shcreatesdist/shuttle-dm-<version>.zip.
MIT, see LICENSE. Third-party components:
- mux.js (Apache License 2.0), see
extension/engine/vendor/mux.js.LICENSE - Barlow Semi Condensed font (SIL Open Font License 1.1), see
extension/ui/fonts/OFL.txt


