Nodes/radiance/◎ Radiance Log Curve Decode
ComfyUI Node

◎ Radiance Log Curve Decode

Radiance Log Curve Decode — turn ARRI/Sony log footage into linear, properly

By fxtdstudios·Created 7 months ago·Updated 9 days ago· 242
◎ Radiance Log Curve Decode
  • image
  • IMAGE
curve
target_gamutACEScg (Linear)
exposure_indexEI 800
use_gputrue

If your ComfyUI work ever has to touch real footage - a plate you're compositing into, a reference you're matching, a log-encoded render from a camera - you'll hit the wall that says "why does this image look flat and gray-green?" That's log footage. It's not broken; it's stored in a logarithmic curve so the camera can squeeze a huge dynamic range into a limited bit depth, and it has to be decoded back to linear before you do anything with it. Radiance Log Curve Decode is that decode, done properly.

The KB's color-management section makes the stakes clear: hand a gamma-encoded sRGB PNG to a VFX comp and every blend is wrong. Getting AI output into that world means decoding to linear and carrying it as float. This node is the "decode" half of that bridge, and the pack is one of the few places in ComfyUI where this exists as a first-class citizen rather than a forum answer with a formula.

How it works

Each camera manufacturer has its own log curve, and the node ships the ones that matter: ARRI LogC3 and LogC4, Sony S-Log3, Panasonic V-Log, Canon Log 3, RED Log3G10, ACEScct, and DaVinci Intermediate. Internally each is a specific math function (the source maps curve names straight to logc3_to_linear, slog3_to_linear, etc. in the pack's color_utils). You feed it the log-encoded image, pick the curve, and it transforms the values from log space to linear.

Two things make it more than a formula wrapper. First, gamut handling: the target_gamut option moves the result into ACEScg, linear sRGB, P3-D65, or Rec.2020 after the curve - because decoding the curve is only half the job; the color primaries also need converting to match your working space. Second, EI control: for ARRI LogC3, the exposure_index matters (EI 160 through EI 3200), because the LogC3 curve is defined relative to exposure index - decode at the wrong EI and your image is off by a stop or more. The tooltip is explicit that EI only affects the LogC3 curve.

The inputs that matter

  • image - the log-encoded input.
  • curve - pick the one that matches your footage. Getting this wrong produces predictably weird results.
  • target_gamut - where to land. ACEScg (Linear) is the safe default for VFX; Native / No Transform just does the curve and leaves color alone.
  • exposure_index - EI 800 default; change it only for ARRI LogC3 footage whose EI you know.
  • use_gpu - on by default, faster, falls back gracefully.

Output: the decoded linear IMAGE, ready for grading, matching, or compositing.

The workflow it belongs to

Decode → grade → encode is the loop. Decode log footage to linear, do your Lift/Gamma/Gain work in ◎ Radiance Grade or a color matrix, then hand the linear result to Radiance Log Curve Encode to get it back into a log curve for delivery, or straight to an EXR write for the comp. If you're matching AI output to a camera plate, decode the plate and the AI frame to the same linear space first - matching log footage against sRGB is how you get a color match that fights you.

Installing

cd ComfyUI/custom_nodes
git clone https://github.com/fxtdstudios/radiance.git
cd radiance
pip install -r requirements.txt   # or requirements_windows.txt / requirements_linux.txt / requirements_mac_silicon.txt

Or search Radiance in ComfyUI Manager, restart, done. Linux needs libopenexr-dev before the pip step.

Common issues

The mistakes are all curve-related. Decoding S-Log3 footage with the LogC3 curve gives you a muddy, wrong-brightness image that no amount of grading fixes - double-check the curve against your camera. The EI gotcha bites the same way: LogC3 at the wrong EI shifts everything a stop. And the pack's standing rule applies: if your "log" source is actually just a flat-looking 8-bit PNG, decoding won't invent dynamic range that was never recorded. The node operates on the numbers it's given - it can't recover highlight detail that was clipped at capture.

CategoryFXTD Studios/Radiance/Color

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
curveCOMBO8 options: ARRI LogC3, ARRI LogC4, Sony S-Log3, Panasonic V-Log, Canon Log 3, RED Log3G10, +2
target_gamutCOMBOACEScg (Linear)5 options: ACEScg (Linear), Native / No Transform, Linear sRGB (Rec.709), Linear P3-D65, Linear Rec.2020
exposure_indexoptCOMBOEI 800Exposure Index for ARRI LogC3 (only affects LogC3 curve).
use_gpuoptBOOLEANtrueUse GPU for faster processing (falls back if unavailable).

Outputs (1)

NameTypeDescription
IMAGEIMAGE