A generated look, recovered as a recipe
reimagine asks an image model for the picture you describe, from your own frame; match fits an editable recipe to its look and renders it on the full RAW. Two pairs →
AI-assisted automatic development of RAW photographs.
What it is
Describe the picture you want and get it back as an editable develop of your own RAW. Every AI proposal renders through one deterministic Rust engine.
reimagine asks an image model for the picture you describe, from your own frame; match fits an editable recipe to its look and renders it on the full RAW. Two pairs →
analyze and auto propose a recipe from preview, EXIF and histogram, check it against the image's own statistics and render it. The recipe is the only channel between the AI and the pixels.
Exposure, white balance, curves, HSL, colour grading, texture, clarity, dehaze, sharpening, noise reduction, grain, vignettes, perspective, crop and local adjustments: one library behind the desktop app, the command line and the local web UI.
Linear, radial, brush, bitmap, luminance-range and colour-range masks, combined by Add, Subtract and Intersect, plus subject, sky and point-prompted object selection from pinned models on your own machine. No API key.
Lightroom and Camera Raw sidecars are the merge base: owned edits are written back, unmodeled fields survive byte for byte, and a Lightroom round trip reopens exactly.
Develops, generated targets, reverse-fitted looks, denoised negatives and stacked frames stay distinct cards with numbered snapshots. The source library is read-only; the original is never rewritten.
Several frames of one scene become one over a single alignment: an HDR merge, an exposure fusion, a focus stack, a noise stack. The merge lands as its own card; the frames keep their pixels.
Sharpening, noise reduction, de-fringing, Transform and Upright, camera profiles, HDR edit mode and spot removal are read from the sidecar and rendered, never carried through untouched or silently dropped.
Weights trained on this project's own data clean the sensor mosaic before demosaic, told the noise measured on the frame itself. Only luminance grain returns, 71% by default, and faint stars survive. See the star field →
Download
Seven files built from the tag, checksums.txt with their SHA-256, and the trained RAW denoiser weights, which the AI denoise sidecar fetches once against a pinned digest.
| File | Use | Bytes |
|---|---|---|
autoshade.exe | CLI | 22,929,408 |
autoshade-gui.exe | desktop app | 29,768,192 |
AutoShade-Setup-1.9.0.exe | installer | 15,278,432 |
autoshade-1.9.0-windows-x64.zip | portable archive | 20,636,181 |
AutoShade-1.9.0-macos-universal.zip | macOS app bundle | 41,487,882 |
AutoShade-1.9.0-linux-x64.zip | Linux command line only | 9,948,140 |
AutoShade-1.9.0-macos-cli.zip | macOS command line only | 17,993,468 |
autoshade-raw-denoise-v2.pth | RAW denoiser weights, fetched on demand from the v1.6.0 release | 130,590,559 |
autoshade-gui.autoshade decode "photo.ARW" -o "preview.jpg"
autoshade apply "photo.ARW" "recipe.json" -o "developed.tif"
With the image/vision role configured:
autoshade auto "photo.ARW" --guidance "natural color; protect highlights" -o "developed.tif"
Showcase · Part A
A generated target can invent content; a fitted render cannot. The canyon at the top of the page is the second pair; a third is on the showcase page.
Showcase · Part B
One RAW, three direction texts, and an index of the photographer's own 169 Lightroom edits and 94 finished looks. Recipes render at full resolution; no pixels are copied.
Showcase · Part C
The one network this project ships its own weights for. Four training runs on this project's own data: two shipped, two were refused by pass marks written before they started. Every number here is measured against Lightroom's Denoise 50 on the same frame.
The network expects noise of one strength everywhere, so the noise is measured per tile on the frame itself, divided out before the network and multiplied back after. On this frame the per-tile residual's maximum fell 0.508 → 0.070.
The clean and the original mosaic go through the same demosaic; in linear light, 1 − strength of the luminance difference returns along the grey axis. Colour noise cannot come back by construction. Hot pixels are mapped first.
The first training run had never seen a star and kept 10 % of the light of a star four times the noise level. The second, trained with stars added, keeps 54 %. Two of the ten star-field readings still trail Lightroom and are recorded in the release notes.
Supported formats
AutoShade's own neutral renders of one CC0 sample per format, not embedded previews.
arw, dng, raw, raf, nef, cr2, cr3, orf, rw2, pef, srw, 3fr, fff, iiq, mef, mos, erf, kdc, dcr, dcs, crw, nrw, mrw, ari
rawler decodes; its database covers 725 camera models.
jpg, jpeg, png, tif, tiff, bmp, webp, gif
ICC profiles are converted when present.
Nine format samples from raw.pixls.us under CC0 1.0 Public Domain.
How it works
One Rust library; the advisor and external services return bounded recipes, never pixels. Drag to pan, scroll to zoom.
Three pillars
Each diagram is generated from the source; each number below was measured.
reimagine adds a faithfulness scaffold to every prompt. Below D = 0.35 the fit is a full solve; at or above, a bounded Atmosphere mode. Local corrections come in order, semantic regions or luminance bands, then an evidence quadtree, then at most two free-form masks, each behind the same 3% evidence, D < 0.65 and 0.012 rim gates. Generated pixels never carry over.
Each of your Lightroom RAW+XMP pairs becomes an exemplar: a 14-dimension feature, sliders and tone curve, plus a 768-D SigLIP 2 vector and a Qwen3-VL-2B sentence from pinned local models. The 4 nearest past shots, ranked by d14 + W_EMB(1−cos) + W_TXT·z(1−cos−hub) + W_DESC·z(1−cos) with W_EMB=4, W_TXT=0.5 and W_DESC=0.5, pull the proposal toward your habits, capped at 0.18 at Style 0.3, without copying any of them.
Hand-rolled XML reads and writes Camera Raw's own scope; unknown namespaces survive merges. Measured: 45 of 45 Lightroom Texture anchors within ±0.02, a 290×11 radial feather table, radials closed 41/41 to ≤1 px, linear falloff on t^1.124 at rms 0.0064.
Tech stack & algorithms
Nine areas; links open equations, provenance, measurements and sources.
rawler: 24 RAW formats and 725 camera bodies; X-Trans is approximate. The RAW denoiser cleans the mosaic before demosaic with weights trained and judged here.
Deterministic f32 rendering: linear-light vignette and dehaze, a monotone Fritsch–Carlson tone LUT, then curves, HSL, clarity and local edits. The camera's base look is read from the embedded preview.
Radial, linear, brush, bitmap, luminance-range and colour-range, combined by Add, Subtract and Intersect. Radial feather uses a measured 290×11 alpha LUT; brush dab flow kappa=0.1284.
Subject: commit-pinned BiRefNet. Sky: OneFormer over the 150-class ADE20K table. Objects: positive points for SAM 2.1. Locally derived alpha is disclosed as non-Adobe.
Sony lens metadata feeds a 2048-node mask solve; Newton inversion reads rectilinear .lcp profiles. Radials close 41/41 vectors to ≤1 px; Upright's 3×3 was measured to be Adobe's own [0,1] frame-centred projective form.
Typed traversal reads Camera Raw's own scope; a conservative merge preserves unmodeled fields. Measured domains: LocalExposure2012=EV/4, local Hue /180, global Sharpness 1:1. The whole develop rides inside the sidecar and survives a Lightroom rewrite byte for byte.
Bounded proposals use store:false and a do-no-harm gate. A colour cast ships only through four vetoes, among them foreign hues ≥45° over ≥5% of the frame.
Inverse-compositional Lucas–Kanade on a Gaussian pyramid, solved in log luminance so a change of exposure is invisible to the gradient. Measured: a bracket returns −2.49 / −4.98 EV against a −2.5 / −5.0 truth.
Rust 2024: one library for the CLI, egui desktop and loopback web UI. The v1.9.0 battery: 1643 library, 25 CLI, 243 GUI and 2+2 contract tests.
Documentation