Skip to content

#122 Print soft-proofing and ICC export: design note - #123

Merged
yojen7 merged 7 commits into
mainfrom
claude/great-pasteur-k2qugo
Oct 4, 2026
Merged

yojen7 merged 7 commits into
mainfrom
claude/great-pasteur-k2qugo

Conversation

@yojen7

@yojen7 yojen7 commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Part of #122: phase-one print/proofing design. The issue remains open for implementation and maintainer decisions. No app processing or dependencies change.

The note describes linear Rec.709/sRGB decode, negative-primary clipping, output gamut limits, ignored non-raw ICC profiles, Linux JPEG preview and sRGB exports. It compares CPU LittleCMS proofing with a baked LUT and leaves six implementation choices to Josh. Line references explicitly identify their checked integration snapshot; links are checked.

Local review corrects the CIEDE2000 hue-wrap calculation and measures actual float16 LUT storage instead of UNORM16. The 33³ float16 simulation gives mean ΔE00 0.043, p99 0.226 and maximum 1.103 with the tested FOGRA39 profile. Those are numerical simulation results, not GPU performance or print-quality judgments. Original cloud measurements remain labelled LittleCMS 2.14; the local recheck uses 2.19.

Integrated with landed #130/#105/#132 main, preserving fixed rawler a98bd053. Hosted checks must pass on this integrated head before merge.

Source

  • Original work for RapidRoom
  • Harvested from another fork
  • User-facing changelog entry: not applicable to this design-only change.
  • Also offered upstream.

How it was made

  • Written by an AI agent: original code reading/prototype/note by Claude; local integration, formula corrections, measurements and verification by Codex.
  • Mostly AI-generated, reviewed and edited by a human
  • Written by a human with AI help
  • Written without AI

Who answers review: Yojen with Codex; maintainers decide.

Testing

  • Local LittleCMS 2.19 with colord's CC0 FOGRA39L and AdobeRGB1998 profiles: all tested library proofing/output transforms agree exactly with tificc in 16-bit codes.
  • Corrected CIEDE2000 passes all 34 Sharma/Wu/Dalal reference pairs within the published four-decimal rounding (maximum error 0.0000495). Tetrahedral interpolation reproduces identity at 1002 samples including endpoints.
  • fmt, strict locked all-target/all-feature Clippy, 238 Rust tests (4 ignored), 112 Vitest tests, generated docs and locked release build pass.
  • TypeScript: same 46 baseline errors; no changed frontend implementation, no new diagnostics, scoped Prettier passes.
  • 60/60 default renders pixel-identical to approved baseline-int7 on the same Intel xe / Mesa 26.2.2 / Linux 7.2.5 environment. No baseline/tolerance change. Engine SHA-256 50f1d91eefb0bdf7fdcfcecb4297a4759d1b581b121b87a45af999f67f56462c.
  • Tested by a human in the running app (no app behavior added).
  • Default rendering unchanged by the full-corpus comparison.

No real paper/monitor profiling, GPU execution/timing or implementation quality claim. The output-space, library, preview path, display assumptions, first-version scope and fixture choices remain proposals. Hosted checks must pass for this exact head before merging the note.

Fresh integration logs and recovered historical session evidence retained in /home/josh/code/rapidraw-project/baseline/results/sora-final-stack/123/; temporary corpus TIFFs removed. No printer profiles added to the app.

claude and others added 5 commits October 4, 2026 03:50
Step 1 of #122: how the colour pipeline works today (linear Rec.709
working space with negatives clipped at raw decode, display-referred
sRGB output clamped to 0-1, untagged JPEG preview on Linux, sRGB-tagged
exports), where a printer/paper proof transform fits (on the final
sRGB-encoded output, before the clipping overlay, dither and
quantisation), and how LittleCMS's tificc checks the results.

Recommends LittleCMS through the lcms2 crate, on the CPU after
readback, so no shader changes and the default render stays identical.
Lists the decisions for the maintainer. measure.py reproduces the
numbers: gamut overlap, intent/BPC/paper effects, baked-LUT accuracy for
a GPU fallback, throughput, and tificc matching the library exactly.

No code or rendering changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01698nBdQdBkjPM82dJgnawc
@yojen7
yojen7 merged commit c864831 into main Oct 4, 2026
8 checks passed
@yojen7

yojen7 commented Oct 4, 2026

Copy link
Copy Markdown
Contributor Author

Verified and merged as c8648314 by Yojen following the maintainer queue; local integration and verification by Codex.

Print phase-one design and numerical measurement script. No application processing or dependencies changed. Six implementation choices remain for Josh; no real paper, monitor, GPU timing or print-quality validation claimed.

  • 238 Rust tests pass (4 ignored), 112 Vitest tests pass. Formatting, strict locked all-target/all-feature Clippy, generated docs, scoped frontend comparisons and locked release build pass. No new TypeScript or scoped ESLint diagnostics.
  • 60/60 renders are pixel-identical to approved baseline-int7, with matching environment metadata and no baseline/tolerance change. Engine SHA-256 50f1d91eefb0bdf7fdcfcecb4297a4759d1b581b121b87a45af999f67f56462c. Hosted CI is green for this exact head.
  • Durable logs, comparison JSON, manifest and engine: /home/josh/code/rapidraw-project/baseline/results/sora-final-stack/123/. Successful full-corpus TIFFs were deleted after retaining evidence.

@yojen7
yojen7 deleted the claude/great-pasteur-k2qugo branch October 26, 2026 18:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants