Brand logo: one locked image layer per scene above the background, image from App Settings

- Source.IsBrandLogo persisted (additive migration); layer healed on load, removal blocked
- Image stored as an asset; settings keep the asset id and file name
- App Settings: Brand Logo file field with Browse
- Default placement top-left; per-scene eye uses the existing element visibility
Test: BrandLogoTests; layout/background tests pass (34). Not pushed.
This commit is contained in:
2026-10-27 09:25:49 -07:00
parent b86b6bb601
commit 841c905c06
12 changed files with 194 additions and 7 deletions
+9
View File
@@ -1296,3 +1296,12 @@ persisted chat or reward payloads."
Guard: `ytLive.Tests/TransitionFadeTests.cs`.
- **Planned next (see TASKS.md):** transition picker in App Settings, Wipe, Move (persistent layers),
brand logo layer, GPU cube (capability-gated).
## Brand logo (2026-10-27)
- One locked image layer per scene, `Source.IsBrandLogo` (persisted column, additive migration), named
"Brand logo", directly above the background. Healed on load by `EnsureBrandLogos`, which also copies the
App Settings image into every scene's layer. Removal is blocked like the background.
- The image lives in the asset table; the settings table keeps its asset id and file name
(`BrandLogoAssetId` / `BrandLogoFileName`). Eye visibility is the layer's ordinary per-scene `IsVisible`.
- Default placement: top-left (32,32), 240x120 master px.