Skip to content
Filament Select

How colour matching works

Filament Select does not compare colours the way a computer stores them. It compares them the way an eye sees them.

The problem with RGB distance

The obvious way to find the closest filament is to treat each colour as a point with red, green and blue coordinates, then pick whichever spool is nearest. It is one line of code, and it is wrong in a way that is easy to feel and hard to explain.

sRGB is a storage format, not a model of vision. Equal steps in it are not equal steps in perception. Human vision is far more sensitive to changes in green than in blue, so two dark blues separated by a large RGB distance can be indistinguishable, while two greens separated by a small one look obviously different. A matcher built on RGB distance confidently returns the wrong spool and gives no hint that it has done so.

CIELAB and ΔE2000

Instead, every colour is converted through a fixed pipeline before anything is compared:

HEX
 ↓  parse
sRGB          8-bit channel values
 ↓  remove the sRGB transfer curve
linear RGB
 ↓  3×3 matrix, D65 white point
CIE XYZ
 ↓  cube-root compression
CIELAB        L* lightness, a* green–red, b* blue–yellow
 ↓  CIEDE2000
ΔE            one number: how different these look

CIELAB is built so that geometric distance roughly tracks perceived difference. CIEDE2000 then corrects the places where plain distance still misbehaves — near-neutral colours, the blue region, and very light or very dark pairs — using the lightness, chroma and hue weighting functions defined by the CIE. It is the same metric used for quality control in commercial printing and paint matching.

The implementation follows Sharma, Wu & Dalal (2005) and is checked against all 34 of their published reference pairs in the project’s test suite, so an accidental regression in the maths fails the build rather than quietly degrading results.

What a ΔE number means

  • Below 1.0 — not distinguishable by a trained observer under controlled light.
  • 1 to 2 — distinguishable only in side-by-side comparison. For a printed part, effectively the same colour.
  • 2 to 5 — a close match. Noticeable if you hold the two next to each other, fine in isolation.
  • 5 to 10 — clearly the same family, clearly not the same colour.
  • Above 10 — related, but nobody would call it a match.

Two navies most people cannot tell apart

ΔE2000 1.70 · plain LAB distance 3.56

Excellent match

Two greens that read as clearly different

ΔE2000 8.14 · plain LAB distance 14.75

Close

Two reds within a shade of each other

ΔE2000 3.65 · plain LAB distance 5.94

Very close

What the numbers cannot tell you

A ΔE of 1.2 is a statement about two colour values, not a promise about two spools. Filament colour shifts with pigment batch, layer height, infill showing through thin walls, and whether the surface is matte or silk — a silk finish in particular reads several units lighter under direct light than its flat value suggests.

Treat a close match as a strong shortlist, not a guarantee, and order a sample before committing a large print to it.

Try it with your own colour →