Skip to content

Releases: natyusha/ShokoRelay

v0.12.4 - Date/Image Metadata Fixes

24 May 21:16

Choose a tag to compare

Pre-release

Changes:

  • Revert to specifying ISO formatting for all dates so they function with Plex no matter what format Shoko provides (resolves an issue with episode dates)
  • Apply ToDateOnly to series airdates as Plex does not support partial series dates (which exist but are incredibly rare on anidb)
  • Added an IsDesired check to GetAvailableImages (oversight)
  • Added GetAvailableImages to several image requests where it was missing
  • Bumped Shoko Abstractions to v6.0.0-alpha.29

Full Changelog: v0.12.3...v0.12.4

v0.12.3 - Plex Auth Fix & Tree View Optimisation

24 May 02:31

Choose a tag to compare

Notes:

  • Force refreshing the dashboard/browser/player with Ctrl-F5 is recommended

Changes:

  • Fixed an issue where during the Plex auth flow library discovery would fail for users with shared but unowned servers attached to their Plex account
  • Implemented lazy loading for the tree view in the player/browser vastly increasing the performance of those pages
  • Added a new "close session" button to the top right of the video player as well as a corresponding hotkey
  • Updated the player help modal with new keys and switched the ? hotkey to toggle said modal
  • Switched to custom box icons for the fullscreen/close full screen buttons to match the help and close button styling
  • Fixed the dashboard header scaling overflowing its container at extreme zoom levels
  • Added build artifacts for manual branch builds and fixed missing tools path in lint.yml
  • Switched to the gyaru "Shoko Ai" mascot and dark theme for all logos/graphics
  • Bumped Shoko Abstractions from v6.0.0-alpha.25 to v6.0.0-alpha.28

Full Changelog: v0.12.2...v0.12.3

v0.12.2 - WebUI Theme Support & Webhook Fix

22 May 14:33

Choose a tag to compare

This update includes support for any custom themes installed for Shoko's WebUI. This allows the colours to match those of the rest of Shoko's web interface. The setting is available at the very bottom of the advanced options.

Notes:

  • Force refreshing the dashboard/browser/player with Ctrl-F5 is recommended
  • It is safe to delete shoko-relay-header-dark.png and shoko-relay-header-light.png from ShokoRelay/Dashboard/img/

Changes:

  • Fix broken Plex webhook by preventing a type conflict between the usual "guid" (string) and the new "Guid" (array)
  • Block VFS generation in overlapping import folders as nested import folders are not supported
  • Integrate IWebThemeService in DashboardController.cs to dynamically query and serve WebUI themes
  • Reconstruct #brand-header with pure HTML/CSS, using the vector Shoko logo, a custom SVG chevron and a subset of the Iosevka Extralight font
  • Remove local light-mode styles, variables, and the theme-toggle buttons globally
  • Fix tall modal dialogs on low-resolution viewports by adding maximum height and vertical body scrolling
  • Add support for overflow only tooltips to the vfs browser
  • Fix an issue where the vfs browser was not properly escaping title strings
  • Implemented fallback connections and more logging for Plex library discovery
  • Bumped Shoko Abstractions to version 6.0.0-alpha.25

Full Changelog: v0.12.1...v0.12.2

v0.12.1 - Images Fix & Player/Browser Persistence

21 May 09:21

Choose a tag to compare

This release fixes an issue where disabled or unavailable images could be returned in /metadata responses (or elsewhere) since the new unified images system in Shoko stores information about images even if they don't exist on disk.

Notes:

  • Force refreshing the dashboard/browser/player with Ctrl-F5 is recommended

Changes:

  • Introduce GetAvailableImages extension method in ImageHelper.cs to filter out disabled or locally unavailable images
  • Refactor PlexMetadata.cs, MetadataController.cs, and PlexHelper.cs to consume GetAvailableImages globally
  • Further refactor PlexMetadata.cs key and array builders to use centralized CreateXrefGuids and CreateTagArray helper methods
  • Added loading spinners and more in depth fallback text to the tree view in the video player and vfs browser
  • The video player and vfs browser now remember the last active tab and playing video by persisting them to localstorage
  • Configured the series overview WebUI link in browser.js to open in a new tab

Full Changelog: v0.12.0...v0.12.1

v0.12.0 - VFS Browser & Unified Images

