Version 1.4.5
Categories:
Version 1.4.5 - April 10, 2026
A new version of RawCull, version 1.4.6, will be submitted to the Apple App Store at the beginning of next week after further testing and quality assurance. I have commenced working on this version and have implemented enhancements such as multiple selection in the Grid View and the application of functions to multiple selected images.
This release addresses a bug in sorting and selecting culled images within the Grid View. In the previous version, a restart of RawCull resolved the issue. However, in this release, the internal refresh mechanism has been implemented.
Changes since v1.4.3
Sharpness/Saliency Score Persistence
- Persist scores to SavedFiles: Added
sharpnessScore(Float) andsaliencySubject(String) fields toDecodeSavedFiles/SavedFiles/FileRecordso scores survive app restarts. - Load scores at launch: Added
loadPersistedScoringandSaliency()andapplyPreloadedScores()to restore saved scores into the model before thumbnails are created, so sort-by-sharpness order is immediately available. - Conditional sort:
sortBySharpnessnow only activates when preloaded scores are actually present. - Write scores on completion:
calibrateAndScoreCurrentCatalognow persists results only on successful (non-cancelled) runs via a newpersistScoringResultsInMemory()helper.
Focus Mask Parameter Persistence
- Added 6 configurable
FocusMaskConfigparameters toSettingsViewModel(preBlurRadius, threshold, energyMultiplier, erosionRadius, dilationRadius, featherRadius) with defaults andCodablepersistence. FocusMaskControlsViewnow saves settings on hide/reset and restores defaults fromFocusDetectorConfig.
UI Improvements
- Sharpness analysis in file detail view:
SavedFilesViewnow shows a “Sharpness Analysis” section with formatted score and saliency subject badge when data is available. - Thumbnail selection affordance: Stronger selection border, accent shadow, and overlay stroke in
ImageItemView. - Rating filter:
RatingFilter.minimum(Int)renamed toRatingFilter.stars(Int)— semantics changer from>= nto== n(exact match). - Grid view reset: Opening the grid now resets
ratingFilterto.alland refreshes sort order. - Tagged grid refresh:
TaggedPhotoHorisontalGridViewnow usesviewModel.filteredFilesfor lookups and gains a Refresh button.
Architecture / Cleanup
SettingsViewModelsingleton: Replaced@Environment-driven injection withSettingsViewModel.sharedthroughout — single source of truth, no duplicate instances.- Dead code removal: Deleted unused
selectedSourceparameter fromImageItemViewand callers; removedlastEstimatedSecondsETA tracking fromScanAndCreateThumbnailsandExtractAndSaveJPGs. - Swift style fixes:
switchreturn modernization, trailing comma cleanup, removed redundant= nildefaults,Sendabletrimmed from internal structs.
Version
- Bumped to 1.4.5 (CURRENT_PROJECT_VERSION 45).
ARW body compatibility diagnostic
The following Sony bodies successfully extract EXIF, focus points, sharpness, and saliency, except for the ILCE-7RM5, which failed to extract saliency on one of its three files. The ILCE-1M2 is the only body tested across all three Sony RAW size variants (S/M/L). All files use compressed RAW, and every body achieves full-resolution L-size output, ranging from 12.4 MP (ILCE-1M2 S-crop) to 60.2 MP (ILCE-7RM5). The ILCE-7M5 and ILCE-7RM5 are the next bodies to focus on, but I depend on test ARW files to properly test them before officially concluding support for these two bodies.
| Camera Body | EXIF | FocusPt | Sharpness | Saliency | RAW Types | Dimensions |
|---|---|---|---|---|---|---|
| ILCE-1M2 | ✅ | ✅ | ✅ | ✅ | Compressed | 4320 × 2880 (12.4 MP, S), 5616 × 3744 (21.0 MP, M), 8640 × 5760 (49.8 MP, L) |
| ILCE-1 | ✅ | ✅ | ✅ | ✅ | Compressed | 8640 × 5760 (49.8 MP, L) |
| ILCE-7M5 | ✅ | ✅ | ✅ | ✅ | Compressed | 7008 × 4672 (32.7 MP, L) |
| ILCE-7RM5 | ✅ | ✅ | ✅ | ✅ | Compressed | 9504 × 6336 (60.2 MP, L) |
| ILCE-9M3 | ✅ | ✅ | ✅ | ✅ | Compressed | 6000 × 4000 (24.0 MP, L) |