An accessible IPTV client I VibeCoded using Wx Python
  • Python 98.3%
  • PowerShell 1.3%
  • Batchfile 0.3%
Find a file
2026-05-17 17:48:25 -07:00
test_zombie_env Fix system tray focus for NVDA and improve Xtream TS stream detection 2026-01-31 20:10:48 -08:00
tests fix: stop bundled proxy from dying on every request (noconsole stderr) 2026-05-17 17:47:31 -07:00
tools fix: stop bundling local config 2026-05-16 15:31:04 -07:00
.gitattributes Add unified casting support and update docs 2025-12-10 10:48:50 -08:00
.gitignore Ignore .claude/ local settings 2026-05-07 10:39:38 -07:00
agents.md fix: stop bundled proxy from dying on every request (noconsole stderr) 2026-05-17 17:47:31 -07:00
app_meta.py chore(release): v1.97.11 2026-05-17 17:48:25 -07:00
build.bat feat: add updater and release pipeline 2025-12-28 14:26:53 -08:00
BUILD.md docs: document build and release flow 2026-05-07 11:30:37 -07:00
build_exe.bat fix: keep draft cleanup release-safe 2026-05-16 15:23:05 -07:00
casting.py fix: keep Chromecast alive while slow HLS upstreams warm up 2026-05-17 17:09:12 -07:00
check_playlist_format.py Fix system tray focus for NVDA and improve Xtream TS stream detection 2026-01-31 20:10:48 -08:00
check_playlist_variants.py Fix system tray focus for NVDA and improve Xtream TS stream detection 2026-01-31 20:10:48 -08:00
debug_ffmpeg_remux.py Fix system tray focus for NVDA and improve Xtream TS stream detection 2026-01-31 20:10:48 -08:00
external_player.py Fix system tray focus for NVDA and improve Xtream TS stream detection 2026-01-31 20:10:48 -08:00
ffmpeg.exe Fixes. 2025-12-20 18:53:43 -08:00
http_headers.py Refactor player controls and add external player support 2025-12-13 22:16:18 -08:00
init.mp4 Enhance casting, proxy, and accessibility features 2025-12-19 17:32:02 -08:00
internal_player.py Fix laggy live stream playback by enabling frame dropping and reducing restart aggression 2026-03-08 17:13:39 -07:00
LICENSE Initial commit 2025-05-21 14:37:56 -07:00
main.py fix: harden AirPlay and Chromecast casting 2026-05-17 16:45:48 -07:00
main.spec fix: stop bundling local config 2026-05-16 15:31:04 -07:00
options.py fix(epg): correctly normalize channel names with tags in brackets like (UKHD) 2026-01-28 19:44:26 -08:00
playlist.py fix: improve EPG import freshness and regional matching 2026-05-16 14:45:48 -07:00
providers.py Experimental XtreamCode and StockerPortal support. 2025-09-15 14:18:26 -07:00
README.md Add Telegram group link to README 2026-05-07 10:27:36 -07:00
repro_skymix_matching.py Fix system tray focus for NVDA and improve Xtream TS stream detection 2026-01-31 20:10:48 -08:00
repro_zombie_update.py Fix system tray focus for NVDA and improve Xtream TS stream detection 2026-01-31 20:10:48 -08:00
requirements.txt v1.93.27: Add test suite, fix tray focus for NVDA 2026-01-31 19:17:33 -08:00
sitecustomize.py Refactor player controls and add external player support 2025-12-13 22:16:18 -08:00
stream_proxy.py fix: stop bundled proxy from dying on every request (noconsole stderr) 2026-05-17 17:47:31 -07:00
test_airplay_universal.py fix: harden AirPlay and Chromecast casting 2026-05-17 16:45:48 -07:00
test_cast_universal.py fix: harden AirPlay and Chromecast casting 2026-05-17 16:45:48 -07:00
test_epg.db Fix updater invisibility, auto-cleanup backups, and optimize stream buffering 2026-01-30 12:54:56 -08:00
test_fox_cast.py fix: keep Chromecast alive while slow HLS upstreams warm up 2026-05-17 17:09:12 -07:00
TRIAGE.md Fix audio mute bug and improve stream startup time 2026-01-31 17:34:24 -08:00
update_helper.bat Fix updater invisibility, auto-cleanup backups, and optimize stream buffering 2026-01-30 12:54:56 -08:00
update_helper.ps1 Fix updater invisibility, auto-cleanup backups, and optimize stream buffering 2026-01-30 12:54:56 -08:00
update_helper_launcher.vbs Fix updater invisibility, auto-cleanup backups, and optimize stream buffering 2026-01-30 12:54:56 -08:00
updater.py fix: Authenticode verification now works with PowerShell Core environment 2026-01-31 18:03:22 -08:00

