The [palette] table
An optional top-level table that selects the gradient. Give either a built-in
name or custom stops — not both (setting both, or neither, is a load
error).
Built-in palettes — name
[palette]name = "ember"| Name | Gradient |
|---|---|
spectrum | The classic full-hue iq cosine — the default. |
ember | Warm embers: deep red → orange → pale gold. |
ice | Cool ice: deep blue → cyan → near-white. |
mono | Grayscale black → white. |
aurora | Deep green → teal → violet. |
Custom gradient stops — stops
A gradient through your own colour stops. Each stop is { at = <0..1>, color = <colour> }, where <colour> is a #rrggbb hex string or an [r, g, b]
array of 0..1 floats. Both are sRGB — the colour a picker or an eyedropper
gives you, and the colour that renders:
[palette]stops = [ { at = 0.0, color = "#0b0b2a" }, # deep night blue { at = 0.5, color = "#ff5500" }, # hot orange { at = 1.0, color = [1.0, 0.87, 0.53] }, # pale gold]Validated at load: at least two stops, each at in 0..=1 and sorted ascending,
every colour parseable. Any violation is a surfaced error and the engine keeps the
last good preset (it never crashes).
The stop is decoded to light once, when the LUT is baked
(ADR-0151),
so what you write is what the frame carries: a plateau authored #c81423 comes
back #c81423. That is exact below the tonemap’s knee at linear 0.6, where
the curve is the identity and the load decode and the display encode are inverses
— to within the LUT’s own 8-bit storage, which costs up to two levels on a very
dark channel. Above the knee all three channels scale together, so the plateau
survives as the same ink at a lower level. There is no opt-out and no second
reading of a hex triple.
Everything after that decode is a linear-light colour, and it stays one all the way to the display. The scene multiplies the decoded stop by whatever luminance it has and writes the result into a floating-point composite that is free to exceed 1.0, and the engine tonemap at the end of the frame is the only place anything is compressed. So what a preset does to a palette colour is arithmetic on light rather than on bytes, and two consequences follow for authoring: a stop is never silently clipped on its way through the composite, and the roll-off that finally applies is hue-preserving (see the ramp notes below).
The gradient repeats past its ends: a colour coordinate that wraps past 1
comes back around at 0.
[!IMPORTANT] Repeating is not the same as continuous. The wrap is seamless only if the gradient’s last stop is the same colour as its first. The
spectrumcosine is genuinely periodic, so it wraps invisibly; all four stop-list palettes (ember,ice,mono,aurora) run from a dark end to a light one, so the wrap is the sharpest transition in the gradient, not the softest. That does not matter when the coordinate stays inside0..1— which is the usual case — but it matters a great deal anywhere the whole gradient is walked around a closed figure (see Spectrum). If you need a cyclic gradient, write customstopsthat return to the starting colour atat = 1.0.
Built from a8ce055 at version 0.115.0. This site tracks main and is not versioned per release.