Commit Graph
67 Commits
Author SHA1 Message Date
Kálmán „KAMI” SzalaiandClaude Sonnet 5 72b7c7e076 Restore official geo-blocked RAI streams alongside the CloudFront mirror
Fixes #1179.

PR #1166 moved Rai 1, Rai 2, Rai 3, Rai Premium, Rai Storia and Rai
Scuola from the official mediapolis.rai.it relinker to a third-party
CloudFront mirror, because the relinker had become Italy-IP-gated and
was failing for everyone else (including the CI checker). That mirror
works for casual viewing, but as #1179 reports, it goes black during
broadcasts where RAI only holds domestic rights (e.g. EuroVolley) -
the official stream keeps working correctly for Italian-IP viewers
through exactly those broadcasts, because it's RAI's own domestic
feed, not a re-mirror of it.

Rather than trade one gap for the other, add the official mediapolis
URL back as a second, Ⓖ-marked entry for each of the six channels -
the same "CDN mirror as the general-access entry, official relinker
as the geo-gated alternative" split this file already uses for every
other Rai channel (Rai 4, Rai 5, Rai Movie, Rai Sport, etc., all still
on mediapolis.rai.it + Ⓖ). Viewers with an Italian IP get the more
correct source; everyone else keeps the mirror that already works for
them.

Also fixes a real gap in check_channels.py found while verifying this:
mediapolis.rai.it's relinker doesn't refuse an out-of-territory request
with an HTTP error - it answers 200 with a real MP4, but the file is
always the same "video_no_available.mp4" decoy regardless of which
channel was asked for. The checker had no way to tell that apart from
a working stream failing its playlist-header check, so every
mediapolis.rai.it entry (the pre-existing Rai 4/5/Movie/Sport ones
included) was scored `dead` instead of `blocked`, right down to the
newly-fixed pr_check.yml workflow that now hard-fails a PR over a
`dead`-scored touched channel. Added a check for this specific decoy
redirect target, classified as `blocked` like any other geo-refusal.

Regenerated playlist.m3u8 and playlists/playlist_italy.m3u8 via
make_playlist.py. pylint check_channels.py: 10.00/10.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
2026-09-06 21:09:12 +02:00
Kálmán „KAMI” SzalaiandClaude Sonnet 5 c3da8585b2 Fix dead CCTV-15 link (China)
CCTV-15 音乐 had no URL. Found it on the same aggregator IP
(74.91.26.218:82) already used successfully for every other CCTV-1
through CCTV-17 entry in this file - just needed the matching
cctv15hd path. Verified alive via check_channels.py (3/3 ok), real
HLS content with sequential live .ts segments.

Researched but left unchanged (no viable replacement found):
- China: FZTV-2 (sibling IDs on the same host work, this one 404s;
  no alternate ID discoverable without brute-forcing); CCTV-5, CCTV-5+,
  CETV-1 through 4 (Invalid section) - the same aggregator serves
  geo-block placeholders or "no server configured" errors for these,
  not real streams.
- Israel: Channel 12, Makan 33 - confirmed geo-blocked to Israel by
  the broadcaster's own API response, not fixable from outside.
- Azerbaijan: Topaz 2 - no discoverable public web presence, likely
  defunct. CBC Sport, İctimai TV newly found dead, no replacement.
- United Arab Emirates: Fujairah TV has a real official stream, but
  it's a signed URL that expires the same day - not usable as a
  static entry. MBC 2/Action/Max, Al Aan TV, Baynounah TV, Abu Dhabi
  Sports 1/2 newly found dead, no replacement. Notably, Abu Dhabi TV,
  National Geographic Abu Dhabi, Dubai TV, Dubai One, Dubai Sports
  1-3, Dubai Racing 1-3, Dubai Zaman, Sama Dubai, and Noor Dubai (12
  channels) all point to CDN subdomains that no longer resolve at all
  (confirmed NXDOMAIN) - both Abu Dhabi Media and Dubai Media Inc.
  appear to have discontinued free public live streaming entirely
  (Abu Dhabi Media moved behind the paid StarzPlay platform, Dubai
  Media Inc's rebuilt site has no live section) - a wholesale
  infrastructure change worth flagging to maintainers rather than 12
  isolated link rots, but not something a replacement URL can fix.
- Somalia: Codka Bariga Afrika, Dacwa TV, Puntland TV - no
  discoverable public stream. Somali Cable TV and SBC Somalia have
  official YouTube channels, but neither was live at verification
  time.

Regenerated playlist.m3u8 and playlists/playlist_china.m3u8 via
make_playlist.py.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
2026-09-06 19:59:07 +02:00
Kálmán „KAMI” SzalaiandClaude Sonnet 5 45c5f4b018 Fix dead Smash TV and Ryongnamsan TV links
Malta:
- Smash TV: a3.smashmalta.com no longer resolves. Found the current
  stream on the station's own official homepage embed. Verified alive
  via check_channels.py (3/3 ok), real HLS media playlist with .ts
  segments.

North Korea:
- Ryongnamsan TV: had no URL. Found it on the same reputable
  koryofront.org aggregator already used successfully for this file's
  existing KCTV entry - it explicitly lists a Ryongnamsan TV stream at
  a sibling path. Verified alive via check_channels.py (3/3 ok), real
  HLS media playlist with live PROGRAM-DATE-TIME tags.

Researched but left unchanged (no durable fix available):
- Malta: TVM2 and NET TV have real official live streams, but both
  require session-bound/time-limited signed tokens (a JWT tied to the
  requester's IP with a ~24h expiry, and a 12h start/end token window
  respectively) - not usable as a static playlist entry. F Living: no
  official web presence found.
- North Korea: Mansudae TV - not offered by the koryofront.org
  aggregator or any other source found.
- Taiwan: CTV Classic, CTV Bravo - official site has no live player,
  only a program schedule.
- Poland: 4fun Dance - official live player is a third-party embed
  with no discoverable static stream URL.
- Latvia: TV24 - official site has no live/tiešraide page, only a
  VOD archive.

Regenerated playlist.m3u8 and the per-country playlists via
make_playlist.py.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
2026-09-06 19:49:43 +02:00
Kálmán „KAMI” SzalaiandClaude Sonnet 5 1cde3355d6 Fix dead SBS family, 9Now family, and C31 Melbourne links (Australia)
- SBS, SBS Viceland, SBS World Movies, SBS Food, NITV: had no URL at
  all. Found the correct current channel keys behind the i.mjh.nz
  redirector already used successfully by other entries in this file
  (Seven, Nine, 7two, etc). The redirector mints a fresh token and
  forwards to SBS's real Akamai edge, which explicitly declines
  non-Australian requests (X-Error-Reason: geo-blocked) - real,
  correctly-functioning access control, not a broken link - so marked
  Ⓖ like the file's other geo-blocked entries (9Gem, 9Go!, etc).
- 9Gem, 9Go!, 9Life, 9Rush: the old direct 9now-livestreams.akamaized.net
  URLs now 400 (stale signed paths). Replaced with the same i.mjh.nz
  redirector mechanism, which mints a fresh token per request instead
  of embedding a static one. Verified alive via check_channels.py
  (3/3 ok), real HLS master + variant playlists.
- C31 Melbourne: had no URL. The station now operates under the CTV
  Plus community-TV platform after a 2016 licensing change; found its
  current CloudFront-backed stream via ctvplus.org.au. Verified alive
  via check_channels.py (3/3 ok), real HLS content with live segments.

Researched but left unchanged (no viable replacement found):
- Spree TV, M4TV: official domains parked or unresolvable, stations
  appear defunct.
- 10 Shake, Racing.com: newly found dead (stale CDN paths), but their
  official platforms are JS SPAs with no static stream discoverable.

Regenerated playlist.m3u8 and playlists/playlist_australia.m3u8 via
make_playlist.py.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
2026-09-06 18:37:33 +02:00
Kálmán „KAMI” SzalaiandClaude Sonnet 5 ecfc0bd2a3 Fix dead LiveNOW from FOX and RTS 3 links
zz_news_en:
- LiveNOW from FOX: lnc-fox-live-now.tubi.video no longer resolves.
  Replaced with the Amagi-hosted feed already used for the same
  channel under lists/usa.md's "FOX Live Now" entry. Verified alive
  via check_channels.py (3/3 ok).

Serbia:
- RTS 3: the old udp-multicast-proxy URL (185.81.240.65:15000) is
  unreachable. Found the current feed on the same official bhtelecom.ba
  CDN already used for RTS 1 and RTS 2 in this file. Verified alive via
  check_channels.py (3/3 ok), real HLS master playlist with two
  variants.

Researched but left unchanged (no fix available):
- zz_news_en: The Guardian, CBC News Network, Sky News Now (AU), i24
  News, CNBC Europe, CNBC Indonesia, Pluto TV News - official
  infrastructure down, geo/paywall-gated, or no public stream exists.
  CNN (line 36) was not touched - the only replacement found is the
  exact same feed already used by the "CNN International" row in this
  file, which would just be a duplicate entry, not a distinct fix.
- Moldova: Publika TV group and Balti TV - official domains gone, no
  replacement found.
- Serbia: Euronews Serbia has a real working stream, but it requires a
  custom Referer header this repo's plain-URL playlist format can't
  carry - not usable as a drop-in fix. Red TV - no replacement found.
- Slovakia: every channel points at a domain (sktv.mxnticek.eu) that is
  completely down. Found working replacements for 3 channels via
  STVR's own JSON endpoint, but those URLs embed a short-lived signed
  token that expires - not usable as a static playlist entry (same
  reasoning as the Sweden Solidtango tokens rejected earlier). No
  durable fix currently available for this file.
- Montenegro: no dead channels found.
- Bosnia and Herzegovina: BHT 1's URL times out, but it's confirmed to
  be the exact URL BHRT's own official site uses internally - looks
  like a genuine infra/geo outage at the source, not a stale link, so
  left unchanged. No fix found for Federalna TV, TV BPK, Kanal 6, TNT
  Kids, Sevdah, RTV Glas Drine, TVSA, RTV TK.

Regenerated playlist.m3u8 and the per-country playlists via
make_playlist.py.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
2026-09-06 15:28:16 +02:00
Kálmán „KAMI” SzalaiandClaude Sonnet 5 e054b0afbb Only fail the PR channel check on channels the PR itself broke
check_channels.py's exit code reflects every dead channel across the
whole list file it was pointed at, not just the ones a PR added or
changed. Since pr_check.yml ran the checker directly and let its exit
code decide the job's pass/fail, any PR touching a list that already
had pre-existing dead entries (which is most of them - dozens of
already-known-broken channels exist across these lists) got a red X
for something it never caused, even though the workflow's own summary
step already computed the right "touched vs already broken" split.

Fixes this by:
- letting the check step run to completion regardless of its exit
  code (the checker's own verdict on the whole file isn't this job's
  call to make)
- moving pass/fail into the summarize step, which already has the
  touched/others split: the job now fails only when a channel this PR
  itself added or changed comes back `dead`
- deliberately not failing on `blocked`/`unreachable`/`flaky` for
  touched channels either - these have real false-positive rates from
  the runner's own network (geo-blocks, a datacenter IP some providers
  reject, one slow probe), which is exactly why the *Channel check
  (deep)* workflow exists to give `dead`-looking channels a second
  opinion before anyone acts on them

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
2026-09-06 14:24:16 +02:00
Kálmán „KAMI” SzalaiandClaude Sonnet 5 0907483c63 Fix dead NTV Kenya, Kibris TV, TV 2020, and Telefe links
Kenya:
- NTV Kenya: nation.africa/kenya/tv/live 404s. Their live simulcast is on
  the station's own official YouTube channel (linked from ntvkenya.co.ke
  itself); confirmed actually live at verification time (canonical URL
  resolved to a /watch?v= page, not the channel page).

