Du à l’, des à la , à .
Prise en charge de CSS, des shaders, de WASM et des tables de conversion des couleurs (LUT).
Un paquet JavaScript pour convertir les couleurs. Importez un espace de moins de 1.5 ko, ou tous les espaces pour les convertir entre eux. Les mêmes conversions traitent des images entières avec WASM, s’exécutent dans les shaders en GLSL ou WGSL et s’exportent en tables LUT ou en profils ICC. Les agents peuvent les appeler par le serveur MCP.
import space from 'color-space' space.rgb.oklch(255, 128, 0) // → [0.732, 0.186, 53] space.oklch.rgb(0.65, 0.25, 180) // any of 168 × 167 pairs space.oklch.name // 'oklch' space.oklch.range // [[0,1], [0,0.4], [0,360]] // one space only – tree-shaken, 0.4-1.5 kB import oklch from 'color-space/oklch.js' oklch.rgb(0.65, 0.25, 180)
// values in the notations CSS already speaks – straight from the library color: oklch(0.732 0.186 53); // space.rgb.oklch(255, 128, 0) color: color(display-p3 0.936 0.529 0.199); // space.rgb.p3(255, 128, 0) color: color(xyz-d65 0.49 0.367 0.045); // space.rgb.xyz(…) / 100 – exact interchange // spaces CSS lacks ship as ICC profiles or LUTs – see those tabs; // every dossier's css tab writes the current color in copyable forms
// per-space metadata – sourced, ships as data.json
import data from 'color-space/data.json' with { type: 'json' }
const m = data.spaces.oklch
m.channels // [{symbol, min, max, name}, …]
m.refs // defining spec / paper links
m.year, m.by // 2020, 'Björn Ottosson'
// scalar or whole-buffer, zero-copy – a true WASM kernel
import space, { alloc } from 'color-space/wasm'
space.oklch.rgb(0.72, 0.16, 41) // → [246, 125, 79]
const buf = alloc(n) // n×3 Float64Array
space.rgb.oklch(buf) // in place – 27 spaces
// every pair as a GLSL shader chunk
import { glsl } from 'color-space/gl'
import oklch from 'color-space/gl/oklch'
const src = glsl(oklch, 'rgb')
// → self-contained: vec3 oklch_rgb(vec3 c)
// paste into any fragment shader, no uniforms
N’importe quelle paire en LUT .cube : chargez-la dans Resolve, Premiere, Final Cut, OBS ou ffmpeg. Les logs de caméra sont vérifiés contre les transformations ACES officielles des fabricants.
N’importe quel espace en profil .icc v2 : matrice + courbe tonale pour les espaces de travail RGB (Photoshop, gestion des couleurs du système), réseau CLUT pour tout le reste (lcms, ArgyllCMS, ImageMagick).
// an MCP server – convert · gamut · css · space · spaces · cube –
// so an agent calls verified conversions instead of guessing them
npx -y color-space mcp
// Claude Code
claude mcp add color-space -- npx -y color-space mcp
// VS Code
code --add-mcp '{"name":"color-space","command":"npx","args":["-y","color-space","mcp"]}'
// Claude Desktop · Cursor · .mcp.json
{ "mcpServers": { "color-space": { "command": "npx", "args": ["-y", "color-space", "mcp"] } } }
Un système de coordonnées pour la couleur : des axes, des plages et une règle qui relie les nombres à une lumière mesurable. Le même orange s’écrit rgb(255 128 0), oklch(0.732 0.186 53) et XYZ [49, 36.7, 4.5] : la même couleur, écrite de trois façons. Une palette est une poignée de couleurs choisies ; un espace est une manière d’écrire n’importe quelle couleur.
Un modèle de couleur définit les composantes utilisées pour décrire une couleur : trois primaires pour RGB, teinte, saturation et clarté pour HSL, quatre encres pour CMYK. Un espace colorimétrique précise les primaires, le point blanc et la courbe de codage. Chaque ensemble de valeurs correspond alors à une couleur mesurable. Ainsi, rgb(255 0 0) désigne des rouges différents en sRGB, Display P3 et Adobe RGB : un modèle, trois espaces.
Dans l’usage courant, les deux sont appelés espaces, y compris dans color-mix(in hsl, …) en CSS et dans ce catalogue. Un modèle peut prendre un espace existant comme référence : ici, HSL et HSV sont définis à partir de sRGB, comme en CSS.
Tout dépend de la tâche :
Regrouper le catalogue par usage le range de la même façon.
OKLCH. Il garde les trois mêmes réglages – teinte, chroma, clarté –, mais sa clarté est fiable : en HSL, le jaune à L=50 émet environ 13 fois plus de lumière que le bleu à L=50 ; un même L ne veut donc pas dire une même luminosité. En OKLCH, si. CSS prend en charge oklch() en natif.
Parce qu’ils sont calculés en sRGB encodé en gamma, où moyenner les nombres de deux couleurs donne une lumière plus sombre et plus terne que le mélange réel de leurs lumières. Interpoler en OKLab l’évite. La ligne interpoler de chaque fiche trace le même dégradé dans deux espaces côte à côte : vous voyez la différence avant de choisir.
Une couleur qu’un espace peut décrire mais qu’un autre – ou votre écran – ne peut pas afficher. Un vert vif de Display P3 n’existe tout simplement pas en sRGB : convertissez-le, et les nombres sortent de la plage valide. L’atlas le rend visible : la pastille à côté de la couleur courante nomme le plus petit gamut standard qui la contient, et les tronçons hors plage apparaissent en transparence sur un damier.
Un écran émet de la lumière ; le papier réfléchit ce que ses encres n’absorbent pas. L’encre sur papier atteint moins de couleurs vives – les bleus, verts et rouges RGB saturés lui échappent –, d’où une impression plus terne. Le prépresse convertit via un profil ICC établi pour la presse et le papier, comme FOGRA39 pour le couché européen ou GRACoL aux États-Unis. Le CMYK de ce catalogue est la formule simple qu’utilise CSS pour device-cmyk() sans profil : juste pour les nombres, pas une épreuve de l’impression.
Les conversions sont des formules fermées, pas des approximations par table, et les allers-retours reviennent au point de départ au bruit du calcul flottant près. Les rares exceptions sont documentées là où elles surviennent : OSA-UCS n’a pas d’inverse analytique, les systèmes d’atlas comme Munsell interpolent entre les échelons publiés, et la sortie rgb est bornée au gamut sRGB : passez par XYZ ou par RGB linéaire s’il vous faut des valeurs au-delà.
Elles sont aussi vérifiées : chaque espace renvoie à l’article ou à la spécification qu’il implémente, les valeurs sont testées contre colorjs.io partout où les deux se recoupent, et les logs de caméra contre les transformations ACES officielles de l’Academy. formula-verification.md consigne ce qui a été vérifié contre quoi, y compris quelques endroits où les articles publiés comportaient eux-mêmes des erreurs.
Si les nombres diffèrent de ceux d’une autre bibliothèque, comparez les plages : celle-ci garde les plages usuelles de chaque espace – RGB 0–255, clarté Lab 0–100, teinte 0–360 – là où beaucoup ramènent tout à 0–1. Chaque carte affiche ses plages ; dans le code, c’est space.oklch.range.
En natif : rgb(), hsl(), hwb(), lab(), lch(), oklab(), oklch(), plus color() pour Display P3, Adobe RGB, ProPhoto, sRGB linéaire et XYZ (D65 et D50). Le rec2020 de CSS est un gamma 2.4 pur, pas la courbe BT.2020 du Rec. 2020 de ce catalogue : les mêmes nombres y désigneraient une autre couleur. L’onglet css de chaque fiche écrit la couleur courante sous une forme copiable ; les espaces absents de CSS sont fournis à la place en profils ICC ou en LUT.
Ce sont des produits sous licence : leurs couleurs sont définies par des données que leurs propriétaires vendent, non par des formules publiées. Il n’y a donc pas de mathématiques ouvertes à implémenter, et redistribuer leurs tables serait illégal. Des proches parents aux mathématiques publiques figurent ici : Munsell (sa renotation de 1943 est du domaine public) et RAL Design (défini directement en CIELAB). La règle : si les mathématiques ont un jour été publiées, l’espace a sa place dans la collection.
@software{Ivanov_color-space_2026,
author = {Ivanov, Dmitry},
license = {CC0-1.0},
month = oct,
title = {{color-space}},
url = {https://github.com/colorjs/color-space},
version = {3.2.0},
year = {2026}
}Ivanov, D. (2026). color-space (Version 3.2.0) [Computer software]. https://github.com/colorjs/color-space
Diagramme de chromaticité dont les distances approchent les écarts de couleur perçus.
Diagramme de chromaticité uniforme historique, base des calculs de température de couleur proximale ; supplanté par le u'v' CIE 1976.
Obsolète : il ne survit que dans les calculs de température de couleur proximale.
composantes
référé à l’affichageSDRperceptuelD65
1960–1976, David MacAdam / CIE
CIE 1976 UCS (u', v'), 1976 – La CIE a étiré l’axe v d’un facteur 1.5 pour une meilleure uniformité : u′v′
Uniform Chromaticity Scale
// one space, tree-shaken (0.4-1.5 kB) — its own edge: import ucs from 'color-space/ucs.js' ucs.xyz(13.7, 21.6, 34) // → [20.5166, 21.5861, 23.5085] // any-to-any, both ways — the wired hub: import space from 'color-space' space.ucs.rgb(13.7, 21.6, 34) // → [128, 128, 128] space.rgb.ucs(128, 128, 128) // → [13.7, 21.6, 34] // route: ucs → xyz → rgb