Skip to content

Releases: captincrum/flick-fix

2.8.1 – Theming, Collapsible UI, and the Compression Filter System

15 Jun 22:30

Choose a tag to compare

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
  • applyTheme and initThemeSwitcher set data-theme on 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, and toggle drive 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_recordManual records 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.

GPU Encoding, Review Filters, and Slim Persistence

05 Jun 07:24

Choose a tag to compare

2.7.0 – GPU Encoding, Review Filters, and Slim Persistence

GPU Encoding (Common.psm1 / SmartCompression.psm1 / UM-Errors.ps1)

  • Auto‑detect NVIDIA NVENC, AMD AMF, and Intel QSV hardware encoders at startup
  • UM-ResolveEncoder selects the best available hardware encoder for the active codec family
  • UM-ResolveEncoderArgs applies encoder‑specific quality flags (CQP for NVENC, quality mode for AMF, global quality for QSV)
  • UM-TestGpuEncoder validates the hardware encoder can initialize before processing the library
  • GPU preflight in Smart Compression fails fast with one actionable message instead of failing per‑file
  • UM-ExplainGpuError extracts the relevant driver lines from ffmpeg output and suggests the CPU fallback
  • Sample encode bitrate now measured via output file size instead of parsing ffmpeg summary lines, fixing silent failures on GPU encoders that don't print the summary

Server (server.ps1)

  • Added /gpu-detect endpoint with cached hardware encoder detection (NVENC → AMF → QSV)
  • Added /disk-space endpoint for pre‑compression free‑space validation
  • Added /compress/start endpoint with payload validation, queue persistence, and pipeline launch
  • Added /compression/selections and /compression/selections/save endpoints for persistent review state
  • Config now persists UseGPU, CrfValue, and CompressionOutputPath across sessions
  • /logs/clear now removes CompressionSelections.json alongside log data

Client – GPU Toggle (app.js / index.html / style.css)

  • CPU ↔ GPU toggle in the main settings panel and inside the compression review modal
  • Toggle auto‑disables when no GPU is detected or in Scan Only mode
  • GPU status label shows the detected encoder name or "No GPU detected"
  • Modal GPU toggle syncs with the main settings toggle on open

Client – Compression Review Tree (app.js / index.html / style.css)

  • Three‑state folder checkboxes cycle smart (compress‑only) → none → smart for bulk select/deselect
  • Resizable Name column with drag handle
  • Skip‑reason labels replace generic "Skip" with specifics: HEVC/AV1, Too Short, Low Bitrate, Would Grow, < 10% Saving, Probe Failed
  • Confidence level shown per file in the verdict column (High / Medium / Low)
  • Folder verdict counts show selected vs total (e.g. "276 / 773")
  • Skip rows visually dimmed with disabled checkboxes and reduced opacity
  • Striped tree rows for readability
  • Summary card with live‑updating folder count, file count, size before/after, and total saved
  • Summary counts now display thousands separators
  • Independent Workers slider and CPU/GPU toggle inside the modal, separate from main settings
  • Compressed Root path saved to config and restored on modal reopen
  • Modal auto‑opens when a Smart Compression probe completes
  • Review button dynamically enables/disables based on probe data availability
  • Disk space validated against estimated output size before compression starts

Client – Filter & Cap System (app.js / index.html / style.css)

  • Filter panel added to the review modal with the same card styling as Options and Summary
  • Confidence filter: independent High / Medium / Low checkboxes, auto‑gated with a hover tooltip ("Requires accurate probe") when no variance exists in the data
  • Resolution filter: ≤720p / 1080p / ≥4K checkboxes, bucketed by video width (≤1280 / 1281–2560 / ≥2561); none checked means no restriction
  • Minimum saving (MB) threshold with themed stepper, range 1–9999, step 10
  • Minimum space saved (%) threshold with themed stepper, range 10–95, step 1
  • Cap selection dropdown: No limit / Top savers / Free up at least / Keep output under
  • Top savers keeps the N largest savers from the filtered pool
  • Free up at least accumulates savings until the GB target is met, including the file that crosses the line
  • Keep output under accumulates estimated compressed output up to the GB budget, stopping before it crosses
  • All predicate filters combine with AND logic; caps rank biggest‑saver‑first after filtering
  • Live filtering on all controls with 250ms debounce on typed numeric entry
  • Reset Defaults button restores all filter and cap controls to their initial state

Client – Selection Persistence (app.js)

  • CompressionSelections.json now stores only manual deviations from verdict defaults plus the active filter configuration, instead of a boolean for every scanned file
  • Skip‑verdict files are never stored — their state is re‑derived from the log on open
  • Manual picks are sticky: they survive filter and cap changes and persist across modal close/reopen
  • Filter configuration (confidence, resolution, thresholds, cap mode and value) saved and restored on reopen
  • File size reduced from ~1 MB to single‑digit KB on typical libraries
  • No server changes required — the save/load endpoints remain format‑agnostic

Pipeline (GUI-Core.ps1 / SmartCompression.psm1)

  • Config bootstraps the UseGPU field, passed through pipeline settings into the worker context
  • EncodeMethod, Encoder, and EncodeError fields logged on every probe result for diagnostics
  • Compression workers receive the GPU flag independently from the probe workers

Tests (Run-Tests.ps1 / ui_spec.js)

  • 165 PowerShell unit tests across 18 suites, up from 47 tests and 13 suites in v2.5
  • 160 Playwright UI tests across 18 suites, up from 17 tests and 5 suites in v2.5
  • Suite 16: GPU Encoder Resolution — verifies UM-ResolveEncoder and UM-ResolveEncoderArgs across NVENC, AMF, QSV, and CPU fallback
  • Suite 17: GPU Integration Contracts — validates preflight testing, error explanation, and module exports
  • Suite 18: GPU Client Contracts — confirms toggle wiring, modal sync, and /gpu-detect usage in app.js
  • Suite 15 expanded with contracts for the filter functions, cap modes, themed steppers, debounce, data‑gating, and slim selection persistence

Log Caching, Faster Polling, and Performance Upgrades

29 May 17:53

Choose a tag to compare

2.6.0 – Log Caching, Faster Polling, and Performance Upgrades

Server (web_server.ps1)

  • Added in‑memory log cache with incremental reads using FileStream.Seek
  • Added /logs/total endpoint for zero‑I/O line‑count retrieval
  • Added /logs/search endpoint with backslash‑aware server‑side filtering
  • Added /status-all endpoint combining console status and log count
  • Rewrote /logs/slice to parse only requested ranges from cache
  • Updated /logs/clear to fully reset cache state
  • Improved file‑lock handling to safely skip updates when workers hold the file

Client (web_app.js)

  • Poller now checks /logs/total first to avoid unnecessary slice fetches
  • Switched to setTimeout chaining with idle backoff to prevent stacked requests
  • Console and log polling unified through /status-all
  • Search filter now uses server‑side /logs/search with 300ms debounce
  • Clearing filters reloads fresh data instead of reusing stale results
  • Updated UI actions to use server‑side search instead of full‑log fetches
  • Button handlers now use apiLogTotal() for counts
  • Removed virtual scroll spacer in live mode
  • Scroll‑up behavior now pages back a flat 200 entries
  • Added stale‑state guards to prevent incorrect UI rendering after async operations

Scan Resume (Modules_Scan.psm1)

  • Skip‑list now reads raw lines and parses only relevant entries
  • Replaced O(n²) scan in UM-IsScanned with HashSet<string> for O(1) lookups
  • Eliminated ~222 million comparisons on large libraries

Logging (Modules_Logging.psm1)

  • Fixed double‑newline issue in UM-AppendLogEntry
  • Added UM-LogShowComplete for future completion‑marker support

UI (web_app.js / web_style.css)

  • Fixed blank‑line spacing in machine logs
  • Added .machine-log class for machine‑mode‑specific formatting
  • Removed redundant client‑side filtering in renderLogFile

v2.5 — Smart Compression & CI Pipeline

25 May 14:47

Choose a tag to compare

What's New in v2.5

Smart Compression

  • Full probe pipeline using sample encodes to predict space savings before committing
  • Fast mode (1 sample) and Accurate mode (3 samples at 25%, 50%, 75%)
  • Interactive Compression Results tree — review estimated savings per file, season, and show before compressing
  • Hard filters automatically skip files that are already HEVC/AV1/VP9, too short, low bitrate, or would grow larger
  • Confidence scoring (High / Medium / Low) based on sample variance
  • Disk space check before compression begins
  • Parallel compression workers with independent worker count control
  • Restart-safe — skips already-completed files on resume

