Quanta Color
Quanta Color is a Python color-science workbench for people who need more than hex conversion. It covers perceptual spaces, HDR tone mapping, color appearance models, Delta E metrics, chromatic adaptation, spectral utilities, ICC profile generation, and an optional GUI.
Quick Start
pip install ".[all]"
quanta-color
Launch the GUI, or use the CLI:
quanta-color info ff6030
quanta-color convert ff6030 --to oklab
quanta-color difference ff0000 00ff00 --metric all
quanta-color harmony ff6030 --scheme triadic
quanta-color spectrum --temp 6500
quanta-color icc --gamma 2.2 --output display.icc
Features
Color Spaces (15+)
sRGB, Linear RGB, XYZ, xyY, CIELAB, LCH, Oklab, Oklch, JzAzBz, JzCzhz, ICtCp, HSV, Display P3, BT.2020, Adobe RGB, ACEScg
Tone Mapping (12 operators)
ACES (Narkowicz + Hill), AgX (neutral/punchy/golden), Reinhard (simple + extended), Hable/Uncharted 2, Lottes, Uchimura/Gran Turismo, PBR Neutral (Khronos glTF), BT.2390 EETF, BT.2446 Method A, custom knee function
HDR Processing
PQ (ST.2084) encode/decode, HLG (BT.2100) encode/decode, BT.2390 EETF tone mapping, BT.2446 HDR-to-SDR
Color Appearance Models
CIECAM02 forward/inverse (machine-epsilon roundtrip), CAM16, CAM16-UCS uniform color space, hue quadrature
Color Difference (7 metrics)
CIE76, CIE94 (graphics/textiles), CIEDE2000, CMC(l:c), JzAzBz Delta E, Oklab Delta E, HyAB
Chromatic Adaptation (9 methods)
Bradford, CAT16, CAT02, Sharp, Von Kries, CMCCAT2000, Fairchild, Bianco-Schettini, XYZ Scaling
Additional
- Spectral rendering - Planck blackbody, CIE 1931 CMFs, daylight illuminants, SPD-to-XYZ integration
- ICC profiles - Generate ICC v4 display profiles from primaries + gamma
- CVD simulation - Protanopia, deuteranopia, tritanopia, achromatopsia (Brettel et al.)
- Gamut mapping - Clip, soft compression, Oklab chroma reduction
- Color harmony - Complementary, triadic, tetradic, analogous, split complementary, monochromatic
GUI
Interactive workbench with 5 tools:
- Color Inspector - Pick a color, see it in every space with luminance, wavelength, contrast
- Palette Generator - Generate harmonious palettes, copy as CSS
- Color Difference - Compare two colors across all metrics with visual grades
- Tone Mapping - Preview all 12 operators with curve visualization
- CVD Simulator - See how colors appear to color-blind viewers
quanta-color gui
CLI Commands
| Command | Description |
|---|---|
quanta-color |
Launch GUI (default) |
quanta-color info <color> |
Show color in all spaces + metadata |
quanta-color convert <color> --to <space> |
Convert between color spaces |
quanta-color difference <c1> <c2> |
Compute color difference |
quanta-color harmony <color> --scheme <type> |
Generate palette |
quanta-color adapt <xyz> --from D65 --to D50 |
Chromatic adaptation |
quanta-color spectrum --temp <K> |
Blackbody spectral data |
quanta-color icc --gamma 2.2 |
Create ICC profile |
quanta-color gui |
Launch GUI workbench |
Installation
pip install ".[all]" # Everything (numpy + scipy + PyQt6)
pip install . # Core only (numpy)
Python API
import numpy as np
from quanta_color.spaces import srgb_to_oklab, oklab_to_srgb
from quanta_color.tonemap import aces_filmic, pq_eotf
from quanta_color.difference import delta_e_2000
from quanta_color.adaptation import adapt, ILLUMINANTS
from quanta_color.appearance import ciecam02_forward, ViewingConditions
# Color space conversion
oklab = srgb_to_oklab(np.array([0.8, 0.2, 0.1]))
# Tone mapping
hdr = np.array([0.0, 0.18, 1.0, 4.0, 10.0])
sdr = aces_filmic(hdr)
# Color difference
lab1 = np.array([50.0, 25.0, -10.0])
lab2 = np.array([60.0, 20.0, -5.0])
de = delta_e_2000(lab1, lab2)
# Chromatic adaptation
d65 = ILLUMINANTS["D65"]
d50 = ILLUMINANTS["D50"]
adapted = adapt(xyz, d65, d50, method="cat16")
# CIECAM02
vc = ViewingConditions(white_point=d65)
appearance = ciecam02_forward(xyz, vc)
print(f"J={appearance.J:.1f}, C={appearance.C:.1f}, h={appearance.h:.0f}")
Architecture
quanta_color/
spaces.py 15+ color space conversions
tonemap.py 12 tone mapping operators + PQ/HLG
appearance.py CIECAM02, CAM16, CAM16-UCS
difference.py 7 color difference metrics
adaptation.py 9 chromatic adaptation methods
spectral.py Planck, CIE CMFs, daylight
icc.py ICC v4 profile generation
blindness.py CVD simulation (4 types)
gamut.py Gamut mapping
harmony.py 6 color harmony schemes
cli.py Command-line interface (8 commands)
gui.py PyQt6 interactive workbench
License
Copyright (c) 2022-2026 Zain Dana Harper. All rights reserved. See LICENSE.
Release files for quanta-color 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| quanta_color-1.0.1.tar.gz | 86.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| quanta_color-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 165.5 kB
Release files / quanta_color-1.0.1.tar.gz
| Download URL | quanta_color-1.0.1.tar.gz |
|---|---|
| Size | 86.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
32133e358d5562907c134f6178501f8f9c6336e01ba90c19a2b5702ed0627c3d
|
|
BLAKE2b-256 checksum How to use checksums |
1fb53223c814a89de205573bc0c27ea200bade9f61a60a17145e37848f3aa9e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 14, 2026.
Transparency logRelease files / quanta_color-1.0.1-py3-none-any.whl
| Download URL | quanta_color-1.0.1-py3-none-any.whl |
|---|---|
| Size | 79.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
39543792674ee0f8839e8d0c8f01c521644bce15d7d7742acda8ed19c77861df
|
|
BLAKE2b-256 checksum How to use checksums |
d188eeac344b7995cf69c12e3748ae3cbefef0b47acc8e10c3e3e096d6317e3e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 14, 2026.
Transparency log