Autoshop v0.33.0
Autoshop v0.33.0 — R27: multi-format input, parallel processing, and the biggest forensic round yet
Ten batches, five pixel-measurement campaigns, and three controlled Lightroom
experiments (two of them executed via synthesized sidecars — no hand painting).
⚠ Forward-compatibility breaks (v0.32.0 reading v0.33.0 recipes)
- A v0.33.0 recipe that carries a 90° rotation (
quarter_turns), a
brush mask, or an AI mask entry is hard-refused by the v0.32.0
exe — a loud schema refusal by design (deny_unknown_fields), never a
silent drop. Recipes using none of those serialize byte-identically to
v0.32.0 and stay readable both ways.
Behavior changes
- Radial masks now render at the sidecar's stored geometry. The former
1.032frame constant was proven — by aLensProfileEnableA/B export and
an 11-dab displacement field — to be one frame's lens-profile warp
mistaken for a universal affine. Previous builds dilated every imported
radial by 3.2%. The residual on any frame is now that frame's own
(unmodelled) Adobe lens warp, 0–3.4% observed; an.lcpreader is the
candidate fix for R28. Byte round-trips are unaffected. batchtranscripts are index-ordered (previously completion-ordered:
[7/50]could print before[3/50]).
New
- Multi-format input: 24 RAW extensions (Canon CR2/CR3, Nikon NEF,
Fujifilm RAF, Olympus ORF, Panasonic RW2, Pentax PEF, DNG, and more —
validated against a CC0 9-camera zoo) plus baked formats
(JPEG/PNG/TIFF/WebP/BMP/GIF). Formats without an embedded preview degrade
to a neutral develop with disclosure; X-Trans demosaics through the
Bayer path, disclosed per render..x3fis excluded (upstream decoder
panics; guarded). --jobs Nparallelism onbatchandeval, capped by a memory
budget (one 61 MP photo's pipeline pass peaks at ~1.77 GB commit —
measured, and the cap discloses when it overrules you). The 147-photo eval
went from 2.3 h serial to 38 min.- Lightroom brush and AI masks are carried first-class (byte-exact
round-trip of dab streams and mask intent). AI masks can be recomputed
locally (SAM 2.1 point-prompted / OneFormer sky / u2net subject), always
disclosed as a recomputation, never passed off as Adobe's raster. - SigLIP2 style embedding (opt-in via
AUTOSHOP_STYLE_EMBED): the style
index can now rank by image content, licence-vetted (Apache-2.0 model),
sha256-pinned weights. - 90° rotation skeleton (⭯/⭮ in the GUI; rotated recipes are the
forward-break above). - Concurrency race fixed in style embedding staging: two photos developed
in parallel could receive each other's style vectors (shipped since
R26's three-worker batch pool). Root-fixed for every caller. - New 147-pair eval baseline (relay endpoint + 3-way parallel, zero
fallbacks): gap 15.5%; mask-import refusals 2.35 → 0.05 per photo
(the mask-import root fix, proven on the full corpus).
Measured this round (docs/ROADMAP.md 当前状态 — the measurement ledger)
The brush alpha model is now fully measured — screen accumulation, density
as a pre-screen scale, a one-parameter flow law (κ = 0.1219 ± 0.0027), an
11-rung hardness kernel table — and the radial feather law was refuted at
both endpoints. Brush masks still render nowhere: the kernel has no closed
form and the mask lives in Lightroom's pre-lens-correction frame, which this
engine cannot yet reproduce. That stays an honest BrushCarried disclosure
rather than a confidently wrong image — the R28 work is named in the docs.
Post-release documentation refresh (2026-08-20)
The docs on main were fully re-aligned to this release after it shipped:
docs/ARCHITECTURE.md now opens at v0.33.0 and names the complete dependency
stack (commit 5cb287e), a doc-drift gate (scripts/check_docs.py, an 11-row
claims registry run before every release) keeps the numbers honest from now
on, and the internal development ledgers (M1_PLAN/V2_PLAN) moved off the
public tree (ea15f99) — docs/ARCHITECTURE.md and this page are the
public-facing documentation. The release binaries above are unchanged: every
commit since the tag touches documentation and code comments only.