Open source · Non-destructive · Deterministic

AI-assisted automatic development of RAW photographs.

An AI decides what to change. A deterministic Rust engine does it. In the recipe-development path, the AI never touches a pixel.

Develop path
Editable recipes
Renderer
Shared Rust engine
License
MIT
Sony α7R IVA ARW: neutral cat photo beside its AI analyze develop
AI analyze develop. Sony α7R IVA .ARW, 61 MP: neutral engine conversion at left; AI-proposed crop, global tone, a radial cat lift, and a linear water hold at right. The model judge moved from 62 to 86; that score is automated review, not human aesthetic approval.

What it is

A small recipe between the model and your photograph.

Autoshop is a non-destructive photo developer for RAW and baked images. Its main workflow turns an AI proposal into a small, inspectable EditRecipe, then applies that recipe with the same local Rust renderer used by the desktop app, CLI, and embedded web UI.

One develop engine

Exposure, white balance, curves, HSL, color grading, texture, clarity, dehaze, detail, crop, and lens-aware local adjustments render through one deterministic engine.

Editable AI proposals

analyze and auto propose recipes, validate them against image statistics, render them, and can run one bounded visual-review revision.

Local masks

Linear, radial, brush, luminance-range, and color-range masks sit alongside local subject, sky, and point-prompted object selection.

Sidecars both ways

Lightroom/ACR sidecars round-trip with conservative merge behavior for fields Autoshop does not model.

Versions and variants

Ordinary develops, generated targets, and reverse-fitted looks remain distinct without rewriting the source photo.

Three front ends

The desktop GUI, scriptable CLI, and small local web UI all use the same library.

Download

Download v1.0.0.

The published Windows release has four assets:

  • autoshop.exe — 31,180,152 bytes (CLI)
  • autoshop-gui.exe — 40,810,704 bytes (desktop GUI)
  • Autoshop-Setup-1.0.0.exe — 19,768,387 bytes (installer)
  • autoshop-1.0.0-windows-x64.zip — 27,131,443 bytes (portable bundle)

Choose the installer for the recommended current-user setup with no administrator access, or the portable ZIP to extract and keep the executables beside their bundled assets and Python sidecars. Linux and macOS are built and tested in CI, but prebuilt binaries are not published for them.

Open the v1.0.0 release

Quickstart

Desktop

  1. Start autoshop-gui.
  2. Choose Open photo…, press Ctrl+O, or drag in a supported photo.
  3. Move a Develop slider and compare it with the neutral conversion.
  4. Press Ctrl+Shift+E to export a copy. The original remains untouched.

CLI

autoshop decode "photo.ARW" -o "preview.jpg"
autoshop apply "photo.ARW" "recipe.json" -o "developed.tif"

With the image/vision role configured:

autoshop auto "photo.ARW" --guidance "natural color; protect highlights" -o "developed.tif"

Showcase · Part A

AI analysis and style transfer

The cat comparison above is the first analyze example: a Sony α7R IVA 61 MP .ARW, shown as straight conversion and AI develop. The AI chose the crop and a restrained global develop plus radial and linear parametric masks; it did not use an AI bitmap segmentation mask.

The three established pairs below show different decisions and two current failure modes. Each before is Autoshop's neutral conversion of the same Sony α7R IVA .ARW; each after is an AI-proposed engine render, not a generated image. The faint watermark is identical on both halves of these three older pairs.

01

Townhouse and pond: tonal range

The proposal protected white brick while opening the porch and black wall. Its model judge moved from 84 to 86 after a bounded revision. These are model-judge scores recorded when the pair was produced (v0.33.0 showcase batch). Honest blemish: the linear sky mask leaves a faint lighter band near the top-left corner.

Sony α7R IVA ARW, townhouse and pond: neutral develop
Before: neutral engine conversion.
Sony α7R IVA ARW, townhouse and pond: AI develop
After: AI tone, white balance, crop, a linear sky hold, and a radial house lift.

02

Balcony view: detail and texture

The siding and shaded structure gain separation; the model judge moved from 78 to 84. These are model-judge scores recorded when the pair was produced (v0.33.0 showcase batch). Counter-example: the sky is paler than the neutral base even though the local mask asks for more sky depth.

