<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RawCull</title><link>https://deploy-preview-18--rawcull.netlify.app/</link><description>Recent content on RawCull</description><generator>Hugo</generator><language>en</language><atom:link href="https://deploy-preview-18--rawcull.netlify.app/index.xml" rel="self" type="application/rss+xml"/><item><title>Security &amp; Privacy</title><link>https://deploy-preview-18--rawcull.netlify.app/docs/security/</link><pubDate>Mon, 23 Mar 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/docs/security/</guid><description>&lt;p&gt;RawCull is designed to keep your photos and culling data on your Mac.&lt;/p&gt;
&lt;h2 id="sandbox"&gt;Sandbox&lt;a class="td-heading-self-link" href="#sandbox" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;RawCull runs in the macOS App Sandbox. The app entitlement file enables only the app sandbox entitlement.&lt;/p&gt;
&lt;p&gt;This means RawCull can access folders only after you choose them through macOS file selection or through saved security-scoped access.&lt;/p&gt;
&lt;h2 id="offline-use"&gt;Offline Use&lt;a class="td-heading-self-link" href="#offline-use" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;RawCull has no network entitlement. It does not use analytics, telemetry, cloud sync, update tracking, or third-party network SDKs.&lt;/p&gt;</description></item><item><title>Memory Cache</title><link>https://deploy-preview-18--rawcull.netlify.app/docs/cache/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/docs/cache/</guid><description>&lt;p&gt;RawCull uses memory and disk caches to keep browsing fast.&lt;/p&gt;
&lt;h2 id="cache-layers"&gt;Cache Layers&lt;a class="td-heading-self-link" href="#cache-layers" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When RawCull needs a thumbnail or preview, it tries these locations in order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Memory cache&lt;/li&gt;
&lt;li&gt;Disk cache&lt;/li&gt;
&lt;li&gt;Original source file&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If RawCull has to decode from the original file, it stores the result in cache so the next request is faster.&lt;/p&gt;
&lt;h2 id="grid-cache"&gt;Grid Cache&lt;a class="td-heading-self-link" href="#grid-cache" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Grid browsing uses a separate small-thumbnail memory cache. This keeps scrolling responsive without pushing larger preview images out of the main cache too quickly.&lt;/p&gt;</description></item><item><title>Culling Photos</title><link>https://deploy-preview-18--rawcull.netlify.app/docs/culling/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/docs/culling/</guid><description>&lt;p&gt;RawCull helps you review a temporary photo catalog, mark the frames you want to keep, and copy only selected RAW files to a final folder.&lt;/p&gt;
&lt;p&gt;RawCull does not delete images from the source catalog.&lt;/p&gt;
&lt;h2 id="basic-workflow"&gt;Basic Workflow&lt;a class="td-heading-self-link" href="#basic-workflow" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Copy photos from your camera card to a temporary folder.&lt;/li&gt;
&lt;li&gt;Open that folder in RawCull.&lt;/li&gt;
&lt;li&gt;Wait for scanning and thumbnail generation to finish.&lt;/li&gt;
&lt;li&gt;Review images in the grid, list, or zoom view.&lt;/li&gt;
&lt;li&gt;Mark rejects, keepers, and final star ratings.&lt;/li&gt;
&lt;li&gt;Copy rated images to your final editing folder.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ratings and marks are saved automatically. Reopen the same folder later to continue where you stopped.&lt;/p&gt;</description></item><item><title>Sharpness Scoring</title><link>https://deploy-preview-18--rawcull.netlify.app/docs/sharpness/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/docs/sharpness/</guid><description>&lt;p&gt;RawCull can score a catalog by estimated sharpness and sort the grid with the sharpest images first.&lt;/p&gt;
&lt;p&gt;Sharpness scores are automatic estimates. Always inspect important or borderline images yourself before rejecting them.&lt;/p&gt;
&lt;h2 id="run-scoring"&gt;Run Scoring&lt;a class="td-heading-self-link" href="#run-scoring" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open a catalog and wait for thumbnails to finish.&lt;/li&gt;
&lt;li&gt;Open the grid.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Score Sharpness&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Wait for scoring to finish.&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;Sharpness&lt;/strong&gt; sort toggle to show sharpest images first.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After scores exist, the button changes to &lt;strong&gt;Re-score&lt;/strong&gt;. Use it after changing scoring parameters or focus mask settings.&lt;/p&gt;</description></item><item><title>Similarity</title><link>https://deploy-preview-18--rawcull.netlify.app/docs/similarity/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/docs/similarity/</guid><description>&lt;p&gt;Similarity helps you find images that look like a selected reference image. It is useful for bursts, near-duplicates, and sessions with many similar frames.&lt;/p&gt;
&lt;p&gt;Similarity data is kept in memory for the current catalog session. If you close or reload the catalog, run indexing again.&lt;/p&gt;
&lt;h2 id="find-similar-images"&gt;Find Similar Images&lt;a class="td-heading-self-link" href="#find-similar-images" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open a catalog.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Index Similarity&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select an image to use as the reference.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Find Similar&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Turn on the &lt;strong&gt;Similarity&lt;/strong&gt; sort to place the closest matches first.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;RawCull uses Apple Vision feature prints to compare visual content. If sharpness scoring has already run, subject information can slightly improve the ranking.&lt;/p&gt;</description></item><item><title>Focus Peaking</title><link>https://deploy-preview-18--rawcull.netlify.app/docs/focuspeaking/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/docs/focuspeaking/</guid><description>&lt;p&gt;Focus Peaking highlights sharp edge detail in the current image. It is a visual aid for checking whether the important part of the photo is in focus.&lt;/p&gt;
&lt;h2 id="how-to-use-it"&gt;How to Use It&lt;a class="td-heading-self-link" href="#how-to-use-it" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open an image in zoom view.&lt;/li&gt;
&lt;li&gt;Turn on the focus mask or focus peaking overlay in the image controls.&lt;/li&gt;
&lt;li&gt;Inspect the highlighted areas.&lt;/li&gt;
&lt;li&gt;Adjust Focus settings if the overlay is too weak or too busy.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For best results, use extracted JPG previews or RAW-based zoom previews instead of small thumbnails.&lt;/p&gt;</description></item><item><title>Settings</title><link>https://deploy-preview-18--rawcull.netlify.app/docs/settings/</link><pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/docs/settings/</guid><description>&lt;p&gt;Open settings from &lt;strong&gt;RawCull -&amp;gt; Settings&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="cache"&gt;Cache&lt;a class="td-heading-self-link" href="#cache" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Cache tab shows memory and disk cache usage and lets you clear caches.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Setting&lt;/th&gt;
					&lt;th&gt;Use&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Memory cache&lt;/td&gt;
					&lt;td&gt;Keeps larger previews in memory&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Grid cache&lt;/td&gt;
					&lt;td&gt;Keeps small grid thumbnails in memory&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Clear Disk Cache&lt;/td&gt;
					&lt;td&gt;Removes cached thumbnails&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Clear JPG Cache&lt;/td&gt;
					&lt;td&gt;Removes cached full-size JPG previews&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Larger caches make browsing faster but use more memory.&lt;/p&gt;
&lt;h2 id="thumbnails"&gt;Thumbnails&lt;a class="td-heading-self-link" href="#thumbnails" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Thumbnails tab controls preview sizes and zoom preview sharpening.&lt;/p&gt;</description></item><item><title>Focus Points</title><link>https://deploy-preview-18--rawcull.netlify.app/docs/focuspoints/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/docs/focuspoints/</guid><description>&lt;p&gt;Focus Points show the autofocus point information RawCull can read from supported RAW files.&lt;/p&gt;
&lt;h2 id="how-to-use-it"&gt;How to Use It&lt;a class="td-heading-self-link" href="#how-to-use-it" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Open an image and turn on the Focus Points overlay in the image controls. RawCull shows the focus point location when the metadata is available.&lt;/p&gt;
&lt;p&gt;Focus point support depends on the camera and RAW metadata. Sony ARW support is the primary target. Nikon NEF focus point extraction is currently experimental and may not show focus points.&lt;/p&gt;</description></item><item><title>Version 2.1.8</title><link>https://deploy-preview-18--rawcull.netlify.app/blog/2026/06/22/version-2.1.8/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/blog/2026/06/22/version-2.1.8/</guid><description>&lt;h1 id="rawcull-changelog--v205--218"&gt;RawCull Changelog — v2.0.5 → 2.1.8&lt;a class="td-heading-self-link" href="#rawcull-changelog--v205--218" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Submitted for update on &lt;a href="https://apps.apple.com/no/app/rawcull/id6759362764?mt=12"&gt;Apple App Store&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="-actual-pixels-inspection"&gt;🔍 Actual-Pixels Inspection&lt;a class="td-heading-self-link" href="#-actual-pixels-inspection" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;Z&lt;/code&gt; as a fast inspection shortcut from grid, loupe, and comparison views.&lt;/li&gt;
&lt;li&gt;Opens the zoom overlay directly on the embedded JPEG at an actual-pixels zoom level.&lt;/li&gt;
&lt;li&gt;Centers the view around the AF focus point when one is available.&lt;/li&gt;
&lt;li&gt;Shows the focus-point marker on open for faster sharpness checking.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-faster-culling-flow"&gt;⭐ Faster Culling Flow&lt;a class="td-heading-self-link" href="#-faster-culling-flow" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Rating, reject, keep, and tag actions now advance automatically to the next image.&lt;/li&gt;
&lt;li&gt;The same advance behavior is available in thumbnail navigation, zoom overlay, and comparison grid workflows.&lt;/li&gt;
&lt;li&gt;Catalog loading now preselects the first visible file by name, so keyboard culling can begin immediately.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-orientation-correct-previews"&gt;🧭 Orientation-Correct Previews&lt;a class="td-heading-self-link" href="#-orientation-correct-previews" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Normalized source orientation for thumbnails, embedded previews, sharpened previews, comparison images, and zoom previews.&lt;/li&gt;
&lt;li&gt;Improved handling for Sony embedded previews that do not carry their own orientation metadata.&lt;/li&gt;
&lt;li&gt;Added corrected transform handling for EXIF orientation values, including rotated and mirrored images.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-adaptive-memory-handling"&gt;🧠 Adaptive Memory Handling&lt;a class="td-heading-self-link" href="#-adaptive-memory-handling" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added adaptive preview and grid cache recommendations based on installed memory, current system memory use, and macOS memory pressure.&lt;/li&gt;
&lt;li&gt;Reduced cache budgets automatically when memory pressure is warning or critical.&lt;/li&gt;
&lt;li&gt;Updated default cache settings for different memory tiers.&lt;/li&gt;
&lt;li&gt;Simplified the memory warning banner and added a close button.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-about-window"&gt;🪟 About Window&lt;a class="td-heading-self-link" href="#-about-window" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added a native About RawCull window.&lt;/li&gt;
&lt;li&gt;Replaced the standard app info command with RawCull&amp;rsquo;s custom About window.&lt;/li&gt;
&lt;li&gt;Included app version/build information and a compact keystroke reference.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-saved-files-view-cleanup"&gt;🗂️ Saved Files View Cleanup&lt;a class="td-heading-self-link" href="#-saved-files-view-cleanup" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Split saved-files UI into smaller focused components for catalog rows, file rows, detail rows, section headers, and star ratings.&lt;/li&gt;
&lt;li&gt;Kept the saved-file detail presentation while making the view easier to maintain.&lt;/li&gt;
&lt;li&gt;Added a &lt;code&gt;FileRecord&lt;/code&gt; convenience initializer for previews and tests.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-tests"&gt;🧪 Tests&lt;a class="td-heading-self-link" href="#-tests" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added and expanded Swift Testing coverage for culling auto-advance, thumbnail/cache admission, zoom overlay key actions, comparison navigation, and thumbnail provider behavior.&lt;/li&gt;
&lt;li&gt;Added coverage for &lt;code&gt;Z&lt;/code&gt; actual-pixels inspection in comparison navigation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-maintenance"&gt;🛠️ Maintenance&lt;a class="td-heading-self-link" href="#-maintenance" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Aligned project versioning across build settings and release branches.&lt;/li&gt;
&lt;li&gt;Added a &lt;code&gt;test-performance&lt;/code&gt; Makefile target.&lt;/li&gt;
&lt;li&gt;Performed cleanup in scoring parameter UI and cache-related code.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Version 2.0.5</title><link>https://deploy-preview-18--rawcull.netlify.app/blog/2026/06/18/version-2.0.5/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/blog/2026/06/18/version-2.0.5/</guid><description>&lt;h1 id="rawcull-changelog--v202--205"&gt;RawCull Changelog — v2.0.2 → 2.0.5&lt;a class="td-heading-self-link" href="#rawcull-changelog--v202--205" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Submitted for update on &lt;a href="https://apps.apple.com/no/app/rawcull/id6759362764?mt=12"&gt;Apple App Store&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;🖼️ Fixed orientation handling for embedded JPEG previews, sidecar JPEGs, cached previews, comparison view, and zoom previews.&lt;/li&gt;
&lt;li&gt;🎯 Improved sharpness scoring and burst analysis so they can run on selected files or active star-rating filters instead of always processing the full catalog.&lt;/li&gt;
&lt;li&gt;⚡ Refreshed full-size JPEG cache keys to avoid reusing older non-orientation-normalized previews.&lt;/li&gt;
&lt;li&gt;🧹 Fixed empty catalog handling so loading state and security-scoped access are cleaned up correctly.&lt;/li&gt;
&lt;li&gt;✨ Added an “Add Catalog” action when a selected folder contains no RAW files.&lt;/li&gt;
&lt;li&gt;🧪 Added regression tests for orientation decoding, scoped sharpness/burst analysis, cache behavior, and empty catalog cleanup.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Version 2.0.2</title><link>https://deploy-preview-18--rawcull.netlify.app/blog/2026/06/09/version-2.0.2/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/blog/2026/06/09/version-2.0.2/</guid><description>&lt;h1 id="rawcull-changelog--v196--202"&gt;RawCull Changelog — v1.9.6 → 2.0.2&lt;a class="td-heading-self-link" href="#rawcull-changelog--v196--202" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Updated on &lt;a href="https://apps.apple.com/no/app/rawcull/id6759362764?mt=12"&gt;Apple App Store&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-new--image-source-toggle-in-zoom--loupe-view"&gt;✨ New — Image source toggle in zoom / loupe view&lt;a class="td-heading-self-link" href="#-new--image-source-toggle-in-zoom--loupe-view" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Switch between the embedded JPEG preview and a full-size JPEG created from the RAW file while inspecting an image:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New &lt;code&gt;ImageSourceToggleView&lt;/code&gt; with keyboard shortcut support&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ZoomPreviewHandler&lt;/code&gt; significantly expanded to manage source switching&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ZoomOverlayView&lt;/code&gt; updated with key-action routing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FullSizeJPGDiskCache&lt;/code&gt; extended to support the toggle flow&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;DiskCacheAndScanAdmissionTests&lt;/code&gt; covering the cache admission logic&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="-new--burst-review-queue"&gt;✨ New — Burst Review Queue&lt;a class="td-heading-self-link" href="#-new--burst-review-queue" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A structured review-queue workflow for burst groups:&lt;/p&gt;</description></item><item><title>Version 1.9.6</title><link>https://deploy-preview-18--rawcull.netlify.app/blog/2026/06/04/version-1.9.6/</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/blog/2026/06/04/version-1.9.6/</guid><description>&lt;h1 id="rawcull-changelog--v194--196"&gt;RawCull Changelog — v1.9.4 → 1.9.6&lt;a class="td-heading-self-link" href="#rawcull-changelog--v194--196" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Released on &lt;a href="https://apps.apple.com/no/app/rawcull/id6759362764?mt=12"&gt;Apple App Store&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="-comparison-view-is-now-a-horizontal-filmstrip"&gt;🔄 Comparison view is now a horizontal filmstrip&lt;a class="td-heading-self-link" href="#-comparison-view-is-now-a-horizontal-filmstrip" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The burst comparison layout was completely redesigned.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Candidates are now presented in a side-by-side horizontal scroll, one full-width pane per candidate, instead of a vertical grid stack.&lt;/li&gt;
&lt;li&gt;Navigation is left/right only — up/down arrow keys are removed. The view snaps one candidate at a time using SwiftUI scrollTargetBehavior(.viewAligned).&lt;/li&gt;
&lt;li&gt;Selecting a file in the filmstrip updates the main selection and vice-versa, keeping both views in sync automatically.&lt;/li&gt;
&lt;li&gt;The burst header bar is more compact: decision text and action buttons share a single line with tooltips replacing verbose inline descriptions.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="-loupe-view-can-now-toggle-the-extracted-jpg"&gt;🔍 Loupe view can now toggle the extracted JPG&lt;a class="td-heading-self-link" href="#-loupe-view-can-now-toggle-the-extracted-jpg" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The loupe (single-image zoom) view gains a built-in extracted-JPG mode so you can compare the embedded thumbnail against the full-size sidecar or extracted JPEG without opening a separate window.&lt;/p&gt;</description></item><item><title>Version 1.9.4</title><link>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/31/version-1.9.4/</link><pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/31/version-1.9.4/</guid><description>&lt;h1 id="rawcull-changelog--v185--194"&gt;RawCull Changelog — v1.8.5 → 1.9.4&lt;a class="td-heading-self-link" href="#rawcull-changelog--v185--194" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Updated on &lt;a href="https://apps.apple.com/no/app/rawcull/id6759362764?mt=12"&gt;Apple App Store&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="v191--v194"&gt;v1.9.1 → v1.9.4&lt;a class="td-heading-self-link" href="#v191--v194" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="-sharpness-scoring-now-has-intent-presets-and-precision-modes"&gt;🎯 Sharpness scoring now has intent presets and precision modes&lt;a class="td-heading-self-link" href="#-sharpness-scoring-now-has-intent-presets-and-precision-modes" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Sharpness scoring is now much more configurable and better tuned for different kinds of photography.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added photo-type presets: &lt;strong&gt;Auto&lt;/strong&gt;, &lt;strong&gt;Birds/Wildlife&lt;/strong&gt;, &lt;strong&gt;Portrait&lt;/strong&gt;, &lt;strong&gt;Landscape&lt;/strong&gt;, and &lt;strong&gt;Action&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Added quality modes: &lt;strong&gt;Fast&lt;/strong&gt;, &lt;strong&gt;Balanced&lt;/strong&gt;, and &lt;strong&gt;High Precision&lt;/strong&gt;. Balanced and High Precision decode larger previews and blend more fine detail for better small-subject ranking.&lt;/li&gt;
&lt;li&gt;Added a scoring source picker: &lt;strong&gt;Embedded Preview&lt;/strong&gt; for normal culling speed, or &lt;strong&gt;RAW Demosaic&lt;/strong&gt; for slow, final-precision checks.&lt;/li&gt;
&lt;li&gt;These scoring choices are now persisted in settings and restored when a catalog is reopened.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="-focus-mask-evolved-into-focus-evidence"&gt;🔍 Focus mask evolved into focus evidence&lt;a class="td-heading-self-link" href="#-focus-mask-evolved-into-focus-evidence" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The focus mask is now much closer to an explanation overlay for the sharpness score, instead of a generic edge mask.&lt;/p&gt;</description></item><item><title>Version 1.8.5</title><link>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/20/version-1.8.5/</link><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/20/version-1.8.5/</guid><description>&lt;h1 id="rawcull-changelog--v181--185"&gt;RawCull Changelog — v1.8.1 → 1.8.5&lt;a class="td-heading-self-link" href="#rawcull-changelog--v181--185" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="-smarter-burst-culling"&gt;✨ Smarter Burst Culling&lt;a class="td-heading-self-link" href="#-smarter-burst-culling" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;RawCull now includes an intelligent burst analysis workflow to help identify the best frames in fast sequences.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Groups visually similar burst shots automatically.&lt;/li&gt;
&lt;li&gt;Recommends the best frame using sharpness, subject/saliency, AF evidence, and metadata stability.&lt;/li&gt;
&lt;li&gt;Shows confidence levels: High, Medium, or Low.&lt;/li&gt;
&lt;li&gt;Adds burst evidence and caution notes so you can understand why a frame was recommended.&lt;/li&gt;
&lt;li&gt;Adds quick actions to Keep Best, Keep Top 2, Compare, or Undo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-improved-burst-comparison"&gt;🔍 Improved Burst Comparison&lt;a class="td-heading-self-link" href="#-improved-burst-comparison" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The comparison view now supports burst-specific review.&lt;/p&gt;</description></item><item><title>Version 1.8.1</title><link>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/16/version-1.8.1/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/16/version-1.8.1/</guid><description>&lt;h1 id="rawcull-changelog--v180--181"&gt;RawCull Changelog — v1.8.0 → 1.8.1&lt;a class="td-heading-self-link" href="#rawcull-changelog--v180--181" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A stability and resource-hygiene release. Focus is on eliminating main-thread hangs in the zoom preview, tightening security-scoped resource lifecycles, and fixing
actor-isolation gaps in the rsync copy path.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-security-scoped-resource-lifecycle"&gt;🔒 Security-Scoped Resource Lifecycle&lt;a class="td-heading-self-link" href="#-security-scoped-resource-lifecycle" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Catalog access is now scoped to the &lt;em&gt;active&lt;/em&gt; catalog&lt;/strong&gt;, not every catalog ever opened in the sidebar. Long sessions no longer accumulate stale security-scoped accesses.&lt;/li&gt;
&lt;li&gt;Added explicit &lt;code&gt;startSecurityScopedAccess(for:)&lt;/code&gt;, &lt;code&gt;stopSecurityScopedAccess(for:)&lt;/code&gt;, and &lt;code&gt;stopActiveSecurityScopedAccess()&lt;/code&gt; on &lt;code&gt;RawCullViewModel&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Catalog cancellation and app shutdown both route through the same cleanup path; &lt;code&gt;deinit&lt;/code&gt; is now a last-resort fallback rather than the primary stop point.&lt;/li&gt;
&lt;li&gt;Picker flow simplified — view no longer manually pairs start/stop calls.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-zoom-preview--no-more-main-thread-hangs"&gt;⚡ Zoom Preview — No More Main-Thread Hangs&lt;a class="td-heading-self-link" href="#-zoom-preview--no-more-main-thread-hangs" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ZoomPreviewHandler&lt;/code&gt; sidecar JPG decode moved &lt;strong&gt;off the MainActor&lt;/strong&gt; into a &lt;code&gt;Task.detached(priority: .userInitiated)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Opening the zoom overlay on a large Sony JPEG no longer blocks the UI while ImageIO opens and decodes the file.&lt;/li&gt;
&lt;li&gt;Cancellation is now checked between every async step, so dismissing the overlay early stops in-flight work cleanly.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;loadCGImage(from:)&lt;/code&gt; and the disk-cache accessor are marked &lt;code&gt;nonisolated&lt;/code&gt; to make the off-main path explicit.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-rsync-copy-path-executecopyfiles"&gt;🛠️ Rsync Copy Path (&lt;code&gt;ExecuteCopyFiles&lt;/code&gt;)&lt;a class="td-heading-self-link" href="#-rsync-copy-path-executecopyfiles" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Security-scoped URLs for source and destination are now paired with a single, idempotent &lt;code&gt;cleanup()&lt;/code&gt; call covering: rsync success, launch failure, user close/cancel, sheet dismissal, and &lt;code&gt;deinit&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Progress streaming callback hops to &lt;code&gt;@MainActor&lt;/code&gt; before touching &lt;code&gt;progressContinuation&lt;/code&gt;, removing a latent actor-isolation race that strict concurrency would flag.&lt;/li&gt;
&lt;li&gt;Progress continuations and streaming handler state are finished/cleared exactly once.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-catalog-loading--cancellation"&gt;🧵 Catalog Loading &amp;amp; Cancellation&lt;a class="td-heading-self-link" href="#-catalog-loading--cancellation" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;startCatalogLoad(for:)&lt;/code&gt; short-circuits cleanly when the active catalog already has live security-scoped access — no redundant cancel/restart cycles.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cancelCatalogLoad()&lt;/code&gt; now also clears &lt;code&gt;currentselectedSource&lt;/code&gt; and stops active security-scoped access, preventing a new load from racing previous cleanup.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-tests"&gt;🧪 Tests&lt;a class="td-heading-self-link" href="#-tests" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New &lt;code&gt;RawCullViewModelSecurityScopeTests&lt;/code&gt; covering start/stop pairing, re-selection no-op behavior, and cancellation cleanup.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ThumbnailProvider*&lt;/code&gt; tests updated for the refreshed memory and cancellation surface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-cleanup"&gt;🧹 Cleanup&lt;a class="td-heading-self-link" href="#-cleanup" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Removed legacy &lt;code&gt;documents/ver176.md&lt;/code&gt;; added &lt;code&gt;documents/ver181.md&lt;/code&gt; capturing the v1.8.0 review findings actually shipped in this release.&lt;/li&gt;
&lt;li&gt;Minor follow-ups in &lt;code&gt;RawCullViewModel+Catalog&lt;/code&gt;, &lt;code&gt;SharpnessScoringModel&lt;/code&gt;, and project settings.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Version 1.8.0</title><link>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/14/version-1.8.0/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/14/version-1.8.0/</guid><description>&lt;h1 id="rawcull-changelog--v174--180"&gt;RawCull Changelog — v1.7.4 → 1.8.0&lt;a class="td-heading-self-link" href="#rawcull-changelog--v174--180" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;RawCull has received improvements to image comparison, zoom review, rating workflow, thumbnail responsiveness, cache reliability, sharpness/similarity behavior, and release/test tooling.
Version 1.8.0 is submitted for update on Apple App Store.&lt;/p&gt;
&lt;h2 id="-v180"&gt;🚀 v1.8.0&lt;a class="td-heading-self-link" href="#-v180" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="-new-comparison-view"&gt;🖼️ New Comparison View&lt;a class="td-heading-self-link" href="#-new-comparison-view" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added a dedicated comparison view for reviewing selected images side by side.&lt;/li&gt;
&lt;li&gt;Supports comparing up to four selected thumbnails.&lt;/li&gt;
&lt;li&gt;Added keyboard navigation inside the comparison view.&lt;/li&gt;
&lt;li&gt;Added zoom and pan controls for closer inspection.&lt;/li&gt;
&lt;li&gt;Added focus mask and focus point overlays while comparing images.&lt;/li&gt;
&lt;li&gt;Added support for switching between thumbnail preview and extracted JPEG source.&lt;/li&gt;
&lt;li&gt;Added rating controls directly inside comparison mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-improved-zoom-review"&gt;🔍 Improved Zoom Review&lt;a class="td-heading-self-link" href="#-improved-zoom-review" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Improved the full-window zoom overlay experience.&lt;/li&gt;
&lt;li&gt;Added previous/next image navigation in zoom view.&lt;/li&gt;
&lt;li&gt;Added visible rating badge for the current image.&lt;/li&gt;
&lt;li&gt;Added keyboard shortcuts for zooming and switching image source.&lt;/li&gt;
&lt;li&gt;Added tests for zoom overlay navigation and behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-faster-and-more-responsive-thumbnail-handling"&gt;⚡ Faster and More Responsive Thumbnail Handling&lt;a class="td-heading-self-link" href="#-faster-and-more-responsive-thumbnail-handling" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Improved cancellation of thumbnail and JPEG extraction work.&lt;/li&gt;
&lt;li&gt;Switching or cancelling catalogs should now feel more responsive because old ImageIO work is cancelled earlier.&lt;/li&gt;
&lt;li&gt;Sony and Nikon thumbnail/JPEG extraction now check for cancellation before expensive decode work.&lt;/li&gt;
&lt;li&gt;Improved thumbnail loader slot accounting so cancelled requests do not consume concurrency capacity.&lt;/li&gt;
&lt;li&gt;Added regression tests for thumbnail loader cancellation and concurrency behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-sharpness-and-similarity-reliability"&gt;🎯 Sharpness and Similarity Reliability&lt;a class="td-heading-self-link" href="#-sharpness-and-similarity-reliability" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Similarity and burst actions now wait for in-progress sharpness scoring when needed.&lt;/li&gt;
&lt;li&gt;Prevents similarity/burst workflows from running before required sharpness scores are ready.&lt;/li&gt;
&lt;li&gt;Added test coverage for concurrent sharpness scoring behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-cache-and-memory-improvements"&gt;🧠 Cache and Memory Improvements&lt;a class="td-heading-self-link" href="#-cache-and-memory-improvements" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Improved cache replacement accounting for memory and grid thumbnail caches.&lt;/li&gt;
&lt;li&gt;Improved test isolation around shared cache state.&lt;/li&gt;
&lt;li&gt;Added memory diagnostics checklist for validating large-catalog behavior.&lt;/li&gt;
&lt;li&gt;Improved cache-related concurrency tests.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-rating-workflow-improvements"&gt;⭐ Rating Workflow Improvements&lt;a class="td-heading-self-link" href="#-rating-workflow-improvements" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added reusable rating controls and rating badge UI.&lt;/li&gt;
&lt;li&gt;Rating actions are now available in more review contexts, including comparison and zoom workflows.&lt;/li&gt;
&lt;li&gt;Ratings support reject, keeper, and 2-5 star values.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-build-and-test-tooling"&gt;🛠️ Build and Test Tooling&lt;a class="td-heading-self-link" href="#-build-and-test-tooling" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added shared Xcode scheme.&lt;/li&gt;
&lt;li&gt;Added dedicated test plans:
&lt;ul&gt;
&lt;li&gt;Smoke&lt;/li&gt;
&lt;li&gt;Full test suite&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Updated Makefile test commands.&lt;/li&gt;
&lt;li&gt;Improved documentation for test architecture and release validation.&lt;/li&gt;
&lt;li&gt;Pinned Swift Package dependencies to exact versions for more predictable builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-camera-and-image-extraction-notes"&gt;📷 Camera and Image Extraction Notes&lt;a class="td-heading-self-link" href="#-camera-and-image-extraction-notes" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Continued improvements to Sony ARW thumbnail extraction.&lt;/li&gt;
&lt;li&gt;Added cancellation-aware extraction paths for Sony and Nikon raw/JPEG preview handling.&lt;/li&gt;
&lt;li&gt;Nikon support remains experimental.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-latest-commit-after-v180"&gt;📝 Latest Commit After v1.8.0&lt;a class="td-heading-self-link" href="#-latest-commit-after-v180" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="-documentation"&gt;📚 Documentation&lt;a class="td-heading-self-link" href="#-documentation" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Updated README release information and project description.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Version 1.7.4</title><link>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/10/version-1.7.4/</link><pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/10/version-1.7.4/</guid><description>&lt;h1 id="rawcull-changelog--v170--174"&gt;RawCull Changelog — v1.7.0 → 1.7.4&lt;a class="td-heading-self-link" href="#rawcull-changelog--v170--174" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Version 1.7.4 is submitted for update on Apple App Store. RawCull 1.7.0 focuses on faster zoom previews, better cache management, and more reliable culling-data saving.&lt;/p&gt;
&lt;h2 id="new"&gt;✨New&lt;a class="td-heading-self-link" href="#new" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Full-size JPG disk cache.&lt;/strong&gt; The zoom view now caches the full-resolution embedded JPEG to disk (&lt;code&gt;~/Library/Caches/no.blogspot.RawCull/FullsizeJPGs/&lt;/code&gt;), so re-opening a previously zoomed photo is instant instead of re-extracting from the ARW.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Cache JPGs&amp;rdquo; button&lt;/strong&gt; in the catalog sidebar lets you pre-warm the full-size JPG cache for an entire catalog in one go (uses a new &lt;code&gt;ScanAndExtractJPGs&lt;/code&gt; actor with progress + ETA).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JPG cache controls in Settings → Cache.&lt;/strong&gt; A new section shows the on-disk size of the full-size JPG cache and adds a Prune action (with confirmation).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-changed"&gt;🔄 Changed&lt;a class="td-heading-self-link" href="#-changed" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unified culling grid.&lt;/strong&gt; The standard grid and the Similarity/Burst grid now share one &lt;code&gt;CullingGridView&lt;/code&gt;. Selection, scroll-to-selection, rating filter, the &amp;ldquo;N selected&amp;rdquo; status, and the three progress overlays now behave identically in both views.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redesigned Scan Stats sheet&lt;/strong&gt; — clearer layout for the per-catalog statistics.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smoother progress ETA.&lt;/strong&gt; The &amp;ldquo;Estimated time to completion&amp;rdquo; label is now &amp;ldquo;Estimated time left&amp;rdquo;, and the countdown no longer jitters upward when a slow file briefly inflates the average.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cleaner toolbar mode switching.&lt;/strong&gt; Loupe / Grid / Similarity / Rated buttons go through a single &lt;code&gt;selectMainViewMode(...)&lt;/code&gt; helper for consistent state reset.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Saved-files persistence moved out of the main view model&lt;/strong&gt; into a dedicated &lt;code&gt;CullingModel&lt;/code&gt;, with debounced JSON writes (350 ms) to avoid hammering disk on rapid rating changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-under-the-hood"&gt;📦 Under the hood&lt;a class="td-heading-self-link" href="#-under-the-hood" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New concurrency tests for &lt;code&gt;SharedMemoryCache&lt;/code&gt; and &lt;code&gt;FocusMaskModel&lt;/code&gt;; revisions to thumbnail-cache eviction (&lt;code&gt;CacheDelegate&lt;/code&gt;, &lt;code&gt;CachedThumbnail&lt;/code&gt;) for safer cross-actor access.&lt;/li&gt;
&lt;li&gt;Catalog load/cancel path reworked — switching catalogs now reliably cancels in-flight scan, thumbnail, JPG-extract, and sharpness/similarity work.&lt;/li&gt;
&lt;li&gt;Image extractors (&lt;code&gt;SaveJPGImage&lt;/code&gt;, &lt;code&gt;JPGSonyARWExtractor&lt;/code&gt;, &lt;code&gt;JPGNikonNEFExtractor&lt;/code&gt;) tightened.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Version 1.7.0</title><link>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/06/version-1.7.0/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/blog/2026/05/06/version-1.7.0/</guid><description>&lt;h1 id="rawcull-changelog--v169--170"&gt;RawCull Changelog — v1.6.9 → 1.7.0&lt;a class="td-heading-self-link" href="#rawcull-changelog--v169--170" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Version 1.7.0 is submitted for update on Apple App Store. RawCull 1.7.0 focuses on faster zoom previews, better cache management, and more reliable culling-data saving.&lt;/p&gt;
&lt;h2 id="-highlights"&gt;✨ Highlights&lt;a class="td-heading-self-link" href="#-highlights" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster zoom preview loading&lt;/strong&gt; with a new full-size JPG disk cache.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better cache controls&lt;/strong&gt; in Settings, including cache size visibility and manual JPG cache pruning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;More reliable culling persistence&lt;/strong&gt; when rating, batch-rating, and saving sharpness results.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved diagnostics&lt;/strong&gt; for understanding memory pressure and cache evictions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-whats-new"&gt;✨ What’s new&lt;a class="td-heading-self-link" href="#-whats-new" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="full-size-jpg-disk-cache-for-zoom-previews"&gt;Full-size JPG disk cache for zoom previews&lt;a class="td-heading-self-link" href="#full-size-jpg-disk-cache-for-zoom-previews" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;RawCull now caches extracted full-size JPEG previews on disk. Reopening zoomed images is faster, and the app avoids repeating the same extraction work for files you have already inspected.&lt;/p&gt;</description></item><item><title>Memory Pressure</title><link>https://deploy-preview-18--rawcull.netlify.app/docs/memorypressure/</link><pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/docs/memorypressure/</guid><description>&lt;p&gt;RawCull watches memory use while you browse large catalogs.&lt;/p&gt;
&lt;h2 id="what-you-see"&gt;What You See&lt;a class="td-heading-self-link" href="#what-you-see" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Memory tab shows:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Value&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Total memory&lt;/td&gt;
					&lt;td&gt;Installed unified memory on your Mac&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Used memory&lt;/td&gt;
					&lt;td&gt;Estimated system memory currently in use&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;App memory usage&lt;/td&gt;
					&lt;td&gt;RawCull&amp;rsquo;s own memory footprint&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;System memory pressure&lt;/td&gt;
					&lt;td&gt;Current macOS memory pressure state&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;RawCull also uses an early warning line at about 85 percent of total memory.&lt;/p&gt;
