Lineup is a .NET application that fetches Electronic Program Guide (EPG) data from a network TV tuner device and converts it into XMLTV format — the standard format used by media servers like Jellyfin and Plex for TV guide display.
It includes a web-based dashboard, a terminal UI, live TV streaming with transcoding, and automatic scheduled EPG fetching with smart incremental updates.
Currently this is only supporting the HDHomeRun Tuners like the HDHomeRun FLEX 4K. Hopefully more can be added in the future.
/api/xmltv for external media servers to pull the guide file directly| Project | Description |
|---|---|
Lineup.HDHomeRun.Device | Local device communication — discovery, channel lineup, native binary protocol |
Lineup.HDHomeRun.Api | Remote API client — fetches EPG data from api.hdhomerun.com |
Lineup.Core | Core business logic — orchestration, XMLTV conversion, caching (EF Core + SQLite) |
Lineup.Web | Blazor Server web app — dashboard, EPG guide viewer, settings, live TV |
Lineup.Tui | Terminal UI — interactive menu using Spectre.Console |
cd src/Lineup.Web
dotnet run
The app starts on http://localhost:8080 by default. Configure the HDHomeRun device address through the settings UI or via the Lineup__DeviceAddress environment variable.
cd src/Lineup.Tui
dotnet run
Configure via environment variables:
Lineup__DeviceAddress — HDHomeRun device IP or hostnameLineup__DatabasePath — path to the SQLite cache databasedocker compose up -d
Or using the production image:
docker compose -f docker-compose.prod.yml up -d
The Docker image includes ffmpeg for live TV transcoding. Data is persisted via a named volume at /config. Use network_mode: host if your HDHomeRun device requires local network discovery.
All settings are configurable through the web UI's settings page and persisted to settings.json:
| Setting | Description |
|---|---|
| Device Address | HDHomeRun device IP or hostname |
| XMLTV Output Path | Where to write the generated XMLTV file |
| Fetch Interval | Minutes between automatic EPG fetches |
| Target Days | Number of days of EPG data to fetch |
This project is licensed under the GNU General Public License v3.0.
Content type
Image
Digest
sha256:8ad3873a0…
Size
259.2 MB
Last updated
about 1 month ago
docker pull pickit420/lineup