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.
Open source · Non-destructive · Deterministic
An AI decides what to change. A deterministic Rust engine does it. In the recipe-development path, the AI never touches a pixel.
.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
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.
Exposure, white balance, curves, HSL, color grading, texture, clarity, dehaze, detail, crop, and lens-aware local adjustments render through one deterministic engine.
analyze and auto propose recipes, validate them against image statistics, render them, and can run one bounded visual-review revision.
Linear, radial, brush, luminance-range, and color-range masks sit alongside local subject, sky, and point-prompted object selection.
Lightroom/ACR sidecars round-trip with conservative merge behavior for fields Autoshop does not model.
Ordinary develops, generated targets, and reverse-fitted looks remain distinct without rewriting the source photo.
The desktop GUI, scriptable CLI, and small local web UI all use the same library.
Download
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.
autoshop-gui.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
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
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.
02
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.
03
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.
Style read
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.
Showcase · Part B
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.
.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.
.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
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.
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.
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
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.
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.
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.
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.
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.
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.
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 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.
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