LUT file
No file chosen
Expected .cube format with LUT_1D_SIZE or LUT_3D_SIZE header. Unknown files are parsed on a best-effort basis.
Built-in looks
Select a cinematic look or upload your own .cube file.
Look strength
Blend 100%
Test scene
Synthetic scene for LUT preview evaluation.
Custom image
No file chosen
Uploading an image overrides the synthetic scene until you hit Reset scene.
Input options
Transfer function
Input signal transfer function for decoding.
LUT info
No file loaded • Using built-in identity
3D size: virtual 17 • 1D size: 256 Domain: [0, 1]³
File: — Working: sRGB • Output: sRGB • Transfer: sRGB
Keyboard shortcuts
1–6 tabs  |  R reset  |  E export .cube  |  D download PNG  |  J copy JSON  |  S copy summary
Preview
No LUT loaded — using identity
3D LUT Cube

Pseudo-3D projection of LUT output samples in RGB space.

Type: Identity • Resolution: virtual • Samples: 729 pts
Research Metrics
RGB histogram (before/after)
Tone curve (per-channel or luma)
ΔE₀₀ vs reference patches
Gamut mapping visualisation
LUT luminance response curve
Hue shift (°) vs input hue
Per-channel response (isolated R/G/B)
Actions
Export & Share
PNG exports the current preview canvas. JSON copies LUT settings state. .cube exports the processed transform.
Export Format
Select output format before exporting the processed LUT.
Supported .cube Features
TITLE, LUT_1D_SIZE, LUT_3D_SIZE, DOMAIN_MIN, DOMAIN_MAX headers supported.

Heuristic fallback: auto-detects 3D (cube-root) or 1D if headers are missing.

1D LUT: linear interpolation per-channel.
3D LUT: full trilinear interpolation across R×G×B cube.
Custom domain ranges (non-[0,1] domains supported).
This lab implements a compact, pure-JS .cube parser. For calibration-grade work, export results into your dedicated pipeline.
LUT & Color Standards
.cube Format — Industry Standard

De facto industry standard for 1D/3D color lookup tables; originated from Iridas/Adobe SpeedGrade. Supported by DaVinci Resolve, Adobe Premiere, Final Cut Pro, and virtually all professional color grading applications. The .cube text format specifies TITLE, LUT size headers (LUT_1D_SIZE, LUT_3D_SIZE), optional DOMAIN_MIN/DOMAIN_MAX, and floating-point RGB sample triplets.

sRGB — IEC 61966-2-1

IEC 61966-2-1:1999 — sRGB colour space, the default working and output space for this lab. Defines sRGB primaries under D65 illuminant with a piecewise gamma (linear segment + 2.4 power). Adopted by virtually all consumer displays, web browsers, and image formats (JPEG, PNG, CSS). Transfer: piecewise γ≈2.2, peak luminance 80 cd/m².

Rec.709 — ITU-R BT.709

ITU-R BT.709-6 (2015) — Rec.709 primaries and transfer function for HD video. Uses the same colorimetric primaries as sRGB under D65. The OETF uses a 0.45 power law (BT.1886 EOTF: γ=2.4). Standard for broadcast HD production at 100 cd/m² peak luminance.

Rec.2020 — ITU-R BT.2020

ITU-R BT.2020-2 (2015) — Rec.2020 wide-gamut primaries for UHD/HDR content. Laser-pure single-wavelength primaries: R 630 nm, G 532 nm, B 467 nm. Covers ~75.8% of the CIE 1931 visible gamut. 12-bit piecewise OETF (α=1.0993, β=0.0181).

PQ — SMPTE ST 2084

SMPTE ST 2084:2014 — Perceptual Quantizer electro-optical transfer function for HDR mastering. Designed to match the contrast sensitivity of human vision up to 10,000 cd/m² peak luminance. Used for HDR10 and Dolby Vision. Decoded in the Transfer Function dropdown of this lab.

HLG — ARIB STD-B67

ARIB STD-B67 (2015) — Hybrid Log-Gamma for HDR broadcasting. A scene-referred HDR transfer function backward-compatible with SDR displays. Logarithmic segment for highlights, gamma segment for shadows. Peak luminance 1,000–4,000 cd/m². Designed for live broadcast HDR workflows.

ACES — SMPTE ST 2065 / ACEScct

ACES (SMPTE ST 2065) — Academy Color Encoding System. ACEScg (AP1 primaries, D60 whitepoint, scene-linear) is the standard VFX compositing working space. ACEScct is the log camera working space with a linear toe for shadow detail. The lab's "ACEScct → ACEScg" look decodes ACEScct to scene-linear ACEScg.

CIEDE2000 — ISO/CIE 11664-6:2014

ISO/CIE 11664-6:2014 — CIEDE2000 (ΔE₀₀) colour-difference formula. Adds five corrections over CIE76: lightness, chroma, and hue weighting functions, a chroma–hue interaction term, and a rotation correction for the blue region. Used in this lab's ΔE chart to measure LUT-induced colour shifts across the neutral grey ramp.

