Release Notes
Added
- Add experimental graphics engine
- All watermarks will use new graphics engine
- Add
Opacity Expressionwatermark mode- This allows specifying an expression that returns an opacity between 0.0 and 1.0
- The expression can use:
content_seconds- the total number of seconds the frame is into the contentcontent_total_seconds- the total number of seconds in the contentchannel_seconds- the total number of seconds the frame is from when the channel started/activatedtime_of_day_seconds- the total number of seconds the frame is since midnight
- The expression can also use functions:
LinearFadeDuration(time, start, fadeSeconds, peakSeconds)LinearFadePoints(time, start, peakStart, peakEnd, end)
- Add
Z-Indexto watermark editor- The graphics engine will order by z-index when overlaying watermarks
- Add experimental
Graphics Elementtemplate system- Graphics elements are defined in YAML files inside ETV config folder / templates / graphics-elements subfolder
- Add
textgraphics element type- Supported in playback troubleshooting and YAML playouts
- Displays multi-line text in a specified font, color, location, z-index
- Supports constant opacity and opacity expression
- Supports EPG and Media Item variable replacement
- EPG data is sourced from XMLTV for the current time
- EPG data can also load a configurable number of subsequent (up next) entries
- Media Item data is sourced from the currently playing media item
- EPG data is sourced from XMLTV for the current time
- Add
imagegraphics element type- Supported in playback troubleshooting and YAML playouts
- Displays an image, similar to a watermark
- Supports constant opacity and opacity expression
- Add
subtitlegraphics element type- Supported in playback troubleshooting and YAML playouts
- Supports SRT and SSA/ASS subtitle formats
- Supports EPG and Media Item variable replacement
- EPG data is sourced from XMLTV for the current time
- EPG data can also load a configurable number of subsequent (up next) entries
- Media Item data is sourced from the currently playing media item
- EPG data is sourced from XMLTV for the current time
- YAML playout: add
graphics_onandgraphics_offinstructions to control graphics elementsgraphics_onrequires the name of a graphics element template, e.g.text/cool_element.yml- The
variablesproperty can be used to dynamically replace text from the template
- The
graphics_offwill turn off a specific element, or all elements if none are specified
- Add
Seek Secondsto playback troubleshooting to support capturing timing-related issues - Custom stream selector: add
content_conditionto allow channel and time-of-day based decisionscontent_conditionexpression can usechannel_numberchannel_nametime_of_day_seconds- the start time for the current item, represented in seconds since midnight
- Add support for external chapter files next to video files
- Currently supports Matroska Chapter XML format
- Chapter files have .xml or .chapters extension
- Currently supports Matroska Chapter XML format
- Add targeted (single-show) library scanning
- Supports quick and deep scans
- Can be triggered from the
Scanbutton on show pages - Can be triggered by API call to
/api/libraries/{library-id}/scan-show
- Add XMLTV setting
XMLTV Block Behaviorto control how block schedules appear in the EPGSplit Time Evenly- default (existing) behavior; block time is split among all items that are visible in the EPGUse Actual Times- actual times are used for all items that are visible in the EPG- This will introduce EPG gaps when filler is used, or when items are hidden from the EPG
- Add experimental
Scripted Scheduleplayout system- This system uses python scripts to support the highest degree of customization
- The goal is to expose methods equivalent to all sequential schedule (YAML) instructions
- YAML and Scripted schedules: add
offline_tailandstop_before_endtopad_to_nextinstruction- Both parameters default to
true
- Both parameters default to
Fix
- Fix database operations that were slowing down playout builds
- YAML playouts in particular should build significantly faster
- Fix channel playout mode
On Demandfor Block and YAML schedules - Fix QSV transitions when remote streaming from a media server
- Fix green output when padding with VAAPI accel and i965 driver
- Fix watermark custom image validation
- Fix playback when using any watermarks that were saved with invalid state (no image)
- Fix overlapping block playout items caused by
Stop scheduling block itemsvalueAfter Duration End- Existing overlapping items will not be removed, but no new overlapping items will be created
- Until these existing items age out, there will be warnings logged after each playout build/extension
- Fix playback of anamorphic content from Jellyfin
- This fix requires a manual deep scan of any affected Jellyfin library
- Fix bug where multiple Plex servers would mix their episodes
- Fix incorrect media item counts after removing paths from local libraries
- Fix song playback in playback troubleshooting
- Fix seeking into extracted text subtitles
- Fix error when changing default (lowest priority) alternate schedule
- Fix remote library editing, tv shows, artists with MySql/MariaDB
- Classic schedules: fix alternate schedule transitions (some edge cases would cause days to be skipped completely)
- Classic schedules: always start new alternate schedules with the first schedule item
- Classic Schedules: log offline gaps longer than 1 hour due to strict fixed start times
- Fix
HLS Segmenter V2streaming mode with AMF acceleration - Fix
HLS Segmenter V2streaming mode with VideoToolbox acceleration - Fix startup process for database and search index initialization
- Redirect all pages to home page when initializing to prevent errors
- Clear stale sqlite migration lock on startup to prevent getting stuck on database initialization
- Fix display of long season placeholder text (when season posters are unavailable)
Changed
- Rename some schedule and playout terms for clarity
- Schedules are used to build playouts and are what actually differs
- The playout is the end result, and is the same no matter what schedule kind is used
- Supported schedule kinds:
Classic SchedulesBlock SchedulesSequential Schedules(formerlyYAML SchedulesorYAML Playouts)Scripted SchedulesJSON (dizqueTV) Schedules(formerlyExternal JSON Playouts)
- Allow multiple watermarks in playback troubleshooting
- Classic schedules: allow selecting multiple watermarks on schedule items
- Block schedules: allow selecting multiple watermarks on decos
- Block schedules: change available watermark modes on decos. For reference, the levels from highest to lowest with block schedules are
Global>Channel>Playout Default Deco>Template Deco.Inherit- Use watermarks configured at a higher levelDisable- Disable watermarks at this level and aboveReplace- Replace all watermarks configured at a higher level with those on this deco- This was renamed from
Override
- This was renamed from
Merge- Merge all watermarks configured at a higher level with those on this deco
- YAML playout:
watermarkinstruction changes:- When value is
true, will add named watermark to list of active watermarks - When value is
falseandnameis specified, will remove named watermark from list of active watermarks - When value is
falseandnameis not specified, will clear all active watermarks
- When value is
- Use consistent UI sorting and validation, and fix renaming errors for
- Block groups, blocks
- Template groups, templates
- Deco groups, decos
- Deco template groups, deco templates