Version 1.9.0
Categories:
RawCull Changelog — v1.8.5 → 1.9.0
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.
- Candidate badges distinguish the manual choice from the automatic recommendation, so you can 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 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.
🧠 Safer Burst Culling Decisions
Burst culling is now more conservative about when automatic rating actions are allowed.
- “Keep Best” and “Keep Top 2” are only available when the burst analysis is considered safe for one-click culling and sharpness scores are present.
- Medium-confidence bursts now use “Review recommended” language and guide you toward “Compare top 2” instead of immediate automatic culling.
- Low-confidence bursts now ask for review instead of presenting an automatic keeper decision.
- Keyboard shortcuts for automatic burst actions are ignored when a burst is not safe for one-click culling.
- The Comparison view hides automatic keep actions when the current burst does not meet the safety threshold.
🧾 Clearer Burst Group Presentation
Burst headers in the culling grid have been refined to make recommendations easier to understand.
- Burst groups now show titles like “Burst of 3 photos”, with capture timing and camera context when available.
- Recommendation text now uses clearer phrasing such as “Keep frame 2”, “Suggested: frame 3”, “Needs review”, or “Manual winner: frame 3”.
- Analysis reasons and cautions are translated into concise human-readable explanations such as “Sharpest frame”, “top frames are close”, or “autofocus unavailable”.
- Badges now reflect the current state more explicitly: High confidence, Review recommended, Low confidence, Manual, and Applied.
🔄 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.
- 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.
🔍 Zoom — Preserve Scale While Navigating
When navigating between images in the zoom view, the zoom level is now preserved across images. Only the pan offset is recentered.
🗂️ Culling Grid — Burst Analysis State Included in Cache Key
The burst analysis recommendation and review state are now factored into the culling grid’s layout cache key, fixing a subtle stale-display issue.
🩺 RAW Diagnostics — Refactored to ViewModel
The RAW diagnostics sheet trigger (⌘I) has been refactored so presentation state is owned by RawCullViewModel via presentRawDiagnostics().
🐛 Bug Fixes & Internal Improvements
- Version metadata: Updated app marketing version to 1.9.0 and build number to 90.
- Main window layout: The main navigation view now starts in detail-only mode.
- Logging: Fixed incorrect logger identifiers in
RequestThumbnail. - Burst cache deletion:
BurstAnalysisCachenow exposes adelete(catalog:)method used by the re-index flow. - Burst review states: Added finer-grained review states for algorithm review and manual winner overrides.
- Swift 6 cleanup: Burst presentation helpers use nonisolated computed properties and modern Swift expression syntax.
🧪 Tests
BurstAnalysisTests: Expanded coverage for burst grouping, ranking, manual winner overrides, re-index logic, conservative one-click culling, and burst presentation copy.BurstGroupPresentationTests: New tests for high-, medium-, low-confidence, manual winner, applied-state, and thumbnail badge presentation.CullingModelTests: Tests for burst winner override persistence, pruning, and catalog reset behaviour.ReviewQueueTests: Tests for the review queue builder.