# N_m3u8DL-RE: a cross-platform DASH, HLS and MSS stream downloader

> N_m3u8DL-RE is a C# command-line downloader for MPD, M3U8 and ISM streams, including live DASH and HLS. It is aimed at users who already have a stream URL and want the segments on disk, with decryption and muxing handled by external tools.

**nilaoda/N_m3u8DL-RE** — Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 

- Repository: https://github.com/nilaoda/N_m3u8DL-RE
- Stars: 8,827 · Forks: 882
- Language: C#
- License: MIT
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/nilaoda-n-m3u8dl-re

## What N_m3u8DL-RE does that a plain HTTP client cannot

A manifest is not a file. An MPD, M3U8 or ISM document is a description of where the media lives: a list of segment URLs, sometimes thousands of them, split across separate video, audio and subtitle tracks, each with its own codec, resolution, bandwidth and language. Fetching the manifest with curl gets you a text file. N_m3u8DL-RE parses it, presents the tracks, downloads the segments, and hands the result to a muxer. The README describes it as a cross-platform DASH/HLS/MSS download tool that supports VOD and live (DASH/HLS). The repository topics list dash, ffmpeg, hls, ism, live, m3u8, m3u8-downloader, mpd and recorder. The audience is narrow on purpose: people who already know the stream URL and need the bytes, not a browser extension that sniffs traffic. If you cannot produce a manifest URL, this tool has nothing to work with.

## How the pipeline works: parse, select, download, decrypt, mux

The flow is visible in the option list. The input argument is a link or a file. The program parses it and, unless --auto-select is passed, asks you to choose tracks. Selection is where the per-track metadata matters: --save-pattern exposes variables including <SaveName>, <Id>, <Codecs>, <Language>, <Resolution>, <Bandwidth>, <MediaType>, <Channels>, <FrameRate>, <VideoRange>, <GroupId> and <Ext>, which is a direct reflection of what the parser extracts from the manifest. Downloads run with --thread-count, defaulting to the machine's CPU thread count, and each segment is retried up to --download-retry-count times, default 3. Segments land in --tmp-dir and the output goes to --save-dir under --save-name. Decryption is not implemented in-process: --key takes KID:KEY pairs or a single KEY, and --decryption-engine chooses between FFMPEG, MP4DECRYPT and SHAKA_PACKAGER, defaulting to MP4DECRYPT. Muxing is likewise external, either the program's own merge or ffmpeg via -M, --mux-after-done. The README points to "--morehelp mux-after-done" for details. That split is the design: N_m3u8DL-RE orchestrates, and the heavy media tools do what they already do well.

## Installing N_m3u8DL-RE and a first real download

The project ships binaries through GitHub releases; the README does not document a package manager for Windows or macOS, so the release page is the starting point. Two caveats appear in the README. On older Windows, the built-in terminal may not support the program, and the suggested workaround is to run it inside cmder. On Arch Linux and its derivatives, the README points to two AUR packages, n-m3u8dl-re-bin and n-m3u8dl-re-git, and notes that the source is not maintained by the author. Those install like this:

```bash
yay -Syu n-m3u8dl-re-bin
```

For the development build, the README gives the parallel command:

```bash
yay -Syu n-m3u8dl-re-git
```

Once the binary is on your PATH, the smallest useful invocation takes the manifest URL as its only argument:

```bash
N_m3u8DL-RE <input>
```

Without --auto-select the program stops and asks which tracks to keep, which is the point at which you can see the resolutions, bandwidths and languages it parsed. To skip that prompt and take the best track of each type, add the flag:

```bash
N_m3u8DL-RE <input> --auto-select --save-dir <save-dir> --save-name <save-name>
```

If the manifest is encrypted, supply the key and point the program at a decryption binary. The README shows --key accepting either KID:KEY pairs or a bare KEY when the KID is the same throughout:

```bash
N_m3u8DL-RE <input> --key KID1:KEY1 --key KID2:KEY2 --decryption-binary-path <PATH>
```

For a stream that needs a cookie, the README's example passes headers directly:

```bash
N_m3u8DL-RE <input> -H "Cookie: mycookie" -H "User-Agent: iOS"
```

What you should see is a progress display for each selected track, then output files in the save directory named according to --save-name or --save-pattern. If you only want to inspect the manifest without downloading, --skip-download exists for that.

## Live recording is a different mode with its own flags

VOD and live are not the same job, and the option list reflects that. For live streams the README offers --live-perform-as-vod to treat the stream as a VOD download, --live-real-time-merge to merge while recording, --live-keep-segments to retain the segments when real-time merging is on (default true), and --live-pipe-mux to pipe through ffmpeg into a TS file during recording. Refresh behaviour is tunable through --live-wait-time, which sets the playlist refresh interval manually, and --live-take-count, which sets how many segments are fetched on the first pass and defaults to 16. A recording can be bounded with --live-record-limit in HH:mm:ss. Two smaller flags exist for edge cases: --live-fix-vtt-by-audio uses the audio file's start time to correct VTT subtitles, and --live-wait-time is the only documented knob for refresh cadence, which means a stream whose playlist updates on an unusual schedule needs manual tuning rather than automatic adaptation. The README does not describe how the program decides between the available live modes, so the choice is yours to make per stream.

