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

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 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 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, 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 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 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 for United States channels or 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 to rebuild playlist.m3u8. Alternatively, run the generator locally from the repository root:

./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:

| # | 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 processes this entry, it generates the following output in playlist.m3u8:

#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: 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: 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 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 to regenerate playlist.m3u8 with the new entries.
  • The extraction logic in 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 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 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 for German channels). The 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 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.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →