<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Burst on RawCull</title><link>https://techrawcull.netlify.app/tags/burst/</link><description>Recent content in Burst on RawCull</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 30 Jul 2026 08:19:52 +0200</lastBuildDate><atom:link href="https://techrawcull.netlify.app/tags/burst/index.xml" rel="self" type="application/rss+xml"/><item><title>How RawCullCore Is Constructed</title><link>https://techrawcull.netlify.app/docs/packages/rawcullcore/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid>https://techrawcull.netlify.app/docs/packages/rawcullcore/</guid><description>&lt;h1 id="how-rawcullcore-is-constructed"&gt;How RawCullCore Is Constructed&lt;a class="td-heading-self-link" href="#how-rawcullcore-is-constructed" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;RawCullCore is the small domain layer at the center of RawCull. It does not
decode or analyze photos. Instead, it receives file metadata and measurements
already produced elsewhere, groups sequential files into bursts, and ranks the
candidates using deterministic culling rules.&lt;/p&gt;
&lt;p&gt;Its main architectural value is that a recommendation can be tested without
opening a RAW file, running Vision, creating a Metal context, loading
application settings, or constructing a view model.&lt;/p&gt;</description></item><item><title>Burst Groups</title><link>https://techrawcull.netlify.app/docs/burstgroup/</link><pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate><guid>https://techrawcull.netlify.app/docs/burstgroup/</guid><description>&lt;h1 id="burst-groups"&gt;Burst Groups&lt;a class="td-heading-self-link" href="#burst-groups" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Burst analysis turns a flat catalog into groups of adjacent, visually similar frames. It ranks each multi-frame group, presents review queues, and supports culling decisions such as keeping the best frame, keeping the top two, deferring a group, or setting a manual pick.&lt;/p&gt;
&lt;p&gt;The implementation separates orchestration, Vision feature-print indexing, pure grouping and ranking engines, cache persistence, and the review UI.&lt;/p&gt;
&lt;h2 id="source-map"&gt;Source Map&lt;a class="td-heading-self-link" href="#source-map" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Area&lt;/th&gt;
					&lt;th&gt;Main files&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Analysis orchestration and user actions&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sourcecode/RawCull/RawCull/Model/ViewModels/RawCullViewModel+BurstGrouping.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Similarity indexing and grouping state&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sourcecode/RawCull/RawCull/Model/ViewModels/SimilarityScoringModel.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Pure grouping and ranking&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sourcecode/RawCullCore/Sources/RawCullCore/BurstGroupingEngine.swift&lt;/code&gt;, &lt;code&gt;BurstRankingEngine.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Shared models&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sourcecode/RawCullCore/Sources/RawCullCore/BurstAnalysisModels.swift&lt;/code&gt;, app &lt;code&gt;BurstAnalysisModels.swift&lt;/code&gt;, &lt;code&gt;BurstReviewQueueModels.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Cache&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sourcecode/RawCull/RawCull/Actors/BurstAnalysisCache.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ratings and manual overrides&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;CullingModel.swift&lt;/code&gt;, &lt;code&gt;SavedFiles.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Burst home and review list&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;BurstGroupsHomeView.swift&lt;/code&gt;, &lt;code&gt;SimilarityGridSelectionView.swift&lt;/code&gt;, &lt;code&gt;CullingGridView.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Single-burst workspace and comparison&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;BurstCullingWorkspaceView.swift&lt;/code&gt;, &lt;code&gt;ComparisonGridView.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Tests&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;RawCullCore/Tests/RawCullCoreTests/BurstGroupingEngineTests.swift&lt;/code&gt;, &lt;code&gt;BurstRankingEngineTests.swift&lt;/code&gt;, app burst/culling tests&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="end-to-end-flow"&gt;End-to-End Flow&lt;a class="td-heading-self-link" href="#end-to-end-flow" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 A[&amp;#34;Analyze Bursts&amp;#34;] --&amp;gt; B[&amp;#34;RawCullViewModel.analyzeBursts&amp;#34;]
 B --&amp;gt; C{&amp;#34;Valid BurstAnalysisCache?&amp;#34;}
 C --&amp;gt;|&amp;#34;yes&amp;#34;| D[&amp;#34;Remap cached IDs and apply snapshot&amp;#34;]
 C --&amp;gt;|&amp;#34;no&amp;#34;| E{&amp;#34;Sharpness scores missing?&amp;#34;}
 E --&amp;gt;|&amp;#34;yes&amp;#34;| F[&amp;#34;Calibrate and score target files&amp;#34;]
 E --&amp;gt;|&amp;#34;no&amp;#34;| G[&amp;#34;Reuse scores&amp;#34;]
 F --&amp;gt; H{&amp;#34;Similarity embeddings missing?&amp;#34;}
 G --&amp;gt; H
 H --&amp;gt;|&amp;#34;yes&amp;#34;| I[&amp;#34;Index Vision feature prints&amp;#34;]
 H --&amp;gt;|&amp;#34;no&amp;#34;| J[&amp;#34;Reuse embeddings&amp;#34;]
 I --&amp;gt; K[&amp;#34;Group adjacent frames&amp;#34;]
 J --&amp;gt; K
 K --&amp;gt; L[&amp;#34;Rank multi-frame groups&amp;#34;]
 L --&amp;gt; M[&amp;#34;Apply manual winner overrides&amp;#34;]
 M --&amp;gt; N[&amp;#34;Save cache and review-state snapshots&amp;#34;]
 N --&amp;gt; O[&amp;#34;Show home dashboard and review queues&amp;#34;]&lt;/pre&gt;
&lt;p&gt;Every awaited phase is protected by the analysis generation and selected catalog. A cancelled or superseded run cannot publish late results into a newer catalog.&lt;/p&gt;</description></item></channel></rss>