Independent R&D · MIT open source · live public beta

Color Lab

Independent R&D by Sebastián Ferreyra Pons, featured by Infomerx: MIT open-source live public beta — WebGL2 gamut solids, observer-aware instruments, per-list palette pipelines, and client-side document sharing.

Color Lab renders color spaces as interactive 3D gamut solids, with responsive controls for desktop and mobile.

Desktop

Color Lab gamut explorer desktop and mobile interfaces — desktop capture

Mobile

Color Lab gamut explorer desktop and mobile interfaces — mobile capture

Public tool

Try Color Lab

Color Lab is live at v1.0.0-beta.2 and usable in the browser. It remains an independent project by Sebastián Ferreyra Pons, featured here as an example of advanced browser-native visualization engineering.

Open Color Lab

Summary

Color Lab is a browser-native color science instrument for exploring RGB gamuts as interactive 3D solids, slicing them with arbitrary planes, inspecting the stimulus-to-display transform chain, and designing perceptual palette ramps. It is a live public beta on a Beta → RC → 1.0.0 release track.

This is independent R&D by Sebastián Ferreyra Pons, featured by Infomerx — not a client engagement, commercial SaaS, or Infomerx product. The project is MIT open source on GitHub; the value here is the working system: observer-aware colorimetry, WebGL rendering, per-list ramp pipelines, shareable documents, and teaching UX in one public browser tool.

Technical notes

SvelteKit 2, Svelte 5 runes, TypeScript, WebGL2 / GLSL, canvas instrument panels, Vitest, Node adapter, and PM2 deployment. Document schema v13 with per-list pipelines; Save / Share / Import via validated snapshots in browser localStorage.

Challenge

Most browser color tools flatten color into sliders, swatches, or 2D pickers. That hides the shape of the gamut, the active transfer curve, the chosen interpolation space, the active observer model, and the point where a palette leaves displayable range. Color Lab makes those relationships visible and interactive.

Technical notes

The hard problem is consistency under interaction: renderer, picker, inspector, ramp preview, export values, saved documents, and accessibility simulation all need to agree while the user changes gamut, space, slice, observer, source list, or per-list pipeline setting.

Slice and overlay controls expose gamut geometry rather than flattening color into a conventional picker.
Color Lab sliced gamut solid with chromaticity overlay
Space morphing helps compare how the same gamut changes shape across color models.
Color Lab color space morphing view

Approach

The app treats color spaces as explorable geometry. A TypeScript color core defines primaries, white points, transfer curves, RGB↔XYZ matrices, Bradford chromatic adaptation, LMS cone fits, CIELAB, Oklab, gamut mapping, and color-vision simulation. Derived matrices feed both the WebGL renderer and CPU-side picking, so hover readouts match what is drawn.

Technical notes

The renderer draws the gamut; analytic picking reconstructs the same color under the cursor without framebuffer readback. A pipeline rail and per-list ramp stages make multi-ramp documents inspectable; Save / Share / Import round-trip full snapshots through parseSnapshot.

Architecture

  • Color math — pure TypeScript functions for matrices, transfer curves, gamuts, Lab/Oklab, LMS, Bradford CAT, gamut mapping, and CVD simulation; observer and chromaticity registries.
  • Engine state — Svelte rune state, camera math, slice planes, picking, per-list ListPipeline settings (schema v13), theme ramp generation, and named undo/redo snapshots.
  • Renderer — WebGL2 programs for gamut solids, shells, slice overlays, spectral/chromaticity aids, dynamic observer matrices, markers, floor grid, and ramp curves.
  • Documents — named snapshots in localStorage; Save / Share / Import via schema detection, migration, coercion, and tests.
  • Learning surface — pipeline rail, tutorial lanes, help popovers, examples, light/dark theme, mobile layout, keyboard reference, and readability controls.
Architecture overview: Svelte state, TypeScript color math, WebGL rendering, analytic picking, panels, and local documents.
Color Lab architecture diagram

