This release is a front-end and experience overhaul. Every backend processing
module (scan, repair, quality, smart-compression, logging) is unchanged and
fully compatible with v2.7 logs and config.json — so upgrading is drop-in.
Highlights: a 6-theme switcher built on a full CSS design-token refactor,
a collapsible card layout for every panel, the Compression Review filter &
cap system now in the shipped build, tip-bubble help text throughout, and a
meaningfully larger test suite.
Theming (app.js / index.html / style.css)
- New theme switcher in the header with live colour swatches — no reload required
- Six built-in themes: True black, Warm slate, Sage, Slate grey, Warm white, and Light
applyThemeandinitThemeSwitchersetdata-themeon the document root and persist the choice- Entire colour palette refactored into CSS custom properties (design tokens) — backgrounds, borders, text, accents, and translucent overlays are now single-source variables, which is what makes instant theme switching possible
- Every theme is defined as a small token override block, so new themes are trivial to add
Collapsible Card UI (app.js / index.html / style.css)
- Settings, Operation mode, Smart compression, Options, Filter, Summary, Console, and Live log panels all collapse and expand
initCollapsibles,paneToggle, andtoggledrive the chevron animation and open/closed state- Live collapse summaries show key values while a card is closed (e.g. selected paths, active mode, filter status) via
updateSummaries - Settings summary is mode-aware — it shows the library root for scan/compress modes and both paths for scan-&-repair, and falls back to "No path set" cleanly
- Log pane starts expanded and collapses from its header; Human/Machine pills remain reachable
Compression Filter & Cap System (app.js / index.html / style.css)
- Filter panel inside the review modal, styled to match the Options and Summary cards
- Confidence filter (High / Medium / Low), auto-gated with a tooltip when the probe data has no variance to filter on
- Resolution filter (≤720p / 1080p / ≥4K), bucketed by video width
- Minimum savings (MB) and minimum savings (%) thresholds with themed number steppers
- Cap modes: No limit / Top savers / Total saved / Size after — ranked biggest-saver-first after filtering
- All predicate filters combine with AND logic; live updates with a 250 ms debounce on typed entry
- Two resets: Reset Filters (thresholds and caps) and Reset Checkbox (manual selections)
- Functions added:
applyCompressionFilter,initCompressionFilter,_filterLeafMatches,_readFilterConfig,_applyFilterConfig,_onCapModeChange,_readFilterNum,_stepFilterNum,_clampFilterBox,_anyFilterActive,_debounceFilter,updateFilterSummary,resetCompressionFilter,resetCompressionCheckboxes
Selection Persistence (app.js)
- Manual picks are sticky —
_recordManualrecords only deviations from the verdict defaults and survives filter and cap changes - The active filter configuration is saved and restored on modal reopen via
_readFilterConfig/_applyFilterConfig - Save/load format stays server-agnostic — no server changes required
Help Text & Iconography (index.html / style.css)
- Static descriptions replaced with tip bubbles that update with the relevant control (workers, scan mode, GPU status, CRF, probe method)
- Material Symbols icon font wired in for crisp UI glyphs
- New resume-scroll button to jump the live log back to the latest line
Server (server.ps1)
- The PowerShell console window is now actually hidden on launch via a Win32
ShowWindow(SW_HIDE) call — in v2.7 this was commented out, so a bare console flashed up - Extensive inline documentation and section cleanup throughout the request loop
- No endpoint changes — the HTTP contract is identical to v2.7
Tests (Run-Tests.ps1 / ui.spec.js)
- PowerShell unit tests: 175 across 18 suites (up from 158)
- Playwright UI tests: 188 across 22 describe blocks (up from 160 across 18)
- New UI coverage for the theme switcher, collapsible panes, the mode-aware settings summary, and the full filter/cap system (debounce, data-gating, themed steppers, cap modes, sticky manual picks)
Upgrade notes: v2.8.1 reads existing v2.7 config.json and log files without
migration. No breaking changes.