Skip to content

Autoshop v0.33.0

Choose a tag to compare

@skymanbp skymanbp released this 20 Aug 03:55
· 129 commits to main since this release

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.032 frame constant was proven — by a LensProfileEnable A/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 .lcp reader is the
    candidate fix for R28. Byte round-trips are unaffected.
  • batch transcripts 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. .x3f is excluded (upstream decoder
    panics; guarded).
  • --jobs N parallelism on batch and eval, 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.