Skip to main content

Build Color, a Python color-science workbench

Build Color

Python color-science workbench for perceptual spaces, HDR tone mapping, color appearance models, Delta E metrics, chromatic adaptation, spectral utilities, and ICC profile generation.

Project Telos | gather | crucible | index | forum | telos | emet | buildlang

CI version: 1.0.2 python: 3.10+ core dep: numpy license: fair-source part of: Project Telos

Build 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]"
build-color

Launch the GUI, or use the CLI:

build-color info ff6030
build-color convert ff6030 --to oklab
build-color difference ff0000 00ff00 --metric all
build-color harmony ff6030 --scheme triadic
build-color spectrum --temp 6500
build-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
build-color gui

CLI Commands

Command Description
build-color Launch GUI (default)
build-color info <color> Show color in all spaces + metadata
build-color convert <color> --to <space> Convert between color spaces
build-color difference <c1> <c2> Compute color difference
build-color harmony <color> --scheme <type> Generate palette
build-color adapt <xyz> --from D65 --to D50 Chromatic adaptation
build-color spectrum --temp <K> Blackbody spectral data
build-color icc --gamma 2.2 Create ICC profile
build-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 build_color.spaces import srgb_to_oklab, oklab_to_srgb
from build_color.tonemap import aces_filmic, pq_eotf
from build_color.difference import delta_e_2000
from build_color.adaptation import adapt, ILLUMINANTS
from build_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 (adapt XYZ from D65 to D50)
d65 = ILLUMINANTS["D65"]
d50 = ILLUMINANTS["D50"]
xyz = np.array([0.4596, 0.2985, 0.0614])
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

build_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/            PyQt6 interactive workbench

See USAGE.md for an install/build line, the full command and API reference, and worked examples with expected output.

License

Build Color is released under the FSL-1.1-MIT. The source is source-available: you may read, run, modify, and build on it for any purpose other than a competing commercial use, which is reserved to the Licensor to fund continued development. Copyright (c) 2022-2026 Zain Dana Harper. All rights reserved. See LICENSE.

Metadata

Release files for build-color 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for build-color 1.0.2
File Size Uploaded
build_color-1.0.2.tar.gz 90.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for build-color 1.0.2
File Interpreter ABI Platform
build_color-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 172.0 kB

Release files / build_color-1.0.2.tar.gz

Download URL build_color-1.0.2.tar.gz
Size 90.1 kB
Tags Source
SHA-256 checksum
How to use checksums
6b23c00167390881b93886af65ac7d74d2660a214ede173d6faab14db3806062
BLAKE2b-256 checksum
How to use checksums
e0bc5aba6ff611fcee6253cd9e05786a0378f6e3762f883f1ac9bf0185934786
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / build_color-1.0.2-py3-none-any.whl

Download URL build_color-1.0.2-py3-none-any.whl
Size 82.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7393f8f08e9ddc080f6116190e125bfe5218b5a02fad23c6e9a1d463aadb3b4b
BLAKE2b-256 checksum
How to use checksums
c81b6844fa95f55c82e5c8e860b70dfb98aad726bebf8354509d11b1da439fad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page