How Channel Groups ATSC, DVB-S, and Pluto Are Organized in Markdown Files
The Free-TV/IPTV repository organizes channel groups in country-specific markdown files under lists/, using HTML <h2> headings to separate broadcast technologies (ATSC, DVB-S, Pluto) followed by markdown tables containing stream URLs and metadata.
The Free-TV/IPTV open-source project maintains curated television channel lists using a hybrid markdown-HTML structure. Each country receives its own .md file within the lists/ directory, where channels are categorized by broadcast technology using semantic HTML headings. This approach ensures compatibility with GitHub's rendering while providing clear parsing anchors for automation tools and playlist generators.
File Structure and Group Hierarchy
Country-Specific Markdown Files
Every geographic region is contained in a dedicated file within the lists/ directory. For example, the United States channels reside in lists/usa.md, while the United Kingdom uses lists/uk.md and France uses lists/france.md. Each file begins with an <h1> tag containing the country name, followed by multiple group sections demarcated by HTML tags.
Broadcast Technology Group Headings
Within each file, channel groups are identified using HTML <h2> tags rather than standard markdown ## headings. This creates distinct sections for different transmission methods:
- ATSC: Over-the-air terrestrial broadcasts (e.g., "Buzzr", "Retro TV")
- DVB-S: Satellite television feeds (e.g., "CNN", "CNBC")
- Pluto: IP-based streaming services (e.g., "BBC Food", "BBC Home")
- Other: Catch-all category for miscellaneous channels
The literal text between the tags determines the group classification, allowing parsers to identify transmission technology by scanning for these specific heading strings.
Anatomy of a Channel Group Section
Below each <h2> heading, the repository uses a markdown pipe table with five columns:
- # – Numeric index for readability
- Channel – Display name with optional markers like
Ⓖ(free-to-air) orⓎ(YouTube) - Link – Stream URL wrapped in an HTML anchor tag with the format
[>](<url>) - Logo – Image reference using
<img>tags pointing to external URLs - EPG id – Electronic Program Guide identifier for schedule data
Example: USA Channel Structure
The lists/usa.md file demonstrates the complete organization pattern, containing all three major groups:
<h1>USA</h1>
<h2>ATSC</h2>
| # | Channel | Link | Logo | EPG id |
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | Buzzr Ⓖ | [>](https://buzzrota-ono.amagi.tv/playlist1080.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Buzzr_logo.svg/768px-Buzzr_logo.svg.png"/> | Buzzr.us |
| 2 | Retro TV | [>](https://bcovlive-a.akamaihd.net/5e531be3ed6c41229b2af2d9bffba88d/us-east-1/6183977686001/profile_1/chunklist.m3u8) | <img height="20" src="https://i.imgur.com/PNTYOgg.png"/> | RetroTVEast.us |
<h2>DVB-S</h2>
| # | Channel | Link | Logo | EPG id |
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | CNN | [>](https://tve-live-lln.warnermediacdn.com/hls/live/586495/cnngo/cnn_slate/VIDEO_0_3564000.m3u8) | <img height="20" src="https://i.imgur.com/vyrc1I1.png"/> | CNN.us |
| 2 | CNBC Ⓨ | [>](https://www.youtube.com/c/CNBC/live) | <img height="20" src="https://i.imgur.com/BTasyOy.png"/> | CNBC.us |
<h2>Pluto</h2>
| # | Channel | Link | Logo | EPG id |
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | BBC Food | [>](https://service-stitcher.clusters.pluto.tv/v1/stitch/embed/hls/channel/5fb5844bf5514d0007945bda/master.m3u8?...) | <img height="20" src="https://i.imgur.com/N3xiz4m.png"/> | BBCFood.us |
| 2 | BBC Home | [>](https://service-stitcher.clusters.pluto.tv/v1/stitch/embed/hls/channel/5fb5836fe745b600070fc743/master.m3u8?...) | <img height="20" src="https://i.imgur.com/Ii8DX1x.png"/> | BBCHome.us |
This pattern repeats across all country files, such as lists/uk.md for the United Kingdom and lists/france.md for France, maintaining consistent group semantics regardless of regional broadcast standards.
Parsing Channel Groups Programmatically
Because the structure uses literal HTML tags within markdown, automated tools can reliably extract channel groups by scanning for <h2> elements. Consumers of the repository data can:
- Search for
<h2>ATSC</h2>to isolate over-the-air channels - Look for
<h2>DVB-S</h2>to extract satellite feeds - Filter by
<h2>Pluto</h2>to identify streaming-specific content
The HTML <img> tags in the Logo column provide direct URLs to channel icons, while the bracketed arrow syntax [>](url) creates clickable play links that render as buttons on GitHub.
Summary
- Channel groups in the Free-TV/IPTV repository are organized using HTML
<h2>headings within markdown files located in thelists/directory. - Three primary groups exist: ATSC (terrestrial), DVB-S (satellite), and Pluto (streaming), with an optional "Other" category for miscellaneous channels.
- Each group section contains a markdown table with columns for index, channel name, stream URL, logo image, and EPG identifier.
- Country-specific files like
lists/usa.mddemonstrate the complete structure, mixing HTML tags for headings and images with markdown tables for data presentation.
Frequently Asked Questions
How do I find the channel group for a specific country?
Navigate to the lists/ directory in the Free-TV/IPTV repository and locate the file named after the country (e.g., usa.md, uk.md, france.md). Open the file and scan for the <h2> headings—the text between these tags indicates the broadcast technology group (ATSC, DVB-S, or Pluto).
Why does the repository use HTML tags instead of pure markdown headings?
The repository uses HTML <h2> tags rather than standard markdown ## headings to provide explicit semantic anchors for automated parsers. This hybrid approach allows GitHub to render the channels nicely while giving TV guide generators and playlist compilers reliable markers to identify broadcast types programmatically.
What do the symbols like Ⓖ and Ⓨ mean in the Channel column?
These special markers indicate the channel's availability or source. The Ⓖ symbol denotes free-to-air broadcasts, while Ⓨ indicates the stream originates from YouTube. These visual cues help users quickly identify which channels require subscriptions or specific platforms.
Can I add a new channel group to an existing country file?
Yes, you can add a new group by inserting an <h2> heading with your desired group name (e.g., <h2>IPTV</h2>) followed by a markdown table using the standard five-column format. Ensure the table includes the index number, channel name, stream link using the [>](url) syntax, logo image tag, and EPG identifier to maintain consistency with the existing structure.
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:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →