<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Swift-Package on RawCull</title><link>https://techrawcull.netlify.app/tags/swift-package/</link><description>Recent content in Swift-Package 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/swift-package/index.xml" rel="self" type="application/rss+xml"/><item><title>How PhotoAIKit Is Constructed</title><link>https://techrawcull.netlify.app/docs/packages/photoaikit/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid>https://techrawcull.netlify.app/docs/packages/photoaikit/</guid><description>&lt;h1 id="how-photoaikit-is-constructed"&gt;How PhotoAIKit Is Constructed&lt;a class="td-heading-self-link" href="#how-photoaikit-is-constructed" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;PhotoAIKit is a reusable Swift package extracted from application code. Its most
important achievement is not merely that CLIP and SAM 3 run. It is that reusable
AI behavior has been separated from RawCull&amp;rsquo;s UI, RAW-file handling, paths,
sandbox rules, and culling policy.&lt;/p&gt;
&lt;p&gt;This document explains the construction from the bottom up and gives the reason
for each boundary.&lt;/p&gt;
&lt;h2 id="1-begin-with-the-package-boundary"&gt;1. Begin With The Package Boundary&lt;a class="td-heading-self-link" href="#1-begin-with-the-package-boundary" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The package owns:&lt;/p&gt;</description></item><item><title>How PhotoAnalysisKit Is Constructed</title><link>https://techrawcull.netlify.app/docs/packages/photoanalysiskit/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid>https://techrawcull.netlify.app/docs/packages/photoanalysiskit/</guid><description>&lt;h1 id="how-photoanalysiskit-is-constructed"&gt;How PhotoAnalysisKit Is Constructed&lt;a class="td-heading-self-link" href="#how-photoanalysiskit-is-constructed" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;PhotoAnalysisKit is the reusable measurement layer extracted from RawCull. It
turns a decoded &lt;code&gt;CGImage&lt;/code&gt; plus neutral capture metadata into sharpness,
saliency, focus evidence, and an optional focus-mask image. It can also create
opaque Apple Vision feature prints.&lt;/p&gt;
&lt;p&gt;The package measures a photo; it does not decide whether to keep it. That
distinction prevents image-processing code from becoming coupled to RawCull&amp;rsquo;s
files, settings, views, caches, or culling policy.&lt;/p&gt;</description></item><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>How RawParserKit Is Constructed</title><link>https://techrawcull.netlify.app/docs/packages/rawparserkit/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid>https://techrawcull.netlify.app/docs/packages/rawparserkit/</guid><description>&lt;h1 id="how-rawparserkit-is-constructed"&gt;How RawParserKit Is Constructed&lt;a class="td-heading-self-link" href="#how-rawparserkit-is-constructed" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;RawParserKit is RawCull&amp;rsquo;s camera-file boundary. It knows how Sony ARW and Nikon
NEF files are structured, how to locate their embedded JPEGs and AF metadata,
and how to turn those sources into orientation-normalized images and
display-ready metadata.&lt;/p&gt;
&lt;p&gt;The package stops at decoding. It does not score sharpness, generate embeddings,
group bursts, cache application results, or decide which photo should be kept.&lt;/p&gt;
&lt;h2 id="1-begin-with-the-package-boundary"&gt;1. Begin With The Package Boundary&lt;a class="td-heading-self-link" href="#1-begin-with-the-package-boundary" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;RawParserKit owns:&lt;/p&gt;</description></item><item><title>RawCull Packages</title><link>https://techrawcull.netlify.app/docs/packages/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid>https://techrawcull.netlify.app/docs/packages/</guid><description>&lt;h1 id="rawcull-packages"&gt;RawCull Packages&lt;a class="td-heading-self-link" href="#rawcull-packages" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;RawCull is split across four reusable Swift packages. Each package owns one kind
of knowledge and deliberately avoids importing the others. RawCull is the
composition root: it decodes a file and capture metadata with RawParserKit, asks
PhotoAnalysisKit or PhotoAIKit to measure or index it, translates the evidence
into RawCullCore values and decisions, and presents or persists the outcome.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 Files[&amp;#34;ARW, NEF, and rendered files&amp;#34;] --&amp;gt; Parser[&amp;#34;RawParserKit\ndecode &amp;#43; capture metadata&amp;#34;]
 Parser --&amp;gt; Host[&amp;#34;RawCull adapters\nsource and cache policy&amp;#34;]
 Host --&amp;gt; Analysis[&amp;#34;PhotoAnalysisKit\nsharpness &amp;#43; focus evidence&amp;#34;]
 Host --&amp;gt; AI[&amp;#34;PhotoAIKit\nimage/text embeddings &amp;#43; segmentation&amp;#34;]
 Analysis --&amp;gt; Host
 AI --&amp;gt; Host
 Host --&amp;gt; Core[&amp;#34;RawCullCore\nburst grouping &amp;#43; ranking&amp;#34;]
 Core --&amp;gt; App[&amp;#34;RawCull UI, persistence, and culling actions&amp;#34;]&lt;/pre&gt;
&lt;p&gt;The arrows are runtime data flow, not package dependencies. The four sibling
packages do not depend on one another; the RawCull application imports and
adapts them.&lt;/p&gt;</description></item></channel></rss>