Version 1.8.9
Categories:
RawCull Changelog — v1.8.5 → 1.8.9
To be updated on Apple App Store.
✋ Manual Burst Winner Override
You can now override the algorithm’s automatic burst winner and pick the keeper yourself.
- A “Set Manual Winner” button appears in the Comparison view’s burst evidence panel when reviewing a burst group. Select a frame, then click the button to save it as the winner.
- The burst group header in the culling grid now shows “Manual winner: …” instead of “Best: …” when a manual choice is active.
- The candidate badge on thumbnails changes to orange (“MANUAL”) for the manually chosen frame, and green “AUTO BEST” continues to mark what the algorithm would have picked — so you can always see both at a glance.
- A “Manual winner active” notice appears in the comparison panel when a manual override is in effect.
- Manual selections are persisted in
savedfiles.jsonalongside ratings, so they survive app restarts and catalog reloads. Stale overrides (for files that no longer exist) are pruned automatically. - When “Keep Best in Group” is run on a burst that has a manual winner, the manual selection takes precedence over the algorithm.
🔄 Burst Re-index
A new “Reanalyze Bursts” button appears in the similarity/burst grouping toolbar.
- Clicking it deletes the saved burst analysis cache for the current catalog and runs a fresh analysis from scratch — useful after changing grouping settings or when results look stale.
- The button is disabled while grouping or analysis is already in progress.
🎭 Focus Mask — On-demand Generation
The focus mask is now generated only when you actually toggle it on, instead of being computed for every image as it loads.
- This reduces idle CPU and memory usage when the focus mask overlay is not in use.
- Mask generation is properly cancelled when you toggle the overlay off mid-compute.
- The mask state resets cleanly when you navigate to a different file.
- The focus mask toggle button is now enabled as soon as the image is available (previously required the mask to already be computed before the button was active).
🔍 Zoom — Preserve Scale While Navigating
When navigating between images in the zoom view (arrow keys or navigation buttons), the zoom level is now preserved across images. Previously the view would reset to fit-to-screen on every navigation step; now only the pan offset is recentered, keeping your chosen zoom level intact.
🗂️ Culling Grid — Burst Analysis State Included in Cache Key
The burst analysis recommendation and review state (including manual winner status) are now factored into the culling grid’s layout cache key. This ensures the grid re-renders correctly whenever the burst analysis result changes, fixing a subtle stale-display issue.
🩺 RAW Diagnostics — Refactored to ViewModel
The RAW diagnostics sheet trigger (⌘I) has been refactored: presentation state is now owned by RawCullViewModel via a dedicated presentRawDiagnostics() method, rather than living as local @State in FileDetailView. This improves state management and makes the diagnostics flow easier to extend.
🐛 Bug Fixes & Internal Improvements
- Logging: Fixed incorrect logger identifiers in
RequestThumbnail— log messages previously misidentified themselves as coming fromSharedMemoryCache. - Burst cache deletion:
BurstAnalysisCachenow exposes adelete(catalog:)method used by the new re-index flow. - Burst review states: Two new
BurstReviewStatevalues —.algorithmReviewedand.manualWinnerOverride— provide finer-grained tracking of how each burst group’s decision was reached.
🧪 Tests
BurstAnalysisTests: New comprehensive test suite covering burst grouping, ranking, manual winner overrides, and re-index logic.CullingModelTests: New tests for burst winner override persistence, pruning, and catalog reset behaviour.ReviewQueueTests: New tests for the review queue builder.