autoshade README

The project's README from github.com/skymanbp/autoshade. As one markdown file: README.md.

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.9.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.


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; six local Python sidecars for embeddings, descriptions, correspondence, segmentation and two denoisers; opt-in external AI services

Diagram generated from autoshade.architecture.json · zoom it online · full design in ARCHITECTURE.md

Measured numbers

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.

Install and quickstart

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 --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) 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 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 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.

Status and limitations

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)
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.

autoshade (skymanbp/autoshade)

Searching Database…

这是什么东西?AutoShade 是一款 AI 辅助的 RAW 照片修图工具:你描述想要的效果,GPT 风格的视觉分析步骤会提出一套调整方案,然后由确定性的 Rust 引擎把这套方案渲染到全分辨率的 RAW 文件上——生成与 Lightroom 兼容的 XMP sidecar 文件,而不是用 AI 生成像素。
AI 是真的生成我最终的照片,还是只是辅助修图?AI 只负责生成一张参考目标图或读取你的提示词,绝不会碰最终输出的像素。AutoShade 会根据这张目标图拟合出一份可编辑的修图方案,并渲染到你原始的 RAW 文件上,因此细节都来自传感器数据。
我怎么把它跑起来?从 v1.9.0 发布页面下载适合你平台的预编译版本:Windows 安装包或便携 zip、macOS 通用应用包或仅含 CLI 的 zip,或 Linux x64 CLI zip;然后在桌面应用里打开一张照片(Ctrl+O),进行调整,再导出(Ctrl+Shift+E)。
使用它需要 Python 或 API 密钥吗?只有本地的 AI sidecar 功能(蒙版、降噪、嵌入向量、描述)才需要 Python 3;模型权重会在首次使用时自动下载,而且一切都在本地运行,不需要任何 API 密钥。
安装上有什么坑,或者哪些平台不支持?macOS 版本只做了 ad-hoc 签名,没有经过公证(notarised),首次启动时需要在系统设置里手动允许运行;另外没有经过公证的 macOS 版本,Linux 上没有桌面图形界面(只有 CLI),X-Trans RAW 去马赛克和与 Adobe 完全逐位一致的渲染也明确不在支持范围内。
它支持哪些操作系统和界面?它提供桌面应用、CLI 和本地回环的 Web 界面三种形态,共享同一个 Rust 库,支持 Windows、macOS(Apple 芯片和 Intel)以及 Linux(Linux 上只有 CLI)。
我的照片库或像素数据会离开我的电脑吗?你的照片库始终保存在本地且只读;只有当你主动触发需要远程调用的 AI 操作时,像素数据才会离开你的电脑,其余所有嵌入向量和蒙版计算都在本地完成。
支持哪些 RAW 格式和相机?它通过 rawler 库解码 725 个相机机型的 24 种 RAW 扩展名(例如 CR2、CR3、NEF、ARW、ORF、RW2、PEF、DNG、RAF),另外还支持 JPG、PNG、TIFF 等 8 种已烘焙的位图格式,并带 ICC 色彩转换。
与 Lightroom 的兼容性有多准确?AutoShade 直接实测过一致性:Texture 锚点在 45/45 个点上误差都在 ±0.02 以内,径向蒙版在 41/41 个点上误差都在 1px 以内,生成的 XMP sidecar 可以逐字节合并,因此修改在 Lightroom 重写并重新打开文件后能完全保留。
除了生成风格,本地 AI 还能做什么?本地 sidecar 提供主体/天空/点选提示的物体分割(BiRefNet、OneFormer、SAM 2.1)、一个专门训练的 RAW 降噪器(对微弱星点的保留率达 98.70%,Lightroom 为 98.80%)、HDR/对焦/降噪堆栈,以及基于 SigLIP 2 嵌入向量在你自己的照片库中做风格检索。
为什么要自己训练 RAW 降噪器,而不用 Lightroom 的?作者专门用这个项目的数据训练了降噪器,并预先写好了合格标准;后来两次训练都没达标而被弃用,只有一次达到标准的训练最终发布,在星空测试上做到了与 Lightroom Denoise 接近的水平。
What are similar projects?lightcraft, rembrandt, photosuite, SCM, rawmakase, lap, IOPaint, koharu
Creator
skymanbp
Size
40.3 MB
Stars
1.2K
Age
3mo
Commits · 90 Days