Color Space
Matemáticas de conversión de color para más de 205 espacios de color, incluyendo OKLCH, CIELAB, CAM16, HCT, Display P3, Rec. 2020, registros de cámara, modelos de impresión y apariencia. Cada espacio está verificado con una referencia autoritativa. Un color se introduce como cualquier cadena CSS o como valores de canal. Herramientas: convert, gamut, css, space, spaces, cube, shader, icc y code. Sin clave de API, sin configuración y sin red.
Documentación
color-space

Colección abierta de espacios de color.
- Fórmulas verificadas
- Rangos convencionales
- JS / WASM / GLSL / LUT / ICC
Uso
import space from 'color-space';
space.rgb.oklch(255, 128, 0); // → [0.732, 0.186, 53] — modern CSS
space.slog3.rec2020(0.5, 0.5, 0.5); // camera log → UHD wide gamut
space.rgb.xyz(300, -10, 0); // → [59.7, 30.6, 2.8] — out-of-range in, unclamped out
// batch
space.rgb.oklch([255, 128, 0, 0, 255, 128]); // [0.732, 0.186, 53, 0.875, 0.234, 151]
// meta
space.lab.range; // [[0, 100], [-125, 125], [-125, 125]]
Espacios individuales:
import oklch from 'color-space/oklch.js';
oklch.rgb(0.65, 0.25, 180); // matches CSS oklch(0.65 0.25 180)
Importaciones
color-space– Todos los 205 espacios interconectados · 55 kB gzipcolor-space/<name>.js– Un espacio independientecolor-space/lite– Conjunto de trabajo de 54 espacios · 29 kB gzipcolor-space/wasm– Conjunto ligero como WASM ·.wasmbásico incluidocolor-space/gl– Código fuente de shaders GLSL/WGSLcolor-space/gl/hlsl·color-space/gl/msl– HLSL (DirectX, Unity, Unreal) y Metal, escritos por naga desde WGSL ·await hlsl('rgb', 'oklch')· requiere el peer opcionalnaga-wasm(declara Node ≥ 24.12; CI lo ejecuta en 22, donde npm solo advierte)color-space/lut– LUTs.cubepara Resolve, Premiere, OBS, ffmpeg — verificado frente a ACEScolor-space/icc– Perfiles de matriz + TRC o CLUTcolor-space/data.json– Canales, rangos, procedencia, referencias, grafo, gamasnpx color-space rgb oklch 255 128 0– CLI, sin instalación:convert(predeterminado) ·cube·icc·space·spaces·mcp(servidor MCP para agentes)
Agentes
Herramientas MCP – convert · gamut · css · space · spaces · cube · shader · icc · code – para que los agentes llamen matemáticas verificadas en lugar de adivinar. Un color entra como cualquier cadena CSS ('#ff8000', 'oklch(0.7 0.1 50)', 'rebeccapurple') o como valores de canal; shader escribe la conversión como GLSL, WGSL, HLSL o MSL, code proporciona la llamada JS y su equivalente verificado de ciencia del color.
claude mcp add color-space -- npx -y color-space mcp # Claude Code
code --add-mcp '{"name":"color-space","command":"npx","args":["-y","color-space","mcp"]}' # VS Code
Claude Desktop claude_desktop_config.json, cualquier proyecto .mcp.json:
{ "mcpServers": { "color-space": { "command": "npx", "args": ["-y", "color-space", "mcp"] } } }
Plugin de Claude Code (el servidor más una habilidad): /plugin marketplace add colorjs/color-space, luego /plugin install color-space@color-space. Docker: docker build -t color-space-mcp . y ejecútalo con docker run -i --rm color-space-mcp.
Sobre HTTP (Streamable HTTP, sin estado): npx -y color-space mcp --http 8787 en localhost, o aloja fetch desde color-space/mcp.js en un Worker, Deno o Bun. Habilidad para agentes que cargan habilidades: plugins/claude/skills/color-space.
Espacios
Motivación
Una colección completa de espacios de color: una API mínima, fórmulas verificadas. Mientras que las alternativas se centran en espacios de color digitales, este proyecto adopta una perspectiva más amplia, cubriendo también espacios históricos e interdisciplinarios. Efectos secundarios: artículos corregidos, educación sobre color, casos de prueba para compiladores JS→WASM (porffor, jz).
No es una caja de herramientas de color — el análisis, la interpolación, ΔE, el mapeo de gama, el contraste, las paletas y el alfa quedan fuera. Los catálogos de muestras con licencia como Pantone, NCS, RAL Classic y similares no son abiertos y también quedan fuera.
Créditos
Gracias a los investigadores, teóricos, especificadores, implementadores y las bibliotecas que ayudaron a que esto sucediera.
| Biblioteca | Espacios | Rangos | Log de cámara · CAM · histórico | Backends | Velocidad (M op/s)¹ |
|---|---|---|---|---|---|
| color-space | 205 | Convencionales | ✅ | JS · WASM · GLSL/WGSL · LUT · ICC | 5.52 |
| color-space/lite | 54 | Convencionales | logs · HDR · CAM16 | JS · 29 kB gzip | 3.01 ² |
| color-space/wasm | 54 | Convencionales | logs · HDR · CAM16 | WASM | 1.38–4.78× lotes JS ³ |
| culori | 30 | 0–1 | ❌ | JS | 4.46 |
| colorjs.io | ~40 | 0–1 | algunos | JS | 0.23 |
| texel/color | ~16 | 0–1 | ❌ | JS | 3.49 ² |
| chroma-js | ~12 | mixtos | ❌ | JS | 1.19 ² |
| d3-color | 6 | mixtos | ❌ | JS | 9.35 ² |
¹ media geométrica, millones de llamadas escalares por segundo en las 7 conversiones compartidas de npm run benchmark (rgb ⇄ lab · hsl · oklab, rgb → p3), con entradas rotando a través de una tabla de 256 colores; mediana de 3 ejecuciones el 2026-10-03 tal como lo imprime el benchmark, Node 22.22 / Intel Xeon 2.1 GHz (4 vCPU), culori 4.0.2 · colorjs.io 0.5.2 · @texel/color 1.1.11 · chroma-js 3.2.0 · d3-color 3.1.0. Las cifras absolutas varían con la máquina; las proporciones son la afirmación · ² medido en el subconjunto que implementa — color-space en el mismo subconjunto: lite's 4 (lab, oklab; medido antes de que lite ganara hsl y p3) 3.09 · texel's 3 (oklab, p3) 2.76 · chroma-js's 6 6.45 · d3-color's 4 (lab, hsl) 9.28 · ³ aceleración WASM sobre la API de lotes JS, rgb → cada uno de los 26 objetivos que tenía entonces sobre 1M de píxeles (los 27 añadidos desde entonces aún no se miden), medianas por objetivo de 3 ejecuciones adicionales el mismo día (más bajas en Jzazbz y JzCzHz)