Skip to content

Safelight redesign - #1

Merged
Redrum624 merged 7 commits into
mainfrom
claude/youthful-hamilton-s04iwn
Oct 10, 2026
Merged

Redrum624 merged 7 commits into
mainfrom
claude/youthful-hamilton-s04iwn

Conversation

@Redrum624

Copy link
Copy Markdown
Owner

What does this PR do?

Related issue

Checklist

  • pnpm run typecheck passes
  • pnpm run lint passes (0 problems)
  • pnpm run test passes
  • I added/updated tests where it made sense
  • I updated docs (README / CHANGELOG) if user-facing behavior changed

Screenshots (if UI-related)

…ntrols

Rework the UI from floating "glass" cards over a void into a docked,
native-feeling desktop layout:

- Tokens: graphite surfaces separated by hairlines (no blur, no glow), a
  single safelight-amber accent reserved for edits, primary actions,
  ratings and focus; system font (Segoe UI Variable) instead of a web
  font; arrow cursor on controls; thin scrollbars; spring/ease-out motion
  tokens and a global reduced-motion rule.
- Title bar: data-driven menus with check marks and shortcuts, outside
  click / Escape close, Windows-style hover switching, the Gallery |
  Develop switch centred, Windows caption buttons.
- Command bar docked above the canvas (filename + actions + zoom) replaces
  the floating pill and filename chip; collapses into "⋯" by its own width.
- Docked inspector (histogram + module) and tool strip with a sliding
  amber indicator replace the floating column and icon rail.
- Filmstrip and status bar docked full width; the filmstrip now also
  shows after File > Import.
- Controls: SliderRow (edited dot, fill from the default, label scrub and
  double-click reset), Segmented with a sliding indicator, neutral chips,
  flat module header, sentence-case section labels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
- Gallery: contact-sheet cells (whole photo letterboxed in a 4:3 well,
  caption and rating underneath), smaller 240px tiles, neutral selection
  ring and check badge, staggered entrance; virtualization row height
  follows the new cell.
- Dialogs: opaque popover surface that scales in from .97 on the spring,
  flat header, plain close button, tokenised form fields; fix the selected
  format/preset card and the active sidebar tab never showing their
  selected state (inline styles were overriding the state CSS).
- Welcome screen: calm start sheet — mark, tagline, action list with
  shortcuts, cross-fading tips; no emoji or all-caps accent labels.
- Toasts: popover surface, semantic icon colour only (no stripe), rise in
  above the status bar on the spring.
- Popovers, context menu, info popover and export progress share the
  pop-in entrance; RAW Decode, Settings and Enhance match the inspector.
- Checkboxes and radios take the accent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
- Command bar: measure the filename label's natural width and re-measure
  when the label or actions resize, so secondary actions fold into "⋯"
  before the filename truncates (it previously squeezed to "1 of").
- The command bar's "i of N" now counts the same list the filmstrip shows.
- Switching modules cross-fades the module body.
- Histogram channels toned down; reduced motion stops infinite animations
  after one cycle instead of spinning at 1ms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
Two faults in the main-process decode chain, reproduced on the PEN-F
fixture padded to full length:

- libraw.js and libraw.wasm are git-ignored, so a source checkout had
  only public/libraw/worker.js. The wasm rung aborted inside its worker
  without answering and every RAW open waited out the 60s watchdog
  before falling back. scripts/sync-libraw-wasm.cjs now copies the
  runtime in (postinstall and before build), the resolver requires the
  complete runtime, and LibRaw errors or a 0x0 open fail immediately
  with a clear reason (62s -> 0.9s when the runtime is missing).
- The embedded-JPEG last resort ignored the ORF container orientation
  (ORF previews carry none), so a portrait ORF opened upright from the
  progressive preview and turned sideways when the full decode swapped
  in. It now orients like the preview and upscales with fit inside, so
  the 4:3 preview is no longer stretched to the IFD0 sensor box.

Also: open dialogs list every supported RAW extension (CR3, RAF, ...),
and per-file ORF debug logging in FileSystemService is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
- Settings now holds only working settings: RAW defaults for new photos
  (demosaic, highlights, camera match) on the existing defaults store,
  the welcome-screen toggle, a real Clear for the memory cache, the
  rendering path and version. The read-only checkboxes and unwired
  selects are gone.
- Shadows & Highlights rebuilt on SliderRow/Segmented/ChipButton (was
  ~900 lines of hand-built sliders on the old gray scale).
- Crash screen, Shortcuts list (keycaps on hairlines, no emoji), canvas
  loading scrim, File Explorer rows and Batch stats restyled; dialog
  Cancel buttons share one 30px class with a quiet danger variant.
- Unpreviewable photos get a neutral format tile instead of a red
  "Error" block, in the filmstrip and the gallery.
- 2D canvas fills use CANVAS_SURROUND (= --vt-canvas) so a zoomed-out
  photo no longer sits in a darker box on the CPU path; the dev zoom
  overlay is gone.
- Radius scale and popover shadow tokens added to :root; legacy dark-*
  utilities mapped onto Safelight instead of compiling to nothing.
- No ALL CAPS labels left (Batch stats, upscale badge).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
- New hero, gallery and module-panel screenshots taken from the app
  (same photo set as before, 2x); RAW Decode, EXIF, mask and
  before/after shots are unchanged.
- README and User Guide describe the docked layout instead of the
  floating glass workspace; Unreleased changelog entry for the
  redesign and the ORF decode fixes.
- Polish found while shooting: tone-curve hint moved off the curve and
  debug lines removed, crop readout in tabular figures, status-bar
  separator spacing, gallery footer omits "0 RAW · 0 B".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
@Redrum624
Redrum624 merged commit 2a66721 into main Oct 10, 2026
1 check passed
Redrum624 added a commit that referenced this pull request Oct 10, 2026
@Redrum624 Redrum624 changed the title Claude/youthful hamilton s04iwn Safelight redesign Oct 10, 2026
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