Skip to content
skymanbpPublic

About

AI-assisted RAW photo developer: GPT vision advisor proposes an EditRecipe, a deterministic Rust engine renders it — Lightroom-compatible XMP sidecars, 24 RAW formats + baked images, measured (not guessed) Lightroom mask geometry, local GUI/web UI, AI denoise & segmentation sidecars

Topics

Resources

Contributing

Security policy

Stars

1.2k stars

Watchers

5 watching

Forks

Repository files navigation

AutoShade icon

AutoShade

Describe the picture. Keep the RAW.

AI decides what to change — a deterministic Rust engine does it.
An editable, Lightroom-ready recipe instead of AI pixels.


Release Platforms Rust License

Download v1.15.0  ·  Website  ·  Manual  ·  Showcase  ·  In depth


Desert canyon at dusk: straight conversion, generated target, the recovered recipe rendered on the RAW, and the same recipe on the AI-denoised RAW, with a 1:1 detail row

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.

Two AI paths, kept apart in the app, the command line and this page:

  • AI generation & reverse-fit — an image model paints the picture you describe from your own frame (reimagine), and the reverse fit recovers that look as an editable recipe on the full RAW (match). The generated pixels are only ever a target.
  • AI analysis & auto develop — a vision model looks at the photo and proposes the recipe directly (analyze, auto), guided by your reference library or a typed direction; AI adjust sends the develop you are looking at with a request ("darken the sky a little") and gets the complete adjusted recipe back, with any part it names selected by a content mask cut locally.

Highlights

🎯 Reverse-fit any look
reimagine generates the picture from your frame; match recovers a recipe from it — or from any finished rendition of the same shot. Look error 0.161 → 0.023.

🌌 A RAW denoiser trained here
Cleans the sensor mosaic before demosaic. Keeps 98.70 % of 17,817 faint stars against Lightroom Denoise's 98.80 %.

📐 Lightroom parity, measured
Texture 45 / 45 anchors within ±0.02, radial masks 41 / 41 within 1 px. Every residual is published.

🔁 Round-trips through Lightroom
Sidecar XMP is merged byte for byte; the full develop survives a Lightroom rewrite and reopens exactly.

🖼️ Your library is the style guide
Point it at finished photos you love; each develop sees the 3 closest as a reference. Embeddings run locally.

🧩 Local AI masks, no API key
Subject, sky and point-prompted objects (BiRefNet, OneFormer, SAM 2.1), plus HDR, focus and noise stacking.

Showcase

Stone viaduct: straight conversion, generated target, and the recovered recipe rendered on the RAW, with a 1:1 detail row

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.


Lakeside island town: straight conversion and three AI develops driven by three different direction texts

One RAW, four looks. Straight conversion, then moody, golden and vivid — only the direction text changes.


One 1:1 window of a 61 MP star field, four ways: Lightroom's develop with Denoise off and at 50, AutoShade's neutral develop with no denoise and with its own denoiser at the 71 % default

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

What is new here

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

How it works

AutoShade architecture: three front ends over one Rust library with the reference library, reverse-fit, local producers and the local-field analyzer; local Python sidecars for embeddings, descriptions, correspondence, segmentation and two denoisers, plus the depth and face sidecars (eight in all); opt-in external AI services
  • One engine, three front ends — desktop app, CLI and loopback web UI share one Rust library and one per-user develop store.
  • Local first — eight Python sidecars (masks, two denoisers, correspondence, descriptions, embeddings, depth for the lens blur, faces) 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

Measured numbers

What Measured
Automated test battery 1747 library / 25 CLI / 289 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.

Install and quickstart

Platform Get it
Windows AutoShade-Setup-1.15.0.exe — per-user, no admin. Or the portable autoshade-1.15.0-windows-x64.zip
macOS AutoShade-1.15.0-macos-universal.zip (Apple silicon + Intel), or -macos-cli.zip
Linux AutoShade-1.15.0-linux-x64.zip — command line only

All on the v1.15.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 — it starts on a mode page (Landscape, Portraits, Normal; see Choosing a mode); then open a photo (Ctrl+O), move a slider, export with Ctrl+Shift+E. The original is never touched. Normal is a short one-click panel for phone and jpg photos (Normal mode).

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 --render

Upgrades, 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) 23,352,320 bytes 88c72d1b360b4180b87a820794b78c625236125d9c11cc5e20669c44b1369029
autoshade-gui.exe (desktop app) 30,610,432 bytes 0c12450860facf8c5cd41fda43b0c3959b5f84e1b89e8b044b5da33cfb3406a9
AutoShade-Setup-1.15.0.exe (installer) 15,556,774 bytes 0d0e22b1dc29048ba216018cc20fd32cbf546e532ff3b357c53665e4891d1f8b
autoshade-1.15.0-windows-x64.zip (portable archive) 21,100,005 bytes 8135388fedcf629a2d731ffa87e0a73399446e641d8698f2a91bc11b7e83c628
AutoShade-1.15.0-macos-universal.zip (macOS app bundle) 42,446,034 bytes daf9f5bf1d5b153bac9e48598cc23804cb8539180240d715e5d74877602ef597
AutoShade-1.15.0-linux-x64.zip (Linux command line only) 10,131,381 bytes 44051b591ee0e8a63a5572088860118aae0412231208439aeb0345edb164f924
AutoShade-1.15.0-macos-cli.zip (macOS command line only) 18,320,088 bytes 382b31a2d67b2c607879ad00c03d984d0f1032c4f6f95c5643e921689a5affc3
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 app

Local 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

Supported formats

Canon CR2 develop
.cr2 · Canon EOS 40D
Canon CR3 develop
.cr3 · Canon EOS R6
Nikon NEF develop
.nef · Nikon D700
Sony ARW develop
.arw · Sony α7 III
Olympus ORF develop
.orf · Olympus E-M5
Panasonic RW2 develop
.rw2 · Panasonic DMC-GX85
Pentax PEF develop
.pef · Pentax K-5
Ricoh DNG develop
.dng · Ricoh GR II
Fujifilm RAF X-Trans develop
.raf · Fujifilm X-S10 — X-Trans, approximate

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.

Tech stack

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 1747 library (1732 pass + 15 #[ignore]d forensic probes) / 25 CLI / 289 GUI / 2+2 contract tests. Per-subsystem notes: In depth → Implementation · equations and provenance: TECH_STACK.md.

Status and limitations

  • Release gates at v1.15.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.

License

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)
MediaPipe Face Landmarker (BlazeFace + Face Mesh V2) Portraits mode face and eye outlines 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.


Made for photographers who want to know what the AI changed — in numbers.

About

AI-assisted RAW photo developer: GPT vision advisor proposes an EditRecipe, a deterministic Rust engine renders it — Lightroom-compatible XMP sidecars, 24 RAW formats + baked images, measured (not guessed) Lightroom mask geometry, local GUI/web UI, AI denoise & segmentation sidecars

Topics

Resources

Contributing

Security policy

Stars

1.2k stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages