From d92cc1c270b10e3c8cf1a1a7bf8dee1081de1589 Mon Sep 17 00:00:00 2001 From: kverstappen Date: Wed, 25 Mar 2026 13:11:54 +0100 Subject: [PATCH 1/4] added --- .../lib/components/home-page/home-page.svelte | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/immichFrame.Web/src/lib/components/home-page/home-page.svelte b/immichFrame.Web/src/lib/components/home-page/home-page.svelte index da7379d1..6e76270f 100644 --- a/immichFrame.Web/src/lib/components/home-page/home-page.svelte +++ b/immichFrame.Web/src/lib/components/home-page/home-page.svelte @@ -180,7 +180,10 @@ } const useSplit = shouldUseSplitView(assetBacklog); - const next = assetBacklog.splice(0, useSplit ? 2 : 1); + let next = assetBacklog.splice(0, useSplit ? 2 : 1); + + next = removeDuplicateFromNextAssets(next); + assetBacklog = [...assetBacklog]; if (displayingAssets.length) { @@ -196,6 +199,31 @@ assetsState = await pickAssets(next); } + function removeDuplicateFromNextAssets(next: api.AssetResponseDto[]): api.AssetResponseDto[]{ + // while(isDuplicate(next) && assetBacklog.length > 0){ + // const duplicatePicture = next[0]; + // next = assetBacklog.splice(0,1) + // next.push(duplicatePicture); + // } + if(isDuplicate(next)){ + console.log("Duplicate detected!") + return next.slice(0,1); + } + return next; + } + + function isDuplicate(next: api.AssetResponseDto[]): boolean{ + const seen = new Set(); + + for(const item of next){ + if(seen.has(item.id)){ + return true; + } + seen.add(item.id); + } + return false; + } + async function getPreviousAssets() { if (!assetHistory.length) { return; From 44d72464046fe079ad58af40f69a9cd14531a12e Mon Sep 17 00:00:00 2001 From: kverstappen Date: Wed, 25 Mar 2026 13:20:12 +0100 Subject: [PATCH 2/4] removed code comments and logging --- .../src/lib/components/home-page/home-page.svelte | 6 ------ 1 file changed, 6 deletions(-) diff --git a/immichFrame.Web/src/lib/components/home-page/home-page.svelte b/immichFrame.Web/src/lib/components/home-page/home-page.svelte index 6e76270f..428d6d3d 100644 --- a/immichFrame.Web/src/lib/components/home-page/home-page.svelte +++ b/immichFrame.Web/src/lib/components/home-page/home-page.svelte @@ -200,13 +200,7 @@ } function removeDuplicateFromNextAssets(next: api.AssetResponseDto[]): api.AssetResponseDto[]{ - // while(isDuplicate(next) && assetBacklog.length > 0){ - // const duplicatePicture = next[0]; - // next = assetBacklog.splice(0,1) - // next.push(duplicatePicture); - // } if(isDuplicate(next)){ - console.log("Duplicate detected!") return next.slice(0,1); } return next; From 5060b03afa4933c7a50c223c0508d8ba8a82ca7e Mon Sep 17 00:00:00 2001 From: kverstappen Date: Fri, 27 Mar 2026 11:53:21 +0100 Subject: [PATCH 3/4] try to find different image in backlog instead of just removing duplicate --- .../lib/components/home-page/home-page.svelte | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/immichFrame.Web/src/lib/components/home-page/home-page.svelte b/immichFrame.Web/src/lib/components/home-page/home-page.svelte index 428d6d3d..6e40026d 100644 --- a/immichFrame.Web/src/lib/components/home-page/home-page.svelte +++ b/immichFrame.Web/src/lib/components/home-page/home-page.svelte @@ -201,7 +201,12 @@ function removeDuplicateFromNextAssets(next: api.AssetResponseDto[]): api.AssetResponseDto[]{ if(isDuplicate(next)){ - return next.slice(0,1); + const nextPortrait = tryPopNextNonDuplicatePortraitInBacklog([next[0]]); + let result = next.splice(0,1); + if(nextPortrait !== undefined) { + result.push(nextPortrait); + } + return result; } return next; } @@ -218,6 +223,16 @@ return false; } + function tryPopNextNonDuplicatePortraitInBacklog(next: api.AssetResponseDto[]): api.AssetResponseDto | undefined{ + for(let i = 0; i < assetBacklog.length; i++){ + const backlogAsset = assetBacklog[i]; + if(!isPortrait(backlogAsset)) continue; + if(isDuplicate([...next, backlogAsset])) continue; + return assetBacklog.splice(i, 1)[0]; + } + return undefined; + } + async function getPreviousAssets() { if (!assetHistory.length) { return; From 5a31562fcad69d1f1e08efd68bc0f42dff622e80 Mon Sep 17 00:00:00 2001 From: kverstappen Date: Fri, 27 Mar 2026 12:28:51 +0100 Subject: [PATCH 4/4] removed next.splice to avoid unexpected side effects --- immichFrame.Web/src/lib/components/home-page/home-page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/immichFrame.Web/src/lib/components/home-page/home-page.svelte b/immichFrame.Web/src/lib/components/home-page/home-page.svelte index 6e40026d..4b103365 100644 --- a/immichFrame.Web/src/lib/components/home-page/home-page.svelte +++ b/immichFrame.Web/src/lib/components/home-page/home-page.svelte @@ -202,7 +202,7 @@ function removeDuplicateFromNextAssets(next: api.AssetResponseDto[]): api.AssetResponseDto[]{ if(isDuplicate(next)){ const nextPortrait = tryPopNextNonDuplicatePortraitInBacklog([next[0]]); - let result = next.splice(0,1); + let result = [next[0]]; if(nextPortrait !== undefined) { result.push(nextPortrait); }