Skip to content

Claude/tool polish features 7ttuok - #1

Open
lucafluri wants to merge 2 commits into
masterfrom
claude/tool-polish-features-7ttuok
Open

Claude/tool polish features 7ttuok#1
lucafluri wants to merge 2 commits into
masterfrom
claude/tool-polish-features-7ttuok

Conversation

@lucafluri

Copy link
Copy Markdown
Owner

No description provided.

… filmstrip

Bugs
- Baked exports lost EXIF. The stack's numpy stages and ImageOps.expand return
  a fresh PIL image with an empty `info`, and _bake_to_jpeg read the metadata
  off *that* — so any photo exported with a vignette, grain, a colour move or a
  border came out with no camera, lens or capture date. Read it off the source
  instead, orientation cleared because the pixels are already rotated.
- remapSpots still spoke the pre-brush spot schema, so on a current stroke every
  mapped field came out NaN and the filter then dropped it: the first re-crop
  silently deleted the whole retouch stack, the one thing a re-crop was supposed
  to preserve. Both shapes are mapped now, and a stroke that still has any of
  its length on the picture is kept.
- A RAW+JPEG group whose members disagreed (a folder culled before grouping was
  switched on) showed one reconciled mark but stored two. "Delete rejected" then
  expanded the group, found half of it flagged, and refused the batch. The
  reconciled mark is written back, primary included.
- An undecodable negative raised a 500 out of libraw. It now reports 422 and the
  loupe drops back to the camera JPEG saying why; the export lists it as an
  error rather than writing the preview in place of the negative.
- Grain was generated per output pixel, so the preview's grain read several
  times coarser than the file the export wrote. It is now sized against the
  frame, from an 8-bit noise plane so a 45MP export costs 45 MB, not 180.
- RAW capture time was never read. Most RAWs are TIFF containers, so a RAW-only
  shoot now sorts and date-splits by when it was shot; the ISO-BMFF ones are
  skipped on the magic number rather than handed to a decoder once per scan.
- The shortcut sheet was taller than the screen with no way to scroll, and V was
  swallowed in the loupe so it could not be opened from where it is most wanted.
- Also: the ✎ badge was drawn on top of the flag dot; a no-op edit pushed an
  undo step that did nothing; the histogram's "before" curve was cached by path
  alone and so survived the JPEG/RAW switch; retouch mode outlived the viewer;
  right-dragging a pane started a pan that never ended; a clicked button kept
  focus so the next Space re-pressed it; the render cache prune counter raced.

Navigation and UI
- The compare set is now a general selection: shift-click takes a range,
  ctrl-click toggles one, A takes everything the filter shows, and Shift+a flag
  or rating key marks the lot in one request that undoes as one.
- Filename filter in the top bar, / to focus, Esc to clear.
- Loupe: Z (or double-click) flips fit ⇄ 100% centred on the pointer, a
  filmstrip shows where in the shoot you are and jumps to any frame, and the
  edges of the picture are prev/next buttons.
- The folder tree takes the arrow keys and Esc closes it; PgUp/PgDn move a
  screenful; 0 is an alias for no stars.
- Sort, direction, filter, search and a new fit/fill thumbnail mode persist.
- Export can be pointed at the selection, groups expanded so a picked RAW+JPEG
  pair goes out whole.

Hardening
- The render endpoints only serve files that are in the open library: any page
  the browser visits can point an <img> at them, which made them a read
  primitive for the rest of the disk.
- Stroke coordinates are rounded to five decimals — a twentieth of a pixel at
  45MP — which keeps a heavily retouched photo's edit stack inside the 64 KB
  the live-preview query string gets.

Tests cover the EXIF carry-over, grain at two render sizes, RAW capture time,
the path scoping, bulk marking, the selection export and the 422.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhFtz5P5ajfGiQsmGCh6GH
Plainer wording, no em dashes, and about a quarter shorter. Same facts, less
explaining of why each thing works the way it does.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhFtz5P5ajfGiQsmGCh6GH
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