ΔE < 1 = imperceptible  |  1–3 = barely perceptible  |  3–6 = noticeable  |  >6 = significant

ICC Colour Management — ICC.1:2022

ICC.1:2022 (v4.4) — International Color Consortium profile specification. Defines structure, required tags (PCS = CIEXYZ or CIELAB under D50), rendering intents, LUT-based AtoB/BtoA transforms, and Bradford CAT for D50 PCS. ICC-based LUT transforms underpin most professional colour management pipelines.

Transfer Function Catalogue
sRGB       Piecewise γ≈2.2            80 cd/m²
Rec.709     BT.1886 γ=2.4            100 cd/m²
Gamma 2.4   Pure power γ=2.4         100 cd/m²
PQ          Perceptual quantizer      10 000 cd/m²
HLG        Hybrid log-gamma         1 000–4 000 cd/m²
Linear      No EOTF (scene-linear)   Unbounded
Formulas & Mathematics
3D LUT Trilinear Interpolation

Given a normalised input (r, g, b) ∈ [0,1]³ and a 3D LUT of size N, compute fractional positions:

rx = r × (N−1),  r0 = floor(rx),  r1 = min(N−1, r0+1),  fr = rx − r0
gx = g × (N−1),  g0 = floor(gx),  g1 = min(N−1, g0+1),  fg = gx − g0
bx = b × (N−1),  b0 = floor(bx),  b1 = min(N−1, b0+1),  fb = bx − b0

idx(r,g,b) = r + g×N + b×N²

c000=T[idx(r0,g0,b0)]  c100=T[idx(r1,g0,b0)]
c010=T[idx(r0,g1,b0)]  c110=T[idx(r1,g1,b0)]
c001=T[idx(r0,g0,b1)]  c101=T[idx(r1,g0,b1)]
c011=T[idx(r0,g1,b1)]  c111=T[idx(r1,g1,b1)]

c00 = lerp(c000,c100,fr)   c10 = lerp(c010,c110,fr)
c01 = lerp(c001,c101,fr)   c11 = lerp(c011,c111,fr)
c0 = lerp(c00,c10,fg)     c1 = lerp(c01,c11,fg)
result = lerp(c0, c1, fb)
1D LUT Interpolation

For 1D LUT of size S, each channel is normalised to domain [min, max], then linearly interpolated:

t = clamp((v − domainMin) / (domainMax − domainMin), 0, 1)
pos = t × (S − 1)
i0 = floor(pos),  i1 = min(S−1, i0+1),  frac = pos − i0
result = lerp(table[i0], table[i1], frac)
Strength Blending
output = lerp(original, transformed, strength)
// strength 0 = original untouched
// strength 1 = full LUT applied
ΔE₀₀ (CIEDE2000)

The CIEDE2000 formula adds five corrections over CIE76: lightness weighting (SL), chroma weighting (SC), hue weighting (SH), chroma–hue interaction term (RT), and hue rotation in the blue region.

