6cd5471500e8a2fd5e0da8d761a2d31c4bf74926
Surfaces the per-channel playout count the previous commit put on the API as the fault state #72 calls "the important one": a channel with no playout can never play, and until now the lineup gave no sign of it. - "No playout" renders as a Badge with visible text rather than another single-letter marker like D/H. D/H flag states the user chose deliberately; this is a fault they need to notice and act on, and a tooltip-only glyph is invisible on touch and easy to miss in a long lineup. - A "Problems" segmented filter answers the issue's actual goal — seeing the health of a LARGE lineup at a glance — by collapsing it to just the faults. - `willNeverPlay` is one predicate shared by the badge, the count and the filter, so the three cannot disagree. Mirror channels relay their source's playouts and the server folds those into playoutCount, so a working mirror is not false-flagged (covered by a test). Deliberately not approximated here, per the design pass: an empty schedule behind an existing playout (EmptyScheduleHealthCheck only understands Classic ProgramSchedule playouts — a badge driven by it would silently lie on Block, Sequential, Scripted and ExternalJson channels) and broken/missing sources (FileNotFound/Unavailable are server-wide counts with no channel attribution). Both stay open on #72 rather than shipping a signal that is wrong for four of the five schedule kinds. The test fixture now sends playoutCount, matching the API, so the fault state is opt-in per test instead of depending on an absent field. Refs #72
ci(406): disable swap on the capped mysql; fix peak-step placement and failure mode [decisions-edit]
feat(api): optimistic-concurrency contract for replace-all PUTs — PR1 infra + Block reference (#253)
feat(api): optimistic-concurrency contract for replace-all PUTs — PR1 infra + Block reference (#253)
Merge pull request 'chore(deps): update dependency humanizer.core to 3.0.10' (#328) from renovate/humanizer-monorepo into main
ErsatzTV
ErsatzTV lets you transform your media library into a personalized, live TV experience - complete with EPG, channel scheduling, and seamless streaming to all your devices. Rediscover your content, your way.
How It Works
- Install ErsatzTV: Download and set up the server on your system.
- Add Your Media: Connect your media libraries and collections.
- Create Channels: Design and schedule your own live channels.
- Stream Anywhere: Watch on any device with IPTV and EPG support.
Key Features
- Custom channels: Create and schedule your own live TV channels.
- IPTV & EPG: Stream with IPTV and Electronic Program Guide support.
- Hardware Transcoding: High-performance streaming with hardware acceleration (NVENC, QSV, VAAPI, AMF, VideoToolbox)
- Media Server Integration: Connect Plex, Jellyfin, Emby and more.
- Music & Subtitles: Mix music videos and enjoy subtitle support.
- Open Source: Free, open, and community-driven project.
Documentation
Documentation is available at ersatztv.org.
License
This project is inspired by pseudotv-plex and the dizquetv fork and is released under the zlib license.
