HLS Downloader

Download HLS streams (.m3u8) as one MP4 — eight parallel connections, automatic retries, master-playlist quality selection. 100% in your browser, nothing uploaded.

No uploadMerges all .ts segmentsOutput: MP4Free

How this HLS stream downloader works

Under the hood, an HLS download is a small state machine. Parse: the playlist is fetched and parsed — master playlists are resolved to their best variant, media playlists are scanned for segment URIs, durations, byte ranges and #EXT-X-KEY entries. Fetch: segments download over up to eight parallel connections, each with automatic retry and timeout handling, while progress reports every completed chunk. Merge: the segments are concatenated in playlist order and remuxed into a standards-compliant MP4 container — TS and fMP4 (CMAF) segments both, with init segments resolved automatically for fMP4 streams.

All three stages run in your browser tab. The segments never leave your machine: they travel from the stream's CDN into memory and out to your disk as one file. There is no upload step, no queue, and no server-side size limit — the ceiling is your device's RAM, and a feature-length movie fits comfortably on a normal laptop.

VOD playlists vs. live windows

HLS serves two content shapes, and knowing which one you have saves time. VOD playlists are fixed: every segment is listed from first to last, #EXT-X-ENDLIST marks the end, and the downloader simply works through the list. Movies, lectures, replays and highlights are all VOD.

Live windows are the opposite: the playlist is rewritten every few seconds, old segments fall off the top, and new ones appear at the bottom while the event runs. A sliding window has no beginning or end to download — which is why still-airing broadcasts belong to the extension's recording mode, not to a playlist downloader. The moment the event ends and the platform publishes a full replay, that replay is a VOD playlist again and this page picks it up without any special handling. Event playlists (#EXT-X-PLAYLIST-TYPE:EVENT) — where segments only get appended — can be downloaded once the event finishes.

If you are debugging a stream instead of saving it, the m3u8 player plays any playlist URL instantly — a fast way to check whether a link is alive before you download it.

Downloading an HLS stream in three steps

1

Grab the playlist URL

DevTools (F12) → Network → filter m3u8 → play → copy the request URL. Master and media playlists both work; long query strings are normal, copy everything.

2

Paste it and start the download

The parser resolves variants and encryption, then eight connections start pulling segments in parallel with live per-chunk progress.

3

Save the merged MP4

When every segment is in, the remuxed MP4 is one click away — a single file that plays and edits like any native recording.

For developers: HLS download specifics worth knowing

A few details decide whether a download succeeds. Byte ranges: playlists may point several #EXT-X-BYTERANGE entries at one URI — these are fetched with Range requests and stitched in order. Relative URIs: segment paths resolve against the playlist's own URL, including nested playlist levels; the parser follows the spec so relocated playlists still work. Discontinuities (#EXT-X-DISCONTINUITY, common when ads were stitched into the stream): segments after a discontinuity are still merged sequentially — if the ad insert changed encoders, you may see a brief glitch at the seam.

Alternatives you may already know: ffmpeg -i playlist.m3u8 -c copy out.mp4 and yt-dlp are excellent command-line HLS downloaders, and curl plus a merge works for simple cases. This page is the same operation with the command line removed: useful on machines where you can't install tools, in restricted corporate environments, or when you just want a progress bar instead of a terminal.

Legal use of an HLS downloader

An HLS downloader is a neutral instrument — the same one your player runs every time you press play. Save what you have the right to keep: your own broadcasts and uploads, public-domain and Creative Commons material, platform-sanctioned downloads, and content the rights holder explicitly makes available. Bypassing DRM, redistributing copyrighted work, or violating a service's terms is on you, not the tool. When in doubt, look for the official download button first.

Streams that block browser downloads?

CORS walls, AES-128 playlists, still-airing broadcasts — the M3U8to extension downloads from inside the page's own context, where those walls don't apply.

Add to Chrome — Free

HLS downloader FAQ

The technical questions, answered straight.

What is an HLS downloader?

An HLS downloader saves videos delivered with HTTP Live Streaming — the protocol behind most web video. An HLS “stream” isn't one file: it is a playlist (.m3u8) plus hundreds of small .ts or fMP4 segments of a few seconds each. The downloader reads the playlist, fetches every segment it references, and merges them into a single MP4. It's the difference between recording your screen while a video plays and simply collecting the video data the player would have collected anyway.

What does multi-threaded downloading mean here?

The downloader opens up to eight connections at once and pulls a different segment over each, instead of requesting chunks one-by-one. Sequential downloading spends most of its time waiting on round-trips; eight parallel connections keep the pipe full, which is why a 300-segment video typically downloads several times faster than playback speed even on a ordinary connection. Failed segments retry automatically on their own connection without stalling the others.

Can it download live HLS streams while they air?

Not while they air — and no honest playlist downloader can, because a live playlist is a moving window that never “ends”. What this tool does perfectly is live stream replays and DVR windows: once the broadcast has ended (or the platform exposes a rolling archive), the playlist describes a fixed set of segments and downloads like any VOD. For capturing a broadcast in real time, use the recording mode of the Chrome extension, which saves the buffered stream as it plays.

How does it handle master playlists with multiple qualities?

HLS master playlists (#EXT-X-STREAM-INF entries) list one child playlist per quality variant — 1080p, 720p, 480p and so on. Paste either level and the downloader resolves it: masters are parsed, and the highest-bandwidth variant is selected automatically. That means one paste always yields the best quality the stream offers, with no quality dropdown to hunt for. Media playlists pasted directly download exactly the quality they describe.

Does it support AES-128 encrypted HLS?

Standard AES-128 playlists are detected before any download starts. Since the keys are usually tied to the original page session, the downloader shows a step-by-step guide for finishing the save with the M3U8to Chrome extension rather than producing a broken, half-decrypted file. DRM systems (Widevine, FairPlay, PlayReady) are a different story entirely and are not supported by design.

Why did my HLS download fail with a CORS or 403 error?

Two common causes. CORS: a browser-based downloader must read segment bytes with JavaScript, and some CDNs refuse cross-origin reads — try the link from a different network, or use the extension on the original page, which is allowed to read the stream in its context. 403 with expiring tokens: many CDN URLs are signed and die within minutes, so copy a fresh playlist URL and convert immediately. The retry logic handles transient timeouts; it cannot revive a token that has already expired.

Is this different from the m3u8 downloader on this site?

Same engine, different front door. The m3u8 downloader is the general-purpose page for playlist links; this HLS downloader page is the technical view — parallel connections, segment structure, master vs. media playlists, live windows — written for developers and stream engineers who want to know exactly what happens under the hood.