Live TV, VOD & recordings — all in one
This project is under active development. Expect bugs, incomplete features, and rough edges. I'm still fully testing, and there are a lot of outstanding actions — use at your own risk. Expect a lot of releases, and releases which break things [but hopefully also resolves other things]
I created this app because I was a bit disappointed in the IPTV clients on Linux, SteamOS, and Android TV. Despite there being some good clients available, there are always some kind of issues with them, or you need to pay for basic functionality. Hence my attempt to create something better. Of course, at the end it's worse, but I tried :)
Note: the logo was made with AI, as I'm terrible with creating images. Feel free to propose a better logo.
This app contains a free IPTVXS server/playlist with *free*, publicly available, curated TV channels. We do **not** support any illegal IPTV providers.
If you would like a channel to be removed, please send an email to [iptvxs@schelstraete.org](mailto:iptvxs@schelstraete.org) or submit a pull request.
Author: Schelstraete Bart | www.schelstraete.org
- Xtream Codes API and M3U playlist support
- High-quality playback via libmpv with hardware-accelerated decoding
- Channel categories with search and filtering
- Channel Groups — create custom playlists, add channels via built-in search picker. Static and Dynamic groups.
- Series support with season/episode picker
- Audio track selection for multi-language VOD content
- Picture-in-Picture (PIP) — draggable floating mini-player for live TV when navigating away
- Chromecast casting — cast live TV and VOD to any Chromecast device on the network
- Automatic device discovery via mDNS
- Local HLS proxy
- XMLTV parser with automatic EPG updates (configurable interval, default 6h)
- Full TV Guide grid
- Record from EPG — one-click recording
- EPG recording padding — configurable start-early / end-late (0–5 minutes)
- Now/Next programme display in the player for live TV
- Channel search within the guide
- Live and scheduled recording
- In-player stream recording
- Record from EPG
- Schedule recordings
- EPG padding — start recording early, end late (configurable in Settings)
- Recordings saved to
~/Videos/iptvXS/(configurable) - Storage quota (default 2 GB) configuration
- Google Drive upload with resumable uploads and cross-session resume
- Retry failed uploads
- Auto-delete local files after successful Google Drive upload
- Automatic subtitle search via OpenSubtitles
- Built-in subtitle track picker for embedded subtitles
- Configurable subtitle language (primary + secondary), size, text color, and background
- Subtitle timing adjustment in the player
- GPU-accelerated video processing presets (Off / Light / Medium / Strong)
- Debanding
- High-quality scaling
- Denoising for cleaner picture
- Hardware decoding modes (Auto Safe / Auto / Software)
- Deinterlace
- 7 built-in themes: Midnight, Ocean, Forest, Sunset, Nord, Light, High Contrast
- High Contrast theme with
textOnAccenttoken for maximum readability
- Automatic tracking of watched channels, movies, and series
- Browse history sorted by most recent, grouped by type
- Remove individual entries or clear all history
- D-pad/controller navigation
- External controller support
- GameScope Google Drive auth
- Optimized for Steam Deck's display and input
- Available as a Flatpak for easy installation
- Works in both Desktop Mode and Game Mode
- Logo cache management — auto-prune (30 days), configurable max size (100 MB – 2 GB), clear button
- Database reset
- Auto-sync channels and EPG (configurable interval, default 6 hours)
- Configurable stream buffer time
- Application log
- Database maintenance
Coming soon
# Download from GitHub Releases
wget https://github.com/bschelst/iptvXS/releases/latest/download/iptvxs.flatpak
# Install
flatpak install --user iptvxs.flatpak# Download from GitHub Releases
wget https://github.com/bschelst/iptvXS/releases/latest/download/iptvXS-x86_64.AppImage
# Make executable and run
chmod +x iptvXS-x86_64.AppImage
./iptvXS-x86_64.AppImageDownload iptvXS-windows-x64.zip or iptvXS-setup-x64.exe from GitHub Releases.
- Qt 6.5+ (Core, Quick, QuickControls2, Sql, Network, Concurrent, OpenGL, Widgets, DBus)
- Qt5Compat.GraphicalEffects (for rounded corner clipping)
- libmpv
- FFmpeg
- SDL2 (Linux only, for controller support)
- CMake 3.22+
- C++20 compiler
git clone https://github.com/bschelst/iptvXS.git
cd iptvXS
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel $(nproc)./build/app/iptvXS- Install the Flatpak in Desktop Mode
- Add iptvXS as a non-Steam game in Steam
- Configure Steam Input (recommended layout):
| Controller | Action |
|---|---|
| D-pad | Navigate lists and grids |
| A button | Select / Play |
| B button | Go back |
| L1 / R1 | Previous / Next section |
| Left stick | Scroll |
- Go to Servers in the sidebar
- Click Add Server
- Enter your Xtream Codes credentials (server URL, username, password) or M3U playlist URL
- Optionally add an EPG URL (XMLTV format)
- Sync the server to fetch channels, VOD, and series
| Key | Action |
|---|---|
| Space | Play / Pause |
| F / F11 | Toggle fullscreen |
| Escape | Exit player / Exit fullscreen |
| Left / Right | Seek ±10 seconds |
| Up / Down | Volume up / down |
| M | Mute / Unmute |
| PgUp / PgDown | Previous / Next sidebar section |
iptvXS/
├── app/ # Qt/QML application
│ ├── qml/ # QML UI files
│ │ ├── views/ # Main views (Channels, VOD, Player, EPG, etc.)
│ │ ├── components/ # Reusable components (Sidebar, TopBar, Dialogs)
│ │ └── themes/ # Theme definitions (7 themes)
│ ├── viewmodels/ # C++ ViewModels (MVVM pattern)
│ └── controller_input_bridge.* # SDL2 gamepad input (Linux/Steam Deck)
├── core/ # Core library (no UI dependency)
│ ├── api/ # Xtream Codes & OpenSubtitles clients
│ ├── cache/ # Logo cache manager with auto-prune
│ ├── cast/ # Chromecast: mDNS discovery, Cast V2 protocol, HLS proxy
│ ├── db/ # SQLite repositories (14 tables, migrations, maintenance)
│ ├── gdrive/ # Google Drive OAuth & resumable upload
│ ├── models/ # Data models
│ ├── net/ # HTTP client & speed test runner
│ ├── parser/ # M3U & XMLTV parsers
│ ├── player/ # libmpv wrapper
│ └── recording/ # FFmpeg recording manager
├── tests/ # Unit tests (GoogleTest)
├── packaging/
│ ├── flatpak/ # Flatpak manifest
│ ├── linux/ # AppStream metainfo, desktop file, AppImage
│ └── windows/ # Inno Setup installer
└── .github/workflows/ # CI: Flatpak + AppImage + Windows builds
Schelstraete Bart — www.schelstraete.org — GitHub
Contributions are welcome! Please open an issue or submit a pull request.
