AI decides what to change — a deterministic Rust engine does it.
An editable, Lightroom-ready recipe instead of AI pixels.
Download v1.9.0 · Website · Manual · Showcase · In depth
Straight conversion → generated target → recovered recipe on the 61 MP RAW → same recipe after AI denoise. Bottom row: 1:1 crops.
Tip
The generated picture is a target, never the delivery. An image model paints the look you describe; AutoShade fits an editable develop recipe to it and renders that recipe on the full-resolution RAW. The recipe carries the look, the sensor carries the detail — and in the recipe path, the AI never touches a pixel.
|
🎯 Reverse-fit any look |
🌌 A RAW denoiser trained here |
|
📐 Lightroom parity, measured |
🔁 Round-trips through Lightroom |
|
🖼️ Your library is the style guide |
🧩 Local AI masks, no API key |
Reverse-fit. Prompt: “a clearer afternoon, a little more contrast, a slightly deeper blue sky.” The recipe renders the look on the 9504 × 6336 RAW; the generated frame carries neither the detail nor the resolution.
One RAW, four looks. Straight conversion, then moody, golden and vivid — only the direction text changes.
ISO 2500 star field, 1:1. Top: Lightroom, Denoise off / 50. Bottom: AutoShade, off / its own denoiser at 71 %. Clean colour, natural grain, faint stars intact.
Every number and prompt → Showcase
Six techniques you will not find in another RAW developer. Each is written up in full — equations, figures, refused training runs — in AutoShade in depth.
| Technique | In one line | |
|---|---|---|
| 1 | Generate, then reverse-fit | An editable recipe from any finished look, solved at the distribution level |
| 2 | Evidence-gated local fit | A divergence score D picks full solve or bounded mode; every local move must earn its place |
| 3 | Style by retrieval | SigLIP 2 search over your own finished photos, not a preset |
| 4 | Measured Lightroom parity | Tone, Texture, Sharpening, masks and lens geometry fitted to Lightroom exports |
| 5 | A denoiser with pre-written pass marks | Trained on this project's data; two later runs failed their marks and were refused |
| 6 | The camera's own look | A per-photo base curve read from the embedded preview, like with like |
- One engine, three front ends — desktop app, CLI and loopback web UI share one Rust library and one per-user develop store.
- Local first — six Python sidecars (masks, two denoisers, correspondence, descriptions, embeddings) run on your machine; pixels leave it only for an AI operation you ask for.
- Non-destructive — your photo library stays read-only; generated pixels always land on their own labelled card.
Diagram generated from autoshade.architecture.json · zoom it online · full design in ARCHITECTURE.md
| What | Measured |
|---|---|
| Automated test battery | 1643 library / 25 CLI / 243 GUI / 2+2 contract tests |
| RAW coverage | 24 extensions · 725 camera bodies · nine-camera zoo 9/9 |
| Reverse-fit, stone viaduct | look error 0.161 → 0.023 at confidence 0.63 |
| Reverse-fit, desert canyon | look error 0.129 → 0.048 · sky ΔE 3.8 |
| Faint stars kept, vs Lightroom Denoise 50 | 98.70 % vs 98.80 % of 17,817 stars |
| Lightroom Sharpening fit | per-pixel R² 0.93 (0.62 for plain unsharp mask) |
| Brush geometry vs Lightroom | error 874 px → 9.8 px |
The full table — 20+ rows with conditions and sources — is in AutoShade in depth; scripts/check_docs.py re-derives the pinned claims.
| Platform | Get it |
|---|---|
| Windows | AutoShade-Setup-1.9.0.exe — per-user, no admin. Or the portable autoshade-1.9.0-windows-x64.zip |
| macOS | AutoShade-1.9.0-macos-universal.zip (Apple silicon + Intel), or -macos-cli.zip |
| Linux | AutoShade-1.9.0-linux-x64.zip — command line only |
All on the v1.9.0 release page. Python 3 is needed only for the local AI sidecars; model weights download on first use.
Note
macOS: the app is ad-hoc signed, not notarised — on first launch use System Settings → Privacy & Security → Open Anyway (once per machine).
Desktop app — open a photo (Ctrl+O), move a slider, export with Ctrl+Shift+E. The original is never touched.
CLI
# manual develop
autoshade apply photo.ARW recipe.json -o developed.tif
# AI develop, end to end
autoshade auto photo.ARW --guidance "natural color; protect highlights" -o developed.tif
# describe a look, then recover it as an editable recipe on the RAW
autoshade reimagine photo.ARW --prompt "a clearer afternoon, deeper blue sky"
autoshade match photo.ARW out/photo.reimagine.png --renderUpgrades, silent installs and every command: User manual.
Release assets and checksums
Built by GitHub Actions from the tag; checksums.txt carries every SHA-256. The RAW denoiser weights are uploaded by hand to the release the sidecar pins —
releases/download/v1.6.0/autoshade-raw-denoise-v2.pth,
mirrored byte-exact on Hugging Face — and refused unless size and SHA-256 match the pin in python/denoise_raw.py.
| File | Size | SHA-256 |
|---|---|---|
autoshade.exe (CLI) |
22,929,408 bytes | d55ae959b9d032b2dbd68590315f999e2b61ca94cefe4d8e43b010b029a79dc3 |
autoshade-gui.exe (desktop app) |
29,768,192 bytes | 0beaf85924428bd5ed4a33cf9af022622708c1752933915fb346f0b73070f7ef |
AutoShade-Setup-1.9.0.exe (installer) |
15,278,432 bytes | 5255475c32c199cfb2df517dd4021a8950b5d3a2fba8854cc3346bfcbb1a8183 |
autoshade-1.9.0-windows-x64.zip (portable archive) |
20,636,181 bytes | ee946d7a88512ca13f130114a7b21f6382133f43ab75d7c16e90e778ed0f55d5 |
AutoShade-1.9.0-macos-universal.zip (macOS app bundle) |
41,487,882 bytes | ce8210d86e18a6f5028f5680d419810835d577f0ff1c5f0297a92c990ad6ff17 |
AutoShade-1.9.0-linux-x64.zip (Linux command line only) |
9,948,140 bytes | ef868ed17f31466748cabc63e8d5e137d7733aba9b10e19fc81b0629f18d6cdd |
AutoShade-1.9.0-macos-cli.zip (macOS command line only) |
17,993,468 bytes | f7fa28bb3eb78b2ea4585ff001e5d425cfa43a379cca7368062c2b601c2a7dc0 |
autoshade-raw-denoise-v2.pth (RAW denoiser weights, fetched on demand from the v1.6.0 release) |
130,590,559 bytes | ffafa40a53f52092149db2fcf03636117ad6855e1068142d4f6b03b634e9f9c4 |
Build from source
Rust edition 2024, rustc/cargo 1.94.
cargo build --release # CLI
cargo build --release --features gui --bin autoshade-gui # desktop appLocal AI tools need Python packages (weights download on first use):
| Tool | Packages |
|---|---|
| Subject mask (BiRefNet) | torchvision timm einops |
| Subject fallback (U²-Net) | rembg |
| Sky / objects (OneFormer, SAM 2.1) | transformers torch |
| AI denoise | torch opencv-python numpy einops requests |
Nine real CC0 files, fully decoded and neutral-rendered — not embedded previews.
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
Decoded by rawler 0.7.2, which carries 725 camera models. No embedded
preview: 12 of the 24 formats store none. They are orf, srw, nrw, mef,
mos, kdc, dcr, dcs, erf, iiq, crw, and ari; AutoShade renders its own neutral version instead.
Baked rasters — 8 extensions: jpg jpeg png tif tiff bmp webp gif, with ICC conversion.
Rust (rustc/cargo 1.94, edition 2024) · rawler · image · qcms · rayon · egui/eframe · tiny_http — Python sidecars on PyTorch.
RAW decode, 24 formats, 725 bodies · deterministic f32 develop engine · hand-rolled XMP layer (no XML crate) for byte-exact Lightroom merges.
The current battery is 1643 library (1628 pass + 15 #[ignore]d forensic probes) / 25 CLI / 243 GUI / 2+2 contract tests.
Per-subsystem notes: In depth → Implementation · equations and provenance: TECH_STACK.md.
- Release gates at v1.9.0 cover the CLI, desktop GUI, sidecar contracts, format fixtures and the deterministic renderer.
- Not in scope: bit-exact Adobe rendering (parity is measured, not identical), an exact X-Trans demosaic, a notarised macOS build, a Linux desktop app.
- Honest markers: AI masks are local re-creations, not Adobe's pixels; linear masks are not pixel-closed (radial closes 41/41 to ≤ 1 px); the macOS app is CI-verified but has no reported interactive users yet.
- Release ledger and rulings: ROADMAP.md.
MIT — see LICENSE. Showcase photographs © 2026 skymanbp, all rights reserved (not MIT).
Models, fonts and samples
Model weights download separately and remain their authors' property; every pinned model also has a byte-exact mirror on Hugging Face (Azng0/autoshade-mirror-*), checksum-verified either way — table in python/_mirror.py.
| Model | Purpose | License |
|---|---|---|
| SCUNet | AI denoise (baked sources) | Apache-2.0 |
DRUNet-colour (DPIR), fine-tuned here as autoshade-raw-denoise-v2.pth |
AI denoise (RAW mosaic) | MIT; fine-tuning pairs from RawNIND, CC BY-SA 4.0 |
| BiRefNet | Subject segmentation | MIT |
| U²-Net | Subject fallback | Apache-2.0 |
| OneFormer ADE20K | Sky segmentation | MIT |
| SAM 2.1 | Point-prompted object masks | Apache-2.0 |
MoGe-2 ViT-L (code in python/_moge/) |
AI lens blur depth map | MIT (DINOv2 backbone code Apache-2.0) |
| SigLIP 2 | Style embeddings | Apache-2.0 |
| Qwen3-VL-2B-Instruct | Local look descriptions | Apache-2.0 |
| Stable Diffusion 2.1 | DIFT correspondence field | CreativeML Open RAIL++-M |
Fonts: subset Noto faces (SIL OFL) and a Lucide icon face (ISC) — texts in assets/fonts/.
RAW samples: the nine format-grid files are from raw.pixls.us under CC0 1.0, SHA-256-verified.
Thanks to the rawler, image, qcms, rayon, clap, serde, ureq, egui/eframe, tiny_http and local-model communities.











