Sign inSign up

sustuso/styleiptv-web

By sustuso

•Updated 4 days ago

Self-hosted IPTV web player: live TV with EPG, movies, series, recordings. Player only, no content.

Image
Web servers
0

5.6K

sustuso/styleiptv-web repository overview

⁠StyleIPTV — web player for your home network

StyleIPTV is a media player that runs on a computer of your home network (PC, mini PC, NAS, Raspberry Pi 4/5) and is used from the browser of any device: PC, phone, tablet, Smart TV — with the TV remote too (arrows, OK, Back).

  • Live TV with TV guide (EPG), films and series with posters and details
  • Keep Watching and favorites, synced with the StyleIPTV app on Android and Windows
  • Recordings of live channels, scheduled or immediate, and downloads, saved on the server
  • Audio converted on the server for channels the browser can't play

StyleIPTV is only a player. It does not include, sell or provide any channel, film, series or other content: it plays the playlists (M3U / Xtream Codes), TV guides and other sources that you add, and you are responsible for using only sources you are entitled to watch. The terms of use are shown, and must be accepted, at the first start.

⁠Requirements

  • Docker with the Compose plugin (Linux, Windows or macOS) — amd64 or arm64
  • Disk space for recordings and downloads (about 1–2 GB per hour of HD recording)

⁠Install

You need two files in a folder of their own: docker-compose.yml and .env.

⁠1. Create the folder
mkdir styleiptv && cd styleiptv
⁠2. Create docker-compose.yml

Copy the whole block into a terminal (Linux / macOS), or save the part between the EOF lines as docker-compose.yml with any text editor (Windows: Notepad, "All files").

cat > docker-compose.yml <<'EOF'
services:
  styleiptv:
    image: sustuso/styleiptv-web:latest
    container_name: styleiptv
    restart: unless-stopped
    ports:
      - "${STYLEIPTV_BIND:-0.0.0.0}:${STYLEIPTV_PORT:-8080}:8080"
    environment:
      - TZ=${TZ:-Europe/Rome}
      - STYLEIPTV_PASSWORD=${STYLEIPTV_PASSWORD:-}
      - STYLEIPTV_DASHBOARD_API_KEY=${STYLEIPTV_DASHBOARD_API_KEY:-}
      # Recordings / downloads on another disk: mount it below and set these, e.g.
      # - STYLEIPTV_RECORDINGS_DIR=/recordings
      # - STYLEIPTV_DOWNLOADS_DIR=/downloads
    volumes:
      - ./data:/data            # database, settings, cache, recordings, downloads
      # - /mnt/disk2/recordings:/recordings
      # - /mnt/disk2/downloads:/downloads
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
EOF
⁠3. Create .env (your settings)

Same as above: paste it in a terminal, or save the part between the EOF lines as .env. Then change the values you need (port, password, time zone).

cat > .env <<'EOF'
# Port to open in the browser: http://<computer-address>:<port>
STYLEIPTV_PORT=8080

# Listen only on this computer's address (e.g. the LAN one, 192.168.1.10). 0.0.0.0 = all.
STYLEIPTV_BIND=0.0.0.0

# Access password (asked once per device, remembered for 90 days). Empty = no password.
# Recommended.
STYLEIPTV_PASSWORD=

# Read-only monitoring API (/api/dashboard, sent in the X-API-Key header), for an external
# dashboard. Set a long random key to enable it. Empty = disabled.
STYLEIPTV_DASHBOARD_API_KEY=

# Time zone for the TV guide and recordings
TZ=Europe/Rome
EOF
nano .env
⁠4. Start
docker compose up -d

Open http://COMPUTER-ADDRESS:PORT⁠ (e.g. http://192.168.1.10:8080). At the first start, read and accept the terms of use; then in Settings add your playlist and press Save and download playlist.

Setting in .envWhat it does
STYLEIPTV_PORTPort to open in the browser (default 8080).
STYLEIPTV_BINDListen only on one address of the computer (default: all).
STYLEIPTV_PASSWORDAccess password, asked once per device. Recommended. Empty = none.
STYLEIPTV_DASHBOARD_API_KEYEnables the read-only monitoring API (/api/dashboard). Empty = off.
TZTime zone for the TV guide and recordings.

Your data (database, settings, recordings, downloads) is in the data folder next to docker-compose.yml.

⁠Keep it private

Use StyleIPTV on your home network, or from outside through your own VPN. Don't forward its port on the router: it relays streams for the devices that use it. Set a password.

⁠Monitoring API (optional)

A read-only JSON API for an external dashboard. Set STYLEIPTV_DASHBOARD_API_KEY to a long random value to enable it, and send that key in the X-API-Key header (never in the URL). It only reads — it can't start, stop or delete anything — and never exposes stream URLs, playlist credentials or file paths. Keep it on your LAN / VPN like the rest of the server.

EndpointReturns
GET /api/dashboard/summaryChannel, favorite and EPG counts, EPG last update, and scheduled / active / completed / failed recording counts.
GET /api/dashboard/recordings/upcoming?limit=5The next recordings (next real occurrence for repeating ones), soonest first.
GET /api/dashboard/recordings/recent?limit=5The latest recordings, newest first.

Times are ISO 8601 UTC. Responses: 401 without a valid key, 429 if polled too hard, 503 if the key isn't set.

⁠Update

docker compose pull && docker compose up -d && docker image prune -f

⁠Third-party software

The image includes .NET / ASP.NET Core (MIT), sqlite-net (MIT), SQLitePCLRaw (Apache 2.0), SQLite (public domain), mpegts.js and hls.js (Apache 2.0) and FFmpeg from the Ubuntu packages (LGPL / GPL — source code at ffmpeg.org and in the Ubuntu archive). This product uses the TMDB API but is not endorsed or certified by TMDB.

Tag summary

Content type

Image

Digest

sha256:ea9a0281a…

Size

278.5 MB

Last updated

4 days ago

docker pull sustuso/styleiptv-web