ee3c59210d
Settings: group preferences and open from gear
gramps2026-10-28 17:57:02 -07:00
769c616706
Preview: promote selected layer for hit testing
gramps2026-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
gramps2026-10-27 10:20:53 -07:00
841c905c06
Brand logo: one locked image layer per scene above the background, image from App Settings
gramps2026-10-27 09:25:49 -07:00
b86b6bb601
Transitions: Wipe (left-to-right reveal), added to the App Settings picker
gramps2026-10-27 09:12:59 -07:00
f67a263ccd
App Settings: transition type and length picker
gramps2026-10-27 09:12:37 -07:00
90cd039d98
Transitions: fade starts from the outgoing picture (was an instant cut)
gramps2026-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
gramps2026-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
gramps2026-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
gramps2026-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
gramps2026-10-26 13:09:13 -07:00
b7ab169718
docs(design): capture color + type tokens from the Stitch redesign exploration
gramps2026-10-26 11:00:51 -07:00
818d316477
docs(handoff): record the ai.md split progress (3 units, not pushed)
gramps2026-10-26 10:32:21 -07:00
a4dfca6b6c
docs(memory): split the output path (ffmpeg, encoder, recording, audio) out of ai.md
gramps2026-10-26 10:28:01 -07:00
096bf6debe
docs(memory): split capture (backdrop, webcam, effects, vertical tier) out of ai.md
gramps2026-10-26 10:26:53 -07:00
804b1d2f5f
docs(memory): split the frame pipeline out of ai.md into docs/ai
gramps2026-10-26 10:25:15 -07:00
ef60f1f3b6
TASK 48: distribution & packaging is deferred until we are near v1
gramps2026-10-26 10:20:04 -07:00
daac7689fd
TASK 48 slice 2: the app packs as a Microsoft Store MSIX
gramps2026-10-22 09:05:50 -07:00
20cfadca0c
TASK 48 slice 3: the self-updater is deleted - the Store updates the app
gramps2026-10-22 06:57:34 -07:00
b1d6034662
TASK 55 slice 1: the startup log is size-capped
gramps2026-10-22 06:51:04 -07:00
826cc17e47
TASK 56: the secret scan is done - and the history is clean
gramps2026-10-22 06:43:55 -07:00
8be6a83dab
Docs: the properties-panel batch (TASK 58-63) is pushed to origin/main
gramps2026-10-22 06:39:25 -07:00
987fddac24
TASK 63: the border-colour picker IS the app's own drop-down
gramps2026-10-21 23:09:11 -07:00
ef52508b1e
TASK 61 + 62: the geometry fields share one width, and the border field names its colour
gramps2026-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)
gramps2026-10-21 20:04:01 -07:00
6271bf34c9
TASK 60: the border-colour drop-down names every colour
gramps2026-10-21 20:03:19 -07:00
89f6aa3a67
TASK 59: the properties panel is a hierarchy, and the shape is a choice
gramps2026-10-21 19:58:28 -07:00
2273d20160
TASK 58: the properties panel wears the theme (no more light-system chrome)
gramps2026-10-21 19:46:25 -07:00
17aa0273a9
Docs: the HANDOFF's push state (the vv feature is pushed; origin/main = 3a77662 = HEAD)
gramps2026-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
gramps2026-10-21 19:23:29 -07:00
ccc1db52d3
Docs: the Gitea push path (HTTPS + credential helper), and why SSH was a dead end
gramps2026-10-21 09:50:44 -07:00
6be062c45f
vv webcam Unit 1: the vertical (9:16) tier keeps its OWN camera placement per scene
gramps2026-10-21 08:58:24 -07:00
58b9a7d413
GOG outage: correct the timeline and my bogus 'second egress'
gramps2026-10-21 08:19:53 -07:00
b1d77ee510
GOG Galaxy "offline": it is GOG's own maintenance outage, not the LAN
gramps2026-10-21 08:14:29 -07:00
fb851f089d
HA lights: record the entity-id trap, the recipes, and the day I broke working scripts
gramps2026-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
gramps2026-10-17 16:19:13 -07:00
2a15be21bd
HANDOFF: vv webcam plan locked; drop the unverified vertical-preview landmine
gramps2026-10-17 09:02:59 -07:00
cdf82f688d
Read the first instrumented take: the judder did not reproduce, no element is slow
gramps2026-10-16 19:04:38 -07:00
84cbec2d19
FramePumpTests: thread-safe log sink — the full-suite failure was a test race
gramps2026-10-16 19:02:14 -07:00
3cb29ea45c
HANDOFF refresh: tree clean, all units committed+pushed through 931ab46.
gramps2026-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.
gramps2026-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)
gramps2026-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)
gramps2026-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)
gramps2026-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-Blurhttps://xaymar.com/articles/2020/04/26/optimizing-streamfx-in-your-obs-scenes/ (Unit: bg-blur heavy fix)
gramps2026-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-featureshttps://github.com/jitsi/jitsi-meet/issues/17080 (Unit: bg-removal jitter fix)
gramps2026-10-09 22:15:59 -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)
gramps2026-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)
gramps2026-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)
gramps2026-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)
gramps2026-10-09 10:27:38 -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)
gramps2026-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)
gramps2026-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)
gramps2026-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)
gramps2026-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)
gramps2026-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)
gramps2026-10-09 10:01:38 -07:00
ed47480116
Docs: never print CREDENTIALS.md, not even filtered — sudo-password exposure incident + safe patterns (Unit: secrets hygiene)
gramps2026-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)
gramps2026-10-08 12:22:09 -07:00
fe80e8c994
Docs: record the zoom box as TASK 52 and fix the task-numbering drift (Unit: zoom docs)
gramps2026-10-08 08:52:36 -07:00
948dd08214
Zoom: dims never shade the box — move the dim overlay above CanvasGrid (Unit: zoom shading fix)
gramps2026-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)
gramps2026-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)
gramps2026-10-07 23:39:54 -07:00