ΔE₀₀ = sqrt(
  (ΔL' / S_L)² + (ΔC' / S_C)² + (ΔH' / S_H)²
  + R_T × (ΔC' / S_C) × (ΔH' / S_H)
)

ΔE < 1 = imperceptible  |  1–3 = barely perceptible  |  3–6 = noticeable  |  >6 = significant

sRGB ↔ CIE L*a*b* Conversion
sRGB → Linear:
  C_lin = C/12.92   (C ≤ 0.04045)
  C_lin = ((C+0.055)/1.055)^2.4

Linear RGB → XYZ (D65):
  [X]  [0.4124564  0.3575761  0.1804375] [R]
  [Y] = [0.2126729  0.7151522  0.0721750] [G]
  [Z]  [0.0193339  0.1191920  0.9503041] [B]

XYZ → L*a*b*:
  f(t) = t^(1/3)     if t > 0.008856
        = 7.787t + 16/116  otherwise
  L* = 116 f(Y/Yn) − 16
  a* = 500 (f(X/Xn) − f(Y/Yn))
  b* = 200 (f(Y/Yn) − f(Z/Zn))
Built-in Cinematic Looks
Teal & Orange    Shadow → teal, highlight → warm orange (luminance-based)
Bleach Bypass    Contrast boost + 60% luminance desaturation blend
Film Soft        Lifted shadows + warm tint via luminance blend
Mono Contrast    Luminance → S-curve contrast → monochrome
Cine Log→709    Gamma 0.45 unlog + 1.1× gain − 0.05 offset
HDR → SDR       Reinhard tone-map (2× boost) + gamma 2.2 output
ACEScct→ACEScg  Piece-wise ACEScct linearisation (ACES AP1 primaries)
References & Citations

LUT Format & Color Grading

[1] Madden, T. & Day, D. C. (2003). "3-D Lookup Table Colour Transform Mechanism" — Iridas SpeedGrade .cube format specification.

[2] Selan, J. (2012). "Using Lookup Tables to Accelerate Color Transformations." GPU Gems 2, Chapter 24.

[3] Reinhard, E. et al. (2002). "Photographic Tone Reproduction for Digital Images." ACM Transactions on Graphics, 21(3), 267–276.

Video & HDR Standards

[4] ITU-R BT.709-6 (2015). "Parameter values for the HDTV standards for production and international programme exchange."

[5] ITU-R BT.2020-2 (2015). "Parameter values for ultra-high definition television systems for production and international programme exchange."

[6] SMPTE ST 2084:2014. "High Dynamic Range Electro-Optical Transfer Function of Mastering Reference Displays."

[7] ARIB STD-B67 (2015). "Essential Parameter Values for the Extended Image Dynamic Range Television (EIDRTV) System for Programme Production."

ACES & Color Management

[8] Academy of Motion Picture Arts & Sciences (2021). ACES Technical Documentation Package: ACEScg, ACEScct, Output Transforms.

[9] ICC.1:2022 (v4.4). International Color Consortium Profile Specification.

[10] International Electrotechnical Commission (1999). IEC 61966-2-1: sRGB colour space.

CIE Colorimetry & Color Difference

[11] CIE 15:2004. Colorimetry, 3rd ed. Vienna: CIE.

[12] ISO/CIE 11664-6:2014. "Colorimetry — Part 6: CIEDE2000 Colour-Difference Formula."

[13] Sharma, G., Wu, W. & Dalal, E. N. (2005). "The CIEDE2000 color-difference formula." Color Research & Application, 30(1), 21–30.

General Resources

[14] Poynton, C. (2012). Digital Video and HD: Algorithms and Interfaces, 2nd ed. Morgan Kaufmann.

[15] Kang, H. R. (2006). Computational Color Technology. SPIE Press.

[16] Hunt, R. W. G. & Pointer, M. R. (2011). Measuring Colour, 4th ed. Wiley.

About this tool

This lab implements a compact, pure-JS .cube parser supporting 1D and 3D LUTs with trilinear interpolation, built-in cinematic looks, CIEDE2000 ΔE analysis, RGB histograms, tone curves, gamut mapping, hue-shift analysis, and a pseudo-3D cube viewer — entirely client-side (zero network). Not a substitute for calibrated measurement or professional colour management software.

Research & Pipeline Notes
Trilinear vs Tetrahedral Interpolation

This lab uses trilinear interpolation (8 vertices, 3 lerps). Tetrahedral interpolation (used in DaVinci Resolve and Filmlight Baselight) divides each cube cell into 6 tetrahedra for slightly better accuracy at the cost of implementation complexity. The difference is typically <0.5 ΔE for well-sampled 33³ LUTs.

LUT Size Considerations
17³  (4 913 entries)   — minimum for smooth interpolation; used in sRGB workflows
33³  (35 937 entries)  — industry standard; good accuracy/size trade-off
65³  (274 625 entries) — high-end; used for demanding HDR/WCG pipelines

This lab exports 33³ 3D LUTs by default.
Gamut Mapping Strategies

When a LUT maps colours outside the target gamut, clipping artefacts appear (saturated hue shifts, false contours). The gamut-warning overlay in Preview mode highlights pixels where any channel hits 0 or 255 — indicating potential clipping. For production work, use soft-clip / gamut-compression algorithms (ACES Reference Gamut Compression) before applying the LUT.

HDR ↔ SDR Tone Mapping

The built-in “HDR → SDR” look uses Reinhard’s global operator: v′ = v/(1+v) with a 2× boost pre-factor. For scene-referred content, consider ACES Output Transforms or custom S-curve operators. PQ (ST 2084) and HLG (ARIB STD-B67) transfer functions are provided in the input options panel for proper signal decoding.

Working in Linear Light

The “Assume linear input” option removes sRGB display gamma before LUT application, which is correct when the LUT expects scene-linear data (e.g., ACEScg LUTs). Most display-referred .cube files (e.g., film emulation LUTs from LUTCalc or Resolve) expect gamma-encoded input — leave this unchecked for those.

Cross-Talk in 1D LUTs

1D LUTs apply independent per-channel curves — they cannot perform cross-channel operations (e.g., teal&orange split-toning requires a 3D LUT). 1D LUTs are ideal for contrast curves, gamma correction, and simple colour grading (lift/gamma/gain). For hue rotation or saturation-dependent operations, use 3D LUTs.

ΔE Metrics Interpretation

The ΔE₀₀ chart compares the neutral grey ramp (24 patches from black to white) before and after LUT application. A JND (just-noticeable difference) line is drawn at ΔE=1. Values below 1 are imperceptible to a standard observer. High ΔE in shadows may indicate lifted blacks; high ΔE in highlights indicates highlight roll-off or clipping.

Research backend: .cube parser · Trilinear interpolation · RGB histogram · Tone curve · CIEDE2000 ΔE · Gamut mapping · Hue shift analysis · Per-channel response · 3D cube viewer. All computation on-device.