asummoner/tvviewerapp

By asummoner

β€’Updated 4 days ago

Lightweight IPTV streaming web app | 16,000+ channels | NAS-ready | Browser-based

Image
Networking
Web servers
0

3.9K

asummoner/tvviewerapp repository overview

⁠TV Viewer Web πŸ“Ί

GitHub Release Docker Image Size Docker Pulls

Lightweight IPTV streaming web interface with 16,000+ channels. Perfect for NAS devices, home servers, and self-hosted media setups.

🌐 Project Homepage⁠ | πŸ“¦ Source Code⁠ | πŸ“‹ Changelog⁠


⁠What is TV Viewer?

TV Viewer is a self-hosted web application that aggregates free-to-air IPTV streams from around the world into a beautiful, modern interface. Deploy it on your NAS or any Docker host and watch live TV from any browser β€” no app installs, no subscriptions, no VLC required.

Why use TV Viewer?

  • Zero configuration β€” launches with 16,000+ channels pre-loaded
  • Runs anywhere β€” Synology, QNAP, Unraid, TrueNAS, Raspberry Pi, any Docker host
  • Tiny footprint β€” under 50 MB RAM, 0.1 CPU core minimum
  • Browser-based β€” works on phones, tablets, smart TVs, laptops
  • Privacy-first β€” no accounts, no tracking, no cloud dependency

⁠Quick Start

docker run -d --name tv-viewer -p 8765:8765 -v tv-viewer-data:/data --restart unless-stopped asummoner/tvviewerapp

Then open http://your-server-ip:8765⁠ in any browser. That's it!

⁠Features

  • 🌍 16,000+ live TV channels from 55+ countries
  • 🎬 In-browser HLS playback β€” no VLC or external player needed
  • πŸ”€ Multi-source failover β€” automatically switches to backup streams
  • πŸ“‘ Built-in CORS proxy β€” plays streams that normally block browsers
  • πŸ—ΊοΈ Interactive world map β€” browse channels by country
  • πŸ”€ A-Z sorted channels β€” easy to find what you want
  • ❀️ Favorites with server-side persistence
  • πŸ“Š Health tracking β€” broken channels filtered automatically
  • πŸ“Ί EPG program guide (Now/Next)
  • πŸ”’ Parental controls with PIN lock
  • 🎨 Dark/Light themes β€” modern responsive UI

⁠Resource Requirements

ResourceMinimumRecommended
RAM48 MB128 MB
CPU0.1 core0.5 core
Disk80 MB100 MB
Network1 Mbps10 Mbps

⁠Supported Architectures

ArchitectureTag
x86-64amd64
ARM64arm64

Multi-arch manifest: asummoner/tvviewerapp:latest auto-selects the correct platform.

⁠Docker Compose

services:
  tv-viewer:
    image: asummoner/tvviewerapp:latest
    container_name: tv-viewer
    ports:
      - "8765:8765"
    volumes:
      - tv-viewer-data:/data
    environment:
      - TZ=Asia/Jerusalem
      - SUPABASE_URL=${SUPABASE_URL:-}
      - SUPABASE_ANON_KEY=${SUPABASE_ANON_KEY:-}
    deploy:
      resources:
        limits:
          memory: 128M
          cpus: '0.5'
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8765/api/status')"]
      interval: 60s
      timeout: 5s
      start_period: 30s
      retries: 3

volumes:
  tv-viewer-data:

⁠Data Persistence

Favorites, channel cache, and health data are stored in /data inside the container. Mount a volume to preserve data across container upgrades:

# Named volume (recommended)
docker run -d --name tv-viewer -p 8765:8765 -v tv-viewer-data:/data asummoner/tvviewerapp

# Or bind mount to host directory
docker run -d --name tv-viewer -p 8765:8765 -v /path/to/data:/data asummoner/tvviewerapp

What's persisted in /data:

FilePurpose
channels.jsonChannel cache (avoids re-fetching on restart)
favorites.jsonYour saved favorite channels

⁠NAS Installation

⁠Synology (Container Manager)
  1. Open Container Manager β†’ Registry β†’ Search asummoner/tvviewerapp
  2. Download latest tag
  3. Create container: port 8765 β†’ 8765, memory limit 128 MB
  4. Start and open http://synology-ip:8765
⁠QNAP (Container Station)
  1. Open Container Station β†’ Create β†’ Search asummoner/tvviewerapp
  2. Set port mapping: 8765 β†’ 8765
  3. Set memory limit: 128 MB
  4. Apply and access via browser
⁠Unraid
  1. Go to Docker β†’ Add Container
  2. Repository: asummoner/tvviewerapp
  3. Port: 8765 β†’ 8765
  4. Apply
⁠TrueNAS SCALE
  1. Apps β†’ Launch Docker Image
  2. Image: asummoner/tvviewerapp:latest
  3. Port: 8765
  4. Save

⁠Environment Variables

VariableDefaultDescription
TV_VIEWER_WEB_PORT8765Server listen port
TZUTCTimezone for EPG schedule
DATA_DIR/dataPersistent data directory
TELEMETRY_ENABLEDtrueAnonymous usage analytics (channel health)
SUPABASE_URL(empty)Supabase project URL for shared analytics
SUPABASE_ANON_KEY(empty)Supabase anon key (public, RLS-protected)

⁠API Endpoints

EndpointDescription
GET /api/statusServer health + channel count
GET /api/channels?country=US&category=News&limit=50Channel list with filters
GET /api/countriesAvailable countries
GET /api/categoriesAvailable categories
GET /api/sources/{channel_name}Alternative stream URLs
GET /api/proxy?url=...CORS proxy for HLS streams
GET /api/epg/{channel_name}EPG program guide
POST /api/health/reportReport channel status

⁠Updating

Your favorites and channel data persist in the /data volume across upgrades:

# Docker Compose (recommended β€” keeps /data volume intact)
docker compose pull && docker compose up -d

# Manual Docker
docker pull asummoner/tvviewerapp:latest
docker stop tv-viewer && docker rm tv-viewer
docker run -d --name tv-viewer -p 8765:8765 -v tv-viewer-data:/data --restart unless-stopped asummoner/tvviewerapp

⁠Source Code & Documentation

ResourceLink
🌐 Homepagetv-viewer-app.github.io/tv_viewer⁠
πŸ“¦ GitHubtv-viewer-app/tv_viewer⁠
πŸ“‹ ChangelogCHANGELOG.md⁠
πŸ› IssuesReport a bug⁠

⁠License

MIT

Tag summary

Content type

Image

Digest

sha256:45cd8b111…

Size

29.6 MB

Last updated

4 days ago

docker pull asummoner/tvviewerapp