Key technical highlights

  • 3D gamut exploration across sRGB, P3, Rec.2020, NTSC, EBU, SMPTE-C, and CIE RGB.
  • Observer-aware colorimetry — 32 observer datasets; dynamic LMS matrices; opponent-plane and MacLeod-Boynton views; Bradford CAT for non-D65 gamuts.
  • Arbitrary slicing and cylindrical cutaways for inspecting cross-sections of color spaces.
  • Per-list ramp pipeline — each source list owns interpolate / place / expand / constraints; shared terminal gamut map; OOG badges and diff preview; CSS/DTCG export.
  • Document sharing — client-side Save, Share (link · JSON · hash), and Import without a backend.
  • Accessibility as product surface — keyboard affordances, light/dark theme, neutral viewport backdrop, readability preferences, and CVD simulation.
The palette workflow is explicit: sources, interpolation, placement, expansion, gamut mapping, and export preview.
Color Lab ramp pipeline controls
Multiple source lists and a color-space-aware picker make palette construction editable instead of one-shot generation.
Color Lab multi-space picker and multiple source lists
Out-of-gamut states are surfaced in the UI so clipping and mapping decisions stay visible.
Color Lab out-of-gamut mapping preview
Inspector panels connect a hovered stimulus to transfer curves, cone fundamentals, chromaticity, and spectrum context.
Color Lab inspector panels for hovered color transforms
Tutorial lanes teach the instrument in context, next to the controls they explain.
Color Lab tutorial interface
Accessibility controls are part of the product surface: readability preferences, keyboard support, and color-vision simulation.
Color Lab accessibility and readability controls

Development timeline

Color Lab started from older Svelte/Rollup shader experiments and a 2020 instanced-rendering prototype, then was rebuilt in June 2026 as a SvelteKit application. June 9–12 brought core WebGL architecture, deployment, mobile interaction, pipeline-driven palette controls, multi-list editing, tutorials, and undo/redo. June 13–16 added observer registries, per-list pipelines (schema v13), document sharing, pipeline rail navigation, Bradford CAT, light theme, open-source release discipline, and public beta tags 1.0.0-beta.1 and 1.0.0-beta.2.

Technical notes

The local git history reviewed for this case study contains ~284 commits across all branches, with the concentrated SvelteKit rebuild spanning June 9–16, 2026.

Tradeoffs

  • WebGL2 first — broad browser availability now, with renderer isolation that leaves a WebGPU path open later.
  • Oklab as practical default — CIELAB remains available for comparison, but modern perceptual ramp work centers on Oklab/OKLCH.
  • Pipeline over magic — users see each palette stage instead of receiving a black-box generated answer; per-list pipelines trade simplicity for debuggability.
  • Active-colorspace gamut map — sRGB analytic path today; generic target-gamut solver deferred.
  • Client-side share links — full snapshots in URLs/JSON instead of a collaboration backend; private by default.
  • Beta document schema — rich snapshots enable deep sharing; migrations may continue until 1.0.0.

Outcomes

Color Lab is a live public beta that demonstrates real-time browser graphics, observer-aware colorimetry, per-list palette pipelines, shareable documents, release-gate discipline, and teaching-oriented UX. Its strongest signal is not that it is a color picker; it is that a graphics-heavy, math-heavy browser system can remain explainable, inspectable, and usable.

Direction

Color Lab is on an explicit Beta → RC → 1.0.0 release track. Phase A pre-beta gates completed at 1.0.0-beta.1; ongoing beta polish continues toward a stable 1.0.0.

Near-term engineering themes include:

  • Color-space roles — Active gamut vs world space vs Display gamut; future global Color Context UI.
  • Display gamut preferences — calibrated profiles in localStorage and Explorer display-mapping.
  • Compositor workflow — PNG ramp strip export for Resolve, TouchDesigner, Resolume, Fusion.
  • Integrator formats — compact ramp interchange JSON and optional npm-installable color engine.
  • UX polish — glyph-width responsive breakpoints; gamut-map raw/final swatch preview; direct xy picking.

WebGPU, HDR, and spectral intensity volume overlays remain research or deferred — named in design docs, not promised on the beta track.

Live project · GitHub (MIT) · Author