jsColorEngine samples

The world’s first — and, frankly, most unnecessary — real-time video soft-proofing engine.

Because somewhere, someone needs to know whether their car video is CMYK-safe for GRACoL 2006 Coated. That person is probably not you. But the proof is right there that jsColorEngine is fast enough to do real time video.

Left: original sRGB video. Right: every frame decoded, run through a full ICC soft-proof pipeline (sRGB → CMYK → sRGB) via a pre-built 3D CLUT, and blitted to canvas — in real time in Javascript wasm. no WebGL, no workers. Just Single thread JavaScript and a lookup table.

Why?

The headline is zero hot-path cost. The tetrahedral interpolator doesn’t know or care whether a LUT cell carries a soft-proof RGB image or video frame — it just blends 8 corners. All the profile maths amortises into a one-time ~50–100 ms LUT bake.

Budget: 720×1280 @ 30 fps = 27.6 MPx/s. The 3D int8 path already sits at 60–200 MPx/s — on a mid range x64 processor, plenty of slack even after drawImage round-trip overhead.

Demo value: “here’s what you video would look like printed frame by frame on a press, right now.” The Profile-swap dropdown makes the difference between GRACoL and ISO Coated visible in real-time — which is a thing colour-managed workflows normally can only show on stills, and only after a render-wait.

This is what happens when you realize you can and don't stop to think if you should. This quietly demonstrates that the engine is fast enough to do a genuinely silly thing at 40+ fps just because it can.

Why not WebGL? Real-time video LUT work in the browser usually reaches for a fragment shader — fast and proven. But a lot of jsColorEngine’s actual users don’t have a GPU at all: headless Node.js on a print-queue server, a containerised RIP, a CI step rendering proof previews, an AWS Lambda batch job. Shaders need a GPU, driver, and often a window context; WASM SIMD doesn’t. This demo runs the same kernel that would run on the server — the browser tab is just a convenient place to see it move.

Pick a sample clip in the controls; attribution is shown there.

Original sRGB
Soft proof

System

WASM
WASM SIMD
LUT kernel
Video frame API

Requires a modern browser with WebAssembly SIMD support (Chrome 91+, Firefox 89+, Safari 16.4+, Edge 91+) for full performance. Without SIMD the engine falls back to scalar WASM or pure JS — still works, but frame rate will drop.

How it works

Pipeline sRGB → CMYK → sRGB
LUT 3D CLUT, pre-built once
Interpolation Tetrahedral, int8
Hot path transformArrayViaLUT
Workers / WASM None — main thread JS
Allocation Zero per frame