<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Version 1.5.9 on RawCull</title><link>https://rawcull.netlify.app/tags/version-1.5.9/</link><description>Recent content in Version 1.5.9 on RawCull</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 19 Apr 2026 08:48:51 +0200</lastBuildDate><atom:link href="https://rawcull.netlify.app/tags/version-1.5.9/index.xml" rel="self" type="application/rss+xml"/><item><title>Version 1.5.9</title><link>https://rawcull.netlify.app/blog/2026/04/19/version-1.5.9/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate><guid>https://rawcull.netlify.app/blog/2026/04/19/version-1.5.9/</guid><description>&lt;h1 id="rawcull-changelog--v150--159"&gt;RawCull Changelog — v1.5.0 → 1.5.9&lt;a class="td-heading-self-link" href="#rawcull-changelog--v150--159" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="ui-changes"&gt;UI changes&lt;a class="td-heading-self-link" href="#ui-changes" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="new-viewing-experience"&gt;New viewing experience&lt;a class="td-heading-self-link" href="#new-viewing-experience" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;In-window zoom overlay&lt;/strong&gt; replaces the separate zoom windows. Double-click any thumbnail to open a full-view zoom overlay inside the main window (&lt;code&gt;ZoomOverlayView.swift&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy views removed&lt;/strong&gt;: horizontal main thumbnails strip, &lt;code&gt;ImageTableHorizontalView&lt;/code&gt;, both focus-peek zoom windows (&lt;code&gt;ZoomableFocusePeekCSImageView&lt;/code&gt; / &lt;code&gt;ZoomableFocusePeekNSImageView&lt;/code&gt;), and &lt;code&gt;TagImageFocusView&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thumbnail grid opens in its own window&lt;/strong&gt; via a separate &lt;code&gt;Scene&lt;/code&gt; in &lt;code&gt;RawCullApp&lt;/code&gt;, so the main navigation and the grid can sit side-by-side.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Main-view modes&lt;/strong&gt; added for switching between detail/grid layouts from the toolbar.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="toolbar-and-sidebar-rework"&gt;Toolbar and sidebar rework&lt;a class="td-heading-self-link" href="#toolbar-and-sidebar-rework" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unified shared toolbar&lt;/strong&gt; (&lt;code&gt;SharedMainToolbarContent&lt;/code&gt;): badge toggles, split-view toggle, and view-mode controls now live in one place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed&lt;/strong&gt;: dedicated rating toolbar, sharpness toggle, sidebar toggle, and the &lt;code&gt;columnVisibility&lt;/code&gt; prop.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Split view&lt;/strong&gt; visibility is controlled from the shared toolbar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search + rating filter&lt;/strong&gt; moved directly into &lt;code&gt;FileTableRowView&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="burst-grouping-new-feature"&gt;Burst grouping (new feature)&lt;a class="td-heading-self-link" href="#burst-grouping-new-feature" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Auto-clusters consecutive similar frames into burst groups using Vision feature prints.&lt;/li&gt;
&lt;li&gt;Best-frame info + header cached for snappy group rendering.&lt;/li&gt;
&lt;li&gt;Debounced / cancellable grouping so scroll and filter changes don&amp;rsquo;t stack stale work.&lt;/li&gt;
&lt;li&gt;Sharpness and similarity controls &lt;strong&gt;hidden while in burst mode&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep Best&lt;/strong&gt; action disabled until sharpness scoring has run.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ratings-badges-and-stats"&gt;Ratings, badges, and stats&lt;a class="td-heading-self-link" href="#ratings-badges-and-stats" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;isTagged&lt;/code&gt; renamed to &lt;code&gt;isUnrated&lt;/code&gt;; a &lt;strong&gt;Picked&lt;/strong&gt; badge was added.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crown badge removed&lt;/strong&gt; — the colored rating strip alone now communicates the top pick.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CullingStatsView&lt;/code&gt; removed; burst cell simplified.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RatingView.swift&lt;/code&gt; deleted (consolidated into inline row UI).&lt;/li&gt;
&lt;li&gt;Saved-files toggle handlers removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="focus-controls"&gt;Focus controls&lt;a class="td-heading-self-link" href="#focus-controls" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus controls moved to Settings&lt;/strong&gt; (&lt;code&gt;FocusSettingsTab&lt;/code&gt;) rather than floating in the main window.&lt;/li&gt;
&lt;li&gt;Marker size centralized so it stays consistent across views.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="naming--layout-polish"&gt;Naming / layout polish&lt;a class="td-heading-self-link" href="#naming--layout-polish" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;TaggedPhotoHorisontalGridView&lt;/code&gt; → &lt;code&gt;RatedPhotoGridView&lt;/code&gt;; &lt;code&gt;TaggedPhotoItemView&lt;/code&gt; → &lt;code&gt;RatedPhotoItemView&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Grid padding and overall formatting refreshed.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="technical-changes"&gt;Technical changes&lt;a class="td-heading-self-link" href="#technical-changes" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="thumbnail-caching"&gt;Thumbnail caching&lt;a class="td-heading-self-link" href="#thumbnail-caching" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Dedicated &lt;strong&gt;grid thumbnail cache&lt;/strong&gt; with a fast path separate from the main preview cache.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configurable grid cache size&lt;/strong&gt; in Settings.&lt;/li&gt;
&lt;li&gt;Live &lt;strong&gt;cache-usage display&lt;/strong&gt; for the grid cache.&lt;/li&gt;
&lt;li&gt;Removed the old &lt;code&gt;thumbnailSizeGridView&lt;/code&gt; setting.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OSAllocatedUnfairLock&lt;/code&gt; guards grid cache cost accounting.&lt;/li&gt;
&lt;li&gt;New handler for &amp;ldquo;extraction-needed&amp;rdquo; thumbnails so misses can trigger on-demand extraction.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="scoring--similarity-pipeline"&gt;Scoring / similarity pipeline&lt;a class="td-heading-self-link" href="#scoring--similarity-pipeline" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aperture hint + ISO scaling&lt;/strong&gt; added to focus scoring (&lt;code&gt;FocusDetectorConfig.apertureHint&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Max sharpness score cached&lt;/strong&gt; for O(1) reads.&lt;/li&gt;
&lt;li&gt;Burst grouping tasks debounced and stale tasks cancelled.&lt;/li&gt;
&lt;li&gt;Crown-badge derivation moved to the rating cache instead of re-reading sharpness scores.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="state--architecture"&gt;State / architecture&lt;a class="td-heading-self-link" href="#state--architecture" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;selectedFile&lt;/code&gt; is now &lt;strong&gt;derived from &lt;code&gt;selectedFileID&lt;/code&gt;&lt;/strong&gt; (single source of truth).&lt;/li&gt;
&lt;li&gt;Sheet handling centralized in &lt;code&gt;RawCullViewModel&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Async disk load + UI update path simplified.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WindowIdentifier&lt;/code&gt; and associated zoom/selection plumbing removed along with the old zoom windows.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="housekeeping"&gt;Housekeeping&lt;a class="td-heading-self-link" href="#housekeeping" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Periphery ignores added; dead code and legacy views pruned.&lt;/li&gt;
&lt;li&gt;Test cleanup.&lt;/li&gt;
&lt;li&gt;Multiple &lt;code&gt;project.pbxproj&lt;/code&gt; bumps; version lands at &lt;strong&gt;1.5.9&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>