Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

430 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“Ί TV Viewer

Community-powered IPTV player with 16,000+ crowdsourced channels, privacy-first analytics, and community statistics.

MIT License Latest Release Python Flutter Docker Platform

🌐 Visit the TV Viewer Landing Page β†’

TV Viewer is a free, open-source IPTV player where the community maintains the channel list. Users report broken streams, submit new channels, and anonymously share aggregate usage signals that improve stream health and discovery for everyone. No account needed. No ads. No tracking by default.

Support the Project 🍺

If TV Viewer saves you a cable bill or just makes your day better, consider supporting development:

Ko-fi

✨ What's New in v2.20.2

  • Community Statistics page now shows richer totals for channels, categories, countries, and recent additions
  • Timezone-based country detection improves local recommendations and privacy-preserving analytics on Android and Web
  • Supabase backend migrated to project cdtxpefohpwtusmqengu
  • APKPure notify workflow added to the release pipeline
  • Docker Hub stays current with asummoner/tvviewerapp:latest

See the CHANGELOG for full release history.

Features

  • 🌍 16,000+ channels worldwide β€” Aggregated from community-maintained playlists and configurable sources
  • πŸ‘₯ Crowdsourced quality β€” Users report broken streams and submit fixes from the app or GitHub
  • πŸ“Š Community Statistics β€” Anonymous aggregated usage data for active users, plays, countries, and platform trends
  • 🌐 Timezone-based country detection β€” Privacy-friendly local country inference without GPS or IP lookup
  • πŸ“‚ Rich browsing β€” Filter by category, country, language, and media type (TV/Radio)
  • πŸ“» Dedicated radio experience β€” Background audio playback, genre browsing, and now-playing controls on Android
  • πŸ”€ Multi-source failover β€” Switch between alternative stream sources without leaving playback
  • πŸ’Ύ Offline-friendly caching β€” Local cache and favorites still work when Supabase is unavailable
  • πŸ“Ί EPG support β€” XMLTV-based now/next program data with live progress bars
  • πŸ”’ Privacy-first telemetry β€” Opt-in analytics only, with no login and no PII collection
  • πŸ›‘οΈ Hardened web backend β€” SSRF protections, safe Supabase writes, and server-side statistics aggregation
  • 🐳 Self-hosted web/Docker edition β€” FastAPI + HLS.js UI for NAS and browser deployments

Availability

Channel Status Notes
GitHub Releases βœ… Live Windows zip, Linux source, Android APK + AAB assets
Google Play βœ… Live Primary Android store distribution
F-Droid 🟑 MR open fdroid-build.yml produces unsigned APK artifacts
APKPure 🟑 Pending apkpure-notify.yml helps release discovery
Samsung Galaxy Store 🟑 Pending Planned additional Android storefront
Docker Hub βœ… Live asummoner/tvviewerapp:latest

Downloads

Platform Download Notes
Android Google Play / Latest Release Android 8.0+ (API 26)
Windows Latest Release Self-contained, VLC bundled
Web / Docker docker run -p 8765:8765 asummoner/tvviewerapp:latest Browser-based, NAS-friendly
Linux From source Python 3.12+ + VLC

Quick Start

Windows

  1. Download the latest Windows asset from Releases
  2. Extract anywhere and run TVViewer.exe

Android

  1. Install from Google Play or download the latest APK from Releases
  2. Open TV Viewer and start browsing channels immediately

From Source (Windows/Linux)

git clone https://github.com/tv-viewer-app/tv_viewer.git
cd tv_viewer
pip install -r requirements.txt
python main.py

Web Interface (Docker)

docker run -d --name tv-viewer -p 8765:8765 --restart unless-stopped asummoner/tvviewerapp:latest
# Open http://localhost:8765

Web Interface (Dev)

pip install -r web/requirements.txt
python -m web.server
# Open http://localhost:8765

Tech Stack

Layer Stack Notes
Desktop Python 3.12 + CustomTkinter + VLC Native Windows/Linux client
Mobile Flutter 3.32.0 + Material 3 Gradle 8.9, AGP 8.7.0, Kotlin 1.9.22
Web FastAPI + vanilla JS + HLS.js Browser UI + self-hosted Docker image
Shared backend Supabase (cdtxpefohpwtusmqengu) Channels, status, analytics, aggregated stats
Android audio just_audio + audio_service Background playback for radio streams
CI/CD 28 GitHub Actions workflows Release, store, Docker, analytics, backend ops

Documentation

Document Description
CHANGELOG.md Version history and release notes
docs/ARCHITECTURE.md System architecture and current platform stack
CONTRIBUTING.md How to contribute channels, code, and docs
docs/SUPPORT_GUIDE.md Troubleshooting guide
docs/API.md API notes for the web backend
docs/TEST_PLAN.md Test plan and coverage
docs/RELEASE_PROCESS.md Release checklist
PRIVACY_POLICY.md Privacy policy

Project Structure

tv_viewer_project/
β”œβ”€β”€ main.py                 # Desktop entry point
β”œβ”€β”€ config.py               # Configuration and current version (2.20.2)
β”œβ”€β”€ Dockerfile              # Docker image definition
β”œβ”€β”€ core/                   # Channel manager, repository, stream checker
β”œβ”€β”€ ui/                     # Desktop UI
β”œβ”€β”€ utils/                  # Shared utilities, analytics, normalization, Supabase client
β”œβ”€β”€ web/                    # FastAPI backend + static web client
β”œβ”€β”€ flutter_app/            # Flutter Android app source + fastlane metadata
β”œβ”€β”€ tests/                  # Python tests (299+)
β”œβ”€β”€ docs/                   # Project documentation
└── .github/workflows/      # CI/CD automation (28 workflows)

CI/CD

TV Viewer uses 28 GitHub Actions workflows across validation, release orchestration, store publishing, Docker publishing, analytics, and Supabase maintenance. Key workflows include:

  • ci.yml β€” core CI for Python/Web changes
  • build.yml / release.yml / release-gate.yml β€” release pipeline and gating
  • build-apk.yml / play-store-deploy.yml β€” Android APK/AAB build and Google Play deployment
  • fdroid-build.yml / apkpure-notify.yml β€” alternate Android distribution channels
  • docker-publish.yml β€” multi-arch Docker Hub publish (latest + version tags)
  • supabase-*.yml and analytics workflows β€” backend health, keepalive, monitoring, reporting

Troubleshooting

See docs/SUPPORT_GUIDE.md for detailed troubleshooting.

Problem Solution
VLC not found The Windows release bundles VLC. From source, install VLC locally
No channels Check connectivity and refresh sources
Stream not playing Try another source from the source selector
Statistics unavailable Verify the web server can reach Supabase and /api/statistics is enabled
Supabase unavailable The app continues to work from cache; analytics and shared health resume later

Contributing

We welcome contributions! See CONTRIBUTING.md for how to:

  • πŸ“Ί Submit new channels or report broken ones
  • πŸ› Report bugs
  • πŸ’» Contribute code
  • πŸ“– Improve documentation

License

MIT License β€” see LICENSE for details.

Credits

  • IPTV-org and other community playlist maintainers
  • python-vlc for desktop playback
  • Flutter for the Android client
  • Supabase for the shared backend and aggregated analytics

About

πŸ“Ί Community-powered IPTV player with 8000+ crowdsourced channels. Android, Windows, Linux. Free forever.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages