Color Spaces
How Cineon handles color science - ACES, AgX, input gamuts, log decoding, and display transforms.
Why color spaces matter
Every image has a color space: a mathematical description of how its pixel values map to actual light. A JPEG from your phone is sRGB. A log clip from an ARRI is LogC3. Apply a grade without accounting for the source color space and the result is wrong — contrast curves hit the wrong tonal zones, saturation shifts look off, and the look won't translate between images.
Cineon's Color Science effect handles this explicitly. You tell it what your image is, pick a transform, and it converts to a linear working space before any other effect touches the pixels.
Three transforms, one effect
The Color Science effect (component id aces) holds three interchangeable engines, selected with a Version switch. Each keeps its own separate settings, so switching between them is lossless — going ACES 1.3 → AgX → back to ACES 1.3 restores exactly what you had.
| Version | What it is |
|---|---|
| ACES 1.3 | Full ACES 1.3.1 pipeline: IDT → RRT → ODT, ported 1:1 as a WebGPU compute shader |
| ACES 2.0 | The current Academy output transform, parameterised directly by peak luminance and limiting primaries instead of a fixed ODT list |
| AgX | Troy Sobotka's display rendering transform — softer highlight rolloff, no hue skew, closed-form (no LUTs) |
All three read from the same Input Gamut and Exposure controls, and all three run entirely on the GPU.
Input gamuts
The Input Gamut parameter tells the transform what color space your source image is in, so it can decode it correctly before anything else runs.
| Input Gamut | Source type | Notes |
|---|---|---|
| sRGB | JPEG, PNG from cameras, web images | Display-referred, gamma ≈2.2 |
| Rec.709 | Video files, broadcast cameras | Same primaries as sRGB, different EOTF |
| DCI-P3 | iPhone ProRAW, cinema cameras, modern displays | Wider gamut than Rec.709 |
| Rec.2020 | HDR video, high-end capture | Very wide gamut |
| LogC3 | ARRI Alexa (ARRIRAW, ARRI LogC3) | Log curve + AWG3 gamut |
| S-Log3 / S-Gamut3 | Sony cameras (FX3, Venice, A7S III) | |
| S-Log3 / S-Gamut3.Cine | Sony cameras, Cine gamut variant | |
| Canon Log 2 / Cinema Gamut | Canon Cinema EOS (C70, C300, C500) | |
| Panasonic V-Log / V-Gamut | Panasonic cinema cameras | |
| Fujifilm F-Log / F-Gamut | Fujifilm cinema cameras | |
| Fujifilm F-Log2 / F-Gamut | Fujifilm cinema cameras, F-Log2 variant | |
| ACEScg (Linear AP1) | Images already in the ACES working space | Passed through without conversion |
RED (REDWideGamutRGB / Log3G10) was removed as an input gamut. A session that still holds it falls back to sRGB.
Log decoding
Log formats compress a wide dynamic range into a smaller code value range. Cineon decodes each one from its official spec:
- LogC3 — ARRI official cut/slope parameters (
cut = 0.1497,a = 5.5556,b = 0.0523) - S-Log3 — Sony official 10-bit normalized spec (
threshold = 171.2103/1023) - Canon Log 2 — Canon official formula with symmetric negative handling
- V-Log — Panasonic official spec (
cut1 = 0.01) - F-Log / F-Log2 — Fujifilm official data sheet formulas
After decoding to linear scene light, each format is multiplied by its native gamut-to-AP1 matrix to land in ACEScg.
ACES 1.3
The pipeline has three stages:
Cineon always works in ACEScg (AP1 primaries, linear light) — the same working space used in professional VFX and DI pipelines. Every other effect in the chain — grain, halation, color grading, LUTs — operates on that linear buffer.
Display transforms (ODT)
The Output parameter controls how the graded ACEScg image is converted for the display.
| ODT | Use case |
|---|---|
| sRGB | Standard monitor, web export — most common choice |
| Rec.709 | Broadcast monitor, video output |
| P3 | Wide-gamut display (DCI, Display P3) |
| Bypass | No ODT — raw ACEScg linear on canvas |
The RRT runs between ACEScg and the ODT. It applies a tone mapping curve that mimics the response of photochemical print film: shadows lift slightly, highlights roll off instead of clipping. That curve is where the ACES look's characteristic contrast comes from.
Setting Output to Bypass skips both the RRT and the display transform, so the raw ACEScg working space shows on the canvas. Use it to check a grade in linear light before tone mapping, to grade material headed for downstream compositing, or to export toward a pipeline that expects scene-linear.
ACES 2.0
ACES 2.0 replaces the fixed ODT list with two direct parameters: Limiting Primaries and a display encoding (EOTF + Peak Luminance). Instead of picking a preset display, you describe the actual target and the transform derives its own gamut-mapping tables for it.
| Parameter | Controls |
|---|---|
| Limiting Primaries | The gamut boundary the tone-mapped image is compressed toward — Rec.709 or P3-D65 |
| EOTF | The inverse transfer function baked into the output: sRGB, BT.1886, Gamma 2.2, Gamma 2.6 (DCI), ST.2084 PQ, or Display Linear |
| Peak Luminance | Display peak in nits, from 48 (DCI cinema reference) up to 1000 (HDR) |
Limiting Primaries is not cosmetic — it feeds the gamut-cusp tables the compression algorithm uses, so Rec.709 vs. P3-D65 produces a genuinely different result in saturated colors, not just a final clamp. Rec.2020 isn't offered here: every target Cineon renders to is sRGB or Display-P3, and limiting to a wider gamut than the output can encode would push saturated colors somewhere the display transform can't correctly place them.
Display Linear is an interchange target (EXR, further downstream processing), not a viewing one — sent straight to an sRGB monitor it looks dark, because the display still applies its own gamma on top.
AgX
AgX is Troy Sobotka's display rendering transform, ported from the reference AgX-S2O3 implementation. It runs as five closed-form analytic stages — clamp + inset, log2 encode, per-channel sigmoid, outset, display encoding — with no lookup tables, validated against the reference LUT.
| Parameter | Controls |
|---|---|
| EOTF | Same option set as ACES 2.0 |
| Inset | How much the pre-curve matrix desaturates highlights before the sigmoid, 0–0.5 |
| Outset | Whether the post-curve matrix restores that chroma afterward |
At Inset 0 the matrix is identity, which turns the transform into a bare per-channel sigmoid — with no chroma attenuation the three channels race toward 1.0 together and bright saturated areas lose texture. The default of 0.15 (the AgX reference value) is what keeps that texture. Turning Outset off keeps the desaturated highlights instead of restoring them, which reads as a deliberately flatter, more "filmic" highlight roll.
AgX renders roughly a stop brighter than the ACES ODTs at the same exposure, which is why it opens pulled back on Exposure relative to ACES 1.3 and 2.0.
Exposure and Bias
Two exposure controls sit inside the effect, applied at different points in the pipeline regardless of which version is active:
| Parameter | Where applied | Effect |
|---|---|---|
| Exposure | After input → ACEScg conversion | Scales scene light before the tone curve — affects how highlights roll off |
| Bias | After the transform (RRT+ODT for ACES 1.3, the tone curve for ACES 2.0/AgX) | Multiplies the final display-referred signal — a linear brightness trim |
Both are in stops (2^EV and 2^Bias multipliers). Exposure changes the tone-mapping response itself; Bias is a pure post-grade brightness offset that doesn't touch the curve.
Treat Display as Scene
This ACES 1.3 toggle changes how display-referred inputs (sRGB, Rec.709, P3, Rec.2020) are handled.
- On (default) — the input is converted to ACEScg via a matrix transform, treating it as if it were scene-linear. This is the standard path and gives the most consistent ACES look.
- Off — reserved for a future InvRRT path, not yet implemented on GPU. Currently falls back to the same scene path.
Leave this on unless you know you need the InvRRT path.
Conversion effect
The Conversion effect (component id conversion) runs the opposite direction from Color Science: instead of decoding camera footage into a working space, it takes an sRGB image and re-encodes it into a camera's native log gamut, to simulate what that camera's raw output would look like.
| Parameter | Controls |
|---|---|
| Target Space | Which camera log format to simulate: S-Log3/S-Gamut3.Cine, S-Log3/S-Gamut3, LogC3, Canon Log 2, V-Log, F-Log, F-Log2 |
| Strength | 0–100%, blend between the original scene and the target camera gamut, mixed in linear light before the log curve is applied |
Because the gamut blend happens before encoding, every strength value produces a real, valid log signal — a downstream Color Science layer set to the matching Input Gamut decodes it correctly at any strength, not just 100%.
Conversion doesn't run an RRT, doesn't decode existing log, and doesn't use ACEScg. It's a one-way simulation tool, not a color-managed pipeline — use Color Science when correctness matters, Conversion when you want your sRGB source to look like it came off a specific camera.
Recommended workflows
Camera phone / JPEG → final grade
Standard path. ACES applies a slight cinematic contrast curve on top.
ARRI log footage → grade → web export
Full log decode + ACES RRT. Highlights roll off smoothly, shadows open up naturally.
Sony mirrorless (S-Log3) → grade → video export
Broadcast-correct output for YouTube or Vimeo.
HDR deliverable, P3 display
Renders and compresses directly toward the actual target display instead of a fixed ODT preset.
Softer, filmic highlight rolloff
No hue skew in saturated highlights, at the cost of a flatter default look than ACES.
VFX / compositing — keep scene-linear
Pass-through. Grade without tone mapping for downstream compositing.
sRGB photo, simulate Sony log footage
Turns a flat sRGB image into a valid S-Log3 signal — useful as a source for testing a log-based grade, or to hand off footage that needs to look camera-native.