&lt;h2 id="pressure-levels"&gt;Pressure Levels&lt;a class="td-heading-self-link" href="#pressure-levels" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;macOS reports memory pressure as:&lt;/p&gt;</description></item><item><title>About</title><link>https://deploy-preview-18--rawcull.netlify.app/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-18--rawcull.netlify.app/about/</guid><description>&lt;section id="td-cover-block-0" class="row td-cover-block td-cover-block--height-auto js-td-cover td-overlay td-overlay--dark -bg-dark" &gt;
 &lt;div class="col-12"&gt;
 &lt;div class="container td-overlay__inner"&gt;
 &lt;div class="text-center"&gt;
 &lt;h1 class="display-1 mt-0 mt-md-5 pb-4"&gt;About RawCull&lt;/h1&gt;
 &lt;div class="pt-3 lead"&gt;
&lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/section&gt;
&lt;div&gt;&lt;a id="td-block-1" class="td-anchor-no-extra-offset"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;section class="row td-box td-box--primary td-box--height-auto"&gt;
&lt;div class="col"&gt;
&lt;div class="container"&gt;
&lt;h2 id="about-rawcull"&gt;About RawCull&lt;a class="td-heading-self-link" href="#about-rawcull" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Hello!&lt;/p&gt;
&lt;p&gt;If you have ideas, feedback, or suggestions about RawCull, please reach out to me at &lt;a href="mailto:thomeven@gmail.com"&gt;thomeven@gmail.com&lt;/a&gt;. I&amp;rsquo;d love to hear from you.&lt;/p&gt;
&lt;h3 id="background"&gt;Background&lt;a class="td-heading-self-link" href="#background" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I started RsyncOSX in August 2016 as a way to learn Swift, and after eight years of releases, it was archived in August 2024. RsyncUI, built with SwiftUI, began in late 2020 and continues to be actively developed. RawCull represents my latest venture into building specialized macOS applications with modern Swift technologies.&lt;/p&gt;</description></item></channel></rss>