Version 1.9.0

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.json alongside 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: BurstAnalysisCache now exposes a delete(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.
Last modified May 25, 2026: update (e2557af)