gramps
b0f8263414
feat(quality): learn the starting rate from real sessions, on the creator's permission
...
Each finished broadcast is filed locally — tier, probed encoder, rated, settled, steps
spent — and Models/RateHistory turns that into at most a suggestion. The app never
applies one: it asks before the next stream, "Use it" sets the rate, "Keep mine"
remembers that exact number so the same question does not return until the evidence
moves. Nothing leaves the machine.
Two rules keep it from nagging. The high-water mark is the highest rate that
*finished* a session with zero steps, not the highest seen, so one easy session (a
menu screen, a quiet game) cannot set a target the machine cannot hold. And it is
asymmetric: raising needs 10% above the current rate across five clean sessions of the
same tier and encoder, lowering needs three step-downs in five — fixing damage should
not wait for a percentage, and risking it should.
The encoder key is real, not decorative: StreamHealth.VideoEncoder is now filled from
the probe (FfmpegEncoder), so history recorded against NVENC is not applied to a
machine that later runs QSV. At startup, before anything has streamed, the last
session on that tier is the honest guess.
672 pass, 0 warnings.
2026-11-12 08:24:12 -08:00
..
2026-11-05 09:57:07 -08:00
2026-11-12 07:50:59 -08:00
2026-11-01 14:13:57 -08:00
2026-09-26 14:44:57 -07:00
2026-11-05 09:57:07 -08:00
2026-09-26 14:44:57 -07:00
2026-09-24 08:27:00 -07:00
2026-09-26 12:08:27 -07:00
2026-11-02 10:47:48 -08:00
2026-10-30 14:42:40 -07:00
2026-11-02 11:06:43 -08:00
2026-11-01 07:01:50 -08:00
2026-11-12 07:50:59 -08:00
2026-11-01 13:48:28 -08:00
2026-10-30 13:18:23 -07:00
2026-10-09 13:27:53 -07:00
2026-11-06 12:30:48 -08:00
2026-10-09 13:27:53 -07:00
2026-09-14 12:30:44 -07:00
2026-11-06 12:21:24 -08:00
2026-10-10 07:08:01 -07:00
2026-08-23 13:33:33 -07:00
2026-08-31 19:32:41 -07:00
2026-11-05 15:38:32 -08:00
2026-11-01 13:32:23 -08:00
2026-11-01 13:17:40 -08:00
2026-10-21 23:09:11 -07:00
2026-10-28 13:09:15 -07:00
2026-10-09 13:22:52 -07:00
2026-11-01 09:16:27 -08:00
2026-10-27 09:25:49 -07:00
2026-10-04 15:05:28 -07:00
2026-11-06 12:56:05 -08:00
2026-09-05 14:31:03 -07:00
2026-10-30 07:53:37 -07:00
2026-10-09 22:15:59 -07:00
2026-11-02 11:10:21 -08:00
2026-11-05 14:53:06 -08:00
2026-08-24 09:08:03 -07:00
2026-11-05 08:39:46 -08:00
2026-09-04 11:01:51 -07:00
2026-11-05 08:20:33 -08:00
2026-11-05 08:05:18 -08:00
2026-11-05 09:57:07 -08:00
2026-11-10 12:41:39 -08:00
2026-11-10 11:59:02 -08:00
2026-11-10 12:25:19 -08:00
2026-10-16 18:23:20 -07:00
2026-10-30 08:29:28 -07:00
2026-10-10 11:52:17 -07:00
2026-10-30 09:18:50 -07:00
2026-11-10 11:55:42 -08:00
2026-11-05 09:38:18 -08:00
2026-11-05 17:14:40 -08:00
2026-11-11 09:52:27 -08:00
2026-11-12 07:50:59 -08:00
2026-11-12 07:57:36 -08:00
2026-08-31 19:45:48 -07:00
2026-09-28 11:53:52 -07:00
2026-10-05 11:10:22 -07:00
2026-11-05 09:57:07 -08:00
2026-11-05 12:09:38 -08:00
2026-10-30 12:32:07 -07:00
2026-10-30 13:46:05 -07:00
2026-10-30 08:30:33 -07:00
2026-11-02 11:20:54 -08:00
2026-08-26 06:48:14 -07:00
2026-08-26 06:48:14 -07:00
2026-11-05 14:56:20 -08:00
2026-09-28 11:53:52 -07:00
2026-11-05 09:38:18 -08:00
2026-11-01 13:08:03 -08:00
2026-11-10 18:09:16 -08:00
2026-11-04 14:22:32 -08:00
2026-11-10 17:59:28 -08:00
2026-11-02 18:17:18 -08:00
2026-10-30 13:18:23 -07:00
2026-09-15 19:25:39 -07:00
2026-11-05 10:40:25 -08:00
2026-11-05 09:15:30 -08:00
2026-11-05 09:38:18 -08:00
2026-11-05 07:54:06 -08:00
2026-11-05 08:15:32 -08:00
2026-11-05 08:15:32 -08:00
2026-11-05 09:57:07 -08:00
2026-10-30 14:01:29 -07:00
2026-11-02 11:34:48 -08:00
2026-10-30 13:32:24 -07:00
2026-08-23 12:25:04 -07:00
2026-11-02 11:24:50 -08:00
2026-11-04 11:19:40 -08:00
2026-10-30 09:30:56 -07:00
2026-11-12 08:01:01 -08:00
2026-11-02 11:38:17 -08:00
2026-11-01 07:46:10 -08:00
2026-10-27 10:20:53 -07:00
2026-10-09 13:32:38 -07:00
2026-11-02 11:18:10 -08:00
2026-11-01 16:26:20 -08:00
2026-11-12 08:24:12 -08:00
2026-11-12 08:24:12 -08:00
2026-09-27 08:55:55 -07:00
2026-09-27 15:37:46 -07:00
2026-09-27 15:37:46 -07:00
2026-11-01 09:55:04 -08:00
2026-09-18 10:20:25 -07:00
2026-11-10 12:54:54 -08:00
2026-09-14 16:14:00 -07:00
2026-11-10 11:51:21 -08:00
2026-08-23 13:33:33 -07:00
2026-11-04 10:52:35 -08:00
2026-08-31 17:53:34 -07:00
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)
2026-10-10 12:09:07 -07:00
2026-11-06 12:21:24 -08:00
2026-10-30 14:54:05 -07:00
2026-10-30 14:50:20 -07:00
2026-10-30 15:05:33 -07:00
2026-10-30 14:36:56 -07:00
2026-10-30 15:19:28 -07:00
2026-11-02 11:14:15 -08:00
2026-10-30 14:36:13 -07:00
2026-10-30 15:24:14 -07:00
2026-11-02 11:28:11 -08:00
2026-10-30 14:35:42 -07:00
2026-09-14 18:40:20 -07:00
2026-08-13 08:57:56 -07:00
2026-11-01 16:12:38 -08:00
2026-11-05 15:38:32 -08:00
2026-10-30 11:17:11 -07:00
2026-09-01 22:25:20 -07:00
2026-10-30 09:06:53 -07:00
2026-08-13 11:04:32 -07:00
2026-08-19 11:51:32 -07:00
2026-10-30 10:02:06 -07:00
2026-08-13 09:29:58 -07:00
2026-09-28 11:53:52 -07:00
2026-10-28 13:09:15 -07:00
2026-11-04 17:05:06 -08:00
2026-11-09 13:05:44 -08:00
2026-11-12 08:05:55 -08:00
2026-10-30 12:33:40 -07:00
2026-11-11 10:19:20 -08:00
2026-11-01 07:01:50 -08:00
2026-08-16 17:48:37 -07:00
2026-11-05 12:09:38 -08:00
2026-10-30 13:16:19 -07:00
2026-11-04 10:11:39 -08:00
2026-11-04 17:17:57 -08:00
2026-11-04 15:01:47 -08:00
2026-11-04 15:01:47 -08:00
2026-11-04 15:01:47 -08:00
2026-10-30 10:29:22 -07:00
2026-11-11 10:06:54 -08:00
2026-08-06 09:38:35 -07:00
2026-11-02 11:43:57 -08:00
2026-10-27 08:39:49 -07:00
2026-10-27 09:12:37 -07:00
2026-11-01 13:48:28 -08:00
2026-10-04 09:24:12 -07:00
2026-10-30 13:22:13 -07:00
2026-11-02 11:31:49 -08:00
2026-10-21 19:23:29 -07:00
2026-10-21 08:58:24 -07:00
2026-10-09 10:31:11 -07:00
2026-09-17 09:16:56 -07:00
2026-09-01 22:25:20 -07:00
Screen backdrop (schema v5/v6) + five-scene catalog + webcam polish: live desktop/game capture as a permanent non-deletable bottom layer (Source.IsBackdrop), auto full-screen game detection (Win32FullScreenDetector) else primary display, GraphicsCapturePicker re-designation, refcounted shared ScreenCaptureManager, Live-only backdrop by policy (HasBackdrop + v5-v6 backfill + EnforceBackdropPolicy, checkbox gone), SceneCatalog (Starting/Live/BRB/Chat/Ending) with + button re-adding missing scenes, webcam mid-session transparent-container fix (GetPreviewBitmap propagation), Chat half-screen-area cap, 'Add Webcam' always opens the picker (SwapWebcamIdentityAsync, no silent resurrect), WindowsRuntimeMarshal frame-read + 5s-throttled errors, docs updated, tests (65 passing)
2026-08-07 14:15:50 -07:00
2026-09-17 08:56:04 -07:00
2026-09-14 16:14:00 -07:00
2026-09-22 07:00:47 -07:00
2026-10-04 15:28:05 -07:00
2026-10-27 09:12:59 -07:00
2026-10-30 14:42:40 -07:00
2026-10-04 15:27:01 -07:00
2026-11-05 16:41:09 -08:00
2026-09-23 16:45:56 -07:00
2026-11-05 09:42:36 -08:00
2026-10-28 13:09:15 -07:00
2026-11-01 08:51:28 -08:00
2026-10-08 08:26:29 -07:00