Improvements & Fixes
- [CI] Corrected macOS executable and native-module architecture checks in the release workflow, preventing valid artifacts from being rejected because of malformed architecture matching expressions (@WhiteGiso)
- [Subtitles] Aligned the HTML subtitle outline layer with its rendered subtitle padding, keeping text, background, and outline geometry synchronized across standard web playback (@WhiteGiso)
- [Subtitles] Preserved the webOS subtitle layout contract by keeping transparent subtitle backgrounds while retaining the correct outline and inline padding (@WhiteGiso)
- [Sync] Preserved regional TMDB language codes in shared TV profile settings instead of collapsing values such as es-419, pt-BR, and en-GB to their base language (@WhiteGiso)
- [Sync] Normalized Portuguese Brazilian settings to the lowercase pt-br representation expected by the Android TV catalogue (@WhiteGiso)
- [webOS] Improved Matroska embedded text-subtitle parsing by reading cue durations and BlockGroup durations when available (@WhiteGiso)
- [webOS] Switched text-subtitle windows from broad cluster loading to direct CueRelativePosition frame loading, reducing unnecessary media reads (@WhiteGiso)
- [webOS] Added selection of the closest preceding subtitle cue when it falls within the active subtitle window, preventing missing text immediately after seeking or window boundaries (@WhiteGiso)
- [webOS] Added safer filtering of embedded subtitle frames by the requested time range and preserved cue timing metadata for rendering (@WhiteGiso)
- [Player] Scoped subtitle request headers to the URL and origin that should receive them, preventing stream credentials from leaking to unrelated subtitle hosts (@WhiteGiso)
- [Player] Added safe handling for cross-origin subtitle requests, including allow-listed request headers and removal of cookies, proxy, control, and browser-internal headers (@WhiteGiso)
- [Player] Removed authorization, origin, referer, and authentication headers when a subtitle redirect downgrades from HTTPS to HTTP (@WhiteGiso)
- [Player] Added bounded manual subtitle redirect handling with a safe headerless fallback for opaque or cross-origin redirects (@WhiteGiso)
- [Player] Propagated provider-owned subtitle headers through plugin results, stream repositories, addon subtitle repositories, and the player subtitle pipeline (@WhiteGiso)
- [Subtitles] Added language aliases for Indonesian, Malay, Bahasa Indonesia, Bahasa Malaysia,
id,in,ind,ms,may, andmsa(@WhiteGiso) - [Subtitles] Prioritized human-readable language labels when a technical subtitle language code is ambiguous between Malay and Indonesian (@WhiteGiso)
- [webOS] Preserved explicitly selected native audio and subtitle tracks while the native media pipeline is recreated for the same playback source (@WhiteGiso)
- [webOS] Reapplied selected native tracks after metadata, canplay, and playing events when the platform restages the media element (@WhiteGiso)
- [webOS] Added explicit track-selection cleanup during playback teardown so selections from a previous item cannot bleed into the next item (@WhiteGiso)
- [Player] Preserved the maximum known playback duration across native media restaging, matching Android TV’s stable-duration behavior (@WhiteGiso)
- [Player] Prevented local completion handling from duplicating provider tracking writes when playback scrobbling already owns the provider history update (@WhiteGiso)
- [Skip] Added reusable skip-interval rules shared by the player and post-play recommendation flow (@WhiteGiso)
- [Skip] Added movie credits and post-credits support to IntroDB interval mapping (@WhiteGiso)
- [Skip] Added TMDB-to-IMDb fallback resolution for movie skip-interval requests when an IMDb identifier is not directly available (@WhiteGiso)
- [Skip] Added validation for negative, overlapping, invalid, and out-of-range skip intervals (@WhiteGiso)
- [Skip] Added configurable movie-credit skipping to the playback settings surface (@WhiteGiso)
- [Skip] Added “Skip Movie Credits” and “Skip to Post-Credits” player actions (@WhiteGiso)
- [Skip] Improved post-credit target calculation so skipping credits lands at the beginning of the next detected scene instead of blindly jumping to the end of the current interval (@WhiteGiso)
- [Post-play] Aligned movie post-play triggers with credit and post-credit intervals when available (@WhiteGiso)
- [Post-play] Applied Android-aligned movie percentage, episode percentage, and minutes-before-end thresholds to recommendation prefetch and display decisions (@WhiteGiso)
- [Post-play] Preserved skip-interval and threshold state through post-play recommendation snapshots and countdown evaluation (@WhiteGiso)
- [Player] Hardened skip-button visibility and focus checks against transient webOS DOM states and nodes that remain reachable through the document but report unreliable connection flags (@WhiteGiso)
- [Player] Prevented stale skip-overlay focus from leaking Select events into the next card or the generic player action handler (@WhiteGiso)
- [Player] Added cancellable player source loading so late provider responses cannot overwrite a newer playback request (@WhiteGiso)
- [Player] Improved stream-source metadata shown in the paused player overlay, including source name and provider context (@WhiteGiso)
- [Player] Improved player metadata hierarchy, subtitle direction, source labels, and Android-aligned typography for TV layouts (@WhiteGiso)
- [Plugins] Aligned unknown and future repository-type handling with Android TV by allowing document-based auto-detection instead of permanently treating valid manifests as opaque repositories (@WhiteGiso)
- [Plugins] Preserved raw repository information for diagnostics while preventing unknown enum values from blocking valid JavaScript manifest classification (@WhiteGiso)
- [MDBList] Added direct Rotten Tomatoes metadata enrichment using IMDb metadata and keyword information (@WhiteGiso)
- [MDBList] Added certified-fresh, fresh, rotten, verified-hot, hot, and stale rating-state classification (@WhiteGiso)
- [MDBList] Added dedicated certified Rotten Tomatoes, rotten, verified audience, and stale audience artwork assets (@WhiteGiso)
- [MDBList] Propagated rating certification state to metadata, detail, and playback surfaces (@WhiteGiso)
- [Trakt] Corrected playback synchronization to query the typed movies and episodes endpoints instead of the untyped playback endpoint (@WhiteGiso)
- [Trakt] Combined movie and episode playback results into one normalized Smart-TV playback projection (@WhiteGiso)
- [Simkl] Added TVDB as an available anime/content identifier preference (@WhiteGiso)
- [Simkl] Improved canonical identifier selection so available anime identifiers are considered independently of the declared media type (@WhiteGiso)
- [Simkl] Added media-category information to library entries so anime and other remote categories can be filtered consistently (@WhiteGiso)
- [Tracking] Decoupled local watched-state persistence from provider connectivity checks so a Trakt or Simkl outage does not discard local completion state (@WhiteGiso)
- [Tracking] Added explicit skip-tracking-write paths to avoid duplicate provider writes during local reconciliation and playback completion (@WhiteGiso)
- [Home] Added access to the authoritative in-flight profile pull so Home can wait for cold-start synchronization without remaining indefinitely in a loading state (@WhiteGiso)
- [Home] Prevented provisional local Continue Watching data from being published as the final first row while the authoritative Nuvio Sync pull is still active (@WhiteGiso)
- [Home] Added a controlled background refresh after startup synchronization completes, preserving the current Home return state (@WhiteGiso)
- [Home] Added modern-home TMDB enrichment for artwork, basic information, details, status, release information, runtime, and localized metadata (@WhiteGiso)
- [Home] Kept TMDB hero enrichment asynchronous and independently gated by the user’s modern-home settings (@WhiteGiso)
- [Home] Improved trailer resolution by allowing inline data, addon metadata, and TMDB fallback data to be resolved without unnecessary serial blocking (@WhiteGiso)
- [Home] Avoided frame-by-frame scrollTop writes on performance-constrained TV runtimes, relying on focus-driven scrolling where continuous scrolling is too expensive (@WhiteGiso)
- [Continue Watching] Prevented movie entries from incorrectly using episode-thumbnail artwork when the item is not a series (@WhiteGiso)
- [Continue Watching] Aligned progress-bar coloring and artwork fallback ordering with the Android TV presentation contract (@WhiteGiso)
- [TMDB] Added stable collection-part ordering by release date while preserving source order for entries with equal or missing dates (@WhiteGiso)
- [Detail] Added cached, timeout-bounded TMDB trailer fallback resolution for detail pages (@WhiteGiso)
- [Detail] Added RTL-aware direction attributes to titles, descriptions, credits, trailer metadata, and other content text (@WhiteGiso)
- [Search] Added profile-scoped search history with case-insensitive deduplication and a maximum of eight recent searches (@WhiteGiso)
- [Search] Removed shorter duplicate history entries when a newer query already contains them as a prefix (@WhiteGiso)
- [Search] Added recent-search activation, individual removal, complete history clearing, and Android-aligned D-pad focus movement (@WhiteGiso)
- [Search] Saved only valid searches that produce results and preserved the platform input/IME behavior when moving from the search field to results (@WhiteGiso)
- [RTL] Added a shared Unicode text-direction resolver for Arabic, Hebrew, numeric, Latin, and mixed-content labels (@WhiteGiso)
- [RTL] Applied direction-aware rendering to Home, Search, Detail, Streams, Player, Settings, and authentication surfaces (@WhiteGiso)
- [Authentication] Forced email and password inputs to use left-to-right direction regardless of the active content language (@WhiteGiso)
- [Library] Aligned local and remote library source handling with the shared LibrarySourceMode contract (@WhiteGiso)
- [Library] Used normalized media categories when building library type tabs, counts, and filters (@WhiteGiso)
- [Streams] Reused valid repository-owned stream sessions on initial load instead of forcing a new provider search every time (@WhiteGiso)
- [Streams] Added abort handling for in-flight stream loads so stale provider responses cannot repaint a newer Streams screen (@WhiteGiso)
- [Streams] Added direction-aware rendering for addon labels, stream titles, quality labels, and descriptions (@WhiteGiso)
- [Discover] Corrected poster hydration to target the actual see-all card poster selector used by the rendered Discover surface (@WhiteGiso)
- [CSS] Added Android-aligned search-history controls, player metadata spacing, progress layout, typography, and no-flex-gap fallbacks for older TV runtimes (@WhiteGiso)