Comparing and morphing palettes
ΔE: how different are two colors, really?
Two HEX values can differ numerically and still look identical — or differ by one digit and flip a brand color. ΔE (CIEDE2000) measures perceived difference: below 1, no human can tell the colors apart; 2–3 is just noticeable side by side; above 10 they read as different colors. Palette diff scores every slot of palette A against palette B so you can see whether a rebrand actually moved, and where.
Morphing: the path between two palettes
Morphing pairs each slot of palette A with palette B and interpolates in OKLCH along the shortest hue path. That matters during migrations: the midpoint frames are the intermediate themes your users would see if you animated a theme switch, and they are also candidate palettes in their own right — a 40% morph often lands on a softer variant worth keeping. Scrub or play the animation, then export the frame that works as tokens.
Because interpolation happens in OKLCH, lightness stays perceptually even during the morph; in RGB the same transition dips through grey. If a slot pair takes a strange route, the two hues are probably more than 180° apart in effect — swap in a closer intermediate from the picker and morph in two steps.
When to diff a palette
Before and after a redesign (did the palette actually change, or just the names?), when merging two products' design systems, when checking a contractor's delivery against the agreed palette, and when auditing whether a dark theme is a real palette or an inverted afterthought. For single colors rather than palettes, the color library lists nearest named neighbours, and pair-level accessibility belongs in the contrast checker.
Migrating tokens without surprising users
Ship large ΔE moves on brand accents first (users expect those to change), keep functional hues (success/warning/error) within a few ΔE of convention, and use morph midpoints as candidate soft launches. Export the chosen frame to CSS or Tailwind, then re-check body text pairs — a migration that looks fine as swatches can still fail AA on real type.
Load palettes quickly from Studio share links, Explore pages, or HEX lists. Index matching is best when both systems share role order; hue matching helps when one side was authored ad hoc. Compare fairly against tools that only show side-by-side swatches without ΔE — perception needs a number.