Cyprus:
- Kibris TV: the shared sc-kuzeykibrissmarttv.ercdn.net CDN is gone
  (DNS NXDOMAIN) for all 6 TRNC channels in this section. Found Kibris
  TV's current feed via a Northern Cyprus web-TV aggregator
  (old.kuzeykibris.tv), a real rolling HLS media playlist. Verified
  alive via check_channels.py (3/3 ok).
- TV 2020: same dead CDN. Its official YouTube channel is confirmed
  live now. BRT 1, BRT 2, and Kibris Genc TV/Kanal T were also
  researched, but their YouTube channels were NOT live at verification
  time (canonical stayed on the channel page) - left unchanged rather
  than adding an unreliable "channel not live" link.

Argentina:
- Telefe: the old telefe.com API endpoint is deprecated (redirects to
  mitelefe.com, whose live-stream URL is now fetched client-side by JS
  and not extractable via curl). Replaced with a verified-alive
  third-party restream, the same pattern already used for other
  channels in this file (e.g. El Nueve's raw-IP entry). Flagged here
  as a fallback, not an official source.
- Aunar, Cine.AR, Tec TV, DeporTV: researched, all confirmed genuinely
  dead at their own official infrastructure (squatted/parked domains,
  VOD-only platforms, abandoned servers) with no live YouTube
  simulcast either - left unchanged, no fix available.

Regenerated playlist.m3u8 and the per-country playlists via
make_playlist.py.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
2026-09-06 14:19:21 +02:00
Kálmán „KAMI” SzalaiandClaude Sonnet 5 f7bb6da763 Fix dead TV 7 Albania and TV Apollon links
- TV 7 Albania: vs.sednastream.com:1936 returns HTTP 403. Found the
  station's current feed via its official site's live embed (tv7.al ->
  swf.tulix.tv iframe), backed by bozztv.com. Verified alive via
  check_channels.py (3/3 ok), real HLS media playlist with rolling segments.
- TV Apollon: the stored token in the old URL is stale (404, wrong path
  casing). Found the current token+path hardcoded in the station's own
  live player JS on apollon.tv. Verified alive via check_channels.py
  (3/3 ok), real live playlist with current-timestamped segments.

Researched but left unchanged (genuinely unfixable within reasonable
effort - documented for future reference):
- Albania: Kanali 7, Alpo TV, Panorama TV, Report TV - official sites
  either have no public video stream, are behind a Cloudflare JS
  challenge, or the stream host itself is unreachable.
- Bulgaria (bTV, Nova TV, Bulgaria On Air, Nova News, BNT1-4): official
  infrastructure appears to be Bulgaria-ISP-local or geo-blocked; Nova's
  own embed uses a per-request, IP-bound, time-limited signed URL, not
  usable as a static playlist entry.
- Georgia (Adjara TV, Maestro TV, Mtavari Arkhi, GDS, Pos TV, Obieqtivi):
  official domains are down, parked/expired, or return gateway errors
  even on the broadcaster's own site.

Regenerated playlist.m3u8 and playlists/playlist_albania.m3u8 via
make_playlist.py.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
2026-09-06 14:14:09 +02:00
Kálmán „KAMI” SzalaiandClaude Sonnet 5 e0efb27c2e Mark HRT 1/2/3 as geo-blocked (Ⓖ), matching existing HRT 4
Same nexttv.ht.hr CDN as the already-marked HRT 4: reachable and serving
real DASH content from an EU/Croatian vantage point, but geo-restricted
for other regions (confirmed by the CI runner's own check run on this PR
reporting all four HRT channels, including the unchanged HRT 4, as dead).
Adds the existing Ⓖ convention to the three new URLs for consistency.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
2026-09-06 09:24:40 +02:00
Kálmán „KAMI” SzalaiandClaude Sonnet 5 c0f7e788f7 Fix dead HRT 1/2/3 and Praha TV links in Croatia and Czech lists
Croatia:
- HRT 1, HRT 2, HRT 3: the bhtelecom.ba mirror (webtvstream.bhtelecom.ba)
  no longer serves these streams. Switched to HRT's own official CDN
  (bpcdnmanprod.nexttv.ht.hr/bpk-tv/<channel>/default/index.mpd), the same
  origin already used successfully for the existing HRT 4 entry. Verified
  alive via check_channels.py (3/3 ok) before committing.
- Diadora: researched, confirmed genuinely dead at its own stream origin;
  no working alternative found, left unchanged.

Czech Republic:
- Praha TV: stream.polar.cz/prahatv no longer resolves/serves; found the
  station's current stream on Praha TV's own site, backed by CDN77
  (1977134029.rsc.cdn77.org). Verified alive via check_channels.py.
- CNN Prima News, Prima MAX, CS Film, Šlágr Muzika: researched, confirmed
  DRM-gated or dead at source with no viable public alternative; left
  unchanged.

Regenerated playlist.m3u8 and per-country playlists via make_playlist.py.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
2026-09-06 08:30:29 +02:00
Kálmán „KAMI” Szalai 38e06bcebf Update SVT to current (still geo-blocked) URLs, mark 2 Öppna Kanalen dead
SVT 1/2/24/Kunskapskanalen: the old ed2.cdn.svt.se host is fully retired
(plain 404, not a geo-block response). SVT's own site now serves live
channels via api.svt.se/videoplayer-api/video/ch-<id>, which points at
svt-live-channel.akamaized.net - confirmed current by fetching that API
live. The new URLs are still geo-blocked to Sweden (Akamai 403, not a
404), so the Ⓖ marker stays; this is a URL update, not a fix for the
geo-restriction itself. No unrestricted third-party mirror exists for
SVT (checked; other IPTV list maintainers hit the same block).

Öppna Kanalen Stockholm and Malmö: marked [x]. Solidtango (their
hosting platform) now requires per-session signed URLs platform-wide -
Stockholm's old unsigned URL returns 402 Payment Required. Malmö's
entire subdomain 404s on every path; their site now points at a
dedicated app plus cable-only distribution, no public web stream at
all.

Öppna Kanalen Skövde and Västmanlands TV were also researched: both
are alive, but only through freshly-signed URLs that expire in ~24h -
not left unchanged deliberately, since committing today's signed link
would just go dead again tomorrow. A durable fix would need scraping
their live pages (okskovde.solidtango.com/live/livetv and
vastmanland.solidtango.com/live/vastmanlands-television--2) for a
fresh link periodically, not a static list entry.
2026-09-05 21:02:21 +02:00
Kálmán „KAMI” Szalai 30b9c0e25e Fix 5 dead Russian channel links, VGTRK/Smotrim redesign
The old player.smotrim.ru/iframe/stream/live_id/N embeds are all dead -
Smotrim's site redesign replaced them with a client-side API
(player-api.smotrim.ru/api/v1/channel/{id}) that returns the current
stream URL. Traced the old numeric id -> new channel id -> stream
mapping from the site's own JS bundle:

- Россия 1 (id 2961 -> channel 1): live.smotrim.ru, no signature, should
  be durable
- Россия-Культура (id 19201 -> channel 4): same, unsigned
- Москва 24 (id 1661 -> channel 76): stream.smotrim.ru, carries a `sign`
  query param
- Вести ФМ (id 52035 -> channel 199): same, signed
- Соловьёв Live (id 63338 -> channel 292): same, signed

The three signed URLs were stable across repeated fetches in testing
(not IP-bound), but could still rotate server-side - if the checker
flags one of these dead again, re-derive it from
player-api.smotrim.ru/api/v1/channel/{id} rather than assuming the
channel itself is gone.

Not fixed (researched, no working replacement found):
- РТР-Планета: removed from Smotrim entirely - VGTRK now describes it
  as satellite-only for the diaspora, no web stream exists
- Катунь 24 / Кубань 24: both stations' own sites just embed the same
  dead OK.ru video; OK.ru's underlying stream URL is IP-locked and
  expires in ~1 hour, unusable as a static list entry
- Саратов 24: dropped its web player entirely, now Telegram-only
2026-09-05 21:00:23 +02:00
Kálmán „KAMI” Szalai 6b1fcf9aba Fix 7 dead Irish radio stream URLs
Root cause: Bauer Media Audio Ireland (Today FM, 98FM, Newstalk, Spin
1038, Classic Hits) migrated their stream infrastructure from
stream.audioxi.com to live-bauerie.sharp-stream.com (same mount names,
new host), found via their goloudplayer.com player pages. Sunshine
106.8 moved off sharp-stream onto streamtheworld.com (shared player
config with Nova and Classic Hits' own sites).

FM104 and Dublin's Q102 URLs are unchanged - they were re-verified
returning real audio and appear to have been a transient outage, not
a dead link (worth noting in case #1169's raw-audio-stream detection
fix was also masking these two as false negatives previously).

Note: these URL changes were verified for real audio content (bytes +
correct Content-Type) directly with curl, since check_channels.py
in this repo's history does not yet recognize raw audio/video streams
as alive (see #1169) - verify against that fix once merged.
2026-09-05 20:57:03 +02:00
Kálmán „KAMI” Szalai b05f8ef87f Recognize raw audio/video streams, not just playlists, as alive
Some radio stations serve the live audio directly at the listed URL
(Content-Type: audio/mpeg, audio/aacp, etc.) rather than an HLS/DASH
manifest that points to one. probe() only checked for #EXTM3U/<MPD in
the response body, so every one of these was misclassified as dead
regardless of whether the station actually worked.

Found while verifying replacement URLs for Irish radio stations: curl
confirmed real audio bytes with correct audio/* Content-Type on all of
them, but check_channels.py reported every single one as dead. Now
checks the response's Content-Type first; a direct audio/video stream
counts as alive without needing playlist syntax. Verified this doesn't
regress playlist detection (existing HLS/DASH channels still classify
correctly).
2026-09-05 20:55:54 +02:00
Kálmán „KAMI” Szalai ac044f207d Fix 14 dead Italian local TV links
Found via each station's own official "diretta/streaming" page, following
embedded iframes/JS one level deeper to the real .m3u8. No hosting
infrastructure was brute-forced. Verified 3x each with check_channels.py,
all consistently alive:

- Travel TV, Donna TV, Alma TV, Italia 7, Lazio Tv, Gold Tv: new
  5f11919dca3bd.streamlock.net host (old streaming.softwarecreation.it
  provider dead)
- Calabria Uno Tv: same host, working path (ngrp: prefix dropped)
- Canale 21 / Canale 21 Extra: new encoders.immergo.tv provider (old
  msvdn.net dead)
- Fascino Tv, Motori Tv: new 64b16f23efbee.streamlock.net host
- Ran Friul: azotosolutions.com load-balancer (old streamlock.net host dead)
- Love in Venice: same host, working path (.stream suffix added)
- Mediterranea Tv: new xdevel.com stream (old aswifi.it dead)

Castrovillari Tv and Cittaceleste Tv are still on their original URLs
unchanged - the outage looks to have been transient, both returned
live content again on retest.

Sportitalia SOLOCALCIO: found a candidate at
distribution.sportitalialive.it/sportitalia/sisolocalcio_abr/playlist.m3u8
(hardcoded in the official player page), but it returns 403 from here -
looks like a datacenter/ASN block rather than a bad URL, so left
unchanged rather than swap in something equally unverifiable.

19 other stations were also researched but had no findable working
replacement (parked/dead domain, JS-rendered player with no static URL,
or the official embed itself already dead) - left unchanged.
2026-09-05 15:59:26 +02:00
Kálmán „KAMI” Szalai d229c258e8 Fix 8 dead Italian local TV links, remove a dead TG Norba 24 duplicate
Found via each station's own official "diretta/streaming" page, following
embedded iframes (several use a shared white-label player at
player.streamshow.it/hosted/*.php) one level deeper to the real .m3u8.
No hosting infrastructure was brute-forced. Verified 3x each with
check_channels.py, all consistently alive:

- TVL (TV Libera Pistoia): new mariatvcdn.it host (old one dead)
- Teatro Tv: teatrotv.iostream.it (old m.iostream.it path dead)
- Tele Belluno: new mariatvcdn.it host + path
- Tele Cupole: azotosolutions.com load-balancer (old newradio.it dead)
- Tele Ischia: new streamlock.net host
- Tele Radio Ercolano: same saiuzwebnetwork.it provider, working path
- Teleiblea: same streamlock.net provider, working host
- Vera Tv: streamshow.it CDN (old shared streamshow.it host dead)

TG Norba 24 was listed twice under two different EPG rows with the same
tgv-id (TGNorba24.it) - one already pointed at a working
live-telenorba.cdn.netrw.it URL, the other (router.xdevel.com) was dead.
Removed the dead duplicate rather than adding a third entry.

29 other Italian local stations were also researched but had no
findable working replacement (site down, JS-injected player with no
static URL, or official embed itself already dead) - left unchanged.
2026-09-05 15:51:33 +02:00
Kálmán „KAMI” Szalai 1972c39bf9 Fix 6 dead RAI channels via a working third-party mirror
mediapolis.rai.it's relinker service is now Italy-IP-gated: with
forceUserAgent it 302s to a "video not available" placeholder MP4
(the "raw binary" symptom this repo's checker was seeing), without it
Akamai returns a plain 403. RAI's own official pages (raiplay.it) still
embed the same dead relinker pattern, and no working parameter/domain
variant was found - this isn't a broken link, it's a geo-restriction
that happens to also break for the CI runner's non-Italian IP.

Found a third-party CDN mirror (d3k8wzt41aflvx.cloudfront.net) already
re-serving RAI's linear feeds unrestricted, in the same vein as the
existing Rai4K/UniNettuno akamaized.net mirrors already in this list.
Verified each with curl (multi-quality master playlist, real segment
references) and with check_channels.py (3x each): Rai 2/3/Premium/
Storia/Scuola came back consistently alive, Rai 1 flaky (2/3 ok, real
content each time) - consistent with general CDN flakiness elsewhere
in this list, not a sign the URL is wrong.

Dropped the Ⓖ marker on these 6 since the mirror isn't geo-blocked.

Rai 4, Rai 5, Rai Movie, Rai Gulp, Rai YoYo, Rai Sport, and Rai Radio 2
Visual Radio are not on this mirror and were left unchanged (still
pointing at the geo-gated relinker, since that's genuinely the current
official source and may still work for viewers with an Italian IP).
2026-09-05 15:44:27 +02:00
Kálmán „KAMI” Szalai 6612168fd1 Add ES TV (Esztergom) and Komáromi Televízió
Both use the same lexanetwork.com infrastructure as FehérvárTV (#1163)
and Kapos TV (#1164). Found via each station's own official live page
(estv.hu homepage, komaromtv.hu/online-adas/), which embeds a player
resolving to a working relay URL. Verified 4x each, consistently alive.

Also searched ~45 other Hungarian local TV stations for lexanetwork.com
usage - none of the others use it (mostly WordPress/YouTube embeds, or
the station's own site is dead), so no further additions from this pass.
2026-09-05 15:41:20 +02:00
Kálmán „KAMI” Szalai e8cf7121a6 Fix Kapos TV - found a working relay via the official player embed
Was marked [x] (dead relay01/livestream004.sdp on cloudfront63). Found
the current URL the same way as FehérvárTV (#1163): the official site's
"Élő adás" page embeds an iframe at cloudfront63.lexanetwork.com/itplayer/
LIVE016_inc.php, which resolves to a real master playlist (bitrate/
resolution/codec info + segment reference) on a different host/path -
relay01/broadcast004.sdp on cloudfront44. Verified 4x, consistently alive.

Also checked the site's other dead ([x]) lexanetwork.com entries this
same way: AlföldTV's domain now redirects to a news portal with no live
player, Zugló TV's and Bajai TV's sites don't resolve/load at all, and
Lóverseny közvetítés is an event-only feed (found a newer loverseny3.sdp
path via the same method, but it's only live during actual races, so
nothing to verify against right now). None of those looked fixable.
2026-09-05 15:14:40 +02:00
Kálmán „KAMI” Szalai dd46b77562 Fix FehérvárTV - old link served an empty playlist
The old URL (freerelay/fehervartv.sdp) answered HTTP 200 with a
technically-valid HLS header but nothing else - no #EXT-X-STREAM-INF,
no segment reference, just two lines. That passes a header-only check
(and did - the current checker reports it "alive") while being
unplayable in any real player, since there's nothing to play.

Found the working URL by fetching the official player embed at
https://www.fehervartv.hu/elo_adas (an iframe pointing at the same
lexanetwork.com host, but a different relay path - relay44_1/HDE046.sdp
- that does return a real master playlist with bitrate/resolution/codec
info and a segment reference). Verified 4x, consistently alive.
2026-09-05 15:09:15 +02:00
Kálmán „KAMI” Szalai e7e5ca8a62 Add 3 newly-found BS cids without moving existing ones
Follow-up to #1156. That PR found working cids (01, 08, 12 - the range
was 02-07,10,11 before) for channels previously marked [NO PUBLIC
STREAM], which is valuable, but it also reassigned the cid of every
already-known-working channel (NHK BS, BS日テレ, BS朝日, BS-TBS,
BSテレ東, BSフジ) to its neighbor's old value - a clean cyclic shift
across exactly six channels, which is what a list/list zip misaligned
by one produces, not what channel-by-channel verification produces.
Neither the old nor the new mapping carries any content-level proof
(the streams have no identifying metadata), so there's no way to tell
which is right - only that the shift itself isn't evidence of anything.

This takes only the part that's unambiguous: three cids nobody had
before, given to the three channels that had nothing. bs07 was one of
the "new" ones in #1156, but it's already BS10スターチャンネル's cid,
so WOWOWシネマ gets bs08 instead - the only other free value.

Verified each new cid resists a single flaky read (checked 4x): bs01
and bs12 came back flaky (3/4 ok) but real, bs08 came back alive (4/4).
That's consistent with how naori-test.netgenx.site behaves generally
(see check_channels.py's docstring), not a sign these three are wrong.
2026-09-05 11:05:10 +02:00
Kálmán „KAMI” Szalai 708fd34750 Check the whole touched list at PR time, not just changed lines
Replaces iptv-checker (npm + ffmpeg) with check_channels.py:

- Checks every channel in a list a PR touches, existing and new, not just
  the added/changed rows - a PR editing italy.md now surfaces already-dead
  channels in italy.md too, not only the one line it changed.
- Uses check_channels.py's dead/blocked/unreachable/flaky states instead
  of a binary online/failed, so the summary no longer needs the "some of
  these failures are geo-blocks, use your judgment" disclaimer without
  telling reviewers which failures those are - blocked channels are now
  named as such.
- Summary separates what the PR actually added/changed from what was
  already broken in the same file, so a reviewer isn't left guessing
  whether a failure is theirs to fix.
- No ffprobe pass here (kept fast for a PR gate) - anything this flags as
  dead gets a second opinion from the scheduled Channel check (deep)
  workflow before anyone acts on it.

Verified end to end against a simulated PR diff.
2026-09-05 04:40:49 +02:00
Kálmán „KAMI” Szalai 017955ad9e Fix crash on IncompleteRead, which killed the first live run
The first scheduled run of #1157's workflows failed outright: a server
started a chunked HTTP response and then hung up mid-chunk, which
urllib surfaces as http.client.IncompleteRead - a subclass of
http.client.HTTPException, not of OSError/URLError/ValueError, so
probe()'s except clause let it propagate and took the whole run down
before it wrote anything to --json, including check_channels_fast.yml's
run.jsonl.

Catch http.client.HTTPException alongside the existing exceptions and
treat it as unreachable, same as any other broken connection. Verified
against the exact exception (mocked) and against the live lists.
2026-09-04 11:49:36 +02:00
Kálmán „KAMI” Szalai a86fb23e94 Add channel checker, scheduled health checks, and a status dashboard
Builds on the idea in #1145 (a checker that maps failures back to a channel
and list, and tells a geo-blocked channel from a dead one) with a few
additions:

check_channels.py
- Standard library only, same as #1145's version.
- Adds a `disputed` state: an optional --confirm-dead pass gives ffprobe a
  second opinion on anything that looks dead over HTTP, before it gets
  reported as dead. This is one-directional (can only pull a verdict out
  of `dead`, never push one into it) because ffprobe itself is not
  reliable enough to trust in the other direction - a known-good DASH
  channel needed longer than any sane per-channel budget to open while
  testing this, and a header check alone had already been fooled by an
  isolated media fragment sitting at a URL that looked like a live channel
  (a mistake made and caught while triaging #1149/#1151 - see the
  docstring for the details).
- Restructured to share one worker pool across every list in a run
  instead of a fresh pool per list, which stopped small lists from paying
  the same wall-clock floor as large ones; a full run across all lists
  dropped from not finishing in 15 minutes to about 10.
- --json writes one record per channel per run, for building a history.

generate_dashboard.py
- Turns that history into a single self-contained docs/index.html: current
  state breakdown, an alive-share trend across every run kept, a per-list
  breakdown, and a searchable/filterable table of everything that is not
  currently alive.

Two new scheduled workflows
- check_channels_fast.yml: every 6 hours, HTTP checks only.
- check_channels_deep.yml: every 2 days, with --confirm-dead (needs ffmpeg).
Both append to .github/checker-history/history.jsonl (pruned to 90 days),
then build and deploy the dashboard to GitHub Pages.
2026-09-04 10:21:37 +02:00
Kálmán „KAMI” Szalai 2ac426ba9c Remove Star Central Greece - not a valid stream
Corrects a mistake in the previous PR (#1151): the URL answers with
HTTP 200 and binary data, but that payload is a raw MP4 fragment
(ftyp/moov boxes), not an HLS or DASH playlist a player can open.
No working replacement was found, so removing it rather than
mis-marking it as fixed.
2026-08-31 20:37:44 +02:00
Kálmán „KAMI” Szalai b91595ee74 Restore ERT World (as ERT Cosmos) and Star Central Greece
Follow-up to #1144.

- ERT World was renamed to ERT Cosmos. Added back under the new name,
  pointed at the same ERT CDN host used by the other ERT channels
  (verified HTTP 200 with a valid DASH manifest).
- Star Central Greece was returning 404 when #1144 was tested (Aug 26)
  but is back up now - verified 3x with a real MP4/DASH payload, not
  an error page. Restored with its original link.
2026-08-31 20:26:51 +02:00
Kálmán „KAMI” Szalai 5839206b3b Add 3 working Japanese news channels via Rakuten Amagi CDN
Added to the existing Rチャンネル/Rakuten section: NTV News (日テレNEWS),
FNN Prime Online (FNNプライムオンライン), and MBS News (MBSニュース),
via Rakuten's official Amagi CDN (cdn-apne1/cdn-uw2-prod.tsv2.amagi.tv),
same source already used for the existing Tokyo MX channel.

Verified HTTP 200 for all three, not geo-blocked.
2026-08-31 20:04:49 +02:00
Kálmán „KAMI” Szalai 49c6125e69 Replace Kanal S dead Wikimedia link with imgur-hosted logo 2026-08-24 10:18:58 +02:00
Kálmán „KAMI” Szalai 4002ccab0e Replace remaining dead logo links with imgur-hosted logos
Sourced current logos for Space TV, Səhiyyə TV, ATV, MTV Azerbaijan,
5Star, Pixel TV and Virgin Media Four from iptv-org's public logo
database (imgur-hosted, cross-referenced against their channel list)
and verified each one visually before swapping it in.
2026-08-24 10:06:30 +02:00
Kálmán „KAMI” Szalai 38e10a9ebd Replace more dead Wikimedia logo links with current successors
Found current Commons/Wikipedia file names for logos whose old files
were renamed or superseded (TF1, 6ter, RMC Découverte, Chérie 25,
TVP1-3, İctimai TV, CStar, UTV, MBC, UBC TV, Chamber TV, Venevisión,
Sky News Australia, KVF Sjónvarp, Telenorba, ReTV), reused an
already-working duplicate row for NRJ 12 and TaiwanPlus, and verified
every replacement resolves and shows the right logo.
2026-08-24 08:53:31 +02:00
Kálmán „KAMI” Szalai 03dfed03e1 Replace three dead UK logo links with previously used imgur links
ITV2, ITV3, and Challenge logos were pointing at Wikimedia files that
no longer exist; restored the imgur-hosted logos these rows used
before they were switched over.
2026-08-24 08:31:06 +02:00
Kálmán „KAMI” Szalai b940c45065 Fix remaining Wikimedia thumbnail links using non-standard sizes
Wikimedia now rejects direct thumbnail requests for widths outside the
fixed set 20/40/60/120/250/330/500/960/1280/1920/3840px. Rounded all
remaining off-size occurrences to the nearest allowed width.
2026-08-24 08:28:02 +02:00
Kálmán „KAMI” Szalai aa8b767c2a Fix Wikimedia thumbnail links using disallowed 640px size
Wikimedia only serves fixed thumbnail widths (20/40/60/120/250/330/
500/960/1280/1920/3840px); 640px returns a 400 error. Switched all
occurrences to the nearest allowed size, 500px.

Fixes #1135
2026-08-22 09:17:42 +02:00
Kálmán „KAMI” SzalaiandClaude Sonnet 5 db018abacf Update Chile/Argentina stream links, rename IP Noticias to Argentina/12
Chile: fix broken NTV link (403), keep existing working T13/Mega links.
Argentina: fix broken El Trece/El Nueve links, switch Canal 26 and
América to direct streams, rename IP Noticias to Argentina/12
(channel rebranded 2025-11-12, Grupo Octubre).

Cherry-picked from #1139 and #1138.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-22 09:09:50 +02:00
Kálmán „KAMI” Szalai 51e324066d Strip trailing Ⓢ/Ⓖ/Ⓨ markers from tvg-name
Issue #483: these circled-letter suffixes are in-list markers for
human readers (subscription-required, geo-blocked, YouTube-sourced,
etc.), but were leaking into the generated tvg-name verbatim (e.g.
tvg-name="Rai 1 Ⓖ"), breaking EPG matching for any provider keying
off channel name. Now stripped from tvg-name only; the display name
after the comma still shows the marker as before.
2026-08-16 20:44:30 +02:00
Kálmán „KAMI” Szalai 5be38d635a Fix Belgium/Switzerland: mark dead streamhost.cc and other entries invalid
Issue #427: the 4ce5e2d62ee2c10e43c709f9b87c44d5.streamhost.cc CDN used
by 9 Belgian channels is only partially alive - Tipik still works, but
RTL-Be, La Une, Club RTL, La Trois, Plug RTL, Canvas, VTM, VIER and VIJF
all 404. Marked those invalid. EEN, LN24, RTS Un and RSI (raw-IP hosts)
time out at the connection level rather than returning an HTTP error -
left as-is since that could be a Belgium/Switzerland-only block rather
than genuinely dead, and can't be told apart from here.

Switzerland: TVO's Kaltura URL now 404s, marked invalid.
2026-08-16 20:31:32 +02:00
Kálmán „KAMI” Szalai c89f2b3dcf Fix Korea: mark ye23.vip and dead MBC TV entries as invalid
Issue #409: ye23.vip (used by KBS 2TV, KBS News D, KBS Drama, KBS Joy,
KBS Kids, KBS Life, KBS Story, KBS World - 8 channels) is DNS-sinkholed,
resolving to 127.0.0.1 - the domain's been taken down. MBC TV's URL
404s. KBS 1TV, EBS (all variants), SBS TV, Arirang, CJB/JIBS/OBS TV are
confirmed working. KNN/KBC/TJB/UBC/JTV TV time out at the TCP level -
could be genuinely dead or Korea-only firewalled, left as-is since that
can't be told apart from here.
2026-08-16 20:28:06 +02:00
Kálmán „KAMI” Szalai e06f65186b Fix UK NHK World/TRT World/Bloomberg, mark Sky News geo-block, cleanup
Fixed NHK World Japan, TRT World and Bloomberg TV with working sources.
Sky News was missing its Ⓖ marker (403 is the expected UK-only
geo-block, not dead). Moved 22 channels with no working replacement
found (Channel 4, E4, Film4, 4Music, 4seven, Arise News, BBC World
News, Create & Craft, GemsTV, Hobby Maker, Jewellery Maker, Kerrang!,
KISS, Magic, PBS America, TalkTV, The Box, EarthXTV, TJC, SportyStuff
TV, France 24, Ideal World) to Invalid. Partial progress on #703.
2026-08-16 20:18:29 +02:00
Kálmán „KAMI” Szalai 8364508e0e Add Stryk TV (USA)
Issue #680 asked for several country-music channels; only Stryk TV's
stream URL (from the site's page source) actually resolves to a live
HLS feed. ACN, Stars Over Texas and The Country Network don't expose
a direct stream link on their sites.
2026-08-16 20:11:16 +02:00
Kálmán „KAMI” Szalai 00f827938a Add 6 Indian news channels: Asianet News, CNN-News18, News18 variants 2026-08-16 20:03:28 +02:00
Kálmán „KAMI” Szalai 9b61c561db Fix Ukraine 212.79.122.11 UDP relay and other dead entries
The 212.79.122.11:5014 UDP-relay server (1+1 Ukraina, Inter, 2+2, M1,
Mega, K1, Enter-Film, TET, ДІМ) refuses connections now. Fixed 9
channels with working sources (mostly stream.mcquack.net / antik.sk).
6 more on the same dead server (Bigudi, Novyi Kanal, ПлюсПлюс,
Ми — Україна, Оце ТБ, Піксель TV) had no replacement found - marked
Invalid. Also fixed/cleaned up entries on a separate dead
nashnet.tv/ott.blue/tvstitch.com cluster. Partial progress on #986.

Spain: Televisión Melilla's domain no longer resolves, marked
Invalid (#1012 - no working replacement found for it or Rioja TV).
2026-08-16 19:49:51 +02:00
Kálmán „KAMI” Szalai 0f0c65697d Telenorba: real HLS source instead of YouTube; add TG Norba 24; fix Antenna Sud dead links
- Telenorba was added via YouTube live (issue #1015 asked for the
  play.telenorba.it site). That site is a JS SPA; traced its player
  bundle to play.norbaonline.it, which resolves to the same
  live-telenorba.cdn.netrw.it CDN already used by Antenna Sicilia.
  Swapped in the direct HLS master playlist.
- Added TG Norba 24 as a separate channel (same CDN, different path),
  with its Wikimedia Commons logo.
- Antenna Sud / Antenna Sud Extra (live.antennasudwebtv.it:9443) now
  time out; replaced with working URLs from the sibling
  live-antennasud.cdn.netrw.it CDN.
2026-08-16 19:49:51 +02:00
Kálmán „KAMI” Szalai 0d5a857765 Fix Japan TV channels - replace broken willfonk.com with working naori-test relay
Issues #865, #1036, #1064: Japanese TV list (~80 channels) was dependent on
single private willfonk.com token now blocking external requests.

Solution: Replace with naori-test.netgenx.site community relay providing:
- All 8 terrestrial channels (NHK, Nippon TV, TBS, TV Asahi, TV Tokyo, Fuji TV)
- All 6 major BS satellite channels
- Working HTTP 200 verified links
- Community-maintained but reliable fallback (mov3.co mirrors available)

Marked premium/subscription channels (WOWOW, J-SPORTS, Animax) as [NO PUBLIC STREAM]
2026-08-16 19:39:25 +02:00
Kálmán „KAMI” Szalai e70230e204 Add Turkmenistan, Telenorba, Handicap TV; clean up North Macedonia
- New lists/turkmenistan.md: all 8 national channels from issue #1023,
  verified working.
- Italy: added Telenorba (Puglia regional) via its YouTube live
  channel, the given URL was an HTML embed page not a stream. #1015
- France: added Handicap TV, verified working. #1049
- North Macedonia: the MRT public broadcaster channels use Windows
  Media auth tokens with validminutes=30 baked into the URL - they
  expire 30 minutes after being generated regardless of viewer
  location, so no static URL can fix them. Moved 10 other dead
  channels (timeout/404, no replacement found) to Invalid. #1025
2026-08-16 18:27:56 +02:00
Kálmán „KAMI” Szalai 4ea2f05c4b Fix Canada CBC Toronto/TVA, move other dead entries to Invalid
CBC Toronto and TVA had dead URLs; replaced with current akamaized.net
sources (both now correctly geo-blocked to Canada, matching the Ⓖ
convention, instead of dead for everyone). Citytv, CTV Toronto, Global
Toronto/Calgary/Edmonton, TVO, ONNtv Ontario, Star TV, CTV News and 7
of the Global News regional feeds are dead with no replacement found -
marked [x] in place rather than left as fake-working entries.
Partial progress on #812.
2026-08-16 18:17:59 +02:00
Kálmán „KAMI” Szalai ec3bace8e4 Fix TRT Belgesel, Spain 185.189.225.150 dead server, remove dead NPO
- Turkey: TRT Belgesel's URL was dead, applied the new -dai path from
  issue #810.
- Spain: the 185.189.225.150:85 server (Antena 3, Cuatro, Telecinco,
  La Sexta, Neox, Nova, Mega, FDF, Boing, and a duplicate TV3 entry)
  is entirely dead. Fixed Paramount Network via a working Pluto TV
  source; moved the rest to Invalid since no replacement was found.
  The TV3 entry was a pure duplicate of the already-working TV3Cat
  entry, no loss removing it. Fixes #746, #749 (partially - Mediaset/
  Atresmedia channels still need real replacements).
- Netherlands: NPO 1/2/3 have been dead since 2022 per #879, with no
  replacement found anywhere; marked [x] with no URL, matching how
  RTL 4/5/7/8 are already handled in the same file. Fixes #879.
2026-08-16 18:14:01 +02:00
Kálmán „KAMI” Szalai f5330a92e2 Fix Norway NRK/Kanal 10, Portugal SIC, Venezuela Dailymotion embed
- Norway: NRK1/2/3/Super's old akamaized path returned "Invalid URL"
  for everyone; replaced with the current path (now correctly
  geo-blocked instead of broken for everyone). Kanal 10 Norge's CDN
  is dead, switched to its YouTube channel. TV 2 Sport 1 and TV 2
  Nyheter are dead with no free source found (TV 2 Sport appears to
  require a paid TV 2 Play subscription now) - moved to Invalid.
  Fixes #1113.
- Portugal: SIC's cloudfront URL was dead, replaced with a working
  okast.tv source. Fixes #1109.
- Venezuela: "Venezolana de Televisión" pointed at a Dailymotion embed
  page instead of a stream URL, which explains why it showed
  unrelated content - moved to Invalid, no working replacement found
  yet. Fixes #969.
2026-08-16 18:05:20 +02:00
Kálmán „KAMI” Szalai c1bcb2b057 Fix Azerbaijan AZTV/Baku TV/Kanal S/Mədəniyyət TV/Xəzər Xəbər
The whole tvkaista.net stream-forwarder service (11 channels used it)
now returns 502 for every request - dead service, not a per-channel
issue. The 109.205.166.68/server124 CDN (4 channels) returns 403 for
everything. Found working replacements for 5 channels via current
sources; the rest share one of those two dead providers with nothing
found to replace them, moved to Invalid. AzStarTV was already working,
CBC Sport's 403 is the same expected Ⓖ geo-block iptv-org's own list
shows for the identical URL.

This completes the sweep through the "genuinely broken, not a
geoblocking artifact" country group (Somalia, Macau, Peru, Kosovo,
Armenia, Paraguay, San Marino, Monaco, Denmark, Cyprus, Moldova,
Romania, Azerbaijan).
2026-08-16 16:01:15 +02:00
Kálmán „KAMI” Szalai cb2418a5b3 Add FEM3 (TV2 Klub) and Viasat 6 channels to Hungary list
- FEM3 (TV2 Klub): Commercial section (working m3u8 link)
- Viasat 6: New Entertainment section (working m3u8 link)
2026-08-16 15:58:55 +02:00
Kálmán „KAMI” Szalai 830de31367 Fix Romania TVR/Telestar1 URLs; move dead Denmark TV2 regionals to Invalid
- Romania: all TVR channels (1/2/3, Info, International, Cluj, Craiova,
  Timișoara, Târgu-Mureș) used a dead mn-nl.mncdn.com path; found the
  provider's current tvr-*.lg.mncdn.com pattern and verified each one.
  TVR Iași and Telestar1 also had dead URLs, replaced. Prima TV: no
  working source found, moved to Invalid. Pro TV and România TV were
  already fine (the România TV 403 is the existing Ⓖ geo-block working
  as intended, not a broken link).
- Denmark: DR1/DR2/DR Ramasjang's 403s are the same expected Ⓖ
  geo-block, left as-is; Folketinget TV already works. All 7 TV 2
  regional stations use dead Kaltura-tokenized URLs and/or domains
  that no longer resolve, and their current sites block non-browser
  requests (406) so no replacement could be extracted; TV Storbyen,
  Kanal Hovedstaden and KKRtv are also dead with no fix found - moved
  all 10 to Invalid.
2026-08-16 15:53:01 +02:00
Kálmán „KAMI” Szalai 79a8dd9512 Fix Cyprus and Moldova broken streams
- Cyprus: RIK 1/2/HD's cloudskep.com raw-TS URLs were 404; found a
  working UDP-to-HTTP multicast proxy source and verified with real
  binary TS data. Ada TV's sc-kuzeykibrissmarttv.ercdn.net domain no
  longer resolves; found a working alternate CDN. BRT 1/2, Kıbrıs Genç
  TV, Kanal T, Kıbrıs TV, TV 2020 share that same dead domain with no
  replacement found - moved to Invalid.
- Moldova: Moldova 1/2 and TVR Moldova had dead URLs, replaced with
  current sources (trm.md's own CDN, mncdn.com). Publika TV, Canal 2,
  Canal 3 and Prime are all part of the same media group whose
  broadcast license was suspended by Moldovan authorities in October
  2023 - these aren't broken links, the channels are discontinued.
  Vocea Basarabiei and Balti TV are also dead with no fix found.
  Moved all to Invalid.
2026-08-16 09:38:24 +02:00
Kálmán „KAMI” Szalai a3d6e8c8ac Fix Peru, Somalia MM Somali TV; move dead Macau TDM channels to Invalid
- Peru: Panamericana TV, ATV+ Noticias, Karibeña TV had dead CDN URLs
  (host resolution failures / 404s), replaced with working sources.
  Top Latino TV: no replacement found, moved to Invalid.
- Somalia: MM Somali TV's CDN URL was a 404, switched to its official
  YouTube channel (768k subs, verified). The other 7 channels share
  the same ap02.iqplay.tv / mediavisionuae.com infrastructure, which
  is currently unreachable (connection timeouts) - but iptv-org's own
  community list uses the exact same URLs right now too, so this
  looks like a provider-side outage rather than dead/wrong links.
  Left unchanged rather than moving working entries to Invalid on a
  possibly-temporary outage.
- Macau: all 6 TDM channels' CDN (live4.tdm.com.mo) no longer
  resolves. TDM's site is now a heavy Vue SPA with no stream URL in
  the static HTML or common API guesses - moved to Invalid.
2026-08-16 09:26:01 +02:00
Kálmán „KAMI” Szalai e7fe359fe8 Fix Hungary TV channel logos with verified sources
Replace with official/Wikimedia logos:
- Spektrum Home: Wikimedia Commons official
- DikhTv: Wikimedia Commons official
- Euronews Hungarian: Wikimedia Commons 2016 logo
- CityTV: Official website logo
2026-08-16 09:23:56 +02:00
Kálmán „KAMI” Szalai 7634c11463 Revert "Fix broken Hungary TV channel logos - replace with working imgur links"
This reverts commit 10fe097499.
2026-08-16 09:23:56 +02:00
Kálmán „KAMI” Szalai 20cf12bf6f Fix Monaco, Paraguay, Kosovo, Armenia; add zz_music_en.md
Part of a broader link-health sweep across lists/. Tested every URL
directly (curl/ffprobe), replaced dead ones where a working source
was findable, moved the rest to each file's Invalid section.

- Monaco: both channels were dead (S3 access denied / DNS failure);
  found current sources for TV Monaco (okast.tv master.m3u8, no
  per-session token) and Monaco Info (webtv.monacoinfo.com).
- Paraguay: Unicanal and ABC TV's direct CDN URLs were dead; both run
  active official YouTube channels, switched to the same Ⓨ /live
  pattern already used elsewhere in the repo. Trece's stream is dead
  and its own site actually embeds Unicanal's feed instead of its
  own, so no fix found - moved to Invalid.
- Kosovo: RTK 1/2/4's tokenized URLs are dead and no current source
  found; RTK 3 has a working non-tokenized URL, kept.
- Armenia: Armenia 1, Kentron TV and Armenia TV had dead URLs; found
  working replacements. 5TV only has a short-lived (~5h) signed-token
  URL with no stable gateway, so it wasn't worth hardcoding - moved
  to Invalid.
- New lists/zz_music_en.md for the "NOW" retro-music FAST channels
  (Now 70's/80's, NOW Rock) - no existing thematic list fit them.
2026-08-16 09:14:33 +02:00
Kálmán „KAMI” Szalai 136b36a7c2 Fix broken Hungary TV channel logos - replace with working imgur links
Fixed channels:
- Spektrum Home
- DikhTv
- Euronews Hungarian
- CityTV
- AlföldTV
- Zugló TV
- Tisza TV
2026-08-16 09:13:04 +02:00
Kálmán „KAMI” Szalai 283bf73c93 Merge remote changes and update Erdély TV logo 2026-08-16 08:57:42 +02:00
Kálmán „KAMI” Szalai 44d0d95e58 Update Erdély TV logo in Hungary list 2026-08-16 08:56:25 +02:00
Kálmán „KAMI” Szalai 755d991b10 Add Mongolia and Kazakhstan, salvage a few new channels from PR #963
PR #963 dumped 84 mixed-country channels into a single raw .m3u8 file
in the repo root, which doesn't follow the contribution format at all
and mostly duplicates channels already in the repo (BBC News, DW,
Al Jazeera, CGTN, TRT World, NHK World, Arirang, KBS World, Bloomberg,
Carousel, Domashniy, Friday, RBK are all already present under
lists/zz_news_en.md, korea.md or russia.md with different sources).
Tested every URL directly; only kept ones that actually work.

- New lists/mongolia.md: 40 working national Mongolian channels
  (skygo.mn), 8 dead ones filed under its own Invalid section
  (TV4, Premier Sports 1-5, Mongol TV, NTN).
- New lists/kazakhstan.md: Balapan TV and Qazaqstan International;
  QazSport redirects to a geoblock placeholder, filed as Invalid.
- lists/russia.md: added "Че" (Peretz/Che), a genuine RTRS multiplex-2
  free-to-air channel that wasn't in the list yet.
- lists/zz_movies.md: added "Action Hollywood Movies" (Amagi FAST
  channel), fits the existing Pluto TV/FilmRise/Stirr pattern there.
- make_playlist.py: added "mongolia": "MN" and "kazakhstan": "KZ" to
  COUNTRY_CODES; README.md and flag_order.txt updated to match.

Left out: the various *-samsungnz.amagi.tv channels (Samsung TV Plus
NZ's own licensed feeds, not a public source), CJ OnStyle (home
shopping), NHK World Premium (paid tier), BBC Earth/Cbeebies Asia
feeds and FashionTV (no clean existing home, source legitimacy
unclear) - can revisit if there's a good place for them.
2026-08-16 08:39:41 +02:00
Kálmán „KAMI” Szalai bb565c26cc Fix M1 to use full live feed, mark MTVA HUGEO streams as geo-blocked
- M1 previously linked to the "M1 Hiradó" YouTube channel, which only
  carries news bulletins, not the actual M1 programming. Replaced with
  the real M1 live feed (same mediaklikk source already used for
  M2/M4 Sport/M5/Duna TV), kept M1 Hiradó as a separate YouTube-based
  entry since it's non-geoblocked and covers different content.
- M1, M2, M4 Sport, M5 and Duna TV's connectmedia.hu manifests
  explicitly label their audio tracks "*_HUGEO_*" (MTVA's own
  Hungary-only geo variant), confirmed by inspecting the HLS output -
  marked all five with Ⓖ per the README convention.

M3 investigated further (nemzetiarchivum.hu/api/m3/v3/stream): the
live feed is FairPlay DRM-protected (skd:// key scheme via
fairplay.keyos.com), so it cannot be played by a plain M3U8/HLS
client regardless of URL freshness - stays in Invalid.
2026-08-16 08:13:51 +02:00
Kálmán „KAMI” Szalai 0ce9df6319 Remove unused placeholder row from Hungary Invalid section
The "| * | * | [x]() |" row was leftover template cruft, unique to
this file (no other list in lists/ has it) and never matched by
make_playlist.py's [>] check anyway, so it never affected the
generated playlist.
2026-08-16 08:01:38 +02:00
Kálmán „KAMI” Szalai 845b582014 Restore Spektrum Home, Hegyvidék TV, Fix TV, ErdélyTV, Radio 1, DikhTv
Checked each remaining Invalid channel's own homepage/domain for a
current stream, per the pattern that already worked for Hegyvidék TV
in the previous commit:

- Spektrum Home: confirmed free on MinDig TV, found a working direct
  stream, moved from Invalid into Commercial.
- Hegyvidék TV: rebranded to "Buda TV" (tvbuda.hu); hegyvidektv.hu now
  embeds a new working stream; restored to Regional under a clarified
  name.
- Fix TV, ErdélyTV, Radio 1, DikhTv: their old domains/CDNs are dead,
  but each runs an active official YouTube channel (verified via
  yt-dlp, 19k-467k subscribers) using the same /live pattern already
  used for M1 Hiradó/ATV/Euronews Hungarian. Restored with Ⓨ marker.

Still unresolved (own domain checked, genuinely dead or parked):
M3, Duna World / M4+ Sport, MUSICPlus, Budakalász, VTV Füzesabony,
Putnok Városi TV, Miskolc TV (miskolctv.hu is a parked/for-sale
domain), Hatoscsatorna (site unreachable). MAX4 confirmed as a real
free MinDig TV channel but no working stream found anywhere - not
added since there is no URL to reference at all.
2026-08-16 07:55:55 +02:00
Kálmán „KAMI” Szalai 1f800fe261 Restore Pannon RTV and Tisza TV with working direct stream URLs
Found via onlinestream.live's own sitemap, then resolved to the
underlying origin URLs (stream2.nmih.hu / live.tiszatv.hu) rather than
linking through the onlinestream.live redirector itself. Verified
playable with curl + ffmpeg. Budakalász resolved successfully only
once out of several attempts (matches its "not 24/7" status elsewhere),
so it stays in Invalid rather than being restored on a single hit.
2026-08-16 07:42:31 +02:00
Kálmán „KAMI” Szalai 2c0f5fca8f Fix broken Hungarian channel streams, restore national channels
Tested every stream in lists/hungary.md against a live connection
(from a Hungarian IP, so no false negatives from geo-blocking) using
curl/ffprobe/yt-dlp. See issue #1104.

- M2/Petőfi TV, M4 Sport, M5 and Duna TV were all dead but still
  marked [>], meaning they were shipping as broken entries in the
  live playlist despite sitting in the "Invalid" section (make_playlist.py
  only checks the [>] marker, not the section). Replaced with fresh
  URLs sourced from mediaklikk's own player API and moved them into
  the National section where they belong.
- RTL Klub, TV2, ATV, Izaura TV, Ózdi Városi TV: replaced dead URLs
  with working ones. ATV now uses its official YouTube live channel,
  same pattern as M1 Hiradó.
- Fix TV, MUSICPlus, Radio 1, Budakalász, Pannon RTV, VTV Füzesabony,
  Hegyvidék TV, Tisza TV, Putnok Városi TV, Miskolc TV, Hatoscsatorna:
  no working source found, moved to Invalid with [x] per repo
  convention (not deleted).
- Duna World / M4+ Sport: no working live feed found on mediaklikk
  anymore, changed from [>] to [x].

Note: the mediaklikk-sourced connectmedia.hu URLs are session-tokenized
and will likely need refreshing again in the future - this is the same
reason the previous URLs for these channels went dead.
2026-08-16 07:12:48 +02:00
Kálmán „KAMI” Szalai 1e09008c06 Fix Malta One channel link and logo - replace expired stream 2026-08-16 06:43:05 +02:00
Kálmán „KAMI” Szalai 1c9781cb33 Fix Malta One channel link and logo - replace expired stream 2026-08-16 06:43:05 +02:00
Kálmán „KAMI” Szalai 4a63b94d96 Fix leftover M3U8 injection vector, missing country codes, README sync
- Sanitize the channel number field for embedded double quotes; the
  previous fix (#1124) covered group/name/logo/epg but missed
  tvg-chno, leaving the same attribute-injection vector open via the
  "#" column.
- Add missing "kenya" and "nigeria" entries to COUNTRY_CODES so those
  channels get a tvg-country attribute in the generated playlist.
- Sync README.md and flag_order.txt with lists/: add missing flags for
  chile, egypt, saudi_arabia, indonesia, kenya, nigeria in their
  proper geographic groups.
- Add .gitignore for __pycache__/*.pyc.
2026-08-16 06:28:29 +02:00