d2phap / d2phap/ImageGlass

JXL images are not color-managed

Open
#2,383 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

🐞 bug
Dominant language
C#
Stars
14.4k
Forks
752
Avg merge
10d 14h
Merged PRs (30d)
1

Description

Windows OS version

Windows 11 25H2

ImageGlass version

10.0.3.720-rc-win-x64

ImageGlass release

Classic

1️⃣ Steps to reproduce
  1. Set Windows desktop to SDR mode.
  2. Ensure ACM ("automatically manage color for apps") is turned off in Windows color management settings (ACM breaks color management and wide gamut support)
  3. Set monitor mode to wide gamut (ensure OS has correct ICC monitor profile registered)
  4. Use ImageGlass to browse attached SDR wide gamut test images ('Display P3' color space)
2️⃣ Actual behavior

3/4 test images are displayed incorrectly.

  • Reference image is displayed correctly (P3-original.png)
  • P3-AF-Q100.jxl is undersaturated.
  • P3-cjxl-D0.0.jxl is undersaturated.
  • P3-cjxl-D0.1 is undersaturated and clipped ('W' is not visible).
3️⃣ Expected behavior

All JXL test images should appear identical to the reference image (P3-original.png).

  • Fully saturated.
  • Visible 'M' character (red-on-red).

There are currently no editors/viewers that I am aware of that can correctly display lossy compressed JXL images without using the compatibility workaround described below (less efficient, lower quality). This seems to be a significant gap in the ecosystem, as "perceptually lossless" is the most efficient format that produces the highest quality image for the smallest file size (--distance=1.0).

  • P3-AF-Q100.jxl is moderately lossy compression with a compatibility workaround (used by Affinity):
    • cjxl input.png output.jxl --distance=1.0 --modular=1 --disable_perceptual_optimizations
  • P3-cjxl-D0.0.jxl is mathematically lossless:
    • cjxl input.png output.jxl --distance=0.0
  • P3-cjxl-D0.1.jxl is minimally lossy:
    • cjxl input.png output.jxl --distance=0.1
4️⃣ Screenshots / Video / Sample image file

tests.zip

5️⃣ Additional context

Partial duplicate of bug report #2311 (ImageGlass 9.x) incorrectly closed as duplicate of an HDR-related issue.

IIRC, ImageGlass 9.x only failed to display P3-cjxl-D0.1.jxl correctly, so ImageGlass 10.x has a similar problem that manifests differently.

Note: All test files are SDR, the problem is manifest when Windows 11 desktop is in SDR mode. This was also the case with #2311.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the issue with the attached tests.zip under Windows 11 SDR mode, with ACM disabled and a wide-gamut monitor profile configured. Trace the JXL decoding and color-management path, comparing the three affected images with P3-original.png. Done means all test images display with matching saturation and the expected visible characters.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
computer-graphics, desktop
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.