Accessible IPTV Client

Accessible IPTV Client is an accessible, keyboard-first IPTV player that works well with screen readers. It runs on Windows and Linux and supports playlists, EPG, catch-up, and casting.

Features

  • Screen reader friendly (NVDA, JAWS, Narrator, Orca)
  • M3U / M3U+ playlists, Xtream Codes, and Stalker Portal sources
  • Built-in player (libVLC via python-vlc) or external player support (VLC, MPC-HC, MPV, etc.)
  • Channel groups, fast search, and EPG search
  • XMLTV EPG support (.xml and .xml.gz)
  • Catch-up/timeshift playback for supported channels
  • Optional system tray minimize
  • Casting support
  1. Download the latest release build from GitHub Releases.
  2. Unzip it somewhere like C:\Apps\AccessibleIPTVClient\.
  3. Run IPTVClient.exe.
  4. Add a playlist: Ctrl+M (Playlist Manager).
  5. Optional: add EPG sources: Ctrl+E (EPG Manager), then Ctrl+I to import.
  6. Pick a channel and press Enter to play.

Requirements (Run From Source)

  • Python 3.11+
  • pip packages from requirements.txt
  • If you want the built-in player: VLC 3.0+ installed (python-vlc loads libVLC from your VLC install)

Install + Run (Windows or Linux)

python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python main.py

Keyboard Shortcuts

Main Window

  • Ctrl+M - Playlist Manager
  • Ctrl+E - EPG Manager
  • Ctrl+I - Import EPG to database
  • Ctrl+Q - Exit
  • Enter - Play selected channel
  • Context Menu / Apps Key - Channel options (including Catch-up if available)

Built-in Player

  • Space - Play/Pause
  • Up / Down - Adjust volume (2% steps)
  • Ctrl+Up / Ctrl+Down - Adjust volume (5% steps)
  • F11 - Toggle fullscreen
  • Escape - Exit fullscreen
  • Tab - Navigate between controls

EPG Notes

  • During EPG import, a detailed log is written to your temp directory as iptvclient_epg_debug.log.
  • .xml.gz guides are supported and are handled via a safe download/verify workflow.

Built-in Player Buffering

The internal player sizes its network buffer dynamically. You can tune it in iptvclient.conf:

  • internal_player_buffer_seconds (default ~2s)
  • internal_player_max_buffer_seconds (default ~18s)
  • internal_player_variant_max_mbps (HLS quality cap in Mbps, 0 = no cap)

Lower values start faster; higher values are more tolerant of jitter.

Build a Standalone App

Windows

Run:

build.bat build

Output:

  • App folder: dist\iptvclient
  • Release assets: dist\release\

Linux (or manual Windows build)

python -m pip install pyinstaller
pyinstaller --clean main.spec

Release + Auto-Update (Windows)

Release pipeline

  • build.bat dry-run - show the next version bump and release notes
  • build.bat release - bump version, build, sign, zip, tag, push, and create a GitHub Release

Prerequisites:

  • gh CLI authenticated (gh auth login)
  • Code signing certificate installed and signtool.exe available (or set SIGNTOOL_PATH)

Auto-update behavior

  • Updates are supported on Windows packaged builds (not source runs).
  • Releases include a zip plus a manifest (AccessibleIPTVClient-update.json) with SHA-256 + signing thumbprint.
  1. Install/unzip an older build into a test folder.
  2. Create a new release with build.bat release.
  3. Launch the older build and use Options -> Check for Updates.
  4. Accept the update, then confirm the app restarts at the new version and a backup folder remains next to the install folder.

##Submit bugs in issues, or join my Telegram group! (https://t.me/SerrebiProjects)