Photographic visual for Blend Conformance

blend conformance

A blend mode is a formula, so a browser either computes it or it does not. The blender checks yours every time it loads, and draws a mode with the browser only where the browser gets it right.

Why check at all

Browsers draw blend modes with their own compositing code (the canvas’s globalCompositeOperation). It is fast, and on most engines it is exact. But the W3C Compositing and Blending specification is the only definition of what “soft light” or “colour” means, and where an engine rounds differently or takes a shortcut, the same photos and the same slider give a different picture on the machine next to yours. On a tool whose whole output is the blend, that would be the product being wrong.

The two fixtures

What happens with the answer

The tolerance is one unit in 255. A mode whose largest difference anywhere is within it is drawn by the browser. A mode that misses by more is computed by the blender’s own pixel loop instead, from the same reference arithmetic — slower, and identical on every engine — and the line under the mode rail says which modes that applied to and by how much. If the check cannot run at all (an unreadable canvas, or a privacy setting that adds noise to what a page reads back), the blender says so and claims nothing.

Linear light is a different case: it needs a conversion before and after the formula that the browser’s compositing cannot do, so with linear light chosen every mode is computed in the pixel loop.

Measured results

Peak difference per mode, in units of 1/255, as shown in the table under the rail on the blend-modes page. These are recorded by hand on the named machine and date; nothing is gathered from visitors’ browsers. Engines not listed have not been measured yet — open the blend-modes page in yours and the same table shows your own numbers.

Peak difference from the W3C arithmetic per blend mode and browser engine
ModeChromium 153 (headless)Linux x86_64, build check machine · 31 Oct 2026
Multiply1/255
Darken0/255
Colour burn1/255
Screen0/255
Lighten0/255
Colour dodge1/255
Overlay1/255
Hard light1/255
Soft light1/255
Difference0/255
Exclusion2/255 — pixel loop
Hue1/255
Saturation1/255
Colour1/255
Luminosity1/255

On that machine every mode but exclusion is drawn by the browser; exclusion differs by up to 2/255 and is computed by the pixel loop. Normal is plain compositing rather than blending and is not checked.

The check compares fully opaque colours. Partly transparent pixels go through the same compositing equation on both paths, but are not separately measured. Firefox and Safari rows will be added when they have been measured on named devices.

Next