Check Message

Release Notes

Added

  • Add linux-musl-x64 artifact for users running Alpine x64
  • Add API endpoint to empty trash (POST to /api/maintenance/empty_trash)
    • e.g. curl -XPOST -d '' http://localhost:8409/api/maintenance/empty_trash
  • Add remote IP and user agent to HTTP request logging
  • Add environment variables to allow ETV to run UI and streaming on separate ports
    • ETV_STREAMING_PORT: port used for streaming requests, defaults to 8409
    • ETV_UI_PORT: port used for admin UI, defaults to 8409
  • Publish docker images to ghcr.io (ghcr.io/ersatztv/ersatztv)
  • Add new option Fixed Start Time Behavior to Schedules and Schedule Items
    • Schedules can set a default behavior for all items
    • Schedule items can override this default behavior
    • Possible values are:
      • Strict: Always wait for the exact start time, even if that means waiting (adding unscheduled time) until the next day
      • Flexible: Start scheduling immediately (do not wait) if waiting (adding unscheduled time) would go into the next day
    • As an example, if the current scheduling time is 6:02 AM and the next schedule item has a fixed start time of 6:00 AM
      • Strict will add nearly 24h (23:58) of unscheduled time so that it can start exactly at 6:00 AM the next day
      • Flexible will NOT add unscheduled time, and will schedule its item at 6:02 AM (which may also affect the scheduling of later items)
  • Add basic HDR transcoding support
    • VAAPI may use hardware-accelerated tone mapping (when opencl accel is also available)
    • NVIDIA may use hardware-accelerated tone mapping (when vulkan accel and libplacebo filter are also available)
    • QSV may use hardware-accelerated tone mapping (when hardware decoding is used)
    • In all other cases, HDR content will use a software pipeline
    • The tonemap algorithm can be configured in the ffmpeg profile
  • Use hardware-accelerated padding with VAAPI
  • Add environment variable ETV_DISABLE_VULKAN
    • Any non-empty value will disable use of Vulkan acceleration and force software tonemapping
    • This may be needed with misbehaving NVIDIA drivers on Windows
  • Add health check error when invalid VAAPI device and VAAPI driver combination is used in an active ffmpeg profile
    • This makes it obvious when hardware acceleration will not work as configured
  • Add button in schedule editor to clone schedule item
  • Allow YAML playout sequence definitions to reference other sequences
    • Cycles will be detected and logged, and sequences with cycles will prevent the playout from building
  • Add repeat property to YAML sequence instruction
    • This tells the playout builder how many times this sequence should repeat
    • Omitting this value is the same as setting it to 1
  • Add collection (name) to search index for manual collections created within ETV
    • Collections synchronized from media servers are still indexed as tag
  • Allow searching by smart_collection (name)
    • Quotes are always required around each collection name when using this feature
      • e.g. smart_collection:"one" OR smart_collection:"two"
    • Cycles will be detected and logged, and searches with cycles will not work as expected
  • Add all ETV_* environment variables to Troubleshooting > General info
  • Add External Logo URL field to channel editor
    • Using external (public) logos should fix channel logo display for clients that don't proxy artwork (such as Plex)
    • Users who have customized the XMLTV channel template channel.sbntxt will need to update their templates again
      • This is because the templates require different logic for external URLs vs ETV-hosted URLs

Changed

  • Start to make UI minimally responsive (functional on smaller screens)
  • Change how ETV determines which address to use for Plex connections
    • The active Plex connection (address) will only be cached for 30 seconds
    • When the connection is no longer cached, a ping will be sent to the last used address for Plex (the last address that had a successful ping)
    • If the ping is successful, the address will be cached for another 30 seconds
    • If the ping is not successful, all addresses will be checked again, and the first address to return a successful ping will be cached for 30 seconds
  • Remove requirement to have Jellyfin admin user; user id is no longer required on requests to latest Jellyfin server
  • Upgrade bundled ffmpeg on Windows from 6.1 to 7.1.1
  • Upgrade VAAPI docker image Ubuntu base from 22 to 24; bundled ffmpeg from 6.1 to 7.1.1
  • Upgrade NVIDIA docker image Ubuntu base from 20 to 24; bundled ffmpeg from 6.1 to 7.1.1
  • Upgrade base, arm, arm64 docker images bundled ffmpeg from 6.1 to 7.1.1
  • Unify all hardware acceleration methods in base docker images (latest and develop)
    • VAAPI, QSV and NVIDIA are now all supported in the base docker image
    • Other docker image tags are deprecated and will receive no new updates after the next release
    • A health check has been added to notify users (on -vaapi or -nvidia tags) of this change
  • Schedule items editor: show currently selected row using background color instead of font weight

Fixed

  • Fix error message about synchronizing Plex collections from a Plex server that has zero collections
  • Fix navigation after form submission when using ETV_BASE_URL environment variable
  • Fix UI crashes when channel numbers contain a period . in locales that have a different decimal separator (e.g. ,)
  • Fix playout detail table to only reload once when resetting a playout
  • Fix date formatting in playout detail table on reload (will now respect browser's Accept-Language header)
  • Use cache busting to avoid UI errors after upgrading the MudBlazor library
  • Fix multi-variant playlist to report more accurate BANDWIDTH value based on ffmpeg profile
  • Fix detecting NVIDIA capabilities on Blackwell GPUs
  • Fix decoder selection in NVIDIA pipeline
  • Prevent playback order Shuffle In Order from being used with Fill With Group Mode as they are incompatible
  • Fix XMLTV items not grouping properly (guide mode: Filler) due to post-roll filler

Full changelog is available on GitHub

An error has occurred. This application may no longer respond until reloaded. Reload 🗙