From d91a96e29f5f1a5eaeda6624e6a37757ea4a8f9a Mon Sep 17 00:00:00 2001 From: Tim Eisele Date: Thu, 9 Jul 2026 12:19:14 +0200 Subject: [PATCH 1/3] Fix episode image handling in next-up --- src/components/cardbuilder/utils/url.ts | 10 ++++++++++ src/components/homesections/sections/recentlyAdded.ts | 1 + src/types/cardOptions.ts | 1 + 3 files changed, 12 insertions(+) diff --git a/src/components/cardbuilder/utils/url.ts b/src/components/cardbuilder/utils/url.ts index 54874b3a4c..d0ea4f93df 100644 --- a/src/components/cardbuilder/utils/url.ts +++ b/src/components/cardbuilder/utils/url.ts @@ -68,6 +68,16 @@ export function getCardImageUrl({ imgType = ImageType.Backdrop; imgTag = item.ParentBackdropImageTags[0]; itemId = item.ParentBackdropItemId; + } else if (options.preferParentPoster && !options.preferThumb && item.Type === 'Episode' + && ((item.ParentPrimaryImageTag && item.ParentPrimaryImageItemId) || (item.SeriesPrimaryImageTag && item.SeriesId))) { + imgType = ImageType.Primary; + if (item.ParentPrimaryImageTag && item.ParentPrimaryImageItemId) { + imgTag = item.ParentPrimaryImageTag; + itemId = item.ParentPrimaryImageItemId; + } else { + imgTag = item.SeriesPrimaryImageTag; + itemId = item.SeriesId; + } } else if (item.ImageTags?.Primary && (item.Type !== 'Episode' || item.ChildCount !== 0)) { imgType = ImageType.Primary; imgTag = item.ImageTags.Primary; diff --git a/src/components/homesections/sections/recentlyAdded.ts b/src/components/homesections/sections/recentlyAdded.ts index 91297f5866..3edd57549d 100644 --- a/src/components/homesections/sections/recentlyAdded.ts +++ b/src/components/homesections/sections/recentlyAdded.ts @@ -83,6 +83,7 @@ function getLatestItemsHtmlFn( items: items, shape: shape, preferThumb: viewType !== 'movies' && viewType !== 'tvshows' && itemType !== 'Channel' && viewType !== 'music' ? 'auto' : null, + preferParentPoster: true, showUnplayedIndicator: false, showChildCountIndicator: true, context: 'home', diff --git a/src/types/cardOptions.ts b/src/types/cardOptions.ts index 5040b3daef..78f22143fc 100644 --- a/src/types/cardOptions.ts +++ b/src/types/cardOptions.ts @@ -28,6 +28,7 @@ export interface CardOptions { preferThumb?: boolean | string | null; preferDisc?: boolean; preferLogo?: boolean; + preferParentPoster?: boolean; scalable?: boolean; shape?: CardShape; defaultShape?: CardShape; From c8a8bc479d90a515a1ba186d5aad7f66ed3aab4e Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Tue, 21 Jul 2026 20:54:37 +0200 Subject: [PATCH 2/3] Make fallback logic shape aware --- src/components/cardbuilder/utils/url.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/cardbuilder/utils/url.ts b/src/components/cardbuilder/utils/url.ts index d0ea4f93df..819b02323e 100644 --- a/src/components/cardbuilder/utils/url.ts +++ b/src/components/cardbuilder/utils/url.ts @@ -35,6 +35,8 @@ export function getCardImageUrl({ let imgType: ImageType | undefined; let itemId = null; + const skipEpisodeParentPoster = item.Type === 'Episode' && uiAspect != null && uiAspect > 1; + /* eslint-disable sonarjs/no-duplicated-branches */ if (options.preferThumb && item.ImageTags?.Thumb) { imgType = ImageType.Thumb; @@ -90,7 +92,7 @@ export function getCardImageUrl({ if (primaryImageAspectRatio && uiAspect) { coverImage = (Math.abs(primaryImageAspectRatio - uiAspect) / uiAspect) <= 0.2; } - } else if (item.SeriesPrimaryImageTag) { + } else if (item.SeriesPrimaryImageTag && !skipEpisodeParentPoster) { imgType = ImageType.Primary; imgTag = item.SeriesPrimaryImageTag; itemId = item.SeriesId; @@ -107,7 +109,7 @@ export function getCardImageUrl({ if (primaryImageAspectRatio && uiAspect) { coverImage = (Math.abs(primaryImageAspectRatio - uiAspect) / uiAspect) <= 0.2; } - } else if (item.ParentPrimaryImageTag) { + } else if (item.ParentPrimaryImageTag && !skipEpisodeParentPoster) { imgType = ImageType.Primary; imgTag = item.ParentPrimaryImageTag; itemId = item.ParentPrimaryImageItemId; From 29dfdd0b8f75bf8df35397c5a6ea39305a64ccd2 Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Tue, 21 Jul 2026 21:02:20 +0200 Subject: [PATCH 3/3] Use overflowBackdrop --- src/apps/legacy/controllers/itemDetails/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/legacy/controllers/itemDetails/index.js b/src/apps/legacy/controllers/itemDetails/index.js index 9154a47ba4..f0b3c45d91 100755 --- a/src/apps/legacy/controllers/itemDetails/index.js +++ b/src/apps/legacy/controllers/itemDetails/index.js @@ -1087,7 +1087,7 @@ function renderMoreFromSeason(view, item, apiClient) { cardBuilder.buildCards(result.Items, { parentContainer: section, itemsContainer: itemsContainer, - shape: 'autooverflow', + shape: 'overflowBackdrop', sectionTitleTagName: 'h2', scalable: true, showTitle: true,