Sony α7R IVA ARW, balcony view: neutral develop
Before: neutral engine conversion.
Sony α7R IVA ARW, balcony view: AI develop
After: AI texture, clarity, dehaze, tonal changes, and two linear masks.

03

Hillside neighborhood: establishing scene

Automated visual model review rejected the first acidic-green proposal at 63 and retained a revision scored 87. These are model-judge scores recorded when the pair was produced (v0.33.0 showcase batch). The landscape gains separation, but the sky is again paler and milkier than the neutral conversion; that known behavior is not captioned as an improvement.

Sony α7R IVA ARW, hillside neighborhood: neutral develop
Before: neutral engine conversion.
Sony α7R IVA ARW, hillside neighborhood: AI develop
After: AI global contrast, restrained color, and green/aqua HSL reductions.

Style read

Neutral, AI develop, and AI develop with references

These triptychs show three states of the same Sony α7R IVA 61 MP .ARW: straight conversion, an AI develop with style influence disabled, and an AI develop that read similar edits from the local style library. They demonstrate the style retrieval path, not a pixel-copy or generative transfer.

Lake scene: straight conversion, AI develop, and AI develop with style read
Lake and boat. The style-read run referenced four similar edits from the indexed Lightroom library and was accepted. The style-off middle panel rendered under a Revise verdict and therefore has no saved recipe/XMP; it is retained only as a transparent comparison.
Sunset scene: straight conversion, AI develop, and AI develop with style read
Sunset. The middle panel is an accepted style-off develop. The style-read proposal at right used retrieved references and rendered at full RAW resolution, but the model judge marked it Revise (85); its attempted revision scored 84 and was discarded, so no style-read recipe/XMP was saved.

Showcase · Part B

Reimagine → reverse-fit

Generate a complete visual target, then fit an ordinary engine recipe to its look. The generated target can invent content; the fitted render cannot. The recovered recipe is editable and can be applied deterministically to the original full-resolution RAW.

Sunset scene: neutral conversion, AI-generated target, and reverse-fitted full-resolution engine render
Sunset, Sony α7R IVA 61 MP .ARW. Left: neutral engine conversion. Center: a 3520×2352 full-image target generated with a configured gpt-image-2. Right: the recovered recipe rendered by Autoshop on the original RAW at 9504×6336. The statistical look error moved from 0.060 to 0.042 at fit confidence 0.746691; this is a deterministic tonal/color approximation, not a pixel-aligned reconstruction of generated detail.
Stone viaduct scene: neutral conversion, AI-generated target, and reverse-fitted full-resolution engine render
Stone viaduct, Sony α7R IVA 61 MP .ARW. Left: neutral engine conversion. Center: a 3520×2352 full-image target generated with the same configured gpt-image-2. Right: the recovered recipe rendered on the original RAW at 9504×6336. The statistical look error moved from 0.057 to 0.019 at fit confidence 0.678264; the fitted color-cast stage was rejected by the fit's own do-no-harm review, so the recovered recipe carries tone and saturation only.

Supported formats

A nine-camera RAW zoo, backed by 24 RAW extensions.

Every tile below is a neutral Autoshop render of one real CC0 file—not an embedded preview. The environment-gated release suite last recorded 9/9.

Canon CR2 develop
.cr2Canon EOS 40D
Canon CR3 develop
.cr3Canon EOS R6
Nikon NEF develop
.nefNikon D700
Sony ARW develop
.arwSony α7 III
Olympus ORF develop
.orfOlympus E-M5
Panasonic RW2 develop
.rw2Panasonic DMC-GX85
Pentax PEF develop
.pefPentax K-5
Ricoh DNG develop
.dngRicoh GR II
Fujifilm RAF X-Trans develop
.rafFujifilm X-S10 · X-Trans, approximate

Camera RAW · 24 extensions

arw, dng, raw, raf, nef, cr2, cr3, orf, rw2, pef, srw, 3fr, fff, iiq, mef, mos, erf, kdc, dcr, dcs, crw, nrw, mrw, ari

Decoding uses rawler, whose database covers 725 camera models. Twelve formats carry no embedded preview; Autoshop shows its own neutral rendition instead and says so.

