PhotoAIA

Editor › color-accuracy

How does PhotoAIA manage colour, and how accurate is it?

PhotoAIA reads the ICC profile embedded in your file, uses it to interpret the pixel numbers, and converts them to the canvas colour space with LittleCMS compiled to WebAssembly — the same colour engine used across the industry — running entirely on your machine. That conversion is measured against exact LittleCMS at ΔE2000 ≤ 1.0, below the threshold at which a difference is normally noticeable side by side.

Why a browser editor needs to do this itself

A canvas element is an sRGB surface. Hand it the raw numbers from an Adobe RGB or Display P3 file and the browser interprets them as sRGB — the classic "my wide-gamut file looks flat" problem. A colour-managed application must therefore convert from the document's space into the canvas's space itself.

Browsers cannot be relied on to do this for you. Every major engine implements only the matrix/TRC part of the ICC specification: Firefox's colour engine explicitly does not support display cLUTs, and Chrome's falls back to the matrix component when a look-up table is present. Most CMYK profiles and many camera and scanner profiles are LUT-based — precisely the profiles print work depends on. So PhotoAIA carries a full CMM (LittleCMS) and does the transforms itself.

The pipeline, stage by stage

Rendering intents and black point compensation

All four ICC rendering intents are available, and PhotoAIA does not implement its own gamut mapping — it asks LittleCMS, so the perceptual behaviour comes from the destination profile's own table, as the specification intends. Black point compensation is available and behaves correctly: measurement confirms it changes shadows substantially while leaving highlights essentially untouched, which is what distinguishes real BPC from a naive shadow lift.

What has been measured

CapabilityStatusHow it was established
Adobe RGB displayVerifiedΔE2000 ≤ 1.0 vs exact LittleCMS; measured in the test suite
Display P3 displayVerifiedsame measurement
sRGB (no spurious conversion)Verifiednear-identity measured ≤ ΔE2000 1.0
ICC profile detectionVerifiedTIFF, PSD, JPEG, PNG; byte-exact round-trip tests
Rendering intents differ correctlyVerifiedmeasured ≥ ΔE2000 2 between intents through a real GRACoL profile
Black point compensationVerifiedshadows ≥ ΔE2000 2, highlights ≤ 1.5
Soft proofVerifiedproof vs no proof ≥ ΔE2000 2
TIFF / PSD profile preservationVerifiedbyte-exact import and export tests
Export tagging honestyVerifieda file is tagged only with the profile its pixels are in
CMYK separationVerifiedprofile-driven, validated against a locked reference
CMYK on-screen compositeLimiteduses a device approximation, not the profile — soft-proof the RGB master for accuracy
Screen-to-monitor matchNot possible in a browserno browser exposes the display profile to a web page

What PhotoAIA does not claim

Questions

Is my file uploaded for colour conversion?
No. The colour engine runs in your browser as WebAssembly. Files and profiles stay on your machine.
Which colour engine is used?
LittleCMS, compiled to WebAssembly — a widely used open-source CMM, not a home-made approximation.
Why does my image look different in another application?
Usually because that application interprets the file differently, or your display profile differs from what the other application assumes. The plain check is whether the file carries a profile and whether both applications honour it.
Can I trust the soft proof for press sign-off?
Treat it as a working preview. It is profile-accurate, but your display and its calibration are outside any browser application's control.

Open the editor