21 May 00:51

Choose a tag to compare

Pre-release

After an AniDB outage, TMDB backend issues and a breaking Shoko Abstraction release it looks like everything is stable once again.

Notes:

  • If you wish to use the new VFS Browser it is recommended to do a full VFS refresh first.
  • Force refreshing the dashboard/browser/player with Ctrl-F5 is also recommended.

Changes

  • Added an interactive tree view (browser.cshtml) displaying Shoko/AniDB IDs, direct /metadata links, and physical source paths.
  • Integrated targeted refresh actions within the VFS browser to trigger VFS folder rebuilds on a per-series basis.
  • Extracted common tree-view styles and functions into tree.css and tree.js to unify designs between the Video Player and VFS Browser.
  • Refactored plex.js to dynamically adjust the Plex library count label depending on the server-provided targets.
  • Unified thread safety using VfsLock for filesystem operations and SyncLock to prevent resource-heavy Plex API tasks from overlapping.
  • Refactored settings-modifying endpoints to run via ExecuteTrackedTaskAsync, enabling clean "Busy" state reporting.
  • Updated the background automation cycle and the VFS queue to safely await locks, preventing background jobs from clashing with manual actions.
  • Consolidated task identifiers and log filenames in ShokoRelayConstants and added structured builders in LogHelper to ensure uniform log creation.
  • Switched watched sync endpoints to use CancellationToken.None to prevent connection abortions on page refreshes during database writes.
  • Fixed missing AnimeThemes restoration during VFS folder prunes in RunMetadataFixupAsync.
  • Updated TriggerImportAsync to scan all managed folders for new/unrecognized files.
  • Prevented sync modal from closing automatically and avoided duplicate toasts by clearing the task immediately on completion.
  • Consolidated control lockouts (Plex, Sync Users, TMDB) into settings.js and added contextual tooltips.
  • Replaced text opacity with hardware-friendly CSS color-mix() and currentColor.
  • Converted _themeMp3Cache to HashSet<string> with path comparer for faster lookups.
  • Upgraded Shoko Abstractions dependency from v6.0.0-alpha.20 to v6.0.0-alpha.24.
  • Switched legacy poster/thumbnail lookups to utilize ImageEntityType.Primary and PrimaryImage.
  • Refactored PlexMapping.cs to leverage ConcurrentDictionary.GetOrAdd caching.

Full Changelog: v0.11.5...v0.12.0

v0.11.5 - Local Plex Extra Support & AnimeThemes Persistence

17 May 21:45

Choose a tag to compare

Changes:

  • Fixed a long standing issue where AnimeThemes webms would not regenerate after an automatic VFS build or series prune
  • Added "Dry Run" support to the Confirmation and Sync Watched modals, allowing users to generate preview logs before committing actual changes.
  • Updated ShokoImportService to identify and remove database records for files located in ignored paths, enabling the "Remove Missing" task to clean up newly excluded directories or suffixes.
  • Added PlexLocalExtras advanced setting to enable automated linking of non-Shoko video files matching Plex extra conventions.
  • Introduced AssetLinker to manage the discovery and linking of local media assets (posters, themes) and non-Shoko Plex extras.
  • Implemented show, season, and episode-level extra discovery in LinkLocalExtras, utilizing IVideoService to ensure only unindexed files are processed.
  • Synchronized VFS naming for inline episode extras to match their parent Shoko-indexed files (e.g., S01E01 [ID]-trailer.mkv).
  • Updated PlexConstants with standard Plex extra subfolder names and filename suffixes.
  • Refactored script.js to automatically apply target="_blank" and rel="noopener noreferrer" to all dashboard links via MutationObserver.
  • Migrated ShokoRelay.Plex to a global using.
  • Updated the readme/settings help modal to account for the new (and existing) metadata support as well as the automated ignore behaviour.

Full Changelog: v0.11.4...v0.11.5

v0.11.4 - Refine Auto TMDB Series Merging

15 May 19:35

Choose a tag to compare

