- 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
7.2 KiB
HANDOFF — Session State
Branch
main — clean, last push 8951141 (TASK 10 shipped). TRAX meter fix pushed e06bfa4.
All Control Surface UX work is uncommitted — build passes 0 warnings/0 errors.
⚠️ IN FLIGHT: repo-wide Backdrop→Background rename (multi-session)
Models already renamed (Source.IsBackground, Scene.HasBackground/CustomBackgroundPath,
SceneCatalog.HasBackground, Source enum Background). Status per file:
- ✅
ViewModels/MainViewModel.cs— full case-sensitive rename done; compiles clean. - ✅
MainWindow.xaml.cs+MainWindow.xaml— renamed; full solution builds 0 warnings/0 errors. - ✅
Services/Compositor/SceneCompositor.cs— CS0128 duplicate locals fixed. - ⏳
Services/LayoutStore.cs— C# members renamed, but DB column strings (HasBackdrop/IsBackdrop) are schema and intentionally still say Backdrop: renaming them needs a real migration (new user_version) touching every existing DB. The V5-backfill unit test's raw CREATE TABLE must keepIsBackdropto match — blanket-renaming it breaksV5_Database_Backfill_Removes_NonLive_Backgrounds(verified: migration can't see flags, Live source losesIsBackground). - ✅
ytLive.Tests— all 5 files blanket-renamed (class/method/var/comment names + C# property accesses);BackdropTests.cs→BackgroundTests.cs. Tests: 207/208 pass; the only red is pre-existingAudioPipelineTests.Mix_HonorsProviderGains_AndGameMute_KillsTheLoopback(unrelated gain-math assert at AudioPipelineTests.cs:373, zero backdrop occurrences). - Pending elsewhere: leftover "backdrop" doc comments (
Source.cs,SceneCatalog.cs,ScreenCaptureManager.cs,ScreenCaptureFrameSource.cs,MainWindow.xaml:769), asset files + csproj (Assets/*-backdrop.jpg— pack-URI strings in MainViewModel now say-background.jpgso default-scene seeding silently no-ops until assets+csproj are renamed).
What shipped this session
- TASK 10 — Polar billing + Velopack auto-updates (steps 1–7) — full license key activation flow
- TRAX meter double-attenuation fix — removed redundant slider multiplication
- LAN infrastructure documented — all servers in
ai.md+CREDENTIALS.md - llamavault NFS/SMB diagnosis — zombie SMB session from power outage, fixed by killing stale PID
Active work: Control Surface UX (TASK 19/23 merged) — ALL PHASES COMPLETE
Design philosophy: Director's control surface, not an editor. Five scene monitors above one central live monitor. Click thumbnail = transition (live) or stage (offline). Edit mode only when offline. Live/Recording = read-only. Right-click + drag locked when live.
Phases completed (ALL)
- ✅ Phase 1:
StagedScene/LiveScenesplit +IsEditModein MainViewModel - ✅ Phase 2: Left panel two-state (edit: layers+props, live: chat)
- ✅ Phase 3: Right panel eliminated
- ✅ Phase 4: Thumbnail strip above center monitor +
Scene.Snapshot+ placeholder snapshots - ✅ Phase 5: Edit-mode gating (drag/resize/context menus blocked when live)
- ✅ Phase 6:
TransitionService.cs(Cut/Fade/Move) +SceneCompositor.BlendFrames() - ✅ Phase 7:
FramePumpintegrated withTransitionService - ✅ Phase 8: Thumbnail click →
TransitionToScene()wiring - ✅ Phase 9: Brand rename "ytLlive" → "LlamaCasty" (user-visible strings)
- ✅ Phase 10:
LayoutStore.SaveTransitionSettings()/LoadTransitionSettings()
Key decisions
- Mode is implicit: offline = edit, live/recording = read-only. No toggle button.
- Left panel = one panel, two states: offline → LAYERS + PROPERTIES; live → YouTube Live Chat (entire panel replaced, never coexists)
- No (=>) transition button: clicking a thumbnail directly triggers the transition
- Thumbnail glow: active scene gets brand-red
#e94560border viaIsStageddata trigger - Right panel eliminated: chat moved to left panel (live mode only)
- 5 thumbnails above center monitor, 120px height, uniform grid. Placeholder colored boxes until compositor snapshots added.
- Transitions: Cut + Fade + Move (v1). Go Live always = Cut. Duration persisted to Settings table.
- Brand rename: "ytLlive" → "LlamaCasty" across all XAML, VM strings, service strings. File paths (
%APPDATA%\ytLlive\) intentionally NOT renamed.
Architecture changes
ActiveScene→ split intoStagedScene(central monitor, editable) +LiveScene(encoder output, read-only)IsEditMode= derived property:StreamStatus == StreamStatus.OfflineTransitionService— transition state machine with Start/Tick/BlendFrameSceneCompositor.BlendFrames()— crossfade between two VideoFramesScene.Snapshot+Scene.IsStaged— thumbnail image and staged indicatorFramePump— now acceptsTransitionService+fromSceneProvider, blends during transitions
Files changed
ViewModels/MainViewModel.cs— StagedScene/LiveScene split, IsEditMode, TransitionToScene, snapshots, brand rename, transition persistenceMainWindow.xaml— 2-col layout, thumbnail strip, left panel two-state, right panel deleted, brand renameMainWindow.xaml.cs— Thumbnail click, edit-mode gating, context menu gating, dead code cleanupModels/Scene.cs— Snapshot, IsStaged propertiesServices/Compositor/SceneCompositor.cs— BlendFrames() static methodServices/Encoder/FramePump.cs— transition support in render loopServices/TransitionService.cs— new — Cut/Fade/Move transition engineServices/LayoutStore.cs— SaveTransitionSettings/LoadTransitionSettings/UpsertSetting
What still needs testing
- Runtime visual testing (need Windows display to run)
- Actual transition animation quality (Fade + Move)
- Thumbnail generation from real scene compositor (currently placeholder colors)
- Drag-reorder of thumbnails (not yet implemented)
Build
taskkill.exe /F /IM ytLive.exe # if running
"/mnt/c/Program Files/dotnet/dotnet.exe" build "C:\Users\gramp\Documents\Code\projects\ytLive\ytLive.csproj" --no-restore
0 warnings, 0 errors.
Polar.sh resources
| Resource | ID |
|---|---|
| Org ID | c05fb364-b967-4f6c-adf2-8a144e46d085 |
| Product | d105dfa1-497e-423b-8cd4-e0ee2e3abbc0 |
| Price | 7c1b6f70-cf8c-46df-9bc8-6703f9fa64d0 |
| Benefit | 80f66bc1-d5a3-44a1-b9ea-1709ae508535 |
| Checkout | 70e037cd-9bcb-414e-8b26-c82c1d268f65 |
| Checkout URL | https://buy.polar.sh/polar_cl_ueMy8AyAClO0o0yo19IroZwKTbD587gzUsjEW3bFapw |
| Validate endpoint | POST https://api.polar.sh/v1/customer-portal/license-keys/validate |
| Key prefix | LCYT- |
Next steps
- Visual testing — run on Windows display, verify layout, transitions, thumbnail strip
- Thumbnail drag-reorder — reorder scenes via drag on thumbnail strip
- Real snapshot generation — replace placeholder colors with compositor-rendered thumbnails
- Transition dropdown UI — add XAML control to pick transition type + duration
- Commit — all this work needs to be committed once visually verified
v1 vision
A streaming tool that's intuitive and ready to go out-the-gate with nothing held back. Minimal configuration — they're ready to go live or record. Eliminate the OBS pain-point completely.