Live Console Progress

  • Per-worker display during probing: folder, file, sample progress (e.g. 1/3), and sample timer
  • Per-worker display during compression: folder, file, elapsed time, MB/s speed, and estimated progress
  • Progress shown as ~52% (1.56GB of ~2.80GB) — honest estimate with size context
  • Overall completion percentage and elapsed session time for all phases

Bug Fixes

  • Cancel now correctly kills all FFmpeg child processes immediately
  • Compression worker count no longer inherits from the Settings worker slider
  • Console no longer displays blank heartbeat output when no repair is active
  • Worker count in compression console now reflects actual compression workers, not probe workers

CI Pipeline

  • 47 automated PowerShell unit tests covering file structure, config validation, module imports, and core logic
  • 17 Playwright UI tests covering buttons, sliders, modals, and mode switching
  • GitHub Actions running all 64 tests automatically on every push
  • Branch protection rules enforcing tests must pass before merging to main

Project

  • Rebranded from Media Integrity Pipeline to Fli

Version 2.0

14 Apr 23:22
145e812

Choose a tag to compare

v2.0 – New Web-Based Interface, Major UX Overhaul, Engine Stability Improvements

This release introduces the new msedge --app web-based interface for the Media Integrity Pipeline, replacing the WPF UI while keeping the underlying Scan/Repair/QC engine fully intact. The goal of v2.0 is to modernize the interface, streamline user interactions, and resolve nearly all known UX issues from v1.0.


New Interface (WPF → Web App)

  • Replaced WPF UI with a modern web-based interface launched via msedge --app
  • Automated startup of server.ps1 and browser launch for a one-click experience
  • Hid browser address bar for a clean, app-like presentation
  • Updated layout, styling, and interaction flow for clarity and responsiveness

UI/UX Improvements

  • Capitalized status letter for consistency
  • Updated Human/Machine Log toggle label
  • Unified Start button styling to match toggle colors during execution
  • Greyed out non-applicable options while a process is running
  • Added "Mode" text for each phase in the console output
  • Removed text highlighting when expanding collapsible sections
  • Improved CSS for the “Clear Logs” prompt
  • Added custom messaging when deleting files
  • Added a “Jump to Bottom” button for live log viewing
  • Enabled autoscroll behavior with user override when scrolling upward
  • Updated Phase 1 verbiage to reflect correct behavior

Functional & Engine Improvements

  • All live logs now display correctly
  • Live logs update in real time without buffering or stalling
  • UnifiedLog.json now appends instead of overwriting
  • UnifiedLog.json now creates the live human log
  • Cleaned up console output behavior across all phases
  • Ensured correct phase transitions for Full, ScanOnly, and RepairOnly
  • Reworked config file structure for clarity and future expansion
  • Stabilized config read/write logic
  • Removed UI printing from Repair module to prevent UI crashes
  • Improved thread job handling for stable live updates
  • Ensured sequential Scan → Repair execution in Full mode

Mode Selection Logic

  • Full Mode
    • Enables scan path, repair path, and “Scan All Episodes”
  • Scan Only
    • Disables repair path
  • Repair Only
    • Disables scan path and “Scan All Episodes”

Known Issues

  • Repair timers still not functioning correctly (ongoing work)
  • Quality button remains visible; scheduled for removal in a future update

Future Work (Planned for v2.1+)

  • New Compression Mode:
    • Compress entire libraries or individual shows
    • Automatically reject compression if quality loss exceeds user-defined thresholds
    • Default recommended threshold: ~6% quality loss

Summary

Version 2.0 delivers a modernized interface, major UX improvements, and numerous stability enhancements while preserving the reliability of the underlying pipeline engine. This release sets the foundation for future features such as intelligent compression and expanded automation.

Version 1.0

14 Apr 22:48
316ab87

Choose a tag to compare

Media Integrity Pipeline — Version 1.0

This release marks the first stable, production-ready version of the Media Integrity Pipeline using the WPF interface. All core functionality has been validated and is working as expected.

Highlights

  • Fully functional WPF UI
  • All known bugs resolved
  • Stable end-to-end pipeline execution
  • Reliable operation across all modes:
    • Full
    • ScanOnly
    • RepairOnly

Known Limitations

  • The Quality button remains visible and is scheduled for removal in a future update

Summary

Version 1.0 represents a solid, dependable baseline for the project. The pipeline is stable, predictable, and ready for general use.