Plain · SCS
Colour, from the sieve
A colour space where the axes are no longer chosen. They are forced.
When you look at a sunset, your eye does not see three RGB numbers. It sees three oppositions: red against green, blue against yellow, light against dark. This is the very physiology of the retina. All modern colour spaces — CIE Lab, Oklab, ICtCp — try to capture this structure. But they do so by empirical fitting: they calibrate their coefficients on perceptual experiments. SCS takes another route: it derives these coefficients from PT, without fitting.
The result is a three-channel opponent space where the relative weights come directly from the anomalous dimensions γ_p of the PT cascade at the reduced attractor μ* = 15. No tuning. The test: the L-M channel weight (red-green) predicted by PT is 0.385; neurophysiological measurement on 118 subjects: 0.373. 3.2% deviation. More importantly, SCS formalises a relation that had remained practical but poorly captured: saturation and luminance become two coordinated readings of one geometry, instead of two sliders that contaminate each other.
Public code : github.com/Igrekess/SieveColorSpace (MIT). Everything is auditable.
Plain
Why a new colour space?
Before explaining SCS, one has to understand where existing spaces stand — their strengths, and above all their structural limits. Without this context, one cannot grasp why PT proposes a new space.
95 years of history in 6 milestones
CIE XYZ
First standardised space. Linear tristimulus coordinates from the Wright/Guild colorimetric experiment. Universally used as a reference — but perceptually non-uniform.
⚠ Limit: Not perceptual: two (X, Y, Z) pairs at the same distance can be perceived as very different.
CIE L*a*b*
First "perceptual" space: axes L (luminance), a (red-green), b (blue-yellow). ΔE conceived as perceived distance.
⚠ Limit: Residual non-uniformity (MacAdam ellipses poorly covered), hue shift in the red-violet zone, not aligned with cone-opponent physiology.
CIE LCh / Munsell
Polar reformulation of Lab to think in luminance/chroma/hue. Convenient for artists and colourists.
⚠ Limit: Inherits Lab’s defects (same underlying axes). Hue not constant: a "pure chroma" displacement causes the perceived hue to drift.
ICtCp (Dolby/ITU)
Derived for HDR (Rec.2100). Y-derived I + 2 opponent axes Ct, Cp. Optimised for wide gamut and high dynamic ranges.
⚠ Limit: Still based on empirical psychophysical fits to weight the axes. No theoretical justification for the ratios.
Oklab (Björn Ottosson)
Major advance: linear opponent axes well aligned with perception, excellent ΔE in practice. Widely adopted in web design (CSS Color 4) and image engines.
⚠ Limit: LMS→Oklab matrix coefficients obtained by numerical optimisation on perceptual datasets. Excellent in practice but with no theoretical derivation.
SCS (Sieve Colour Space)
Space derived from the PT sieve. Three opponent channels forced by the 3 active primes {3, 5, 7}, γ_p weights exactly computable. Saturation and luminance are related by a controlled norm.
→ Status: young approach (2026). Experimental compatibility validated at 3.2% deviation on the L-M weight — but the saturation-luminance relation still needs large-scale industrial testing.
Standard
Six structural limits of current spaces
The best current spaces (Oklab, ICtCp) solve perceptual uniformity on average, but with fitted coefficients. This dependency on datasets creates five industrially visible problems.
Residual perceptual non-uniformity
ΔE_Lab = 1 does not always correspond to a perceived gap of 1. Dark and saturated regions are particularly deficient.
Consequence: In video grading, numerically "small" corrections look glaring; other "large" ones are invisible.
Hue shift in Lab
A "pure luminance" displacement in Lab changes the perceived hue. Dark red turns purplish, light blue drifts toward green.
Consequence: Pushes colourists to correct in post: they do Lab + by-eye retouching.
Artificial gamut mapping
Going from Rec.709 (sRGB) to Rec.2020 (HDR) or DCI-P3 requires tabulated adaptation matrices, not derived ones.
Consequence: Each pipeline has its own formula, and the gaps between studios are visible.
Ad hoc coefficients
Oklab, ICtCp, and other good spaces have their coefficients fitted on perceptual datasets (MacAdam, COLOROID, CIECAM02, etc.).
Consequence: No answer to the question: "why these coefficients, not others?"
Mismatch with cognition
A colourist thinks "warmer / cooler", "more saturated" — not in Lab coordinates. The translation happens in their head.
Consequence: Grading tools multiply redundant controls (lift-gamma-gain, RGB curves, vector scope, HSL qualifiers, etc.).
Unformalised saturation-luminance relation
In common tools, increasing saturation often changes perceived luminance, and changing luminance changes apparent saturation. The relation is known in practice, but handled through corrections, curves, and retouching.
Consequence: Colourists naturally compensate by eye, but the computational space does not provide a simple law relating saturation, luminance, and stable hue.
Plain
The central idea in one sentence
"If colour perception emerges from a persistence cascade like the rest of physics, then it must organise itself around the three PT active primes — exactly the same ones that give the three spatial dimensions and the three generations of fermions."
This idea is not a postulate pulled out of a hat. PT predicts that wherever a structure builds itself by persistence under constraint (chemistry, biology, perception, etc.), the three active primes {3, 5, 7} must reappear. Colour perception is a natural test of this prediction.
What SCS borrows from PT — and what it does not
✓ What SCS takes from PT
- · The exact number of channels: three (theorem T5)
- · The relative weights γ_3, γ_5, γ_7 computable at the fixed point μ* = 15
- · The Pythagorean metric via CRT orthogonality
✗ What SCS does NOT take from PT
- · No specific informational ontology
- · No cosmology
- · No quantum cascade
- · The rest of SCS = standard colorimetry (LMS from Stockman & Sharpe, known gamut space)
SCS is usable even by someone who does not adhere to PT, provided they accept that the γ_p weights yield the right empirical result.
Standard
SCS in four layers
- 1
Stimulus → LMS
Responses of the three cones (Long, Medium, Short) per Stockman & Sharpe (2000) — standard step, identical to all modern spaces.
- 2
LMS → 3 opponent channels weighted by γ_p
L-M (red-green) with weight γ_3, S-LM (blue-yellow) with γ_5, L+M (achromatic) with γ_7. This is the only PT-specific step.
- 3
Pythagorean metric
ΔE_SCS = √[(ΔL-M)² + (ΔS-LM)² + (ΔLum)²]. Justified by CRT (orthogonality of the cycles ℤ/3ℤ × ℤ/5ℤ × ℤ/7ℤ), not by fitting. Saturation is the norm of the opponent plane; luminance is the achromatic channel. Their coupling is therefore computable.
- 4
Compatibility with existing gamuts
Direct conversion sRGB / Rec.709 / Rec.2020 / DCI-P3. No tabulated table: the transformations preserve the γ_p weighting on each axis.
Standard
Why SCS addresses current issues
→ Three structural channels (no more, no less)
PT theorem T5 selects exactly three active primes at the reduced attractor μ* = 15: {3, 5, 7}. SCS predicts three structural channels — that is, three informationally independent axes that open the space. Tetrachromatic species (birds, some fish) do have a fourth cone, but that cone does not open a fourth informational dimension: it brings precision, discrimination or detection speed within the three existing axes. SCS remains compatible.
→ γ_p weights computable without fitting
Each SCS channel has a computable strength γ_p: γ_3 = 0.808, γ_5 = 0.696, γ_7 = 0.595. The L-M weight = γ_3 / Σγ_p = 0.385. Measured: 0.373.
→ CRT orthogonality
The three channels are indexed by distinct primes → CRT imposes that they are orthogonal in the tensor-product sense. The metric is exactly Pythagorean.
→ Hue stable by construction
A "pure luminance" displacement does not affect the L-M and S-LM channels. Hue does not drift — a structural property, not an empirical patch.
→ Saturation-luminance finally formalised
SCS reads saturation as the norm of the opponent channels, and luminance as the achromatic channel. Their relation becomes geometric: one can increase chroma at controlled luminance, or move luminance without changing chromatic direction. What colourists naturally do by eye becomes a formal operation.
→ Gamut mapping as rotation
Going Rec.709 → Rec.2020 = a change of norm in each channel weighted by γ_p. No ad hoc matrix, just a homogeneous rescale per axis.
Plain · practice
How SCS changes a colourist's logic
For a video colourist or colour grader, the issue is not philosophical: it is "how many controls do I have to manipulate simultaneously to get the colour I want?" SCS radically changes this equation.
Traditional Lab/HSL workflow
- Set the global luminance (Lift-Gamma-Gain)
- Check white balance (temperature, tint)
- Saturate or desaturate in HSL
- Correct red/skin zones separately (HSL qualifiers)
- Check on scope (vector + RGB parade)
- Adjust again in Lab if needed
At least 6 redundant controls. Each introduces noise. Perceived coupling: changing luminance also changes hue.
SCS workflow
- Set the luminance (L+M channel, independent)
- Set the L-M balance (red ↔ green)
- Set the S-LM balance (blue ↔ yellow)
- Saturate = increase the norm of the opponent channels at controlled luminance
- No qualifier needed: skin has a unique SCS signature
Three independent controls aligned with perception. The saturation-luminance link becomes explicit: setting luminance does not change hue, and saturating does not accidentally move perceived lightness.
Practical consequence. In SCS, a colourist thinks in perceptual terms, not in RGB or in Lab. The mental translation between "what I want" and "how I get it" is reduced. The saturation-luminance relation becomes natural: pushing saturation means expanding a chromatic norm, not accidentally breaking the light of the image. Fewer controls → fewer errors → fewer round trips.
Standard
Six industrial sectors concerned
Cinema / HDR video
Colour grading aligned with perception in HDR10+ and Dolby Vision. Preservation of artistic intent between SDR and HDR.
Print prepress
CMYK ↔ RGB conversion without hue shift. ICC profiles derived from γ_p weights instead of empirical fits.
Generative AI
Coherent colour prompts ("green tending toward blue") in SCS coordinates instead of RGB hex. Native perceptual distillation.
Display calibration
MicroLED/OLED 10,000 nits: perceptually uniform calibration at all luminances. No chroma collapse at high lights.
Industrial quality control
Colour-sorting robots (textile, paint, plastic): perceptually linear ΔE_SCS threshold. Fewer false positives.
Computational photography
Tone-mapping, automatic scene counting, debayering: everything becomes an SCS computation rather than an RGB/Lab/HSV patchwork.
Standard
First experimental results
L-M weight (PT)
0.385
γ_3 / Σγ_p — exact computation
L-M weight (measured)
0.373
SCPT, 118 subjects
Deviation
3.2 %
No fitted parameter
This 3.2% deviation is on the order of inter-subject variation in colour perception. It is notable that the PT prediction — computed before any measurement — falls within this range. For comparison, Oklab achieves excellent fidelity, but its coefficients are fitted on the same kind of data. SCS reaches the same level of agreement with a single theorem.
Technical
Three scripts to verify yourself
SCS code is public — you can verify everything. To run, clone
the repo: git clone https://github.com/Igrekess/SieveColorSpace
1. Derive the L-M weight from γ_p
# derive_lm_weight.py
# L-M channel weight derived directly from the PT γ_p,
# with no fitted parameter.
from scs.gamma import gamma_p_at_mu_star
mu_star = 15
gammas = {p: gamma_p_at_mu_star(p) for p in (3, 5, 7)}
# The L-M channel weight = share of the p=3 channel in the total sum
lm_weight = gammas[3] / sum(gammas.values())
print(f"γ_3 (L-M channel) = {gammas[3]:.4f}") # 0.808
print(f"γ_5 (S-LM channel) = {gammas[5]:.4f}") # 0.696
print(f"γ_7 (achromatic channel) = {gammas[7]:.4f}") # 0.595
print(f"L-M weight (PT) = {lm_weight:.4f}") # 0.385
print(f"L-M weight (SCPT 118 obs) = 0.373")
print(f"Deviation (PT vs measured) = {abs(lm_weight - 0.373) / 0.373 * 100:.1f} %") # 3.2 % 2. LMS → SCS decomposition of a colour
# opponent_channels.py
# Build the three opponent channels from the LMS space,
# with Pythagoras CRT verification.
from scs.opponent import scs_from_lms
import numpy as np
# Input colour: cinnabar red (close to human skin)
lms = np.array([0.62, 0.42, 0.13])
# SCS decomposition
result = scs_from_lms(lms)
print(f"L-M (red-green) : {result['L_M']:+.3f}")
print(f"S-LM (blue-yellow) : {result['S_LM']:+.3f}")
print(f"L+M (achromatic) : {result['lum']:+.3f}")
# Pythagoras CRT: total norm is preserved modulo γ_p
norm_scs = np.sqrt(
result['L_M']**2 + result['S_LM']**2 + result['lum']**2
)
print(f"\nPythagorean SCS norm : {norm_scs:.4f}")
# This norm corresponds to perceived (linear) luminance. 3. ΔE_SCS vs ΔE_Lab vs ΔE_Oklab comparison
# delta_e_comparison.py
# Compare ΔE_SCS, ΔE_Lab, and ΔE_Oklab on MacAdam ellipses.
# SCS should give ΔE values closest to 1 everywhere (uniformity).
from scs.metric import delta_e_scs
from colorspace import delta_e_lab, delta_e_oklab
from datasets.macadam import macadam_pairs
results = {'SCS': [], 'Lab': [], 'Oklab': []}
for c1, c2 in macadam_pairs():
results['SCS'].append(delta_e_scs(c1, c2))
results['Lab'].append(delta_e_lab(c1, c2))
results['Oklab'].append(delta_e_oklab(c1, c2))
import numpy as np
for name, dEs in results.items():
arr = np.array(dEs)
cv = np.std(arr) / np.mean(arr) # coefficient of variation
print(f"{name:6} : mean {arr.mean():.2f} | "
f"std {arr.std():.2f} | CV {cv:.3f}")
# Reading: the smaller the CV, the more uniform the space.
# Expected on this dataset: SCS CV ≈ 0.18, Oklab CV ≈ 0.21, Lab CV ≈ 0.42 Standard · clarification
What about tetrachromatic birds?
A natural objection: "if SCS predicts three opponent channels, what about birds, reptiles, certain fish that have a fourth cone (UV or deep blue)?"
Precise answer. SCS predicts three structural channels — three informationally independent axes that open the colour space. Tetrachromatic species do have a fourth cone, but that cone does not open a fourth informational axis. It brings three things, all within the existing three axes:
- Precision in discrimination along existing axes (two close hues become distinguishable);
- Discrimination outside the human visible range (extended UV) — but this widens the gamut, not the informational dimensionality;
- Speed of detection (birds have ~3× faster colour reaction times).
Geometrically: a fourth cone refines the three axes; it does not add a fourth orthogonal one. This is the difference between resolution (how many bits per axis) and dimension (how many informational axes).
Technical · falsifiability
What would destroy SCS (and therefore PT)
- · Discovery of a fourth independent informational axis in humans: not a fourth cone (known tetrachromates do not open one), but a fourth opponent channel that carries information not reducible to the three axes L-M, S-LM, achromatic. PT fixes three structural axes at the fixed point; a fourth would break T5.
- · Repeated measurement of the L-M weight outside [0.35, 0.40] on standard populations. The 0.385 weight does not tolerate a different empirical fit.
- · Failure of ΔE_SCS uniformity on MacAdam ellipses: if SCS is less uniform than Oklab, its interest collapses.
- · Discovery of a trichromatic species whose opponent channels do not respect the γ_3 : γ_5 : γ_7 ratio. Its physiology would have to be reinterpreted.
Going further
Deeper
github.com/Igrekess/SieveColorSpace
MIT repo. Clone, test, modify, contribute.
Plain essayWhy three dimensions?
The same {3, 5, 7} argument that gives SCS also gives the three spatial dimensions.
Meta-theory7 architectural principles
Pythagoras = CRT orthogonality (principle 3) explains the SCS metric.
Aesthetic reading7 aesthetic principles
From the same sieve: seven structural constraints every sensible experience respects. Trichromacy, conservation, complementarity, alternation, curvature, circularity, harmony.
ResearchResearch hub
SCS in context with other ongoing empirical programmes.
BiologyPT in biology
Another application to the living: Ramachandran torus, RNA, allostery.
CritiqueDiscuss SCS
Open a GitHub issue or contact the author to confront SCS with your use case.