Releases: IbbyLabs/XRDB
v1.25.1
Tip
Changelog: read the matching entry or browse the full compare.
Fixed
-
replace Google S2 favicon URLs with direct gstatic faviconV2 URLs
Google S2 favicons redirect server side to faviconV2 gstatic URLs. The
redirect chain was causing fallback 2 letter text icons instead of the
actual provider logos. Replace all 9 affected providers with the direct
faviconV2 URLs which return HTTP 200 without a redirect.Fixes: TMDB, MDBList, IMDb, Rotten Tomatoes, Letterboxd, SIMKL,
Roger Ebert, MyAnimeList, AniList
Documentation
- refresh static doc assets
v1.25.0
Tip
Changelog: read the matching entry or browse the full compare.
Added
-
add dedicated per type genre badge X/Y offset controls
Add eight new settings — posterGenreBadgeOffsetX/Y, backdropGenreBadgeOffsetX/Y,
thumbnailGenreBadgeOffsetX/Y, logoGenreBadgeOffsetX/Y — giving each image type
independent pixel level control over where genre badges are drawn, matching the
offset capability already available for quality and rating badges.UI
• Two new ScaleField controls ("Genre offset X", "Genre offset Y") added to
LookSection in configurator appearance sections.tsx, bounded by the shared
rating stack offset limits (MIN/MAX_RATING_STACK_OFFSET_PX).
• Both controls update the active per type value via the existing previewType
dispatch pattern so preview and export stay in sync.Config model
• SharedXrdbSettings gains all eight fields, defaulting to
DEFAULT_RATING_STACK_OFFSET_PX and normalized through normalizeRatingStackOffsetPx.
• buildSharedPayload omits values that equal the default (lossless round trip).
• Profile verification coverage extended with integer range tests for all eight
keys under the genre badge family.
• Proxy config allowlists updated with shared genreBadgeOffsetX/Y and all four
per type variants.State and hooks
• useConfiguratorWorkspaceState: eight useState hooks, values and setters exported.
• useConfiguratorActiveWorkspaceSettings: activeGenreBadgeOffsetX/Y computed from
previewType; setActiveGenreBadgeOffsetX/Y dispatched to the correct per type setter.
• configuratorPageProps: lookProps carries activeGenreBadgeOffsetX/Y and
onSelectGenreBadgeOffsetX/Y.
• useConfiguratorOutputs: appendGenreBadgeQueryParams emits offset params when
non default; useMemo dependency array includes both active offset values.
• useConfiguratorWorkspaceConfigIo: all eight fields included in
buildCurrentUiConfig payload and applySavedUiConfig deps array.
• useConfiguratorWorkspaceRuntime: threads per type offset state through the full
hook chain.Request parsing and render pipeline
• imageRouteRequestState: parses globalGenreBadgeOffsetX/Y, then per type
overrides, and resolves the active pair from imageType.
• finalImageRenderSeed: includes offset values in the cache key when genre mode
is active, ensuring renders vary correctly per offset.
• imageRouteExecution → imageRoutePreparedMedia: offsets forwarded through the
pipeline and included in GenreBadgeSpec.
• imageRouteRenderer: GenreBadgeSpec type extended with optional offsetX/offsetY.
• imageRouteGenrePlacement: baseLeft/initialTop adjusted by offsetX/offsetY before
the clamped final position is returned.
Fixed
-
restore poster quality badge offset controls in UI
The configurator now exposes poster quality badge X and Y position offsets, fixing the regression where these settings were only available as query params and changelog surfaced options.
• add Position Offset controls for poster quality badges in the Quality section
• wire new controls through configurator page props and workspace state setters
• thread values through workspace runtime and config IO apply and save flows
• include poster quality badge offsets in output URL generation when non default
• add shared config defaults and normalization for both offset fields
• serialize offsets in payloads only when values differ from defaults
• register offset keys in proxy config schema allowlists and typings
• include offset keys in poster quality reset group coverage
• add config profile verification entries for both offset params
• add regression tests for:
• AIOMetadata export includes poster scoped offset params when set
• offsets stay poster scoped and do not leak to other surfaces
• reset groups include both new offset keys
Documentation
- refresh static doc assets
v1.24.0
Tip
Changelog: read the matching entry or browse the full compare.
Added
-
improve plain quality badge readability and add poster badge offsets
• Reduce plain quality badge blur softness so text and glyph edges stay sharper at poster scale.
• Add adaptive plain readability plate logic that only appears when backdrop luminance variance indicates poor contrast.
• Add poster scoped quality badge position controls via query params:
• posterQualityBadgeOffsetX
• posterQualityBadgeOffsetY
• Wire new params through request normalization, execution input, renderer placement, and final render seed.
• Bump final render seed version to v15 to prevent stale cache collisions after placement and readability changes.
• Fix logo band regression by clamping overlay bounds against final composited output height where required.
• Document new poster badge offset parameters in README parameter tables and usage guidance.
• Add offsets to addon developer optional pass through parameter list.
• Add offsets to AI integration URL BUILD template so generated links preserve the new controls.
• Extend render seed tests to verify poster only cache key impact for new offsets and no backdrop seed leakage.
• Add dedicated renderer regression tests for:
• X and Y offset movement behavior
• Offset clamp behavior
• Adaptive readability plate on busy versus flat backgrounds
• Refresh static documentation assets after rendering changes, including comparison boards and captured preview/proxy images.
• Sync README preview gallery metadata and capture date updates from asset refresh workflow.Files touched
• README.md
• readme preview gallery.json
• addon proxy live demo.png
• configurator live demo.png
• anime logo comparison.png
• movie poster comparison.png
• show backdrop comparison.png
• finalImageRenderSeed.ts
• imageRouteExecution.ts
• imageRouteQualityBadge.ts
• imageRouteRenderer.ts
• imageRouteRequestState.ts
• final image render seed.test.mjs
• image route renderer quality badge plain.test.mjs -
add icon shape controls for rating provider badges
• add support for icon shape selection with values original, circle, squircle, and rounded
• keep original as the default so existing URLs and visuals remain unchanged
• thread icon shape through request parsing, render input, cache keys, and final image seed generation
• apply icon masking in both icon preprocessing and SVG badge clip paths for consistent output
• ensure plain rating style also respects non original icon shape selections
• update shared UI config schema, normalization, serialization, and saved profile verification coverage
• wire icon shape state through configurator workspace state, config IO, runtime, outputs, and advanced look controls
• place icon shape control in Advanced look section and remove accidental placement from Simple quick tune
• update README parameter docs and integration template examples for iconShape
• update tests for cache key format and UI config round trip behavior -
add AIOMetadata public instance picker for repair profiles
Introduce a dedicated AIOMetadata base URL picker in the Export repair section
to improve instance selection flow for public and self hosted users.• add curated public AIOMetadata instances
• replace native datalist behavior with a custom styled picker UI
• add dropdown toggle control with visible arrow affordance
• support open on focus and ArrowDown, close on outside click and Escape
• support search/filter by instance name and base URL while typing
• keep addon password hidden when selected base URL is a known public instance
• keep addon password visible for self hosted or unknown custom instances
• omit addon password from repair API payload when the selected instance is publicFiles:
• components/export view.tsx
Fixed
-
FR-91 localize clean genre badge labels
Use the resolved genre badge label for clean badge rendering
instead of replacing it with a fixed English family label.This fixes cases where genre badges stayed in English even when
XRDB requests used a non English language setting and TMDB
returned localized genre names. -
remove age rating from custom icon overrides
-
preserve fantasy classification with TMDB combined sci fi genres
Update genre family resolution to split explicit science fiction from combined sci fi and fantasy signals.
Fantasy now takes precedence when fantasy is present and there is no explicit science fiction signal.
Sci fi still wins when explicit science fiction is present, and combined sci fi and fantasy still maps to sci fi when fantasy is not explicitly present.Add targeted regression coverage for:
• fantasy precedence with TMDB combined genre id 10765
• explicit science fiction precedence when both science fiction and fantasy are present -
include rating style and icon shape in cross type sync with generated sync matrix docs
Changes:
• add ratingStyle and iconShape to SyncableTypeSettings
• include ratingStyle and iconShape in extractSyncableSettings for all preview types
• apply ratingStyle and iconShape in applySyncableSettings for all target types
• keep existing compatibility constraints:
• non poster presentation coercion to standard
• thumbnail provider filtering to episode safe providers
• stream badges excluded when syncing into logo
• use computeSyncDiffForTarget in configurator center stage single target sync flow
• use computeSyncDiffForTarget in sync to all grouped diffsTests:
• add transfer coverage for rating style and icon shape sync
• add target diff coverage for rating style and icon shape keys
• update identical per type zero diff fixture for new syncable fieldsDocs and automation:
• add scripts/generate sync settings matrix.mjs to build matrix from crossTypeSync exports
• add docs/sync settings matrix.md generated artifact
• export SYNCABLE_TARGET_KEY_MAP, SYNCABLE_GLOBAL_KEYS, and SYNC_SPECIAL_RULES from crossTypeSync
• add npm script sync matrix:generate
• run sync matrix generation automatically in predev, pretest, and prebuild
• add README link to generated sync matrix and update sync behavior description -
enforce type scoped option edits and sync only cross type propagation
• make icon shape truly per type across state, config IO, serialization, and request parsing
• stop save and revert confirmation from over reporting by diffing normalized comparable params
• add hard verification guardrails so any new shared option key fails tests unless explicitly allowed as legacy
• convert aggregate accent controls and rating value mode to active type scoped state so regular edits do not fan out across poster, backdrop, thumbnail, and logo
• preserve legacy compatibility paths for existing shared keys while prioritizing per type keys
• update docs for per type icon shape behavior and sync expectationsImplementation details:
• add per type icon shape fields and fallback handling in normalization and payload building
• route icon shape writes through preview type specific setters
• update configurator runtime and config IO wiring for per type icon shape fields
• add explicit global key list and legacy shared key inventory in config profile verification
• add tests that block introduction of new shared option surfaces
• update round trip and regression coverage for profile serialization behavior -
BUG-125 keep UUID proxy addon identity stable
Stop UUID backed proxy manifests from rotating addon identity when upstream manifest payloads drift over time, which can invalidate saved collection bindings in clients like Nuvio.
• treat stored UUID config seeds as stable identity anchors
• exclude upstream manifest fingerprint from identity seed when config seed is a UUID
• keep direct query mode behavior unchanged so non UUID flows can still reflect payload and catalog plan identity changes
• preserve existing no store response behavior and catalog rewrite flowAdd regression coverage for identity stability and preserve existing identity tests:
• add test ensuring UUID backed proxy identity remains stable across source manifest payload changes
• keep test coverage proving query mode identity still changes when source payload or catalog rules change -
BUG-124 restore custom quality badge scaling for 4k outputs
Remove the fixed quality badge height ceiling that caused poster and backdrop
quality badges to stop growing on larger and 4k renders, which made the size
slider appear unresponsive once the badges hit the cap.Preserve intrinsic aspect ratios for custom quality badge assets so full badge
overrides and asset backed custom icons keep their intended proportions instead
of collapsing toward square sizing.Add regression coverage for:
• full badge custom icon aspect handling
• asset backed custom badge aspect handling
• 4k poster quality badge height scaling past the old ceiling
• 4k backdrop quality badge height scaling past the old ceiling -
BUG-126 black bar overlay changes not saved to profile
Root cause:
buildCurrentUiConfig()serialized the raw artwork source state
values (posterArtworkSource, backdropArtworkSource, thumbnailArtworkSource)
directly into the saved config. During a live session, these values are never
'blackbar' —applySavedUiConfigcorrectly splits a stored 'blackbar' value
into a raw source ('tmdb') plus a boolean flag
(posterRatingBlackStripEnabled: true) on load. The recombination step was
missing on save, so the serialized config never reflected overlay changes.
Dirty detection therefore never saw a difference, the save button stayed
disabled, and overlay state was lost on round trip...
v1.23.1
Tip
Changelog: read the matching entry or browse the full compare.
Fixed
-
BUG-122 isolate black bar overlay by artwork type
Fixes a state coupling bug where Black Bar Overlay toggles in one artwork type were affecting other types.
• Replace the single shared black bar state with three independent states for poster, backdrop, and thumbnail.
• Update Appearance panel toggle wiring so it reads and writes only the currently active preview type.
• Update runtime preview/output derivation to use the active type’s black bar flag instead of a global value.
• Update saved config application so legacy blackbar artwork source values restore black bar state per type, not globally.
• Preserve existing renderer behavior and request semantics while removing cross type bleed. -
BUG-121 enforce regional translation paths across proxy and poster rendering
• preserve requested regional locale behavior when metadata translation runs in default mode
• add TMDB regional alias fallback so es MX can use es 419 entries when exact regional entries are absent
• keep es ES strict so Spain locale does not incorrectly consume es 419 LATAM entries
• propagate localized TMDB genre names into metadata and badge label selection so genre text localizes correctly
• prefer localized TMDB details title for clean poster branding overlay text instead of base media payload title -
BUG-120 preserve quality badge placement across release status style changes
Ensure explicit poster quality badge placement is always serialized when set, so placement intent survives unrelated style changes. This prevents fallback to auto placement that made quality badges appear to jump when cycling release status style options.
• update configurator output query generation to always emit posterQualityBadgesPosition when value is not auto
• decouple placement persistence from placement control visibility gating
• preserve existing behavior for qualityBadgesSide and all rendering logic outside this persistence path
• scope limited to configurator URL/state output stability for poster quality badge placement -
BUG-119 unify custom quality badge full surface rendering and icon fetch reliability
• Add fullBadge support to quality badge appearance overrides and preserve it through normalization, encoding, parsing, and prepared media mapping.
• Add configurator support for per badge full badge mode with a dedicated Use as full badge toggle.
• Render full badge overrides as image only surfaces so custom artwork is shown without embedded text or nested default badge chrome.
• Ensure custom quality badge icon resolution uses the quality badge resolver path and supports SVG rasterization to PNG via sharp, with safe fallback to raw data URIs.
• Add optional request headers to safe redirected fetches and pass a browser like User Agent for provider and quality badge icon fetches.
• Fix CDN and Wikimedia style 403 fetch failures that previously caused icon resolution to return null and silently disable full badge rendering.
• Harden quality badge rendering to resolve icon sources from either iconDataUri or pre resolved iconUrl data URIs so behavior is consistent across all quality badge styles.
• Keep streaming logo and intrinsic width behavior aligned with the same resolved icon source logic across glass, square, plain, media, silver, tile, and community badge paths. -
BUG-118 prevent compact ring overlap with age rating and grouped badges
Move compact ring collision resolution to the end of poster rendering so placement is based on all rendered badge overlays, not only detached age rating overlays.
• replace the age only compact ring avoidance path with generic collision avoidance against tracked blocked rectangles
• keep detached age rating overlay computation shared for both rendering and collision inputs to avoid drift between geometry and output
• preserve right edge compact ring anchoring while applying vertical repositioning to the first non overlapping slot
• ensure grouped mode and explicit age rating anchors both avoid compact ring overlap with top badge rows and quality badge stacks
• keep genre collision tracking behavior intact by adding the resolved compact ring rectangle after final placement
• add renderer regression coverage validating compact ring relocation when a detached age rating occupies the same corner -
BUG-117 restore genre badge position control for tile dark style
The configurator was hiding Genre Badge Position when the genre badge style was tile or clean.
Tile style still supports position state and rendering, so this created a style specific UI regression where users could not reposition badges directly.This change narrows the visibility gate so the position control is hidden only for clean style.
Tile dark now keeps the position controls visible, matching behavior across other styles and removing the style switch workaround.
Documentation
- refresh static doc assets
- updated README.md to remove redundant note.
v1.23.0
Tip
Changelog: read the matching entry or browse the full compare.
Added
-
FR-34 ring rating style visual improvements
Implement the remaining FR-34 Compact Ring visual improvements for ring completion and center transparency control.
Problem
• Compact Ring could appear visually incomplete at scores very close to 100 because a tiny arc gap remained.
• Ring center transparency was not user configurable in a robust end to end way.
• Omitted center opacity could incorrectly behave like zero transparency in some paths.What changed
• Added explicit near full completion logic for Compact Ring progress:
• Snap progress to full when value is >= 99.5.
• Render a full stroke path at snapped 100 to avoid a residual seam artifact.
• Added configurable Compact Ring center opacity:
• New poster scoped setting: posterRingCenterOpacity (0 to 100).
• Default center opacity: 86.
• Clamp and normalize all incoming values to supported bounds.
• Fixed missing value normalization:
• Treat undefined/null/empty center opacity as default, not zero.
• Wired posterRingCenterOpacity across all relevant surfaces:
• configurator state and controls
• URL/export generation
• request parsing and normalization
• image execution/display state
• render cache seed scoping
• reset groups and profile verification coverage
• Updated docs/reference surfaces to describe the new setting and behavior.Tests and verification
• Added/updated regression tests for:
• center opacity normalization (including null/undefined/empty and clamping)
• request parsing and render behavior for posterRingCenterOpacity
• near full progress completion behavior
• render seed scoping for ring only cache variance
• saved config/profile round trip coverage -
FR-60 customizable aggregate provider weights
Add per type provider weight controls to the configurator so users can
assign relative weights (0–1000) to each active rating provider when
computing the aggregate score. Weights are normalized at render time so
only ratios matter; equal weighting is preserved as the default.Core logic
• lib/ratingPresentation.ts: add AggregateProviderWeights type,
normalizeAggregateProviderWeights (accepts both URL string format
"imdb:50,tmdb:30" and saved profile object format {imdb:50,tmdb:30}),
stringifyAggregateProviderWeights, isDefaultAggregateProviderWeights,
computeWeightedAverage with active provider renormalization and
equal weight fallback when all weights are zero or map is emptyRouting and rendering
• lib/imageRouteRequestState.ts: parse per type URL params
(posterAggregateProviderWeights, backdropAggregateProviderWeights,
thumbnailAggregateProviderWeights, logoAggregateProviderWeights) and
global aggregateProviderWeights fallback; include in seed key
• lib/imageRouteAggregateBadge.ts: pass providerWeights to
computeWeightedAverage
• lib/imageRouteDisplayState.ts, lib/imageRouteExecution.ts: thread
aggregateProviderWeights through display state and executionConfigurator state
• lib/uiConfig.ts: four SharedXrdbSettings fields; defaults; thumbnail
falls back to backdrop unless skipCrossTypeFallbacks; buildSharedPayload
emits per type keys when non default
• lib/useConfiguratorWorkspaceState.ts: four useState declarations
• lib/useConfiguratorWorkspaceRuntime.ts: 28 weight field references
• lib/useConfiguratorWorkspaceConfigIo.ts: applySavedUiConfig and
buildCurrentUiConfig wired for all four types including full deps array
• lib/useConfiguratorWorkspaceSummary.ts: activeAggregateProviderWeights
derived; setAggregateProviderWeightsForType callback
• lib/configuratorPageProps.ts: activeAggregateProviderWeights and
onSetAggregateProviderWeightsForType in presentationProps
• lib/configuratorLinkImport.ts: aggregateProviderWeights in
SHARED_VISUAL_QUERY_KEYS and CROSS_TYPE_COMPATIBLE_SUFFIXES
• lib/crossTypeSync.ts, lib/configuratorResetGroups.ts: all four typesUI
• components/configurator appearance sections.tsx: "Provider Weights"
section with per provider number inputs (0–100, placeholder "Equal"),
shown only when usesAggregatePresentationOutput
• lib/useConfiguratorOutputs.ts: aggregateProviderWeightsForType derived;
URL query param emitted when non default, omitted when equal weightTests
• tests/aggregate provider weights.test.mjs: 15 tests covering
equal weight fallback, custom weight math, missing provider default,
zero weight fallback, single entry, string parsing, object input
(saved profile format), null/invalid input, clamping, malformed parts,
stringify, isDefault
• tests/ui config.test.mjs: round trip expected object updated with four
weight fields
• tests/config profile verification.test.mjs: verification schema updated -
FR-58 FR-76 add secondary genre replacement mode
Add a new anime grouping mode that can replace Anime or Animation with the next strongest supported genre family when available, while preserving existing Split and Group as Animation behavior.
Why:
• FR-58 requests an option to avoid uninformative Anime or Animation badges and show a more meaningful secondary genre.
• FR-76 reports inaccurate genre badge outcomes where Anime or Animation appears too generically.What changed:
• Added secondary as a valid Genre Badge anime grouping mode in core type and normalization logic.
• Kept split as default behavior to preserve current output for existing users.
• Kept animation grouping behavior and added alias handling so merge style inputs normalize safely.
• Updated resolver logic to:
• Compute the normal primary family first.
• If mode is secondary and the primary family is anime or animation, rerun resolution without anime or animation families.
• Promote the secondary supported family when present.
• Fall back to original primary when no meaningful secondary family exists.
• Added the new mode to configurator options and UI copy.
• Updated profile verification coverage for allowed Genre Badge anime grouping values.
• Updated README documentation to describe genreBadgeAnimeGrouping=secondary behavior.
• Added unit coverage for:
• New normalization aliases and secondary mode parsing.
• Secondary family resolution behavior for anime and animation inputs.
• Prepared media flow to confirm resolved badge family uses secondary where applicable.Behavioral impact:
• No change for users on split or animation.
• Users who select secondary get more informative genre badges whenever a stronger non anime non animation family is available.
• If no stronger family exists, badge remains anime or animation to avoid empty or misleading output. -
add normalized clean value mode to trim trailing point zero
Introduce a new rating value display mode that keeps normalized ten point formatting but removes trailing point zero values.
This allows values like 10.0 and 8.0 to render as 10 and 8 while preserving non zero decimals such as 8.6.
The mode is exposed through the existing Rating Values selector and is parsed through the same config/query flow as other rating value modes.• Add new ratingValueMode: normalizedclean
• Add parser aliases for normalized clean variants
• Keep native, normalized, and normalized100 behavior unchanged
• Update config profile verification coverage for the new mode
• Add test coverage for formatting and mode normalization
• Update README parameter docs and rating value mode description -
collapse quality badge custom icon editor into accordion
Reduce visual clutter in the Quality section by moving custom quality badge icon URL controls into a compact accordion while preserving existing override behavior.
• add derived override count via
qualityBadgeIconOverrideCountfor clearer state tracking
• replace inline always expanded icon URL grid with adetails/summaryaccordion
• show compact status in summary (N custom) so active overrides remain visible when collapsed
• keep all existing per badge icon URL edit behavior unchanged
: trim input values
: write override when URL is present
: remove override entry when URL is cleared
• keep globalReset Allbehavior unchanged and reuse the derived override count for button visibility
• retain existing helper copy and input placeholders inside the expanded accordion panelUX impact:
• lowers default vertical footprint of the configurator
• makes advanced icon customization less overwhelming
• preserves discoverability and full editing capability when expanded -
add custom icon URL override support via qualityBadgeAppearance param
Add a new
qualityBadgeAppearancequery parameter that accepts a base64url encoded JSON
object allowing per badge icon overrides for all 18 quality badge keys (certification,
releasestatus, netflix, hbo, primevideo, disneyplus, appletvplus, hulu, paramountplus,
peacock, 4k, hd, bluray, hdr, dolbyvision, dolbyatmos, remux, bdremux).Each override accepts an
iconUrlfield that supports both inline data URIs and external
HTTP/HTTPS URLs, matching full parity with the existing provider badge custom icon system.New module:
• lib/imageRouteQualityBadgeIcon.ts: external URL resolver that fetches a remote SVG or
raster asset, converts it to a base64 data URI, caches the result for 24 hours in the
metadata store, and deduplicates concurrent in flight requests via withDedupe()Changes:
• lib/badgeCustomization.ts: QualityBadgeAppearanceOverride and
QualityBadgeAppearanceOverrides types; normalise, serialize, parse, and encode helpers
• lib/imageRouteQualityBadge.ts: check badge.iconDataUri (custom) before falling back to
the ...
v1.22.7
Tip
Changelog: read the matching entry or browse the full compare.
Fixed
-
BUG-114 preserve regional TMDB poster locale selection
Preserve regional locale codes like es MX in image request state so TMDB detail requests keep the requested market instead of collapsing to the base language.
Prioritize locale specific TMDB poster paths during artwork selection and keep Clean poster selection language aware so null language textless art does not override the requested locale.
Add regression coverage for regional locale preservation, locale specific TMDB poster selection, and clean versus textless image preference behavior.
Documentation
- refresh static doc assets
v1.22.6
Tip
Changelog: read the matching entry or browse the full compare.
Fixed
-
preserve xrdb key in saved profiles
Keep xrdbKey in protected saved profile params even when provider credentials are omitted from exported payloads.
Add a preserveXrdbKey serialization option, enable it for saved profile payload generation and dirty state comparisons, and cover the behavior with regression tests.
Validated with pnpm run lint, pnpm run test, pnpm run build, pnpm run verify:config profiles, and a manual in app save/reveal flow confirming config UUID requests still authorize via the stored xrdbKey.
-
preserve anime season tokens in AIOM thumbnail urls
Prevent anime native AIOM episode thumbnail exports from collapsing every season to S01 when XRDB builds override URLs.
Keep S{season}E{episode} in generated thumbnail paths for Kitsu, AniList, MAL, and AniDB episode modes so season specific thumbnails can resolve correctly across multi season anime libraries.
Retain the existing mixed provider episodeSource* hint params and explicit raw id compatibility behavior while updating the season aware path contract exercised by the export tests.
Validated with focused AIOM export tests, anime media target and rating resolution tests, and the full lint, test, and build gate.
Documentation
- refresh static doc assets (2 commits)
v1.22.5
Tip
Changelog: read the matching entry or browse the full compare.
Fixed
-
preserve anime season tokens in AIOM thumbnail urls
Prevent anime native AIOM episode thumbnail exports from collapsing every season to S01 when XRDB builds override URLs.
Keep S{season}E{episode} in generated thumbnail paths for Kitsu, AniList, MAL, and AniDB episode modes so season specific thumbnails can resolve correctly across multi season anime libraries.
Retain the existing mixed provider episodeSource* hint params and explicit raw id compatibility behavior while updating the season aware path contract exercised by the export tests.
Validated with focused AIOM export tests, anime media target and rating resolution tests, and the full lint, test, and build gate.
Documentation
- refresh static doc assets
v1.22.4
Tip
Changelog: read the matching entry or browse the full compare.
Fixed
- repair xrdb and simkl custom art placeholders
Documentation
- refresh static doc assets
v1.22.3
Tip
Changelog: read the matching entry or browse the full compare.
Fixed
-
repair encoded XRDB art placeholders in saved profiles
Add an XRDB owned recovery path for AIOMetadata profiles that persisted custom
art URL patterns with percent encoded placeholder tokens such as %7Bimdb_id%7D.
When those encoded values are saved remotely, AIOMetadata cannot interpolate the
expected media identifiers and live payloads emit broken XRDB URLs.This change adds a shared repair helper for AIOMetadata custom art pattern
fields, a server route that loads and updates remote AIOMetadata profiles in
place, and an Import/Export UI form that lets operators trigger the repair with
profile credentials when needed.The fix is covered by focused tests for placeholder decoding, selective custom
art field repair, and AIOMetadata base URL normalization.Validation:
• pnpm run lint
• pnpm run test
• pnpm run build
Documentation
- refresh static doc assets