diff --git a/Assets/archive/starting-background-pre-2026-11-06.jpg b/Assets/archive/starting-background-pre-2026-11-06.jpg
new file mode 100644
index 0000000..4a5feb0
Binary files /dev/null and b/Assets/archive/starting-background-pre-2026-11-06.jpg differ
diff --git a/Assets/starting-background.jpg b/Assets/starting-background.jpg
index 4a5feb0..e23965e 100644
Binary files a/Assets/starting-background.jpg and b/Assets/starting-background.jpg differ
diff --git a/Services/LayoutStore.Settings.cs b/Services/LayoutStore.Settings.cs
index fcdaf09..2ff1d56 100644
--- a/Services/LayoutStore.Settings.cs
+++ b/Services/LayoutStore.Settings.cs
@@ -63,6 +63,12 @@ public partial class LayoutStore : IDisposable
public void SaveShowMonetaryMetrics(bool show) => UpsertSetting("Metrics.ShowMonetary", show ? "1" : "0");
+ /// Which vintage of the shipped default scene art this layout was stamped with. Bumped when
+ /// a bundled background is replaced, so existing layouts re-seed instead of keeping the old art.
+ public int LoadDefaultArtVersion() => int.TryParse(GetSetting("Art.DefaultVersion"), out var v) ? v : 1;
+
+ public void SaveDefaultArtVersion(int version) => UpsertSetting("Art.DefaultVersion", version.ToString());
+
public bool LoadAutoChromaScreen() => GetSetting("Video.AutoChromaScreen") == "1";
public void SaveAutoChromaScreen(bool enabled) => UpsertSetting("Video.AutoChromaScreen", enabled ? "1" : "0");
diff --git a/ViewModels/MainViewModel.Background.cs b/ViewModels/MainViewModel.Background.cs
index dd53414..37135bb 100644
--- a/ViewModels/MainViewModel.Background.cs
+++ b/ViewModels/MainViewModel.Background.cs
@@ -427,9 +427,30 @@ public partial class MainViewModel
/// Heals every scene to the locked Background model after a layout
/// load: keeps the correct flavor per scene at index 0 named "Background",
/// drops duplicates/stale rows, re-seeds missing ones.
+ /// Bump when a bundled background image is replaced. Layouts stamped with an older version
+ /// re-seed their DEFAULT art on next load; a creator's own custom background is never touched.
+ private const int CurrentDefaultArtVersion = 2;
+
+ /// Re-stamp the shipped art for scenes still using the default. Without this, a replaced
+ /// starting-background.jpg reaches new installs only: the asset is hash-keyed into the layout
+ /// database on first seed, so an existing profile keeps showing the old image forever.
+ private void HealDefaultArtVersion()
+ {
+ if (_layoutStore.LoadDefaultArtVersion() >= CurrentDefaultArtVersion) return;
+
+ foreach (var background in AllBackgrounds())
+ {
+ if (!background.UseDefaultBackground) continue; // the creator chose their own art
+ background.AssetId = null; // seed re-stamps it below
+ }
+
+ _layoutStore.SaveDefaultArtVersion(CurrentDefaultArtVersion);
+ }
+
private void HealBackgrounds()
{
NormalizeBackgrounds(Scenes);
+ HealDefaultArtVersion();
foreach (var scene in Scenes)
{
_sceneGraph.InvalidateBake(scene);