ErsatzTV Legacy is an open-source media server that transforms your existing personal media collection into a personalized, live TV experience. Instead of browsing a static library, you build real broadcast-style channels — complete with a schedule, an electronic program guide (EPG), and seamless streaming to any IPTV-compatible device. Whether you want a classic-movie channel that loops curated films at fixed showtimes, a themed block of TV episodes, or a 24/7 music video station, ErsatzTV Legacy gives you the scheduling engine and streaming infrastructure to make it happen.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/ErsatzTV/legacy/llms.txt
Use this file to discover all available pages before exploring further.
What Problem Does ErsatzTV Legacy Solve?
Traditional media servers like Plex, Jellyfin, and Emby are on-demand libraries: you pick what you watch and when. ErsatzTV Legacy adds the scheduling layer on top of those same libraries, turning passive content into active broadcast channels. You get the feel of curated live TV — where content plays in order, at specific times, with gaps filled by bumpers or filler — all served to any device that understands IPTV or HDHomeRun.| Feature | Plain Media Server | ErsatzTV Legacy |
|---|---|---|
| On-demand playback | ✅ | (delegate to media server) |
| Scheduled channels | ❌ | ✅ |
| IPTV M3U playlist | ❌ | ✅ |
| XMLTV EPG guide | ❌ | ✅ |
| HDHomeRun emulation | ❌ | ✅ |
| Hardware transcoding | ❌ | ✅ |
Core Concepts
ErsatzTV Legacy is built around a small set of interconnected concepts that map directly to how live TV works: Libraries are scanned collections of media items — movies, TV episodes, music videos, or other videos. Libraries can be local folders on disk or synchronized from a connected media server. Channels are the virtual broadcast channels viewers tune into. Each channel has a number, a name, an assigned FFmpeg profile that controls encoding, and a streaming mode. Schedules define how content from your libraries is arranged in time. A schedule is made up of one or more items, each pointing at a collection and specifying a playback order, duration, and timing rule. Playouts are the live instances that link a channel to a schedule. A playout continuously generates the upcoming programme timeline, so clients always see what is currently airing and what is up next. Streaming is the output layer. ErsatzTV Legacy transcodes (or stream-copies) media through FFmpeg and delivers it as MPEG-TS or HLS to any connected client using the IPTV, XMLTV, or HDHomeRun endpoint URLs.Supported Media Sources
ErsatzTV Legacy can index media from four source types:- Local — files on a path mounted to the ErsatzTV Legacy host (movies, shows, music videos, other videos).
- Plex — connect to a Plex Media Server and sync its libraries directly.
- Jellyfin — connect to a Jellyfin server and import its movie, TV, and music video libraries.
- Emby — connect to an Emby server with the same library types supported as Jellyfin.
Supported Streaming Modes
ErsatzTV Legacy exposes three standard interfaces for IPTV clients and DVR applications:- IPTV M3U — an M3U playlist at
/iptv/channels.m3ulisting every enabled channel with its stream URL. Compatible with any IPTV player (VLC, Infuse, Kodi, Channels DVR, Emby, Jellyfin, etc.). - XMLTV EPG — an XML programme guide at
/iptv/xmltv.xmldescribing current and upcoming show titles, descriptions, and air times for all channels. - HDHomeRun Emulation — ErsatzTV Legacy emulates an HDHomeRun network tuner device, discoverable at
/discover.jsonand/lineup.json. This allows Plex DVR, Emby Live TV, and other HDHomeRun-aware software to treat ErsatzTV Legacy as a TV tuner on the local network.
Hardware Acceleration
ErsatzTV Legacy uses FFmpeg for transcoding and supports all major hardware acceleration APIs so you can offload encoding from the CPU:| Accelerator | Platform | Environment |
|---|---|---|
| NVENC | NVIDIA GPUs | Linux, Windows |
| QSV | Intel Quick Sync Video | Linux, Windows |
| VAAPI | Intel / AMD (open drivers) | Linux |
| AMF | AMD GPUs | Windows |
| VideoToolbox | Apple Silicon / Intel Mac | macOS |
| RKMPP | Rockchip SoCs | Linux (ARM) |
| V4L2M2M | Generic V4L2 hardware | Linux (ARM) |
Schedule Types
Four schedule types let you express virtually any programming strategy:- Classic — a linear list of schedule items, each with a start type (fixed clock time, or immediate/flood following the previous item) and a playback order (sequential, shuffle, random, etc.). This is the most familiar model and mirrors how traditional broadcast schedules work.
- Block — a template-based system where you define time blocks (e.g. Monday 8pm–10pm) and assign collections to fill them, enabling repeatable weekly grid programming.
- Sequential — a schedule that plays through a collection from beginning to end in order, resuming where it left off across restarts, with optional date-range-based alternate schedules.
- Scripted — a Python-script-based schedule that calls the ErsatzTV Legacy API to build a fully custom playout programmatically, using the generated
etv_clientPython package bundled inside Docker.
Get Started
Installation
Install ErsatzTV Legacy on Docker, Linux, Windows, or macOS.
Quickstart
Create your first channel and start streaming in minutes.
Core Concepts
Understand channels, schedules, playouts, and more.
API Reference
Explore the REST API for automation and scripted schedules.
