Where the model breaks

The display is an unknown

This site is displayed on the very apparatus it is about, and it knows almost nothing about that apparatus. Two figures here stop assuming and ask instead — a probe for the transfer function and a probe for the gamut.

Every figure on this site assumes sRGB primaries, a D65 white point and the standard transfer function. Those assumptions are stated rather than hidden, and they are assumptions rather than facts — the site has no way to determine any of them.

This essay is about what can be done anyway. Two figures here stop assuming and ask the reader’s hardware a question, which is possible on this subject and on no other in the fleet, because the page is rendered on the apparatus under discussion.

A probe for a wide-gamut displayBoth halves of this block carry the same sRGB red. Where the browser and the panel both support Display P3, the right half is drawn in a red that sRGB cannot reach, and a seam appears down the middle. No seam means an sRGB display — or a browser not managing colour, which this cannot distinguish and does not pretend to.one rectangle, or two?a visible seam means the display reaches past sRGBevaluated by the browser, not the buildCSS color(display-p3 …)
Fig. 1 Both halves of this block carry the same sRGB red. Where the browser and the panel both support Display P3, the right half is drawn in a red sRGB cannot reach, and a seam appears. One rectangle means an sRGB display — or a browser not managing colour, which this cannot distinguish.

What the page cannot know

A web page has essentially no access to the display’s characteristics. There is no way to read the panel’s primaries, its transfer function, its white point, its peak luminance or its calibration state.

There is no way to know the ambient light either, which matters as much. A screen in a bright room has its blacks raised by reflections, compressing the shadows and destroying the low end of the transfer function. Two readers on identical hardware in different rooms are seeing measurably different things.

What the page can do is emit values and let the reader observe what happens. Both probes here work that way: neither asks the machine anything, and both are experiments the reader performs.

The gamut probe

Both halves of the hero block specify the same sRGB red as a fallback. The right half additionally specifies a Display P3 red inside an @supports query, which the browser evaluates at view time.

Three outcomes:

A visible seam. The browser supports P3 colours and the panel reaches beyond sRGB. The right half is a red the left half cannot express.

No seam, sRGB display. The panel cannot exceed sRGB, so the P3 colour is mapped back into range and the two halves coincide.

No seam, unmanaged browser. The @supports query fails or the colour is not managed, and the fallback is used on both sides.

The probe cannot distinguish the second case from the third, and the caption says so. A negative result means either a narrow-gamut display or a browser not doing colour management, and there is no way from inside the page to tell which.

That ambiguity is worth stating plainly rather than glossing, because a probe reporting “this display is sRGB” would be making a claim the evidence does not support. The P3 colour is also verified at build time to be genuinely outside sRGB — a probe whose wide-gamut colour happened to be reachable would show no seam anywhere and would report every display as narrow.

The transfer-function probe

The second probe measures something more fundamental, and it works without any browser feature at all.

A gamma probe: which grey matches a half-white dither?The striped block on the left is half white and half black, so it carries half the luminance of white. Stand back until the stripes blur and find the patch that matches it. On an sRGB display the answer is code 188, not 128 — code 128 has only 22 per cent of white's luminance.half white, half black128160176188← this one200220blur the stripes by standing backsRGB transfer function
Fig. 2 A block of alternating black and white lines beside a row of greys. The stripes are half white and half black, so they carry half the luminance of white whatever the transfer function does. Whichever patch matches, viewed from far enough that the stripes blur, is the display’s actual half-luminance point.

The logic is sound regardless of the display: a pattern of equal black and white areas emits half the light of an all-white area, because it is half white and half nothing. Finding the uniform grey that matches it locates the half-luminance code directly.

On a display behaving as sRGB specifies, that is code 188. A match near 128 would mean a linear display, which essentially none are. A match elsewhere means something in between, which is common — many displays are calibrated to approximations, and any night-shift filter or ambient light changes the answer.

What the probe measures is the whole chain as delivered: panel, operating system colour management, any active filter, and the room. That is arguably more useful than the panel’s specification, and it is emphatically not the same thing.

Why this matters for everything else here

The site’s central claim is about the gamut — that most visible colours cannot be shown and are therefore marked rather than clipped. The claim is computed against sRGB.

A reader on a wide-gamut display with correct colour management has a slightly larger honest region than the figures state. The hatched area is then somewhat too generous, and a few colours marked unreachable would in fact be reachable on that screen.

This does not undermine the argument. The gap between any three-primary gamut and the visible region is large, and the difference between sRGB and P3 is small beside it — P3 covers roughly a quarter more area, against a triangle that misses about two thirds of the diagram. The conclusion survives comfortably. But the specific percentage is display-dependent, and every figure names sRGB in its corner for that reason.

