Release Notes
Added
- Add new channel stream (audio and subtitle) selector system
- Channel editor has a new field
Stream Selector ModeDefaultmaintains existing behaviorCustomuses a YAML config file
- The YAML config contains a prioritized list of stream selector "items" (audio and subtitle criteria pairs)
- The items are tested against the media from top to bottom, and when (at least) a matching audio track is found, stream selection occurs
- As an example, the custom stream selector config can specify (in priority order):
- english audio (and disable subtitles)
- any other audio (and english subtitles, if they exist)
- Criteria can include
- Stream language
- Stream title (allowed title and/or blocked title)
- Stream condition, which is an expression that can use
id(index)titlelangdefaultforcedsdh(subtitle only)external(subtitle only)codecchannels(audio only)
- An example subtitle condition:
lang like 'en%' and external - An example audio condition:
title like '%movie%' and channels > 2
- Channel editor has a new field
- Add new channel setting
Active ModeActive- default value, channel streams as normal and has normal visibilityHidden- channel streams as normal and is hidden from M3U/XMLTV/HDHRInactive- channel cannot stream (will 404) and is hidden from M3U/XMLTV/HDHR
- Synchronize Plex "network" metadata for Plex show libraries
- Shows will have new
networksearch field - Episodes will have new
show_networksearch field
- Shows will have new
- YAML playout: add
stop_before_endsetting topad_untilanddurationinstructions- When
stop_before_end: false, content can run over the desired time before executing the next instruction
- When
- YAML playout: add
offline_tailsetting topad_untilinstruction- This can be used to stop primary content before the desired time (
stop_before_end: trueandoffline_tail: false) - You can then have a second
pad_untilwith the same target time and different content
- This can be used to stop primary content before the desired time (
- YAML playout: make
tomorrowan expression onpad_untilinstructiontrueandfalsestill work as normal- The current time (as a decimal) can also be used in the expression, e.g.
now > 23now = hours + minutes / 60.0 + seconds / 3600.0- So
10:30 AMwould be10.5,10:45 PMwould be22.75, etc
- YAML playout: make
skip_itemsan expression- The following parameters can be used:
count: the total number of items in the contentrandom: a random number between zero and (count - 1)
- For example:
count / 2will start in the middle of the contentrandomwill start at a random point in the content2(similar to before this change) will skip the first two items in the content
- The following parameters can be used:
- YAML playout: make
countan expression- The following parameters can be used:
count: the total number of items in the contentrandom: a random number between zero and (count - 1)
- For example:
count / 2will play half of the items in the contentrandom % 4 + 1will play between 1 and 4 items2(similar to before this change) will play exactly two items
- The following parameters can be used:
- YAML playout: add
disable_watermarksproperty to all content instructions- This property defaults to
false(meaning watermarks are allowed by default) - Setting to
truewill prevent watermarks from ever appearing over the content
- This property defaults to
- YAML playout: add
watermarkinstruction- With value of
trueandnameproperty, will override the watermark in the playout to the watermark with the provided name - With value of
false, will restore default watermark value (channel watermark, global watermark)
- With value of
- Show health check warning and error badges in nav menu
- Add
Expressionfor mid-roll filler to allow custom logic for using or skipping chapter markers- The following parameters can be used:
total_points: total number of potential mid-roll pointsmatched_points: number of mid-roll points that have already matched the expressiontotal_duration: total duration of the content, in secondstotal_progress: normalized position from 0 to 1last_mid_filler: seconds since last mid-roll fillerremaining_duration: duration of the content after this mid-roll point, in secondspoint: the position of the mid-roll point, in secondsnum: the mid-roll point number, starting with 1
- The following parameters can be used:
- Add
Disable Watermarkscheckbox to block items- Block items that have this checked will never display a watermark, even with Deco set to override watermark
- Add
ETV_MAXIMUM_UPLOAD_MBenvironment variable to allow uploading large watermarks- Default value is 10
- Update ffmpeg health check to link to ErsatzTV-FFmpeg release that contains binaries for win64, linux64, linuxarm64
- Add
Playback Troubleshootingpage- This tool lets you play specific content without needing a test channel or schedule
- You can specify
- The media item id (found in ETV media info, and ETV movie URLs)
- The ffmpeg profile to use
- The watermark to use (if any)
- Clicking
Playwill play up to 30 seconds of the specified content using the desired settings - Clicking
Download Resultswill generate a zip archive containing:- The FFmpeg report of the playback attempt
- The media info for the content
- The
Troubleshooting>Generaloutput
- Support
(Part [english number])name suffixes for multi-part episode grouping, for example:Awesome Episode (Part One)Better Episode (Part Two)Not So Great (Part Three)
- Add Trakt List option
Auto Refreshto automatically update list from trakt.tv once each day - Add Trakt List option
Generate Playlistto automatically generate ETV Playlist from matched Trakt List items - Read
countryfield from movie NFO files and include in search index ascountry - Add experimental and incomplete
Remote Streamlibrary kind- Remote Stream libraries have fallback metadata added like Other Video libraries (every folder is a tag)
- Remote Stream library items consist of YAML (
.yml) files with the following fieldsurl: the URL of the content that can be played directly by ffmpegscript: the process name and arguments for a command that will output content to stdoutis_live: required property that indicates whether the remote stream contains live content- When this is set to
true, ETV cannot work ahead on transcoding this item, which is a necessary tradeoff for supporting live content - When this is set to
false, ETV will treat the stream as VOD and attempt to work ahead on transcoding like any other local item- This will cause errors when the content is actually live, so it's important to configure this correctly
- When this is set to
duration: when the content is live and does not have duration metadata, this must be provided to allow scheduling
- The remote stream definition (YAML file) may provide either a
urlor ascript- If both are provided,
urlwill be used
- If both are provided,
- Include number of chapters in search index as
chapters
Changed
- Allow
Other Videolibraries andImagelibraries to use the same folders - Try to mitigate inotify limit error by disabling automatic reloading of
appsettings.jsonconfig files - Support
movie,musicvideoandepisodedetailstop-level tags in other video NFO files- Note that no change has been made to the metadata tags that are actually parsed, but this should help with various types of content
- Remove some limits on multithreading that are no longer needed with latest ffmpeg
- Mixed transcoding (software decode, hardware filters/encode) can now use multiple decode threads
- Split main
Settingspage into multiple pages - Update UI layout on all pages to be less cramped and to work better on mobile
- Add CPU and Video Controller info to
Troubleshooting>Generaloutput - Enable write-ahead logging (WAL) mode on SQLite databases
- Add
Multiple Modeoption to schedule items editor and remove support for count values of zeroCount: same behavior as before, requires a number of media items to play and will always schedule the same numberCollection Size: similar to count of zero before, will play all media items from the collection before continuing to the next schedule itemPlaylist Item Size: will play all media items from the current playlist item before continuing to the next schedule itemMulti-Episode Group Size: will play all media items from the current multi-part episode group, or one ungrouped media item
- Change watermark width and margins to allow decimals
- Move
Add To Collectionbutton to overflow menu on all media cards, and addShow Media Infoto overflow menu- This allows showing media info for all media kinds
- Unify on a multi-platform base docker tag (
latestanddevelop)amd64,arm64,arm/v7platforms are now all supported in the base docker tag- Other docker platform tags are deprecated and will receive no new updates after the next release
- A health check has been added to notify users (on
-armor-arm64tags) of this change
Fixed
- Fix QSV acceleration in docker with older Intel devices
- Fix HDR transcoding with NVIDIA accel for:
- All NVIDIA docker users
- Windows NVIDIA users who have set the
ETV_DISABLE_VULKANenv var
- Fix audio sync issue with QSV acceleration
- YAML playout: fix history for marathon and playlist content
- This allows playouts to be extended correctly, instead of always resetting to the earliest item in each group
- Fix using channel External Logo URL as watermark
- Fix display of SVG channel logo and watermark in admin UI
- Existing SVG logos and watermarks will have to be re-uploaded to display properly in the admin UI
- This does not affect streaming at all; existing artwork still works fine for streaming
- Classify HDHR endpoints as streaming endpoints
- This allows these endpoints to be accessed through port
ETV_STREAMING_PORT(default8409) - This only matters if you configured
ETV_UI_PORTto be a different value, which makes UI endpoints inaccessible on the streaming port
- This allows these endpoints to be accessed through port
- Update Plex movie/other video plot ("summary") during library deep scan
- Fix compatibility with ffmpeg 7.2+ when using NVIDIA accel and 10-bit source content
- Fix some NVIDIA edge cases when media servers don't provide video bit depth information
- Fix VAAPI tonemap failure
- Fix green bars after VAAPI tonemap
- Fix bug where playout mode
Multiplewould ignore fixed start time - Fix block playout EPG generation to use
XMLTV Time Zonesetting - Fix adding "official" Trakt lists
- Fix searching for
collectionnames with spaces or other special characters, e.g.collection:"Movies - Action" - Fix QSV transcoding errors when scaling
- Fix QSV frame freezing in browser
- Fix some stream continuity issues, and some cases where audio sync is lost at transition
- Fix HDR transcoding with AMD VAAPI accel
- Allow paths longer than 255 characters in MySql databases