Skip to content

Pick Dmin/Dmax by hand; move Film Base to Readouts - #1592

Merged
marcinz606 merged 1 commit into
mainfrom
feat/manual-bounds-pick
Nov 1, 2026
Merged

marcinz606 merged 1 commit into
mainfrom
feat/manual-bounds-pick

Conversation

@marcinz606

@marcinz606 marcinz606 commented Nov 1, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Pick by Hand (Metering card, new fold): Dmin: Thinnest Spot and Dmax: Densest Spot are canvas pick tools. Each pick replaces one end of the frame's bounds, for all three channels. Each end is optional and has its own clear button. The readout shows the picked densities in channel colors. Luma Clip and Color Clip gray out when both ends are picked. Roll Use Average still takes priority.
    • The picks are applied in resolve_bounds_detailed, so the CPU and the GPU use the same values. The GPU analysis key includes the picks.
    • The click positions (manual_*_at) are used only for the canvas marks. They are in _UNHASHED_FIELDS.
    • The defaults are None, so there is no BOUNDS_VERSION or THUMBNAIL_RENDER_VERSION bump.
  • Film Base moves from Metering to an icon toggle on the Analysis card's Readouts header. It shows a dot when a base is picked and has a × to clear it. It is hidden on slides. Its Tools menu entry is now in a new "Analysis" group, and its shortcut does not switch tabs.
  • Metering layout: Lock stays alone on the ANALYSIS header. Reanalyze Frame and Draw Region share the tools row.
  • header_actions() factory: puts labeled buttons on a sub-header row at a fixed share of the width. It is used for the short-label header rows (Metering, Roll Analysis, Scenes, Retouch, Flat Field, Scanlight exposure, Export color management, Gear Library).
  • Sub-headers (section_subheader and fold headers) use body size and text_secondary.
  • Fix: the Roll Analysis card body no longer draws a darker box.
  • Docs: the guide's Metering and Analysis sections are updated, and the Analysis section is cut to stay under 350 words. PIPELINE.md has a note on the picks. All four catalogs and the localized guide panels are updated.

Test plan

  • make all: lint, type check and Rust checks pass. The full pytest run had 1 failure, the Tools menu test that expected no "Analysis" group. After I updated the test, that one test passes. I did not run the full suite again.
  • New tests: tests/test_manual_bounds_pick.py (bounds resolution, controller pick and clear, CPU/GPU parity), tests/test_header_actions.py, and a Readouts-header test in tests/test_film_base.py.
  • Headless screenshots of the Metering and Analysis cards.
  • Manual check: pick Dmin and Dmax on a hard frame, clear each pick, and pick a Film Base from the Readouts header.

Pick by Hand fold in the Metering card: Dmin (thinnest spot) and Dmax
(densest spot) each replace one end of the frame's bounds, per channel.
The picks route through resolve_bounds_detailed, so CPU and GPU share
them; roll Use Average still wins. The canvas shows labelled marks while
a pick tool is armed. Luma and color clip gray out when both ends are
picked.

Film Base moves to an icon toggle on the Analysis Readouts header, next
to the numbers it changes, with a dot and a clear button. Reanalyze
Frame moves down beside Draw Region; Lock stays on the ANALYSIS header.

header_actions() puts sub-header buttons at a fixed share of the row
and is used for the short-label rows across the panels. Sub-headers and
fold headers use body size and text_secondary. Roll Analysis loses its
darker body box.
@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown

Preview load metrics (github-linux-x64)

format cold load throughput
CR2 0.616 s 36.44 MPx/s
NEF 0.450 s 54.70 MPx/s
ARW 0.177 s 113.79 MPx/s
RAF 1.856 s 8.76 MPx/s
DNG 0.510 s 46.89 MPx/s

fixtures: rawsamples.ch · sha: 0841d67 · full JSON

@marcinz606
marcinz606 merged commit e592a07 into main Nov 1, 2026
6 checks passed
@marcinz606
marcinz606 deleted the feat/manual-bounds-pick branch November 1, 2026 18:47
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.

1 participant