Changes:

  • Implemented atomic dictionary swapping in OverrideHelper.LoadInternal to prevent data inconsistency during concurrent reloads.
  • Consolidated TMDB segment resolution within TryResolveEpisodeContext to ensure consistent metadata and images for multi-segment episodes, removing redundant logic from MetadataController.
  • Updated SyncToPlex and SyncToShoko to trigger an override reload at the start of synchronization tasks.
  • Updated ShokoRelay.ExecuteAsync to trigger an override cache reload immediately after Shoko Server starts.
  • Implement visual indicators on the dashboard for settings requiring VFS rebuilds and add a description to the help modal.

Full Changelog: v0.11.3...v0.11.4

v0.11.3 - Automatic TMDB Series Merging

15 May 07:29

Choose a tag to compare

Pre-release

Changes:

  • Added MergeTmdbSeries advanced setting to automatically group Shoko series sharing a TMDB series link into a single Plex entry.
  • Updated OverrideHelper to perform a discovery pass across the Shoko collection, automatically generating overrides based on earliest AirDate.
  • Updated VfsBuilder.BuildInternal to trigger OverrideHelper.Reload() at the start of every build operation, ensuring metadata changes made in Shoko (like TMDB link updates) are captured.
  • Updated settings.js so the VFS Overrides button still disables itself correctly.
  • Synchronized all metadata and VFS consumers to utilize the ShokoRelay.EnforceTmdbNumbering orchestrator for consistency.
  • Added ShokoRelay.ShokoRelay/Config/Helper as a global usings and made the requisite adjustments to all files referencing them.
  • Moved TmdbEpNumbering to the advanced settings as is requires a vfs build like some of the other advanced settings do.
  • Updated the readme with the changes as well as some settings names on the dashboard

Full Changelog: v0.11.2...v0.11.3

v0.11.2 - Boost Override Performance for Metadata/Mapping

14 May 17:09

Choose a tag to compare

Changes:

  • Refactored OverrideHelper into a lazy-loaded memory cache, removing all manual EnsureLoaded() calls and redundant disk I/O during batch operations.
  • Fixed PlexMetadata.BuildEpisodeList so it correctly handles "Joined" episodes that are also split into parts, ensuring each part-specific ratingKey is unique and properly ordered (they already worked in plex but this reduces duplicates in the api response).
  • Condensed metadata controller mapping logic via a new TryResolveEpisodeContext helper
  • Code consolidation and style tweaks in dashboard js files
  • Implemented centralized task orchestration and enforced usings
  • Utilized static imports for all ShokoRelay properties and automation triggers.
  • Added lint.yml to enforce code quality and formatting on all Pull Requests to master.
  • Switched AspNetCore.Mvc.Versioning to AspNetCore.Mvc.Versioning.ApiExplorer.
  • Bumped NLog to 6.1.2 and Shoko.Abstractions to 6.0.0-alpha.20.
  • Adopted the GNU GPLv3 license.

Full Changelog: v0.11.1...v0.11.2

v0.11.1 - Update Build Archive, Configuration Storage and Binary Discovery

11 May 16:13

Choose a tag to compare

Anyone switching from a manual installation to testing out the manifest version of the plugin should note that you will need to manually move the contents of your Shoko Relay config folder if you want to retain your settings. The new configuration path is as follows: Shoko Root/configuration/2b0f5a7e-3d2b-4f3d-9e6b-7f0a6b2d8c9a

Those who continue to install the plugin manually can proceed as usual but should note that there is no longer a nested ShokoRelay folder in the archive. If you plan on using a manifest version in the future, migrating the settings to the new location is still recommended.

Changes:

  • Updated build-release.yml to produce archive roots without a nested ShokoRelay folder, ensuring compatibility with Shoko's versioned plugin extraction.
  • Refactored ConfigProvider to resolve the PluginDirectory via the .dll location rather than expecting a folder named ShokoRelay.
  • The plugin now prioritizes legacy nested config folders for manual installs but defaults to Shoko's standard configuration/{GUID} directory for new installs.
  • Updated EnsureFfmpegConfigured to verify the existence of cached binary paths before proceeding.
  • Added logic to automatically trigger a re-scan of valid locations if FFmpeg or FFprobe are moved or deleted while the server is running.
  • Enhanced FfmpegService to consider the Utilities/FFmpeg directory in the Shoko server root for binary discovery.
  • Updated readme with new manual installation instructions and FFmpeg search priority details.
  • Clear manifest.json of the previous version as it would not function correctly
  • Bump plugin to v0.11.1

Full Changelog: v0.11.0...v0.11.1