## Where N_m3u8DL-RE is the wrong tool

The README answers bug reports with a specific request: first confirm you are on the latest version, and if you are on a release build, try the latest automatic build from the Actions page before asking. That is a fair policy, but it tells you something about the project's shape. The most recent release listed is v0.6.0-beta, and the two before it are v0.5.1-beta and v0.5.0-beta. Beta is in the version string, not just the release notes. If your workflow requires a stable interface that will not change under you, that naming is a signal to test against a pinned build. There are other mismatches. The tool is a command line, and the README does not document a GUI; anyone who needs one is looking at the wrong project. It does not find stream URLs for you, so it is useless against a site whose manifest you cannot extract. It does not implement DRM itself: --key expects you to already have the key, and decryption is delegated to mp4decrypt, shaka-packager or ffmpeg, so a Widevine-protected stream without keys is out of scope. And on older Windows the README itself warns the terminal may not support the program, which makes cmder a prerequisite rather than an option.

## What N_m3u8DL-RE does not replace: ffmpeg and yt-dlp

The obvious alternative depends on what you are actually doing. If your goal is to fetch a page's video without knowing the manifest URL, yt-dlp is the different approach: it resolves the page, applies site-specific extractors, and hands you a file, whereas N_m3u8DL-RE starts from a manifest you supply and stays inside the DASH, HLS and ISM formats. If your goal is to remux, transcode or concatenate media you already have, ffmpeg is the tool, and N_m3u8DL-RE already depends on it for muxing through -M, --mux-after-done and for the FFMPEG decryption engine. The overlap is real but the entry points differ: yt-dlp knows about sites, N_m3u8DL-RE knows about manifests. A workflow that needs both is normal, using yt-dlp to discover and N_m3u8DL-RE to pull a specific track with a specific --save-pattern. The README does not claim to replace either, and the repository topics list ffmpeg as a topic rather than positioning against it.

## Licence, maintenance and the cost of upgrading

The project is MIT licensed, which permits commercial and private use, modification and redistribution provided the copyright notice and permission notice are kept. That is a permissive licence and the usual obligations apply; this is not legal advice and the LICENSE file in the repository is the authority. On maintenance, the last push to the default branch was on 2026-07-03, and the newest release in the list is v0.6.0-beta from 2026-06-28. The repository is not archived. The README's own bug-report guidance tells users to check the Actions page for automatic builds, which suggests fixes can land between tagged releases. For an adopter, that means two upgrade paths exist: pinned release binaries, or the rolling automatic builds. The first is reproducible and the second is current. Given that the version string carries beta, pinning a release and testing the next one separately is the lower-risk route. There is no documented migration guide between versions, so any change in option behaviour has to be caught by reading the release notes or by re-running a known stream after upgrading.

## Conclusion

N_m3u8DL-RE fits engineers and archivists who have a manifest URL and want it on disk: it handles DASH, HLS and ISM, live and VOD, and delegates decryption and muxing to mp4decrypt, shaka-packager or ffmpeg. It is the wrong tool if you want a GUI, if you expect it to find the stream URL for you, or if you need a stable API rather than a command line. Before adopting it, verify the ffmpeg and mp4decrypt paths on your machine with --ffmpeg-binary-path and --decryption-binary-path, and confirm your target manifest parses by running with --skip-download first.

## FAQ

### How do I install N_m3u8DL-RE on Windows or macOS?

The README does not document a Windows or macOS package manager; binaries are distributed through the GitHub releases page. On older Windows the README warns the built-in terminal may not support the program and suggests running it in cmder instead.

### How do I use N_m3u8DL-RE?

Pass a manifest URL as the input argument, for example N_m3u8DL-RE <input>. Without --auto-select the program prompts you to pick tracks; with it, the best track of each type is chosen automatically.

### Can N_m3u8DL-RE download live streams?

Yes. The README states it supports VOD and live for DASH and HLS, with flags such as --live-real-time-merge, --live-pipe-mux, --live-wait-time and --live-record-limit controlling how the recording is merged and how long it runs.

### How do I install N_m3u8DL-RE on macOS?

The README does not document a macOS package manager or install steps; the releases page is the only distribution channel it points to. It also notes that on Arch Linux the AUR packages are not maintained by the author.

### How do I install N_m3u8DL-RE?

On Arch Linux and its derivatives the README gives yay -Syu n-m3u8dl-re-bin for the release build and yay -Syu n-m3u8dl-re-git for the development build, both from the AUR and not maintained by the author. For other platforms it points to the GitHub releases page.

## Sources

- [Issues](https://github.com/nilaoda/N_m3u8DL-RE/issues)
- [License: MIT](https://github.com/nilaoda/N_m3u8DL-RE/blob/main/LICENSE)
- [nilaoda/N_m3u8DL-RE on GitHub](https://github.com/nilaoda/N_m3u8DL-RE)
- [README](https://github.com/nilaoda/N_m3u8DL-RE/blob/main/README.md)
- [Releases](https://github.com/nilaoda/N_m3u8DL-RE/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/nilaoda-n-m3u8dl-re
