> ## Documentation Index
> Fetch the complete documentation index at: https://docs.m3u8.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# M3U8 Downloader Desktop

> A powerful desktop application for downloading M3U8 video streams with ease.

<Tip>
  Video downloads are disabled by default on some sites. Follow the tutorial
  below to enable support for those sites.
</Tip>

## Preview

<video controls className="w-full aspect-video rounded-xl" src="https://mintcdn.com/hello-1cade0c7/OkGyGNOo-sB3bUH4/assets/v2.mp4?fit=max&auto=format&n=OkGyGNOo-sB3bUH4&q=85&s=d780f8e1c1bd1fb8fd6d242caf10c6b0" data-path="assets/v2.mp4" />

## Download

### Windows

[Download M3U8 Downloader Desktop for Windows](https://github.com/CodeCodeWithMe/m3u8-downloader-desktop/releases/tag/v0.2.0)

### macOS

Coming soon...

### Linux

Coming soon...

## What It Does

M3U8 Downloader Desktop helps you download or record video streams on desktop.

* Paste an M3U8, MP4, or page URL
* Capture hidden stream URLs from the built-in browser
* Download normal videos or record live streams
* Inspect failed tasks and retry with the right headers

## Quick Start

Most users only need one of these two methods.

### Method 1: Paste a URL

Use this when you already have an M3U8, MP4, or page URL.

<Steps>
  <Step title="Step 1">
    Click <code>Add download</code>.
  </Step>

  <Step title="Step 2">
    Paste the URL. Add Cookie only if the site requires login.
  </Step>

  <Step title="Step 3">
    Click <code>Add to queue</code> and wait for the task to start.
  </Step>
</Steps>

Best for:

* Known media URLs
* Page URLs handled by yt-dlp
* Fast one-off downloads

### Method 2: Capture from the built-in browser

Use this when the real media URL is hidden.

<Steps>
  <Step title="Step 1">
    Open <code>Capture view</code>.
  </Step>

  <Step title="Step 2">Open the target page and play the video.</Step>

  <Step title="Step 3">
    Find the detected stream in the capture list and add it to the queue.
  </Step>
</Steps>

Best for:

* Pages that load the stream only after playback
* Sites with hidden M3U8 URLs
* Cases where desktop and mobile User-Agent return different results

## Which Method Should You Use?

| Situation                            | Recommended method         |
| ------------------------------------ | -------------------------- |
| You already have an M3U8 or MP4 URL  | Paste a URL                |
| You only have a page URL             | Paste a URL first          |
| The page hides the real stream URL   | Capture view               |
| The site needs login or session data | Capture view or add Cookie |
| You want to record a live stream     | Paste the live M3U8 URL    |

## Real Examples

These examples show the most common ways people use the app.

### Check yt-dlp Supported Sites

If you want to know which websites yt-dlp may support, check the official list:

[https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md](https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md)

Important:

* This list is maintained by yt-dlp, not by this app.
* A site being listed does not guarantee it will work normally.
* Site updates, login requirements, region limits, or anti-bot checks may still cause failures.

### Example 1: You already have an M3U8 URL

If you already extracted the stream URL from another tool or from page source, use the direct method.

Example URL:

```text theme={null}
https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8
```

How to use it:

1. Click **Add download**.
2. Paste the M3U8 URL.
3. Click **Add to queue**.

What happens:

* The task usually goes to **Downloading** quickly.
* After it finishes, you can open the file from the queue.

### Example 2: The page plays video, but you cannot find the real stream URL

If the site only requests the media after playback starts, use the built-in browser.

Example page:

```text theme={null}
https://hlsjs.video-dev.org/demo/
```

How to use it:

1. Open **Capture view**.
2. Open the page and start playback.
3. Wait for the stream to appear in the capture list.
4. Add the detected stream to the queue.

What happens:

* The app captures the real media request for you.
* This is the easiest way to handle hidden M3U8 URLs.

### Example 3: You want to record a live stream

If the stream is live, the app can keep saving it until you stop the task.

Example URL:

```text theme={null}
https://demo.unified-streaming.com/k8s/live/stable/live.isml/.m3u8
```

How to use it:

1. Click **Add download**.
2. Paste the live M3U8 URL.
3. Start the task and let it run.
4. Stop it when you want to finish recording.

What happens:

* The task shows **Recording** or **LIVE**.
* When you stop it, the app finalizes the output file.

### Example 4: You only have a page URL and want yt-dlp to extract it

If you do not have the real media URL, you can paste a supported page URL and let the app hand it to yt-dlp.

Example URLs:

```text theme={null}
YouTube: https://www.youtube.com/watch?v=dQw4w9WgXcQ
Vimeo: https://vimeo.com/1169458024
Instagram: https://www.instagram.com/p/DW5dTURkVPw
```

How to use it:

1. Click **Add download**.
2. Paste the page URL.
3. If the site requires login, add Cookie first.
4. Click **Add to queue**.

What happens:

* The task usually starts with **Extracting**.
* If extraction succeeds, it continues to **Downloading**.
* Some sites, especially Instagram, may require a valid login session.
* Even if a site appears in the yt-dlp supported list, it may not always work normally.

## Download Queue

The queue is where you manage all tasks. It shows progress, errors, and actions.

Common states:

* **Queued**: waiting to start
* **Extracting**: reading a page URL or preparing the stream
* **Downloading**: saving a normal file
* **Recording**: saving a live stream
* **Merging / Finalizing**: finishing the output file
* **Completed**: finished successfully
* **Failed**: stopped with an error

Common actions:

* Pause or continue
* Retry the download
* Open the output file
* Reveal the file in its folder
* Open the recovery page
* Debug request headers

## If a Download Fails

Start with these checks:

1. Read the full error message in the queue.
2. Check whether the site needs Cookie, Referer, or User-Agent.
3. If the URL came from a web page, try adding it again from Capture view.
4. If it is a live stream, make sure the page session is still valid.

## Settings

The main setting is **FFmpeg M3U8 threads**.

* Range: `1 - 32`
* Default: `1`
* Increase it slowly if a source supports faster downloading

## Notes

* The update button opens the changelog page.
* In-app auto update is not available yet.
* Download success depends on the source site.
* yt-dlp support depends on the target site and may break after site updates.
* Not every site in the yt-dlp supported list will work correctly at all times.
* Only download content you are allowed to access and save.
