Zain Dana HarperQuanta Color · the color workbench

Color, past the hex code.

Quanta Color is a Python workbench for anyone who needs to know more about a color than its hex code. It works in color spaces — different ways of describing a color with numbers — that are built to match what your eye actually sees, not just the raw numbers in the file. It squeezes bright, high-range light down so a normal screen can show it (that’s tone mapping: fitting a wide range of brightness into a smaller one), it measures how different two colors really look to a person, it adjusts for the color of light a scene was lit by, and it can even write the small profile a display uses to show color faithfully. There’s a window you click through and a command line you type into.

Real color science you can measure and check for yourself — the same instinct as the rest of my work, just pointed at light instead. I didn’t want to trust a color swatch I couldn’t verify, so I built the thing that verifies it.

quanta-color 1.0.1 · MIT · on PyPI · 15+ spaces · 12 tone operators

Hex is a storage format, not a perception.

Two colors can look almost the same in their hex codes yet clearly differ to your eye — or look far apart in the file and turn out identical to look at. The reason is that hex just stores the raw numbers; it doesn’t know anything about seeing. So Quanta Color works in spaces designed to track how vision actually behaves. Here’s what that buys you: CIELAB and the Oklab family are spaced so equal steps in the numbers look equally different to the eye; CIECAM-style models — which account for the fact that the same color can look different depending on what surrounds it — are included too; and JzAzBz and ICtCp are built for very bright, high-range images. When it asks “how different are these two colors,” it uses the measuring sticks color scientists actually trust — not a plain ruler laid across the wrong kind of map.

The real question was never “what numbers are in the file.” It’s “what will a person actually see” — and that turns out to be something you can measure.

Don’t take the color. Measure it.

Each of these is verbatim output from the real CLI — quanta-color 1.0.1, run live.

Exhibit I Quanta Color · one color, every space that matters
$ quanta-color info ff6030
Color: #ff6030

  sRGB:       (1.0000, 0.3765, 0.1882)
  XYZ:        (0.4596, 0.2985, 0.0614)
  Lab (D65):  (61.52, 58.31, 56.98)
  Oklab:      (0.6128, 0.8175, 0.0611)
  Oklch:      (0.6128, 0.8198, 4.3)
  Luminance:  0.2984
  Dominant wavelength: 775 nm
  Contrast vs white: 3.01:1   vs black: 6.97:1

One color in, and you get back every way of describing what the eye does with it — how light it looks, how vivid, what hue, how bright, even which single wavelength of light it leans toward, and how readable it would be as text on a page. All from one command.

Captured live from quanta-color info · it walks the color through several of those spaces in turn, anchored to standard daylight as the reference white (the neutral “white” the math is calibrated against). The readability numbers use the very same math the accessibility work elsewhere on this site relies on.

Exhibit II Quanta Color · “how different” has more than one right answer
$ quanta-color difference ff0000 00ff00 --metric all
Color 1: #ff0000      Color 2: #00ff00

  CIE76         170.1404
  CIE94          74.8681
  CIEDE2000      87.6784
  CMC(2:1)      104.2193
  HyAB          201.1010

Red against green, measured five different ways at once. There’s no single “how different do these look” number everyone agrees on — it depends on which method you trust — so the honest thing is to lay them all on the table.

Five accepted ways of measuring color difference — CIE76, CIE94, CIEDE2000, CMC, and HyAB. Each was developed by color scientists to better match how people actually see. The gap between their answers is exactly the point: report just one number and you quietly hide the fact that the experts don’t fully agree.

Exhibit III Quanta Color · harmony computed in a perceptual space
$ quanta-color harmony ff6030 --scheme triadic
Base: #ff6030   Scheme: triadic

  1. #ff6030  (1.000, 0.376, 0.188)
  2. #588a00  (0.349, 0.543, 0.000)
  3. #fe51ff  (0.999, 0.320, 1.000)

Three colors spaced evenly around the color wheel — but spaced in a way that tracks how the eye sees, so they look evenly apart to you, not just evenly apart on paper.

There’s more: convert a color between any two of the 15+ spaces, spectrum to build a color from a light’s warmth or coolness (its color temperature), icc to write that small profile a display uses to show color faithfully, and a clickable window — just run quanta-color with nothing after it.

15+ spaces, 12 tone-mappers, the metrics by name.

Spaces: sRGB, Linear RGB, XYZ, xyY, CIELAB, LCH, Oklab, Oklch, JzAzBz, JzCzhz, ICtCp, HSV, Display P3, BT.2020, Adobe RGB, ACEScg. HDR tone mapping with twelve operators — ACES (Narkowicz + Hill), AgX (neutral / punchy / golden), Reinhard, Hable/Uncharted 2, Lottes, Uchimura/Gran Turismo, PBR Neutral (Khronos glTF), BT.2390 EETF, BT.2446 Method A, and a custom knee. Difference by CIE76, CIE94, CIEDE2000, CMC, HyAB; chromatic adaptation, color-blindness simulation, gamut mapping, color naming, 3D-LUT I/O.

Color is where this whole habit started, for me: trust what you can measure, not the swatch — and be ready to show the number when someone asks.

Shipped: quanta-color 1.0.1, free to use under the MIT license, installable from PyPI, and it runs on Python 3.10 or newer. Its tests cover the color spaces, light adjustment, difference, the range of colors a device can show (its gamut), harmony, naming colors, color-blindness simulation, and reading and writing color lookup tables. And here’s the limit I want to name before you bump into it: this is a workbench and a toolkit for working with color, not a calibrated instrument for measuring a physical screen. For the display side of things, pair it with calibrate-pro.

Install it. Then ask it what you’re really seeing.

Python 3.10 or newer.

$ pip install quanta-color
$ quanta-color info ff6030            # every space for one color
$ quanta-color convert ff6030 --to oklab
$ quanta-color difference ff0000 00ff00 --metric all
$ quanta-color                         # or launch the GUI
GitHubHarperZ9/quanta-color  ·  PyPIquanta-color  ·  ← the map  ·  the index