What colour management is actually doing

The chain from a stored number to emitted light has more steps than it appears, and each is a place for the assumptions to fail.

A file may carry an ICC profile describing what its numbers mean. Untagged content is assumed to be sRGB by essentially all modern browsers, which is a convention rather than a fact and is right often enough to be workable.

The operating system may hold a display profile, from a hardware calibrator or from the manufacturer’s defaults or from nothing at all. The compositor uses it to convert from the file’s space to the display’s.

The panel then applies its own processing — a lookup table, possibly a picture mode, possibly a dynamic contrast feature that changes behaviour with content.

When all three are correct, the emitted light matches what the file specified. When any is wrong or absent the result is a colour shift nobody sees as a shift, because there is nothing to compare against. This is why an image can look different in two applications on the same machine: one is managing colour and the other is not, and the second is showing numbers rather than colours.

What calibration does and does not achieve

A hardware calibrator measures the display’s actual behaviour and builds a profile so the system can compensate. It is the only way to know the transfer function and the primaries rather than assuming them.

It does not control the ambient light, and it does not control the observer. Two people with normal colour vision can genuinely disagree about whether two things match, particularly on displays with narrow-band primaries, which are increasingly common. Calibration removes the device from the equation and leaves the room and the person in it.

Which is the honest summary of what this site can offer. The stimulus can be specified exactly; what it looks like cannot be predicted from that alone, and calibration improves the first half only.

The bearing on the rest of the site

Three of the site’s standing commitments come from this essay’s problem.

Every figure names its observer and its assumed display. Not decoration — the numbers are conditional on both, and a chromaticity without them is incomplete.

Nothing outside the gamut is drawn as though reachable. Since the gamut is uncertain, the marking is computed against the stated assumption and the assumption is visible.

The page chrome is exactly neutral. This is the one thing the site can control that materially affects appearance. Coloured furniture would shift every swatch through simultaneous contrast, in a direction varying with layout position, and the neutrality is checked mechanically rather than left to discipline.

The sRGB transfer function, and the gamma 2.2 curve it is notCode value against relative luminance. The sRGB function is piecewise — a short linear segment near black, then a 2.4 power law with an offset — and it is close to but not the same as a plain 2.2 power law. Half-way along the code axis sits at 21 per cent luminance, and half the luminance of white is at code 188.code 128 → 21% luminance50% luminance → code 188code valuerelative luminancegamma 2.2sRGBthe diagonal would be a linear displayIEC 61966-2-1
Fig. 3 What the probe is probing. The sRGB curve, the gamma 2.2 curve it is often confused with, and the diagonal a linear display would follow. Code 128 sits at 21 per cent luminance and half the luminance is at code 188 — the number the probe should locate.

What the site does with an unknown display

Three commitments follow from this essay’s problem, and all three are enforced rather than left to discipline.

Every figure names its observer and its assumed display. The numbers are conditional on both, and a chromaticity quoted without them is incomplete.

Nothing outside the assumed gamut is drawn as though reachable. The assumption may be wrong for a given reader; the marking is computed against a stated assumption, so a reader knowing their display exceeds sRGB knows which direction the error runs.

The CIE 1931 chromaticity diagram with its unreachable region markedThe spectral locus encloses every chromaticity a human eye can see. Cells inside the sRGB triangle are drawn in their own colour; the 85 per cent outside it are hatched, because no value this display accepts is the colour belonging there.0.00.20.40.60.80.00.20.40.60.8xyD65460480500520540560580600620hatched: outside sRGB15% of the visible area is reachableat luminance Y = 0.55CIE 1931 2° observer
Fig. 4 The claim in question. The hatched region is computed against sRGB; a wide-gamut reader has a somewhat larger honest region than this shows. The gap between any three-primary triangle and the visible region is large enough that the conclusion is unaffected, and the specific percentage is not.

The page chrome is exactly neutral, checked by parsing the stylesheet and requiring equal channels in every paper and ink token. This is the one variable in the whole chain the site can control that materially affects appearance.

What is left uncontrolled, and why that is acceptable

The ambient light, the calibration state, the viewing distance and the observer all remain unknown. Stating them as unknown rather than assuming them away is the honest position, and the figures are built so the unknowns affect magnitudes rather than conclusions.

The gamut argument survives a display change because the effect is much larger than the uncertainty. The identity assertions survive because equality of delivered values is display-independent — whatever the screen does to two identical values, it does the same to both.

Where a claim would not survive, the essay says so and gives the magnitude rather than leaving the reader to guess.

What was computed here

The P3 colour used in the probe is verified at build time to be outside the sRGB gamut, by converting it through the Display P3 primaries to XYZ and testing against the sRGB gamut. That assertion is the only thing standing between this figure and a probe that reports every display as narrow.

