# TASK 16 — Kill infinity display (no-game backdrop fallback) > Catalog: [`TASKS.md`](../TASKS.md) — status and requirements live here. **Goal:** when no full-screen game is detected, show a static branded placeholder instead of capturing the primary display (which causes the infinity mirror effect). ### Status: ✅ Shipped **Changes:** 1. `ResolveAutoCaptureKey()` returns `null` when no full-screen game is detected (was: primary monitor) 2. `ReacquireScreenCaptures()` — clears stale `CaptureKey` when `auto == null` (handles DB upgrades); skips `AcquireAsync` when no keys are set 3. `SeedLiveBackdropAsset()` — sets `AssetId` on the backdrop element itself (NOT a Background source); called from `ReacquireScreenCaptures()` after `EnsureBackdrop()` guarantees the element exists 4. `Source.DisplaySource` falls back to `_imageSource` when `VideoImageSource` is null for live captures 5. `Assets/live-backdrop.jpg` — user-provided image, added as `` in csproj 6. `ResolveOutputFrame()` in compositor — `Source { IsLiveCapture: true, CaptureKey: not null }` already skips null keys; fallback pattern `Source { AssetId: not null }` picks up the static image **Rendering flow:** | Scenario | Preview | Compositor | |---|---|---| | Game detected | Live capture (opaque, covers static asset on backdrop) | `ScreenCaptureManager.GetLatestFrame` | | No game | Static image via `DisplaySource` → `_imageSource` on backdrop | `StaticPixelCache.Get(assetId)` | | Manual capture pick | Live capture | Live frame |