Compare commits

...

9 Commits

Author SHA1 Message Date
Natalia Arroyave d9e966f264
Merge cbe79bfd87 into 6ec6fb7c0f 2026-04-13 12:19:35 +00:00
PlaylistBot 6ec6fb7c0f Update Playlist (GitHub Actions) 2026-04-09 03:28:19 +00:00
foratedio 9269fbb122
Update playlist_brazil.m3u8 (#1013) 2026-04-09 05:28:11 +02:00
PlaylistBot 5280f362ca Update Playlist (GitHub Actions) 2026-04-09 03:27:40 +00:00
Miguel Lozano 50ee8e8861
Add RTP Africa and RTP Internacional (#1016)
Thank you for yout work.
2026-04-09 05:27:31 +02:00
PlaylistBot 02c84cb055 Update Playlist (GitHub Actions) 2026-04-09 03:21:33 +00:00
Giacinto Lo Meo ea332da787
Add tvg-chno support using channel number from markdown lists (#1018)
* Add channel number to M3U line formatting

Add tvg-chno support using channel number from markdown lists

- Extract channel number from md lists
- Add tvg-chno attribute to M3U output
- Skip invalid values (e.g. 0)

Improves channel ordering in IPTV clients like Jellyfin

* Update make_playlist.py

Add tvg-chno support using channel number from markdown lists

- Extract channel number from md lists
- Add tvg-chno attribute to M3U output
- Skip invalid values (e.g. 0)

Improves channel ordering in IPTV clients like Jellyfin

* Delete playlists/playlist_italy.m3u8

delete italy playlist for updating with channel number

* Italy playlist updated with channel number
2026-04-09 05:21:25 +02:00
Baleshevich Srdjan 4462172b34
Updated the Bosnia & Herzegovina, Serbia & Montenegro playlist and list (#878)
* Updated the Bosnia and Herzegovina playlist and list

Replaced non-working links of two TV stations for links that work. The source of those links is found on the web sites of those TV stations respectively.

* Update Playlist (GitHub Actions)

* Updated the Bosnia & Herzegovina, Serbia & Montenegro playlist and list

Updated the link of one TV stations in Bosnia and Herzegovina, and remarked a non-HD channel on that list.
Updated all the links of TV stations from Montenegro, marked some of the links with GeoIP blocking (help needed from good, hones & heroic person from Montenegro on this one).
Added TV 3 channels to Serbia's list, and updated 2 links on that list as well.

* Update Playlist (GitHub Actions)

* Update Playlist (GitHub Actions)

---------

Co-authored-by: PlaylistBot <playlistbot@users.noreply.github.com>
2026-04-09 05:15:33 +02:00
Natalia Arroyave cbe79bfd87 Updated README file for clarity. 2024-09-25 14:27:42 -04:00
90 changed files with 2821 additions and 2747 deletions

View File

@ -1,7 +1,19 @@
Free TV
=======
IPTV Playlist Project
======
This is an M3U playlist for free TV channels around the World.
Welcome to the IPTV project! This repository offers a curated collection of free TV playlists for IPTV players, providing access to various channels from around the world.
Table of Contents
======
1. Introduction
2. Philosophy
3. Installation & Usage
4. Feed Sources
5. Format
7. Contributing
8. Pull Requests
9. License
Either free locally (over the air):
@ -95,6 +107,10 @@ Or free on the Internet:
To use it point your IPTV player to https://raw.githubusercontent.com/Free-TV/IPTV/master/playlist.m3u8.
Introduction
======
This project provides a collection of free IPTV playlists, allowing users to stream live TV channels thorugh compatible IPTV players. The playlists are community-driven, regularly updated, and intended for users looking for a wide range of channels.Channels are free-to-air or sourced from free online platforms, ensuring that users only access legal content.
Philosophy
==========
@ -124,19 +140,38 @@ This is a playlist for everybody.
- No channels dedicated to any particular political party
- No channels made for a country and funded by a different country
Installation and Usage
======
**To use playlists**
1. Download or clone this repository
2. Use any IPTV player (e.g. VLC, Kodi, IPTV Smarters) to load the '.m3u' file or copy the URL into your player.
**Reccomended Players:**
- VLC Media Player
- Kodi
- IPTV Smarters
**How to Use:**
1. Open your IPTV player.
Import the playlist file or URL.
Start streaming live TV channels!
Feed sources
============
It can be quite hard to find up to date URLs, here's a list of sources:
Finding up-to-date URLs can be difficult. Here are some useful sources:
- https://github.com/iptv-org/iptv/tree/master/streams
- Youtube: As long as the channel is live and its URL doesn't change (check the age of the stream, the number of viewers..)
- Dailymotion: Same criteria as for youtube
- Live streams from platforms like YouTube and Dailymotion, ensuring the stream is active and stable.
Format
======
The m3u8 playlist is generated by `make_playlist.py`, using the `.md` files located in `lists`.
The m3u8 playlist is generated by `make_playlist.py`, using the `.md` files in the `lists` directory.
Each .md file represesnts a group. The `<h1>` line is used as the group title.
@ -153,7 +188,16 @@ Issues
Only create issues for bugs and feature requests.
Do not create issues to add/edit or to remove channels. If you want to add/edit/remove channels, create a pull request directly.
Do not create issues for adding, editing, or removing channels. For these, please submit a pull request.
Contributing
======
**Contributions are welcome! To contribute:**
1. Fork the repository.
2. Create a new branch for your changes.
3. Submit a pull request with your updates.
Pull Requests
=============
@ -175,10 +219,15 @@ To add a new channel, make a Pull Request.
**Removing a Channel**
To remove a channel, make a Pull Request.
- To remove a channel, make a Pull Request.
In your Pull Request you need to provide information to show that the channel is only available via a private paid subscription.
- In your Pull Request you need to provide information to show that the channel is only available via a private paid subscription.
Note: Public taxes (whether national or regional, whether called TV License or not) do not constitute a private paid subscription.
- Note: Public taxes (whether national or regional, whether called TV License or not) do not constitute a private paid subscription.
If a stream is broken, simply move the channel to the invalid category and replace `[>]` with `[x]` in the url column.
- If a stream is broken, simply move the channel to the invalid category and replace `[>]` with `[x]` in the url column.
License
======
This project currently does not have a license. Please clarify the licensing terms before using or contributing.

View File

@ -4,11 +4,11 @@
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | BHT 1 | [>](https://bhrtstream.bhtelecom.ba/bhrtportal_hd.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/9/93/Logo_of_BHT_1_%282003-2012%29.png" /> | BHT1.ba |
| 2 | Federalna televizija (FTV) Ⓢ | [>](http://94.250.2.6:7374/play/a02s/index.m3u8) | <img height="20" src="https://i.imgur.com/Jpvs4u3.png" /> | FederalnaTV.ba |
| 3 | Televizija Republike Srpske (RTRS) | [>](https://parh.rtrs.tv/tv/live/playlist.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/RTRS_Logo.svg/640px-RTRS_Logo.svg.png" /> | RTRSTV.ba |
| 3 | Televizija Republike Srpske (RTRS) | [>](https://parh.rtrs.tv/tv/live/playlist.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/RTRS_Logo.svg/640px-RTRS_Logo.svg.png" /> | RTRSTV.ba |
| 3 | RTRS PLUS Ⓢ | [>](https://pluslive.rtrs.tv/plus/plus/playlist.m3u8) | <img height="20" src="https://i.imgur.com/k06WvYl.png"/> | RTRSplus.ba |
| 4 | N1 Bosna i Hercegovina | [>](https://best-str.umn.cdn.united.cloud/stream?channel=n1bos&p=n1Sh4redSecre7iNf0&sp=n1info&stream=sp1400&u=n1info) | <img height="20" src="https://i.imgur.com/72oMSWz.png"/> | N1BosniaHerzegovina.ba |
| 5 | RTV HB Ⓢ | [>](https://prd-hometv-live-open.spectar.tv/ERO_1_083/playlist.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/en/6/60/Logo_of_TV_Herceg-Bosne.png"/> | RTVHB.ba |
| 6 | RTV BN | [>](https://rtvbn.tv:8080/live/index.m3u8) | <img height="20" src="https://i.imgur.com/DUBvfWb.png"/> | BNTV.ba |
| 6 | RTV BN | [>](https://stream.rtvbn.tv:8080/live/index.m3u8) | <img height="20" src="https://i.imgur.com/DUBvfWb.png"/> | BNTV.ba |
| 7 | RTV Glas Drine | [>](http://glasdrine.cutuk.net:8081/433ssdsw/GlasDrineSD/playlist.m3u8) | <img height="20" src="https://i.imgur.com/9NgxOdb.png"/> | RTVGlasDrine.ba |
| 8 | Sevdah Ⓢ | [>](https://restreamer2.tnt.ba/hls/stream.m3u8) | <img height="20" src="https://i.imgur.com/V6W3yEp.png"/> | SevdahTV.ba |
| 9 | TNT Kids | [>](https://restreamer1.tnt.ba/hls/tntkids.m3u8) | <img height="20" src="https://i.imgur.com/irTDbpn.png"/> | TNTKidsTV.ba |

View File

@ -2,7 +2,7 @@
| # | Channel | Link | Logo | EPG id |
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | TVCG 1 | [>](http://cdn3.bcdn.rs:1935/cg1/smil:cg1.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/QORHrXu.png"/> | TVCG1.me |
| 2 | TVCG 2 | [>](http://cdn3.bcdn.rs:1935/cg2/smil:cg2.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/WECmUKH.png"/> | TVCG2.me |
| 3 | TVCG 3 | [>](https://parlament.rtcg.me:1936/pr/smil:parlament.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/XC7zVog.png"/> | Parlamentarnikanal.me |
| 99 | TVCG MNE | [>](http://cdn3.bcdn.rs:1935/cgsat/smil:cgsat.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/pf8VEwf.png"/> | TVCGMNE.me |
| 1 | TVCG 1 Ⓖ | [>](https://rtcg-live-open-geo.morescreens.com/RTCG_1_001/playlist.m3u8) | <img height="20" src="https://i.imgur.com/QORHrXu.png"/> | TVCG1.me |
| 2 | TVCG 2 Ⓖ | [>](https://rtcg-live-open-geo.morescreens.com/RTCG_1_002/playlist.m3u8) | <img height="20" src="https://i.imgur.com/WECmUKH.png"/> | TVCG2.me |
| 3 | TVCG 3 Ⓖ | [>](https://rtcg-live-open-geo.morescreens.com/RTCG_1_003/playlist.m3u8) | <img height="20" src="https://i.imgur.com/XC7zVog.png"/> | TVCG3.me |
| 99 | TVCG MNE | [>](https://rtcg-live-open.morescreens.com/RTCG_1_004/playlist.m3u8) | <img height="20" src="https://i.imgur.com/pf8VEwf.png"/> | TVCGMNE.me |

View File

@ -10,7 +10,9 @@
| 5 | RTP Madeira Ⓢ | [>](https://streaming-live.rtp.pt/liverepeater/smil:rtpmadeira.smil/playlist.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/en/a/ac/RTP_Madeira_2016.png"/> | RTPMadeira.pt |
| 6 | RTP3 | [>](https://streaming-live.rtp.pt/livetvhlsDVR/rtpnHDdvr.smil/playlist.m3u8?DVR=) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Rtp3.png"/> | RTP3.pt |
| 7 | RTP Memória | [x]() | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/7/79/RtpMemoria_positivo_horiz_RGB.png"/> | RTPMemoria.pt |
| 8 | RTP África | [>](https://streaming-live.rtp.pt/liverepeater/smil:rtpafrica.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/ISFNy17.png"/> | RTPAfrica.pt |
| 9 | RTP Mundo | [>](https://streaming-live.rtp.pt/liverepeater/smil:rtpi.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/mJ3gyqx.png"/> | RTPInternacional.pt |
| 1 | Porto Canal Ⓢ | [>](https://streamer-a01.videos.sapo.pt/live/portocanal/playlist.m3u8) | <img height="20" src="https://i.imgur.com/wsyvP2H.png"/> | PortoCanal.pt |
| 2 | ADtv Ⓢ | [>](https://playout172.livextend.cloud/liveiframe/_definst_/ngrp:liveartvabr_abr/playlist.m3u8) | <img height="20" src="https://i.imgur.com/FvlcU3z.png"/> |
| 3 | CNN Portugal | [>](https://sktv-forwarders.7m.pl/get.php?x=CNN_Portugal) | <img height="20" src="https://i.imgur.com/NYH39xs.png"/> | CNNPortugal.pt |
| 2 | ADtv Ⓢ | [>](https://playout172.livextend.cloud/liveiframe/_definst_/ngrp:liveartvabr_abr/playlist.m3u8) | <img height="20" src="https://i.imgur.com/FvlcU3z.png"/> | |
| 3 | CNN Portugal | [>](https://sktv-forwarders.7m.pl/get.php?x=CNN_Portugal) | <img height="20" src="https://i.imgur.com/NYH39xs.png"/> | CNNPortugal.pt |
| 4 | Euronews em Português Ⓨ| [>](https://www.youtube.com/euronewspt/live) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Euronews_2022.svg/640px-Euronews_2022.svg.png"/> | EuronewsPortuguese.fr |

View File

@ -2,15 +2,18 @@
| # | Channel | Link | Logo | EPG id |
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | RTS 1 | [>](https://webtvstream.bhtelecom.ba/rts1.m3u8) | <img height="20" src="https://i.imgur.com/S1pKHSR.png"/> | RTS1.rs |
| 2 | RTS 2 | [>](https://webtvstream.bhtelecom.ba/rts2.m3u8) | <img height="20" src="https://i.imgur.com/jltAf5h.png"/> | RTS2.rs |
| 3 | RTS 3 | [x]() | <img height="20" src="https://i.imgur.com/gxuGB4J.png"/> | RTS3.rs |
| 0 | RTS Svet | [x]() | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/8/8a/Rts-svet.png"/> | RTSSvet.rs |
| 0 | Euronews Serbia | [>](https://d1ei8ofhgfmkac.cloudfront.net/app-19518-1306/ngrp:QoZfNjsg_all/playlist.m3u8) | <img height="20" src="https://i.imgur.com/b24QKcq.png"/> | EuroNewsSerbia.rs |
| 1 | RTS 1 | [>](https://webtvstream.bhtelecom.ba/rts1.m3u8) | <img height="20" src="https://i.imgur.com/S1pKHSR.png"/> | RTS1.rs |
| 2 | RTS 2 | [>](https://webtvstream.bhtelecom.ba/rts2.m3u8) | <img height="20" src="https://i.imgur.com/jltAf5h.png"/> | RTS2.rs |
| 3 | RTS 3 | [x]() | <img height="20" src="https://i.imgur.com/gxuGB4J.png"/> | RTS3.rs |
| 4 | Red TV | [>](https://edge8.pink.rs/redtv/chunklist_w1213385221.m3u8) | <img height="20" src="https://i.imgur.com/cpN7NrL.png"/> | RedTV.rs |
| 5 | Kurir TV | [>](https://static.am.mediaoutcast.com/storage/nQJnjJkO/nQJnjJkO/stream/O68x4o8g/720p/720p.m3u8) | <img height="20" src="https://i.imgur.com/HBPnUD5.png"/> | KurirTV.rs |
| 6 | Informer TV | [>](https://edge-rs-03.maksnet.tv/informertv-secure/web/playlist.m3u8) | <img height="20" src="https://i.imgur.com/9wdEHRf.png"/> | InformerTV.rs |
| 0 | RTS Svet | [x]() | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/8/8a/Rts-svet.png"/> | RTSSvet.rs |
| 0 | Euronews Serbia | [x](https://d1ei8ofhgfmkac.cloudfront.net/app-19518-1306/ngrp:QoZfNjsg_all/playlist.m3u8) | <img height="20" src="https://i.imgur.com/b24QKcq.png"/> | EuroNewsSerbia.rs |
<h3>Vojvodina</h3>
| # | Channel | Link | Logo | EPG id |
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | RTV 1 | [>](rtsp://212.200.255.151/rtv1) | <img height="20" src="https://i.imgur.com/CG44YT3.png"/> | RTV1.rs |
| 2 | RTV 2 | [>](rtsp://212.200.255.151/rtv2) | <img height="20" src="https://i.imgur.com/skpr66t.png"/> | RTV2.rs |
| 1 | RTV 1 | [>](rtmp://212.200.230.50:1935/RTV/rtv1) | <img height="20" src="https://i.imgur.com/CG44YT3.png"/> | RTV1.rs |
| 2 | RTV 2 | [>](rtmp://212.200.230.50:1935/RTV/rtv2) | <img height="20" src="https://i.imgur.com/skpr66t.png"/> | RTV2.rs |

View File

@ -103,6 +103,9 @@ class Channel:
self.url = self.url[self.url.find("(")+1:self.url.rfind(")")]
self.logo = parts[4].strip()
self.logo = self.logo[self.logo.find('src="')+5:self.logo.rfind('"')]
self.chno = self.number if self.number and self.number != "0" else None
if len(parts) > 6:
self.epg = parts[5].strip()
else:
@ -110,10 +113,11 @@ class Channel:
def to_m3u_line(self):
country = f' tvg-country="{self.country_code}"' if self.country_code else ""
chno = f' tvg-chno="{self.chno}"' if self.chno else ""
if self.epg is None:
return (f'#EXTINF:-1 tvg-name="{self.name}" tvg-logo="{self.logo}"{country} group-title="{self.group}",{self.name}\n{self.url}')
return (f'#EXTINF:-1 tvg-name="{self.name}" tvg-logo="{self.logo}"{chno}{country} group-title="{self.group}",{self.name}\n{self.url}')
else:
return (f'#EXTINF:-1 tvg-name="{self.name}" tvg-logo="{self.logo}" tvg-id="{self.epg}"{country} group-title="{self.group}",{self.name}\n{self.url}')
return (f'#EXTINF:-1 tvg-name="{self.name}" tvg-logo="{self.logo}" tvg-id="{self.epg}"{chno}{country} group-title="{self.group}",{self.name}\n{self.url}')
def main():

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long