Delta E Color Difference (CIEDE2000)
Measure color differences with CIEDE2000, CIE94, CIE76 and OKLab, with a pass/fail tolerance.
Try an example: Three samples against a teal reference · Sharma test pair 1 (expected ΔE2000 2.0425)
How it works
Compare a reference color with up to 50 samples written as HEX, CSS names or any CSS color function, including lab(). Each row shows ΔE2000, ΔE94, ΔE76 and the OKLab distance, plus pass or fail against your tolerance, with a CSV report.
- Parse each color with CSS Color 4 syntax and convert it to CIELAB with the D50 white, as CSS lab() does. lab() inputs therefore keep their exact L, a and b values.
- ΔE2000 follows CIE 142-2001 as implemented by Sharma, Wu and Dalal (2005), with kL = kC = kH = 1; it reproduces their 34 published test pairs to four decimals. ΔE94 uses graphic-arts weights (kL 1, K1 0.045, K2 0.015) with the reference as the first color. ΔE76 is Euclidean Lab distance.
- The OKLab column is the Euclidean OKLab distance multiplied by 100, so 2 is the one just-noticeable difference used by CSS gamut mapping.
- A sample passes when the selected difference is at most the tolerance. Out-of-gamut colors are compared unmapped; their HEX column shows the CSS gamut-mapped display value.
Sources
- Sharma, Wu and Dalal (2005): The CIEDE2000 color-difference formula — implementation notes, supplementary test data (University of Rochester)
- CSS Color Module Level 4 (color spaces, gamut mapping, named colors, sample code) (W3C)
- Björn Ottosson (2020): A perceptual color space for image processing (Oklab) (Björn Ottosson)
Part of Lumina
-
Lumina Photo editor & image toolkit
Bring out what you saw. A free photo studio, right in your browser.
Related tools
- Color Converter & Gamut Mapper (OKLCH, Lab, P3) – Convert any CSS color to HEX, RGB, HSL, Lab, LCH, OKLab, OKLCH and Display P3.
- Color Blindness Palette Simulator – Simulate protan, deutan and tritan vision for a palette and find colors that become confusable.
- OKLCH Palette & Tint Scale Generator – Build perceptually even tint scales and hue harmonies in OKLCH, gamut-mapped for CSS.
How to measure color differences with Delta E 2000
Compare a reference color with samples using CIEDE2000, CIE94, CIE76 and OKLab distance, with a pass/fail tolerance and CSV report.
What it is for
"Is this close enough?" comes up whenever a color is reproduced: a logo red on a new printer, a paint match, a product photo against the brand swatch, two design tokens that might be duplicates. Delta E (ΔE) turns that question into a number. A difference around 1 is at the edge of what most people notice side by side, many workflows accept 2–3, and above 5 colors look clearly different.
This tool compares one reference with up to 50 samples. You can type HEX codes, CSS names, rgb(), oklch() or measured lab() values. Each row shows four metrics: CIEDE2000 (the current CIE recommendation), CIE94 with graphic-arts weights, CIE76 (plain Lab distance) and the OKLab distance used by CSS gamut mapping. You choose which metric and tolerance decide pass or fail, and you can download the table as CSV.
It does not measure colors itself; values must come from your files or an instrument.
Worked example
A brand red is #C8102E. Four candidate prints were scanned as #C51230, #B8162F, #D0122C and rgb(200 16 46). With CIEDE2000 and a tolerance of 2 the tool reports: Within tolerance: 2 of 4 samples.
| Sample | ΔE2000 | ΔE94 | ΔE76 | Result |
|---|---|---|---|---|
| #C51230 | 0.9085 | 0.8855 | 2.2717 | Pass |
| #B8162F | 3.3798 | 3.572 | 7.8159 | Fail |
| #D0122C | 2.1401 | 2.18 | 4.3778 | Fail |
| rgb(200 16 46) | 0 | 0 | 0 | Pass |
The third sample shows why the metric matters: by old CIE76 it is 4.38 away, which sounds like a clear miss, while CIEDE2000 puts it at 2.14 — just over the line. CIE76 overstates differences in saturated colors; CIEDE2000 corrects for that. The last sample is the same color written in another notation, so every metric is exactly 0.
For a lab-measured check, the second example uses pair 1 of Sharma's published CIEDE2000 test data: lab(50 2.6772 -79.7751) against lab(50 0 -82.7485) gives 2.0425, the published value.
How to read the result
- The summary and metrics count passes and failures and show the largest ΔE2000.
- The swatch strip puts each sample under the reference. Out-of-gamut values are drawn with their CSS-mapped HEX, but the numbers use the original color.
- OKLab × 100 is the OKLab distance multiplied by 100, so 2 equals the one-JND step CSS uses.
- The CSV has every metric and the pass flag for your QC records.
Tips and common mistakes
- Agree on the metric before the tolerance: "ΔE 2" means something different in CIE76 than in CIEDE2000.
- CIE94 is not symmetric: the first color is the reference. Keep the reference fixed when comparing batches.
- Lab values here use the D50 white, like CSS
lab()and most print workflows. Convert D65 measurements first. - HEX values are already rounded to 8 bits; one step in a dark channel can be worth ΔE2000 0.4.
- For on-screen tokens, ΔE2000 below 2 usually means two tokens can be merged.
FAQ
Which Delta E should I use?
CIEDE2000 for most work; it is the current CIE recommendation and corrects CIE76's errors in saturated and blue colors. Use CIE76 or CIE94 only to match an older spec.
Is the CIEDE2000 implementation verified?
Yes. It reproduces all 34 test pairs published by Sharma, Wu and Dalal (2005) to four decimal places.
Why is the difference between my two HEX colors not zero although they look identical?
Below about 1 ΔE2000 most viewers cannot see a difference, but the numbers still differ.
Can I compare colors with transparency?
The alpha channel is ignored; only the opaque color is compared.
Guide last updated:
For scripts and AI agents
- JSON API:
POST https://luminacolordifference.usefulweb.app/api/v1/calculate(same calculation as this page) - Interface description: OpenAPI 3.1 · AI guide: llms.txt
- MCP server (Streamable HTTP):
https://luminacolordifference.usefulweb.app/mcp· tool namelumina_color_difference
Example request
curl -s -X POST https://luminacolordifference.usefulweb.app/api/v1/calculate \
-H 'content-type: application/json' \
-d '{"reference":"#164E63","samples":"#1A5A6F\n#164E64\nlab(30 -12 -20)","method":"2000","tolerance":2}'