The gamma probe’s target code is computed rather than typed: inverting the sRGB transfer function at a luminance of 0.5 gives 188, and linearising code 128 gives 0.214. Both are asserted, with the second constrained to lie between 180 and 196 so that a broken transfer function could not silently move the answer.

The probes themselves are the exception to the site’s usual discipline. Every other figure is computed, asserted and fixed before the page is written. The P3 probe’s appearance is settled by the browser at view time, which is deliberate and is the point of it.

The probes are the one exception to the site’s usual discipline: their appearance is settled by the browser at view time rather than fixed at build time. That is deliberate, and it is what makes them measurements of the reader’s hardware rather than statements about it.

What a null result is worth

Both probes on this page can return nothing, and it is worth being clear what nothing means.

The gamut probe showing one rectangle is consistent with an sRGB panel, with a browser that does not support the syntax, and with a colour-management path that ignored it. Three explanations, one observation, no way to distinguish them from inside the page.

The gamma probe matching at an unexpected code is consistent with an uncalibrated panel, an active night-shift filter, a bright room, and a reader judging the match badly. Again several explanations for one observation.

Reporting either as a measurement of the display would overstate what happened. What both actually measure is the whole chain as delivered, which is a genuinely useful quantity and is not the panel’s specification — and saying so is the difference between a probe and a claim.

What is being assumed, in one list

sRGB primaries, D65 white, the standard transfer function, a display that implements them, and a room that does not interfere. Five assumptions, none verifiable from inside the page, all stated on every figure.

The sRGB transfer function, and the gamma 2.2 curve it is notCode value against relative luminance. The sRGB function is piecewise — a short linear segment near black, then a 2.4 power law with an offset — and it is close to but not the same as a plain 2.2 power law. Half-way along the code axis sits at 21 per cent luminance, and half the luminance of white is at code 188.code 128 → 21% luminance50% luminance → code 188code valuerelative luminancegamma 2.2sRGBthe diagonal would be a linear displayIEC 61966-2-1
Fig. 5 What the gamma probe is probing: the curve the whole chain is assumed to implement, and the code the probe should locate if it does.

Which claims survive an unknown display

Sorting them is the useful exercise.

Robust: anything about equality. Two identical values remain identical whatever the screen does to them, so every identity assertion on this site holds regardless of hardware.

Robust in direction, not magnitude: anything comparative. A gradient blended two ways differs in the same direction on every display, by an amount depending on the transfer function.

Conditional: anything quantitative about the gamut. The hatched fraction is computed against sRGB and moves on a wider display.

The same gradient blended two waysAbove, the code values are interpolated, which is what most tools do. Below, the luminances are. The midpoint of the top ramp carries 23 per cent of white's luminance where it should carry 51, so the top ramp is visibly too dark through its middle.interpolating code valuesinterpolating luminancemidpoint 23%midpoint 51%same endpoints, different middlessRGB
Fig. 6 A second thing the display decides. These two ramps differ by exactly the transfer function, so the size of the difference a reader sees depends on the curve their own hardware implements — the direction is robust and the magnitude is not.

What the pictures cannot show

Neither probe is a measurement in any strict sense. The gamma probe depends on the reader’s judgement of a match, at an unspecified distance, under unknown light. It locates the half-luminance point to within a couple of the offered codes at best.

Neither can distinguish where in the chain a discrepancy arises. A display matching at code 200 rather than 188 might be uncalibrated, might have an active filter, might be reflecting a bright window. The probe reports the sum.

And there is a limit that cannot be worked around: this page cannot show what a wide-gamut display shows to a reader who does not have one. The seam either appears or it does not, and no illustration of the difference is possible on a screen that cannot produce it. That is the same limitation as the hatched region on the chromaticity diagram, applied to the reader’s own hardware.

Who found it, and when

Colour management as a discipline dates from the desktop publishing era, when the same file had to produce consistent results on screens and presses from different manufacturers. The International Color Consortium was founded in 1993 and its profile format remains the standard.

sRGB was defined in 1996 by Hewlett-Packard and Microsoft as a default for content with no profile — an attempt to make the unmanaged case predictable rather than arbitrary. It succeeded so thoroughly that it became the assumption underlying essentially all web content, and its 1990s CRT-derived characteristics govern images today for that reason.

Display P3, derived from the DCI-P3 cinema standard, arrived on consumer hardware around 2015, and CSS gained syntax for specifying colours in it shortly after. The probe on this page depends on that syntax and would not have been possible before it.

Where this goes next

The transfer function the probe measures is the midpoint is not half. The gamut it probes is most of this diagram cannot be shown. And the deeper reason a specified stimulus still does not determine an appearance is matching is not appearance.