Baked rasters · 8 extensions

jpg, jpeg, png, tif, tiff, bmp, webp, gif

ICC profiles on baked imports are converted through qcms when present. Monochrome and four-colour sensor arrays are refused rather than reinterpreted as three-channel colour.

The nine format samples come from the raw.pixls.us community sample repository under CC0 1.0 Public Domain.

Tech stack & algorithms

The implementation details—not a logo strip.

Eight implementation areas connect decode, measured rendering, local and AI selection, coordinate transport, sidecars, AI proposal, and application infrastructure. Each Details link opens the canonical equations, parameter provenance, measurements, disclosures, and source paths.

RAW decode and CFA

rawler covers 24 RAW formats and 725 camera bodies. Bayer uses the normal demosaic path; the approximate X-Trans path fits colour planes over a 5×5 CFA neighbourhood and moved the measured X-S10 G/R ratio from 1.5503 to 0.9476. EXIF orientation runs at the head of the chain, while no-preview, untagged-16-bit, unsupported-sensor, and decoder failures remain explicit.

Develop pipeline and tone model

The deterministic f32 renderer uses explicit linear-light vignette/dehaze stages, then a monotone Fritsch–Carlson tone LUT with Highlights inside it, followed by RGB curves, HSL, colour grade, clarity/Texture, saturation, NR, sharpening, and local edits. Negative Texture is two parallel measured low-pass arms (A1=0.172443, A2=0.304888) with a hyperbolic depth law; 45 Lightroom anchors are all within ±0.02.

Masks

Radial, linear, brush, bitmap, luminance-range, and colour-range masks compose as Add/Subtract/Intersect. Radial feather samples a measured 290×11 alpha LUT; brush dabs use (1−rhom)n, kappa=0.1284 flow, and screen accumulation. Pixel-centre sampling plus the pixel/aspect linear metric reduced the D1 error from 874 px to 9.8 px.

AI masks

Subject selection uses commit-pinned BiRefNet with a named U²-Net fallback; sky uses OneFormer and a checked-in 150-class ADE20K table; object gestures become ordered positive points for SAM 2.1 over the gp1 contract. Cache keys bind backend provenance and exact prompts. The pinned BiRefNet weights are 444,473,596 bytes; locally derived alpha is disclosed as non-Adobe.

Lens correction and Lightroom mask-frame laws

Sony 0x7037's 16 samples at (i+1)/16 feed a 2048-node/64-knot mask solve; guarded Newton inversion reads rectilinear .lcp profiles and refuses fisheye-only entries. Radials cross m_lr−1 ∘ T_engine exactly once and close 41/41 vectors to ≤1 px. Linear H2 preserves straight gradients but openly records multi-pixel ON/OFF RMS residuals; brushes stay raw-frame.

XMP and Lightroom interoperability

Typed Tag/Scope traversal reads Camera Raw's own scope, including nested Look, then conservative merge preserves unmodeled document fields. Save uses the per-user store; beside-RAW export is explicit. Measured domains include LocalExposure2012=EV/4, local Hue /180, the other local family /100, and global Sharpness 1:1; a 201/201 polarity census assigns inversion to MaskInverted.

AI advisor and reverse fit

AI proposals become bounded recipes with store:false, a data-only verifier, and a do-no-harm revision gate. RAW+XMP style retrieval adds optional SigLIP 2; W_EMB=2.0 stayed after a 147-exemplar calibration. match fits CDF/exposure/basis/tone/saturation/cast stages and vetoes foreign hues at ≥45° over ≥5% of the frame; reimagine and heal remain explicit generated-pixel operations.

Application and infrastructure

Rust 2024 backs one library shared by the CLI, egui desktop app, and self-contained loopback web UI. The server combines a 32-byte token with Host/Origin/no-store defenses; the GUI keeps variants, versions, and deleted-version identities; SCUNet must satisfy sidecar_wrote. A 1771 MB probe sets the 1800 MB per-photo budget. The current battery is 871 library (862 pass + 9 #[ignore]d forensic probes) / 14 CLI / 132 GUI / 2+2 contract.

Documentation

Follow the implementation all the way down.