<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>NEF on RawCull</title><link>https://techrawcull.netlify.app/tags/nef/</link><description>Recent content in NEF 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/nef/index.xml" rel="self" type="application/rss+xml"/><item><title>Thumbnails and Scan Pipeline</title><link>https://techrawcull.netlify.app/docs/thumbnail/</link><pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate><guid>https://techrawcull.netlify.app/docs/thumbnail/</guid><description>&lt;h1 id="thumbnails-and-scan-pipeline"&gt;Thumbnails and Scan Pipeline&lt;a class="td-heading-self-link" href="#thumbnails-and-scan-pipeline" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;RawCull separates catalog scanning, thumbnail preloading, UI-driven thumbnail requests, and full-size preview extraction. They share RawParserKit and disk-cache infrastructure, but they have deliberately different memory-admission rules.&lt;/p&gt;
&lt;p&gt;The key current invariant is: &lt;strong&gt;catalog preloading warms the 200 px grid cache and disk cache, but only UI demand may admit an image to the preview-size RAM cache&lt;/strong&gt;. This keeps scan order from displacing the images the user is actively viewing.&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>Sony/Nikon MakerNote Parser</title><link>https://techrawcull.netlify.app/docs/sonymakernoteparser/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://techrawcull.netlify.app/docs/sonymakernoteparser/</guid><description>&lt;h1 id="sonynikon-makernote-parser"&gt;Sony/Nikon MakerNote Parser&lt;a class="td-heading-self-link" href="#sonynikon-makernote-parser" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;RawCull reads autofocus points and embedded JPEG locations directly from RAW metadata. This is implemented in &lt;code&gt;RawParserKit&lt;/code&gt;, while the app consumes the parser through the vendor-neutral &lt;code&gt;RawFormat&lt;/code&gt; protocol.&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;Files&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Format protocol/registry&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;RawParserKit/Sources/RawParserKit/RawFormat.swift&lt;/code&gt;, &lt;code&gt;RawFormatRegistry.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Sony parser&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;SonyMakerNoteParser.swift&lt;/code&gt;, &lt;code&gt;SonyRawFormat.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Nikon parser&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;NikonMakerNoteParser.swift&lt;/code&gt;, &lt;code&gt;NikonRawFormat.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Thumbnail/JPEG extractors&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;SonyThumbnailExtractor.swift&lt;/code&gt;, &lt;code&gt;NikonThumbnailExtractor.swift&lt;/code&gt;, &lt;code&gt;JPGSonyARWExtractor.swift&lt;/code&gt;, &lt;code&gt;JPGNikonNEFExtractor.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Diagnostics&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;RawParserDiagnostics.swift&lt;/code&gt;, app &lt;code&gt;RawFileDiagnostics.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;App scan consumer&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Actors/ScanFiles.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Focus-point normalization&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;RawCullCore/Sources/RawCullCore/FocusPointParser.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;RawParserKit/Tests/RawParserKitTests/&lt;/code&gt;, &lt;code&gt;RawCullCore/Tests/RawCullCoreTests/FocusPointParserTests.swift&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="vendor-neutral-contract"&gt;Vendor-Neutral Contract&lt;a class="td-heading-self-link" href="#vendor-neutral-contract" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;App code usually does not call &lt;code&gt;SonyMakerNoteParser&lt;/code&gt; or &lt;code&gt;NikonMakerNoteParser&lt;/code&gt; directly. It resolves a format first:&lt;/p&gt;</description></item></channel></rss>