# How to Add YouTube Live Channel Streams to the Free-TV IPTV Playlist

> Easily add YouTube live channels to your Free-TV IPTV playlist. Follow our simple guide to edit country files and regenerate your master playlist for seamless streaming.

- Repository: [Free TV/IPTV](https://github.com/Free-TV/IPTV)
- Tags: how-to-guide
- Published: 2026-06-26

---

**To add a YouTube live channel to the Free-TV IPTV playlist, edit the appropriate country markdown file in `lists/<country>.md`, add a table row with the channel name including the Ⓨ symbol, provide a `[>](youtube-url)` link, and run [`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py) to regenerate the master playlist.**

The Free-TV/IPTV project aggregates publicly available television streams into a standardized M3U8 playlist format. Understanding how to add YouTube live channel streams to the IPTV playlist requires familiarity with the repository's markdown-driven workflow and the specific parsing logic implemented in the generation script.

## How the Playlist Builder Works

The repository uses **[`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py)** to parse markdown files and compile the final `playlist.m3u8`. According to the Free-TV/IPTV source code, the script scans the `lists/` directory for country-specific markdown files (e.g., [`lists/usa.md`](https://github.com/Free-TV/IPTV/blob/main/lists/usa.md), [`lists/uk.md`](https://github.com/Free-TV/IPTV/blob/main/lists/uk.md)).

Inside these files, the extractor looks for table rows containing the **`[>`]** marker immediately preceding a Markdown link. Lines 55-57 of [`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py) specifically extract the URL from within the parentheses that follow this marker. The script treats any URL equally—whether it points to an HLS stream, MPEG-TS feed, or a YouTube live page—as long as it follows the `[>](url)` format.

Channels sourced from YouTube are identified by the **Ⓨ** symbol in the channel name, a convention documented in [`README.md`](https://github.com/Free-TV/IPTV/blob/main/README.md) lines 49-50. When the generator encounters this entry, it creates an `#EXTINF` line in the output playlist containing the channel metadata and the extracted YouTube URL.

## Step-by-Step Guide to Adding YouTube Live Streams

### Select the Correct Country File

Navigate to the `lists/` directory and locate the markdown file corresponding to the channel's country or region. For example, use [`lists/usa.md`](https://github.com/Free-TV/IPTV/blob/main/lists/usa.md) for United States channels or [`lists/france.md`](https://github.com/Free-TV/IPTV/blob/main/lists/france.md) for French channels. Each file contains a markdown table with the following columns: `#`, `Channel`, `Link`, `Logo`, and `EPG id`.

### Format the Channel Entry

Add a new row to the table following these formatting rules:

- **Channel**: Include the **Ⓨ** symbol immediately after the name to indicate a YouTube live stream (e.g., `Bloomberg Ⓨ`).
- **Link**: Use the format `[>](https://www.youtube.com/...)` where the URL points to the channel's live page.
- **Logo**: Provide an `<img>` tag pointing to a publicly hosted image (e.g., Imgur).
- **EPG id**: Optionally include an Electronic Program Guide identifier, or leave empty.

### Regenerate the Playlist

After saving your changes, commit them to the repository. The CI pipeline automatically executes [`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py) to rebuild `playlist.m3u8`. Alternatively, run the generator locally from the repository root:

```bash
./make_playlist.py

```

The script outputs progress messages for each country processed and writes the final `playlist.m3u8` containing your new YouTube stream.

## Practical Example: Adding a News Channel

Here is the exact markdown syntax for adding a YouTube live news channel to [`lists/usa.md`](https://github.com/Free-TV/IPTV/blob/main/lists/usa.md):

```markdown
| # | Channel         | Link                                           | Logo                                               | EPG id       |

|:--:|:----------------|:----------------------------------------------:|:--------------------------------------------------:|:------------:|
| 1 | Bloomberg Ⓨ     | [>](https://www.youtube.com/c/Bloomberg/live)  | <img height="20" src="https://i.imgur.com/XYZ.png"/> | Bloomberg.us |

```

When [`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py) processes this entry, it generates the following output in `playlist.m3u8`:

```m3u
#EXTINF:-1 tvg-name="Bloomberg" tvg-logo="https://i.imgur.com/XYZ.png" group-title="News",Bloomberg
https://www.youtube.com/c/Bloomberg/live

```

## Key Files and Their Roles

- **[`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py)**: The Python script that parses all markdown files in `lists/` and compiles them into the master M3U8 playlist. It extracts URLs from the `[>]` marker pattern on lines 55-57.
- **`lists/<country>.md`**: Country-specific markdown files containing channel tables. Edit these files to add or modify YouTube live streams.
- **[`README.md`](https://github.com/Free-TV/IPTV/blob/main/README.md)**: Documents the **Ⓨ** convention for YouTube channels (lines 49-50) and overall project usage.
- **`playlist.m3u8`**: The generated master playlist consumed by IPTV players. This file is rebuilt automatically when [`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py) runs.

## Summary

- Edit the appropriate **`lists/<country>.md`** file to add new channel entries.
- Append the **Ⓨ** symbol to the channel name to mark it as a YouTube live stream.
- Format the stream URL as **`[>](youtube-url)`** so the parser can extract it.
- Execute **[`./make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/./make_playlist.py)** to regenerate `playlist.m3u8` with the new entries.
- The extraction logic in [`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py) (lines 55-57) handles YouTube URLs identically to other stream types.

## Frequently Asked Questions

### What does the Ⓨ symbol signify in channel names?

The **Ⓨ** symbol identifies streams originating from YouTube Live. According to [`README.md`](https://github.com/Free-TV/IPTV/blob/main/README.md) lines 49-50, this marker helps users and maintainers quickly distinguish YouTube-based channels from traditional HLS or MPEG-TS streams in the playlist.

### Why must I use the [>] marker before the URL?

The [`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py) script specifically searches for the `[>]` pattern to identify valid stream links. Lines 55-57 of the script extract the URL from the parentheses immediately following this marker. Without this syntax, the generator will skip the entry and omit it from the final `playlist.m3u8`.

### Can I add YouTube streams to any country's markdown file?

Yes. You should add the channel to the markdown file that corresponds to its geographic origin or primary audience (e.g., [`lists/germany.md`](https://github.com/Free-TV/IPTV/blob/main/lists/germany.md) for German channels). The [`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py) script processes all files in the `lists/` directory regardless of stream type, creating a unified `playlist.m3u8` containing all entries.

### Does the playlist update automatically after I commit changes?

Yes. The Free-TV/IPTV repository runs [`make_playlist.py`](https://github.com/Free-TV/IPTV/blob/main/make_playlist.py) through its CI pipeline automatically upon commit. You can also run the script locally before committing to verify that your YouTube URL parses correctly and generates the expected `#EXTINF` output in `playlist.m3u8`.