A self-hosted companion server for the NostalgiaTV Android app. Generates 30-day schedules, indexes your Plex, Jellyfin, or Emby content, manages channels and commercials, and exposes a browser-based Watch and Configure UI — plus an HDHR/IPTV tuner so other apps (Plex DVR, Channels DVR, Jellyfin, TiviMate, etc.) can tune in too.
/watch— Live TV guide with an inline player, plus On Demand, Movies, and TV Shows browsing. Sign in with Plex, Jellyfin, Emby, or a local account./configure— admin tabs: Channels, Commercials, Groups, Schedule, Design, Profile Configuration, Servers, Admin (External Sources, Automatic Backup, Logs).
Media servers
- Plex, Jellyfin, and Emby — connect any mix of them, as many as you like, and pick which libraries feed the guide per server (Servers tab).
- Cross-server duplicate hiding — when the same movie or episode lives on more than one server (e.g. mid-migration), only one copy shows up. Matched by provider ID (TMDB/IMDb/TVDB) for movies and by show + season + episode for episodes; each server carries a preference rank.
- Content sync — movies, shows, episodes, music, collections, and labels, indexed incrementally and self-healing on deletion.
- Local folders — the Android app can scan local files on the device. In Docker mode, mirror folders (offline copies of your server library) match against the Docker server’s library; local-only libraries are Android-only.
Channels
- Your libraries — default channels plus custom channels built from libraries, collections, playlists, genres, decades, studios, labels, or hand-picked items, with per-channel weights, time slots, restricted hours, and exclusions.
- Plex Live TV and Jellyfin / Emby Live TV — your DVR/tuner channels pulled into the lineup with their EPG, playable as live streams.
- External Sources — import third-party M3U / XMLTV / HDHR lineups (other tuners, IPTV providers), editable and refreshable from the browser.
- Live Stream channels — point a channel at a stream URL or resolver; finite videos are broadcast-clock aligned so every device lands at the same position.
- Music “Tune Choice” channels — genre radio stations with a themed visualizer in the Watch UI.
- Weather — the built-in WeatherStar 4000 channel and the native Storm Channel, which falls back to a deterministic offline weather simulation (season-correct temps, real sunrise/sunset, accurate moon phases) when there’s no internet.
- Trailers (“What’s On”) — a channel of trailers for what’s airing.
- Content Groups — reusable named sets of content you can drop into channels.
Schedule
- 30-day generation — algorithms: RANDOM, CYCLIC_SHUFFLE, BLOCK_SHUFFLE, BLOCK_CYCLIC.
- Marathon insertion, premiere assignment for recently-added items, commercial padding, mature/kid filtering, recently-scheduled tracking.
- Per-channel refresh — regenerate one channel’s schedule without touching the rest.
Commercials
- Commercial groups, break sequences (bumper → commercial → …), padding, and mid-program breaks.
- Sources: a whole library, a collection, a playlist, specific items, a music genre, or trailers — and any source can come from any backend, so a Plex bumper and a Jellyfin commercial can share one break.
- Mid-break modes:
HALFWAY,CHAPTERS(from the item’s own server), andSILENCE— real ffmpeg silence detection, which runs on the Docker server only (too CPU-heavy for a TV stick).
Everything else
- Multi-profile support — separate channel configs, schedules, themes, and settings per profile (kids, adult, guest, etc.), switchable from both UIs.
- Themes + Design tab — 8 built-in themes (Retro, Vintage, Premium, Rad-Lad, Classic, Modern, Cable Box, Midnight Blue) plus custom themes, fonts, and CRT/bezel effects, all editable from the browser.
- Watch UI playback — commercials and break screens, trailer pre-rolls, subtitle and audio-track selection, scrubbing, resume / Continue Watching, and CRT effects with bezels.
- Config import/export — full settings transfer, per-profile or whole-server, and multi-backend aware (server identities travel; tokens never do).
- Automatic Backup — weekly snapshots of the full config, rotated, restorable in one click from the Admin tab.
- Authentication — Plex / Jellyfin / Emby / local sign-in for the Watch UI, a local username+password for Configure, and API-key auth for the Android app.
HDHR / IPTV tuner emulator (enabled by default)
Exposes your whole channel lineup to anything that speaks HDHR:
GET /discover.json,/lineup.json,/device.xml,/lineup_status.jsonGET /channels.m3u(M3U playlist) andGET /xmltv.xml(EPG)GET /stream/{channelId}for tuner playback




