Commit Graph

  • ee3c59210d Settings: group preferences and open from gear gramps 2026-10-28 17:57:02 -07:00
  • 769c616706 Preview: promote selected layer for hit testing gramps 2026-10-28 13:09:15 -07:00
  • 7da287244b Transitions in edit mode and on output: program transitions run while recording or streaming; the preview animates the outgoing picture (fade/move fade, wipe shrinks) in every mode gramps 2026-10-27 10:20:53 -07:00
  • 841c905c06 Brand logo: one locked image layer per scene above the background, image from App Settings gramps 2026-10-27 09:25:49 -07:00
  • b86b6bb601 Transitions: Wipe (left-to-right reveal), added to the App Settings picker gramps 2026-10-27 09:12:59 -07:00
  • f67a263ccd App Settings: transition type and length picker gramps 2026-10-27 09:12:37 -07:00
  • 90cd039d98 Transitions: fade starts from the outgoing picture (was an instant cut) gramps 2026-10-27 08:39:49 -07:00
  • 7ae30d4cfc Right rail, top bar, bottom bar and chat border: Socials slide-out drawer, tab icons and colors, EDIT toggle, stream readouts moved to the top-left cell, webcam border restored, chat border controls, 30fps vertical tier gramps 2026-10-26 18:24:09 -07:00
  • a8814b42d0 Top bar and scene strip: EDIT toggle beside REC (orange on, blue off); fixed-size centered mini screens; fixed 360px left column so the empty cell matches the layers panel gramps 2026-10-26 14:26:23 -07:00
  • 3239808a73 Layers panel and scene strip: scene layers header with icons, per-type layer icons, PROGRAM badge and selected/live orange borders, scene name and hotkey overlays, Starting as default scene gramps 2026-10-26 14:00:23 -07:00
  • 24aca7d04a Scene strip: move top row over the preview column and scale it; remove CRT bezel art and on-air seed gramps 2026-10-26 13:09:13 -07:00
  • b7ab169718 docs(design): capture color + type tokens from the Stitch redesign exploration gramps 2026-10-26 11:00:51 -07:00
  • 818d316477 docs(handoff): record the ai.md split progress (3 units, not pushed) gramps 2026-10-26 10:32:21 -07:00
  • a4dfca6b6c docs(memory): split the output path (ffmpeg, encoder, recording, audio) out of ai.md gramps 2026-10-26 10:28:01 -07:00
  • 096bf6debe docs(memory): split capture (backdrop, webcam, effects, vertical tier) out of ai.md gramps 2026-10-26 10:26:53 -07:00
  • 804b1d2f5f docs(memory): split the frame pipeline out of ai.md into docs/ai gramps 2026-10-26 10:25:15 -07:00
  • ef60f1f3b6 TASK 48: distribution & packaging is deferred until we are near v1 gramps 2026-10-26 10:20:04 -07:00
  • c768a8ee49 fix(border-color): keep ComboBox popup clicks inside LeftPanel (TASK 63) gramps 2026-10-22 12:02:05 -07:00
  • daac7689fd TASK 48 slice 2: the app packs as a Microsoft Store MSIX gramps 2026-10-22 09:05:50 -07:00
  • 20cfadca0c TASK 48 slice 3: the self-updater is deleted - the Store updates the app gramps 2026-10-22 06:57:34 -07:00
  • b1d6034662 TASK 55 slice 1: the startup log is size-capped gramps 2026-10-22 06:51:04 -07:00
  • 826cc17e47 TASK 56: the secret scan is done - and the history is clean gramps 2026-10-22 06:43:55 -07:00
  • 8be6a83dab Docs: the properties-panel batch (TASK 58-63) is pushed to origin/main gramps 2026-10-22 06:39:25 -07:00
  • 987fddac24 TASK 63: the border-colour picker IS the app's own drop-down gramps 2026-10-21 23:09:11 -07:00
  • ef52508b1e TASK 61 + 62: the geometry fields share one width, and the border field names its colour gramps 2026-10-21 22:19:13 -07:00
  • 60b0218fa3 Docs: the HANDOFF's push state (three properties-panel commits are waiting; origin/main is still 3a77662) gramps 2026-10-21 20:04:01 -07:00
  • 6271bf34c9 TASK 60: the border-colour drop-down names every colour gramps 2026-10-21 20:03:19 -07:00
  • 89f6aa3a67 TASK 59: the properties panel is a hierarchy, and the shape is a choice gramps 2026-10-21 19:58:28 -07:00
  • 2273d20160 TASK 58: the properties panel wears the theme (no more light-system chrome) gramps 2026-10-21 19:46:25 -07:00
  • 17aa0273a9 Docs: the HANDOFF's push state (the vv feature is pushed; origin/main = 3a77662 = HEAD) gramps 2026-10-21 19:23:48 -07:00
  • 3a77662a95 vv webcam Unit 2: the Chat scene in the vertical tier - rect only, tile or one whole 607x540 area gramps 2026-10-21 19:23:29 -07:00
  • ccc1db52d3 Docs: the Gitea push path (HTTPS + credential helper), and why SSH was a dead end gramps 2026-10-21 09:50:44 -07:00
  • 6be062c45f vv webcam Unit 1: the vertical (9:16) tier keeps its OWN camera placement per scene gramps 2026-10-21 08:58:24 -07:00
  • 58b9a7d413 GOG outage: correct the timeline and my bogus 'second egress' gramps 2026-10-21 08:19:53 -07:00
  • b1d77ee510 GOG Galaxy "offline": it is GOG's own maintenance outage, not the LAN gramps 2026-10-21 08:14:29 -07:00
  • fb851f089d HA lights: record the entity-id trap, the recipes, and the day I broke working scripts gramps 2026-10-20 22:27:06 -07:00
  • d1e73a3aad HANDOFF + MyMistakes: officerFriendly clock is the PS5 DNS root cause (no RTC exists); record the reply marker verbatim gramps 2026-10-17 16:19:13 -07:00
  • 2a15be21bd HANDOFF: vv webcam plan locked; drop the unverified vertical-preview landmine gramps 2026-10-17 09:02:59 -07:00
  • cdf82f688d Read the first instrumented take: the judder did not reproduce, no element is slow gramps 2026-10-16 19:04:38 -07:00
  • 84cbec2d19 FramePumpTests: thread-safe log sink — the full-suite failure was a test race gramps 2026-10-16 19:02:14 -07:00
  • a3a4681aac Per-element composite timing + scene dump (measurement only) gramps 2026-10-16 18:22:27 -07:00
  • 3cb29ea45c HANDOFF refresh: tree clean, all units committed+pushed through 931ab46. gramps 2026-10-14 09:41:24 -07:00
  • 931ab46783 Pinned chat message + brand wordmark assets. Chat can pin one message to a banner above the feed: ChatMessage.IsPinned, MainViewModel.PinnedChatMessage + Pin/ClearPinnedChatMessageCommand (Helpers/RelayCommandGeneric.cs), LeftPanel pinned-message border bound via NotNullToVis with the feed nudged down. gramps 2026-10-10 14:54:08 -07:00
  • 8e1d6f44db Scene strip tile artwork + on-air indicator (creator ruling 2026-10-10). Top-bar tiles now carry their own art: each canonical scene's tile is a per-scene CRT-styled image stored in the internal DB (Scene.ThumbnailAssetId - additive migration, seeded at heal from the creator's five Downloads JPGs via SceneThumbnailSeedPaths), and the preview pane keeps rendering the scene's ORIGINAL background - never the tiles. One shared on-air image (Gemini 4zajyl...jpg) replaces the staged scene's tile and follows the scene swap ('the on-air screen jumps around the top bar as the user swaps scenes'): stored as an Asset BLOB tracked by the OnAirImageAssetId Setting (EnsureOnAirImage, same contract as the alert clip) with MainViewModel.OnAirSeedPath override; RefreshSnapshotsAsync shows it for the staged scene, otherwise thumbnail-or-background art, and a staged Live with no on-air art still falls back to the green placeholder (minis never render live captures). Removed the 6px #22c55e rectangle in PreviewPane's backdrop ('green outline around the preview screen' that surfaced when a scene had no background) - the outer PreviewGlow red border is the real live signal. Doubled the scene-tile labels (FontSize 10 -> 20). Fixed a real bug this surfaced: Save()'s Asset pruner only kept Source/alert-clip rows, so the first save would have DELETED the seeded tile + on-air assets - the keep-set now includes Scene.ThumbnailAssetId and the OnAirImageAssetId Setting. New Settings/Load/Save migrations + SceneThumbnailTests (4 tests: seeded tile in strip, preview keeps original bg, Live-staged tile, no-seed fallback, on-air swap + persistence). 427 pass, 0 build warnings. (Unit: strip tiles + on-air) gramps 2026-10-10 13:27:26 -07:00
  • 06f88f4142 Scene strip now renders in canonical F-key order regardless of persisted SortOrder. The strip loads Scenes ORDER BY SortOrder while each tab's F-key label is name-derived, so a session that persisted Chat before BRB (found on the creator's DB: SortOrder 2/3) showed tabs 'Chat F4' then 'BRB F3'. MainViewModel.LoadLayout now calls the new ReorderScenesToCanonical() - the five canonical scenes reorder to Starting, Live, BRB, Chat, Ending (F1-F5, stable among renamed non-canonical scenes), and the next auto-save re-stamps SortOrder so the heal persists. One integration test (SceneOrderTests) seeds the swapped-order DB and asserts loaded order, F1-F5 labels, and that a save persists the corrected ordering. 423 pass, 0 build warnings. (Unit: scene order) gramps 2026-10-10 12:09:07 -07:00
  • 63bf8444bd Desktop 'lock' fix: the window no longer steals focus when a full-screen game owns the foreground at launch. Opening after an exclusive-fullscreen game (creator's THE DIVISION 2 gameplay-stream start) the window ACTIVATED by default, Windows dropped the game to the taskbar and the 1920x1040 window covered the whole work area - 'the desktop is locked and I can't reach the game with the mouse'. MainWindow ctor now sets ShowActivated = !MainViewModel.FullscreenGameRunningNow (GetForegroundFullScreenMonitorIndex() != null), so an in-game launch keeps the game focused and live; a normal launch is unchanged. New FullScreenDetectorOverride test seam (mirrors WindowEnumeratorOverride - deterministic, no real Win32 foreground state) + DesktopLockTests: game at launch -> ShowActivated=false, normal launch -> true, FullscreenGameRunningNow reflects the detector. 422 pass / 1 known env flake, 0 build warnings. (Unit: launch focus) gramps 2026-10-10 11:52:17 -07:00
  • c2d64dcd6d TASK 51 blur 'heavy' fix: quadratic blur radius. BlurRadius(strength) = 1 + 5s^2, MaxBlurRadius 12 -> 6 downscaled px (~24 full px max). Default 0.5 is now radius 2 small px (was the old linear 6) - ~3x lighter perceived spread, matching the creator's real-camera finding. Range from the established tools: StreamFX defaults its Box blur Size to 5 and its author stops downscale-based blurs around 8px. One integration test pins the mapping (0 -> 1, 0.5 -> 2, 1 -> 6) and step-edge behaviour (light reaches 9px at default vs 26px at full); the existing slice-2 blur test passes unchanged. 419/419 pass. Refs: https://github.com/Vhonowslend/StreamFX-Public/wiki/Filter-Blur https://xaymar.com/articles/2020/04/26/optimizing-streamfx-in-your-obs-scenes/ (Unit: bg-blur heavy fix) gramps 2026-10-10 07:08:01 -07:00
  • 305706956e TASK 51 jitter fix: temporal mask smoothing. MaskSmoother blends each raw segmentation 0.75xnew + 0.25xprevious at the one CameraManager worker (state per CameraSession, not in the shared segmenter); null resets history, first frame passes through, input array never aliased, ping-pong buffers (no LOH alloc for a 147KB 256x144 mask). Creator's real-camera check: Remove was 'jittery' (per-frame independent segmentation). Weights from the OBS/Jitsi consensus. One integration test asserts the second frame keeps partial alpha (x=6 -> 58) where the raw mask cuts to 0. 416 pass / 2 known env flakes. Refs: https://deepwiki.com/royshil/obs-backgroundremoval/2-core-features https://github.com/jitsi/jitsi-meet/issues/17080 (Unit: bg-removal jitter fix) gramps 2026-10-09 22:15:59 -07:00
  • 5685c5dc3a TRAX: toggle refreshes the status light on play/pause, terse scrolling error on failure, fixed quiet volume (0.5), ITraxPlayer seam. Deadlocked test fixed via RunAsync (was GetAwaiter().GetResult on the UI thread). 416 pass / 1 known env flake. Refs: https://learn.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/async-programming-model-tap#dont-block-on-async-code (Unit: trax toggle) gramps 2026-10-09 19:05:04 -07:00
  • 87f05ba2ce Private broadcasts end like recordings: Enter keeps, Escape deletes (KeepBroadcastDialog). Privacy read from YouTube; delete = videos.delete (fallback liveBroadcasts.delete on 404). Refs: https://developers.google.com/youtube/v3/docs/videos/delete https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/delete (Unit: private broadcast close-out) gramps 2026-10-09 13:32:38 -07:00
  • b140024ebf Audio: speech leveler (auto gain to -20 dBFS speech, -6..+20 dB, gated) between gate and compressor; honest mic meter (drop the +10 dB display boost and x1.2). Creator upload measured -28.5 LUFS; same audio through the new chain: -17.9 LUFS / -0.7 dBFS peak (Unit: audio loudness) gramps 2026-10-09 13:27:53 -07:00
  • 8303b1cf7f Brand flash OFF by default: MainViewModel.ShowBrandFlash master switch (default false) gates BrandFlashEnabled; feature kept, tests opt in; new test guards the default (Unit: brand flash off) gramps 2026-10-09 13:22:52 -07:00
  • 352f117cb2 TASK 51 slice 5: webcam Background section in the Layers properties — Remove/Blur PillToggles (radio-exclusive) + Strength slider; strength changes never blank the webcam (new variant inherits the same-effect frame + bitmap). TASK 51 built (Unit: bg-effects UI) gramps 2026-10-09 10:31:11 -07:00
  • de22983b36 TASK 51 slice 4: camera-path hookup — CameraManager renders per-scene effect variants (one segmentation per raw frame on a latest-frame-drop worker, raw path untouched), VM declares/adopts variants per config; separable upsampling cuts Remove 46->3 ms, Blur 80->18 ms (Debug, 720p) (Unit: bg-effects hookup) gramps 2026-10-09 10:27:38 -07:00
  • 55210b9a61 TASK 51 slice 3: per-scene webcam BackgroundEffect + BackgroundStrength on WebcamSceneConfig, persisted via additive guarded columns; radio-pill bools RemoveBackground/BlurBackground (Unit: bg-effect config) gramps 2026-10-09 10:19:48 -07:00
  • 227ee8fca6 TASK 51 slice 2: Blur — background at 1/4 res, 3 separable box passes (~gaussian, radius by strength), mask-blended; person untouched; Remove gains strength = edge feather; mask computed once, rendered per effect (Unit: bg blur) gramps 2026-10-09 10:18:00 -07:00
  • fbeb63ba79 Docs: queue TASK 56 — pre-publication secret scan of the full git history (gate before the repo goes public) (Unit: task catalog) gramps 2026-10-09 10:15:33 -07:00
  • 4e42871fae Docs: README rewritten in the creator's voice (why it was built, generic comparison, free + open, real build-from-source steps incl. ffmpeg fetch + own OAuth client); source offer URL llgit.llamachile.tube/gramps/LlamaCasty in README + notices; TASK 51 keeps the strength slider (Unit: README + source offer) gramps 2026-10-09 10:13:43 -07:00
  • db2fdbf68d Docs: GPL-3.0-or-later (creator ruling); AI-generated scene backgrounds + alert video are GPL placeholders, not reserved; TASK 51 UI spec — Remove/Blur as radio-exclusive pill switches in the webcam's Layers properties (Unit: license follow-up + bg-effects UI spec) gramps 2026-10-09 10:11:11 -07:00
  • c6569a7ccb License: LlamaCasty is GPL-3.0-only with section 7 terms (attribution, rename modified versions, no trademark rights); icon + logo all rights reserved; LICENSE + ADDITIONAL-TERMS ship beside the exe; notices + ai.md rewritten off the paid/closed-source framing (Unit: GPL-3.0 licensing) gramps 2026-10-09 10:05:12 -07:00
  • f529d47f42 Build: require 64-bit Windows — PlatformTarget x64 in app + tests (bundled ffmpeg is win64, ONNX Runtime has no win-x86, 32-bit address space can't hold 1080p buffers) (Unit: 64-bit requirement) gramps 2026-10-09 10:01:38 -07:00
  • 9f3c154d84 TASK 51 slice 1: background-effects engine — bundled MediaPipe Selfie Segmenter (ONNX) + Remove (Unit: bg-effects engine) gramps 2026-10-09 09:24:13 -07:00
  • f8dd1079f3 Docs: queue TASK 55 — disk hygiene (log rotation, temp alert-clip cleanup, low-disk recording guard) (Unit: task catalog) gramps 2026-10-09 09:06:36 -07:00
  • ed47480116 Docs: never print CREDENTIALS.md, not even filtered — sudo-password exposure incident + safe patterns (Unit: secrets hygiene) gramps 2026-10-09 08:48:53 -07:00
  • 058bef4312 Docs: resettle TASK 54 on Fourthwall as provider of choice — kills the storefront-layer problem (Unit: marcom provider research) gramps 2026-10-08 12:22:09 -07:00
  • 29ef5d5f85 Docs: pivot TASK 54 storefront — Big Cartel is API-only, choose Ecwid free tier (Unit: marcom correction #2) gramps 2026-10-08 11:30:26 -07:00
  • d8febbd0d8 Docs: correct TASK 54 merch plan — Printful Quick Stores is US-only; storefront layer = Big Cartel free tier (Unit: marcom correction) gramps 2026-10-08 10:32:55 -07:00
  • 9fb628b473 Docs: record Shorts/TikTok output-format verification (TASK 53) + free-forever/merch round (TASK 54); mark TASK 10 superseded (Unit: task catalog) gramps 2026-10-08 10:20:01 -07:00
  • fe80e8c994 Docs: record the zoom box as TASK 52 and fix the task-numbering drift (Unit: zoom docs) gramps 2026-10-08 08:52:36 -07:00
  • 948dd08214 Zoom: dims never shade the box — move the dim overlay above CanvasGrid (Unit: zoom shading fix) gramps 2026-10-08 08:40:23 -07:00
  • 6bff21b234 Zoom: anchor the capture, magnify the full composite, draw on top (Unit: zoom rework per creator correction) gramps 2026-10-08 08:26:29 -07:00
  • 4b3d82ff0f Zoom: compose the box as a real 2x layer above the background (Unit: zoom layer + magnification proof) gramps 2026-10-07 23:39:54 -07:00
  • 966e718f1e Zoom: fix preview zoom box + shape-aspect anchoring (Unit: zoom box visuals) gramps 2026-10-07 20:46:45 -07:00
  • 6b6284d05c Perf: dedicated strip-parallel composite (4 threads, BelowNormal) — UNIT 5 gramps 2026-10-05 18:54:47 -07:00
  • 3901cb8298 Compositor: parallelize BlitBakedElement and BlitOverlay row loops; cap at 4 threads (Unit 5) gramps 2026-10-05 17:44:03 -07:00
  • 623d77e531 Compositor: parallelize BlitContentRaw row loop (4 threads, BelowNormal intent) to speed scaled blits (Unit 5) gramps 2026-10-05 17:40:05 -07:00
  • dc1343896d Compositor: reuse column LUT buffer to avoid per-call allocations (Unit 4) gramps 2026-10-05 16:18:26 -07:00
  • 77d5120c87 Compositor: add per-column LUT for scaled BlitContentRaw to reduce per-pixel math (Unit 4) gramps 2026-10-05 16:16:17 -07:00
  • 08290ece16 Compositor: prefill only uncovered rows when backdrop not fully covered (Unit 4) gramps 2026-10-05 16:13:39 -07:00
  • bdea18e12c Fix: add missing System.Collections.Generic import and remove unused var gramps 2026-10-05 13:39:42 -07:00
  • 0464593a02 Compositor: fast-path opaque 1:1 when source fills canvas gramps 2026-10-05 13:34:20 -07:00
  • cea641d429 Log: include scene name and compositor source rect on pump start gramps 2026-10-05 13:33:38 -07:00
  • 25d5416a93 Timing: add per-stage counters to FramePump stats gramps 2026-10-05 13:31:42 -07:00
  • 81da58ab9c Log: alert resolver uses state-change logging instead of 1/s gramps 2026-10-05 13:27:07 -07:00
  • a8e3954f01 Fix: add IsAlertBox virtual on SceneElement and override on Source gramps 2026-10-05 13:26:12 -07:00
  • 9d04aea55b UNIT 0 reading: the camera was never the problem, so Unit 1 is the wrong lever gramps 2026-10-05 12:06:28 -07:00
  • 55ca1029a3 UNIT 0: make a dropped webcam frame measurable, not just inferable gramps 2026-10-05 11:10:22 -07:00
  • b2f219739d HANDOFF: record the explicit-bind fix, the unpushed 5, and the 395 suite gramps 2026-10-04 15:30:22 -07:00
  • 509ef36aa0 Launch upper-left with 75px padding; stop restoring window position gramps 2026-10-04 15:28:05 -07:00
  • 07a088a23f Bind broadcasts explicitly; the week-long RTMP dead end was never a bind gramps 2026-10-04 15:27:01 -07:00
  • 8fbc3701d2 fix: the broadcast diagnostic reported NO-BINDING from a parse that never ran gramps 2026-10-04 15:05:28 -07:00
  • 0fb2f9c6c3 docs: Go Live IS private (verified), and v1 is where that guarantee ends gramps 2026-10-04 14:58:55 -07:00
  • 74da99c988 docs: the always-Private lock is a decision, and it unlocks at v1 gramps 2026-10-04 14:52:33 -07:00
  • 5ad0106502 diag: log what the broadcast is actually bound to while a stream runs gramps 2026-10-04 14:47:09 -07:00
  • 048cab79f8 docs: handoff answers the RTMP diagnostic and records today's two units gramps 2026-10-04 09:37:32 -07:00
  • cc2d1ef622 TRAX: a share that is gone must never freeze the startup window gramps 2026-10-04 09:24:12 -07:00
  • ad10176e8b docs: llamavault is .87 now, and SMB must be reached by name gramps 2026-10-04 09:00:56 -07:00
  • f3fed0a2a8 docs: purge the dead $29/$49 + Polar model from every tracked file, add the Y1 forecast gramps 2026-10-02 20:56:37 -07:00
  • d95a23c6fb docs: the handoff was lying about three things — push state, TASK 50, test count gramps 2026-09-29 08:28:33 -07:00
  • 2569c09617 task 50: correct mechanism — creator's channel proves stream never lands gramps 2026-09-28 12:11:10 -07:00