← Back to Framing Tools

Real WebGL, Real 3D LUT

LUT Real-Time Previewer

Import a real 3D .cube LUT file and preview it applied to your live feed through a genuine WebGL fragment shader with real trilinear interpolation — not a canvas-filter approximation standing in for one. Your file never leaves your device.

Camera off

Load a LUT

No LUT loaded — showing raw feed.

100%

Notes

How this works

Your LUT is packed into a single 2D texture as one tile per blue-channel slice, the standard technique for 3D LUTs without needing WebGL2-only 3D texture support. Hardware bilinear filtering handles the red and green axes; the shader manually interpolates between the two nearest blue-slice tiles for the third axis — genuine trilinear interpolation, computed every frame in real time.

Reference

What This Reads and Validates

CheckResult
3D .cube (LUT_3D_SIZE)Supported
1D .cube (LUT_1D_SIZE)Not supported — flagged, not silently mishandled
Non-default DOMAIN_MIN/MAXDetected and flagged
Data line count mismatchRejected with a specific error

These are this tool's own real parsing checks — a malformed file gets a specific error, not a silent wrong result.

Step-by-Step

How to Preview a LUT

  1. Click "Start Camera" and allow access when prompted.
  2. Upload a 3D .cube file using the file picker.
  3. Watch the LUT apply in real time to your live feed via the WebGL shader.
  4. Toggle the LUT on/off to compare directly against your unprocessed feed.

Common Questions

Frequently Asked Questions

Does my LUT file get uploaded anywhere?
No. The file is read and applied entirely in your browser via WebGL — it never leaves your device, which matters since LUTs are often personal or paid creative assets.
Is this a real 3D LUT or an approximation?
A real 3D LUT, applied with genuine trilinear interpolation in a WebGL fragment shader — not a simplified color-matrix filter standing in for one.
What LUT formats are supported?
Standard 3D .cube files (LUT_3D_SIZE). 1D .cube LUTs are not supported. Non-default DOMAIN_MIN/DOMAIN_MAX values are detected and flagged rather than silently mishandled.
Why did my LUT file get rejected?
Most commonly a data line count that doesn't match the declared LUT_3D_SIZE, a missing LUT_3D_SIZE line entirely, or a 1D LUT file, which this tool does not support. Each case reports its specific cause rather than failing silently.
Can I use this to preview a LUT before applying it in editing software?
Yes — that's exactly the intended use. Preview how a real 3D LUT looks on live video before committing to it in your actual editing or streaming software.
Why does this need WebGL specifically?
Trilinear interpolation across a 3D color lookup table is computationally intensive per-pixel, per-frame work — WebGL's GPU-accelerated fragment shaders handle this in real time in a way plain JavaScript canvas operations could not keep up with at live video frame rates.