Skip to content

fix(upstream): backport core rendering and workflow fixes - #22

Merged
sheldonxxxx merged 1 commit into
mainfrom
codex/upstream-core-fixes-20261008
Oct 8, 2026
Merged

sheldonxxxx merged 1 commit into
mainfrom
codex/upstream-core-fixes-20261008

Conversation

@sheldonxxxx

Copy link
Copy Markdown
Owner

Problem and result

Backport selected upstream fixes for colour processing, RAW previews, export correctness, crop controls, and library behaviour. Adaptations preserve the fork's optional MCP feature, Sony lossless M/S RAW decoder, source freshness, repair compositing, and GPU resource caches.

Type of Change

  • Bug fix
  • Performance improvement
  • Documentation update
  • UI/UX improvement

Changes

  • Smooth magenta highlight correction, calculate HSL hue in perceptual space, prevent vibrance NaNs, and avoid inactive HSL work and redundant float-upload copies.
  • Build export masks from their own image, invalidate stale mask caches, align empty masks, and persist TIFF bit depth and timestamp settings in export presets.
  • Use embedded RAW preview fallbacks, retain Nikon lens metadata, and handle closed stdout/stderr without aborting or hanging.
  • Filter before RAW/JPEG grouping, respect AI tag limits, save the unrated filter, resize crops from the centre with Ctrl/Cmd, and run custom mask Escape handlers.
  • Add regression coverage and strengthen native export checks for unsupported metadata and independently measured ICC differences.

Upstream provenance

Selected changes from these 16 commits; direct patches and fork adaptations are combined in one reviewed commit:

  • b4994ed4: fix(settings): allow unrated filter rating to be saved (three-way patch).
  • 3c864270: resize crop from center when holding ctrl on a handle (three-way patch).
  • d6cda855: perf(gpu): avoid float image copies during upload (three-way patch).
  • e99082ad: fix(raw): make magenta highlight correction continuous (three-way patch).
  • e8834210: fix(color): compute HSL mixer hue in perceptual space (three-way patch).
  • 89020724: prevent NaN in vibrance and skip inactive HSL panel (three-way patch).
  • c11c7a5c: fix(exif): read Nikon lens from MakerNote when EXIF has none (three-way patch).
  • 476389ad: Persist TIFF bit depth and file timestamp option in export presets (three-way patch).
  • f0f1be48: Apply library filters before RAW+JPEG grouping (three-way patch).
  • 367145a1: Respect the maximum AI tag count (three-way patch).
  • 9671795e: fix(masks): run custom Escape handler instead of storing a wrapper (three-way patch).
  • b64adfc6: fix: don't abort or hang when stdout/stderr is a closed pipe (fork adaptation).
  • 4e45e620: fix(thumbnails): use rawler embedded preview for non-TIFF raws (fork adaptation).
  • 43248097: refactor(thumbnails): share embedded preview fallback with image loader (fork adaptation).
  • 078c90a8: Build colour/luminance mask sources from the exported image (fork adaptation).
  • cf6813f1: fix stale export cache (fork adaptation).

Testing

The committed patch is identical to the locally validated patch.

  • Frontend build, format, typecheck, ESLint and translation checks passed; 133 frontend tests passed.
  • npm test --prefix mcp: 147 passed.
  • cargo fmt --check and cargo clippy --all-targets --all-features -- -D warnings passed.
  • Default Rust suite: 229 passed; MCP Rust suite: 337 passed. Eighteen environment-dependent tests are normally ignored; three selected Metal tests and the real CR3 embedded-preview test were run separately and passed.
  • Native RAW engine suite: 80 calls, 10 checks, zero skips. Native delivery suite: 31 calls, 36 checks, zero skips. Native geometry suite: 129 calls, 9 checks, zero skips.
  • Independently decoded full-resolution Canon and Sony TIFF exports retained non-replicated 16-bit samples. Metal precision/tile checks retained all 2,055 ramp levels with zero u16 difference.
  • Real CLI tests with stdout, stderr, and both closed exited successfully; independent TIFF inspection confirmed 16-bit output and ICC metadata.
  • Separate product manager review of README and the Unreleased changelog found no material issues.

Test Configuration:

  • OS and architecture: macOS 27.0, arm64.
  • GPU / processing backend: Apple M4, Metal.
  • Affected entry point: Render/export core, export CLI, MCP, and desktop controls.
  • MCP host and native build: Rust 1.98.1 with non-incremental dev/test profiles and debug symbols disabled; native suites used the same MCP binary and source revision.

Cross-platform packaged builds, signing, and interactive desktop acceptance were not run. Native engine and pixel checks do not establish desktop UI acceptance.

Checklist

  • Code follows the project's style and affected local checks pass without warnings.
  • No unnecessary AI-generated code comments were added.
  • README/setup claims match the changes and fork fixes are recorded under Unreleased in CHANGELOG.md.
  • Shared files and links contain no credentials, personal paths, or unavailable local evidence.

AI assistance

Prepared with Codex assistance through source review, fork-specific adaptations, regression tests, and native engine/pixel checks. Public documentation was reviewed by a separate product manager.

Apply selected changes from 16 upstream commits while preserving the fork MCP, RAW decoder, source freshness, and GPU cache contracts.

Correct colour and highlight processing, export mask sources and presets, RAW embedded previews, closed-pipe handling, library filters, tagging, crop controls, and Escape handling. Add regression coverage and document the resulting capabilities.
@sheldonxxxx
sheldonxxxx merged commit 2375e17 into main Oct 8, 2026
13 checks passed
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