Control Surface UX: pill toggle, background rename, per-scene properties

- Sliding pill toggle (green ON / red OFF) replaces checkbox
- Geometry mismatch error for custom backgrounds
- Backdrop -> Background: C# rename, SQL column rename with migration
- Source.IsBackground: new -> override (fixes WPF binding)
- Legacy 'Backdrop' display name migrated to 'Background'
- Per-scene UseDefaultBackground + CustomBackgroundPath
- Asset files renamed backdrop -> background
- StagedScene/LiveScene split, thumbnail strip, edit gating
- TransitionService (Cut/Fade/Move)
- Context menu: Capture Desktop, Refresh Desktop
- Resolution badge removed, ON-AIR status light added
This commit is contained in:
2026-08-22 18:10:59 -07:00
parent e06bfa42a8
commit 4b9a8e515f
35 changed files with 1406 additions and 717 deletions
+9 -42
View File
@@ -954,39 +954,21 @@ The tasks below are ordered by dependency and risk. Each task builds on the prev
1. ✅ **TASK 9.4** — Live chat (right panel) — wire `YouTubeChatService.Start()`, parse messages, render in panel. Foundation for chat box source.
2. ✅ **TASK 3.18** — Chat box source — renders chat ON the stream. Depends on TASK 9.4 (same message parsing).
3. ✅ **TASK 10** — Polar billing — license key entry + watermark toggle + Velopack auto-updates (steps 1–7 shipped; Velopack update URL pending).
4. **TASK 20** — Hotkeys — global keyboard shortcuts. Small scope, huge UX impact.
5. **TASK 19** — Scene transitions — Cut/Fade/Move/Custom. Depends on compositor.
3. ✅ **TASK 10** — Polar billing — license key entry + watermark toggle + Velopack auto-updates (steps 1-7 shipped; Velopack update URL pending).
4. **TASK 19/23** — Control Surface UX — director's control room: thumbnails above central monitor, transitions (Cut/Fade/Move), edit mode offline only, left panel two-state (layers/props ↔ chat), right panel eliminated.
5. **TASK 20** — Hotkeys — global keyboard shortcuts. Small scope, huge UX impact.
6. **TASK 17** — Web source (WebView2) — enables alert ecosystem.
7. **TASK 18** — Local recording — independent, but pairs with stream.
8. **TASK 21** — Media source — video file playback for non-Live scenes.
9. **TASK 22** — Audio sync offset — small, quality-of-life.
10. **TASK 23** — Studio mode — lightweight preview before live.
11. ✅ **TASK 15** — Stock bg images — all 5 scenes seeded (Starting, BRB, Live, Chat, Ending). `EnsureDefaultBackdrop()` runs on every scene switch.
12. **TASK 13** — Social media launch kit — after all v1 features ship.
10. ✅ **TASK 15** — Stock bg images — all 5 scenes seeded (Starting, BRB, Live, Chat, Ending). `EnsureDefaultBackdrop()` runs on every scene switch.
11. **TASK 13** — Social media launch kit — after all v1 features ship.
---
## TASK 19 — Scene transitions
## TASK 19 — Scene transitions → MERGED into TASK 19/23 (Control Surface UX)
**Goal:** smooth visual transitions between scenes — the four types from the design spec (Cut, Fade, Move, Custom).
### Status: ☐ Not started — required for v1
1. ☐ `TransitionType` enum: `Cut`, `Fade`, `Move`, `Custom`
2. ☐ Global transition setting (`Cut` default, 300ms) with per-scene override
3. ☐ `TransitionDuration` property (configurable, default 300ms)
4. ☐ Compositor support — blend two frames during transition:
- **Cut:** instant switch (current behavior, zero cost)
- **Fade:** crossfade — source fades out, destination fades in
- **Move:** simple positional transition — source slides out, destination slides in (economical)
- **Custom:** media/stinger playback during transition (heavier, but creators pay for these)
5. ☐ Preview shows the transition (WYSIWYG) — the preview panel renders the same blend
6. ☐ Encoder output renders the transition too (the live stream sees it)
7. ☐ Transition state management in MainViewModel (`_isTransitioning`, current/next scene tracking)
8. ☐ Custom transitions: media resource loading (video file → frame sequence during transition)
9. ☐ UI: transition type picker (dropdown or buttons), duration slider
10. ☐ Tests: transition timing, frame blending, Cut is instant, Fade produces blended frames
**Superseded by the Control Surface UX task.** Cut/Fade/Move transitions, thumbnails, edit mode, left panel two-state — all shipped as one cohesive feature. See the Control Surface UX section in `ai.md`.
### Design decisions
@@ -1069,24 +1051,9 @@ The tasks below are ordered by dependency and risk. Each task builds on the prev
---
## TASK 23 — Studio mode (lightweight preview)
## TASK 23 — Studio mode → MERGED into TASK 19/23 (Control Surface UX)
**Goal:** preview the next scene before transitioning — lightweight version of OBS Studio Mode.
### Status: ☐ Not started — required for v1
1. ☐ "Preview" button per scene — clicking shows that scene in a preview pane without going live
2. ☐ Preview pane — dedicated area showing the selected scene (not the current live scene)
3. ☐ "Go" button — transitions from preview to live (applies the scene change)
4. ☐ Transition applies when switching — if Fade is selected, the preview-to-live transition uses it
5. ☐ Disable during live transitions — prevent rapid-fire preview switching while transitioning
6. ☐ Tests: preview isolation, go button triggers transition, disable during transition
### Design decisions
- **Lightweight implementation** — not the full OBS dual-canvas setup. Just a "preview this scene" button + a preview pane.
- **Optional feature** — creators can ignore it and just switch scenes directly (current behavior).
- **Pairs with transitions** — studio mode + transitions = professional workflow. Preview the fade, then commit.
**Superseded by the Control Surface UX task.** Studio mode is now the entire app's paradigm — the director's control surface with 5 thumbnails + central monitor. See the Control Surface UX section in `ai.md`.
---