Releases: natyusha/ShokoRelay
v0.12.4 - Date/Image Metadata Fixes
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
IsDesiredcheck toGetAvailableImages(oversight) - Added
GetAvailableImagesto 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
Notes:
- Force refreshing the dashboard/browser/player with
Ctrl-F5is 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
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-F5is recommended - It is safe to delete
shoko-relay-header-dark.pngandshoko-relay-header-light.pngfromShokoRelay/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
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-F5is 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
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-F5is also recommended.
Changes
- Added an interactive tree view (
browser.cshtml) displaying Shoko/AniDB IDs, direct/metadatalinks, 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.cssandtree.jsto unify designs between the Video Player and VFS Browser. - Refactored
plex.jsto dynamically adjust the Plex library count label depending on the server-provided targets. - Unified thread safety using
VfsLockfor filesystem operations andSyncLockto 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
ShokoRelayConstantsand added structured builders inLogHelperto ensure uniform log creation. - Switched watched sync endpoints to use
CancellationToken.Noneto prevent connection abortions on page refreshes during database writes. - Fixed missing AnimeThemes restoration during VFS folder prunes in
RunMetadataFixupAsync. - Updated
TriggerImportAsyncto 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.jsand added contextual tooltips. - Replaced text
opacitywith hardware-friendly CSScolor-mix()andcurrentColor. - Converted
_themeMp3CachetoHashSet<string>with path comparer for faster lookups. - Upgraded Shoko Abstractions dependency from
v6.0.0-alpha.20tov6.0.0-alpha.24. - Switched legacy poster/thumbnail lookups to utilize
ImageEntityType.PrimaryandPrimaryImage. - Refactored
PlexMapping.csto leverageConcurrentDictionary.GetOrAddcaching.
Full Changelog: v0.11.5...v0.12.0
v0.11.5 - Local Plex Extra Support & AnimeThemes Persistence
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
PlexLocalExtrasadvanced setting to enable automated linking of non-Shoko video files matching Plex extra conventions. - Introduced
AssetLinkerto 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, utilizingIVideoServiceto 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
PlexConstantswith standard Plex extra subfolder names and filename suffixes. - Refactored
script.jsto automatically applytarget="_blank"andrel="noopener noreferrer"to all dashboard links viaMutationObserver. - Migrated
ShokoRelay.Plexto 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
Changes:
- Implemented atomic dictionary swapping in
OverrideHelper.LoadInternalto prevent data inconsistency during concurrent reloads. - Consolidated TMDB segment resolution within
TryResolveEpisodeContextto ensure consistent metadata and images for multi-segment episodes, removing redundant logic fromMetadataController. - Updated
SyncToPlexandSyncToShokoto trigger an override reload at the start of synchronization tasks. - Updated
ShokoRelay.ExecuteAsyncto 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
Changes:
- Added
MergeTmdbSeriesadvanced setting to automatically group Shoko series sharing a TMDB series link into a single Plex entry. - Updated
OverrideHelperto perform a discovery pass across the Shoko collection, automatically generating overrides based on earliestAirDate. - Updated
VfsBuilder.BuildInternalto triggerOverrideHelper.Reload()at the start of every build operation, ensuring metadata changes made in Shoko (like TMDB link updates) are captured. - Updated
settings.jsso the VFS Overrides button still disables itself correctly. - Synchronized all metadata and VFS consumers to utilize the
ShokoRelay.EnforceTmdbNumberingorchestrator for consistency. - Added
ShokoRelay.ShokoRelay/Config/Helperas a global usings and made the requisite adjustments to all files referencing them. - Moved
TmdbEpNumberingto 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
Changes:
- Refactored OverrideHelper into a lazy-loaded memory cache, removing all manual EnsureLoaded() calls and redundant disk I/O during batch operations.
- Fixed
PlexMetadata.BuildEpisodeListso 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
TryResolveEpisodeContexthelper - Code consolidation and style tweaks in dashboard js files
- Implemented centralized task orchestration and enforced
usings - Utilized static imports for all
ShokoRelayproperties and automation triggers. - Added
lint.ymlto enforce code quality and formatting on all Pull Requests to master. - Switched
AspNetCore.Mvc.VersioningtoAspNetCore.Mvc.Versioning.ApiExplorer. - Bumped
NLogto6.1.2andShoko.Abstractionsto6.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
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.ymlto produce archive roots without a nestedShokoRelayfolder, ensuring compatibility with Shoko's versioned plugin extraction. - Refactored
ConfigProviderto resolve thePluginDirectoryvia the .dll location rather than expecting a folder namedShokoRelay. - The plugin now prioritizes legacy nested
configfolders for manual installs but defaults to Shoko's standardconfiguration/{GUID}directory for new installs. - Updated
EnsureFfmpegConfiguredto 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
FfmpegServiceto consider theUtilities/FFmpegdirectory 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