◎ Radiance GPU Tensor Ops
Five one-knob HDR operations, without the node farm
- image
- processed_image
- performance_info
Sometimes you don't want a color-correction suite, you want one slider that does one thing. GPUTensorOps is Radiance's answer: a single node that switches between five basic HDR tensor operations - Exposure, Gamma, Lift/Gain, Normalize, and Clamp - with exactly one value knob between them and a GPU flag.
It's the node you drop mid-pipeline when a generated image comes out too dark and you just need to knock it up a stop without building a mini grading rig. Exposure is the standout: +1 doubles brightness in linear space, and because it runs in float32 it multiplies values above 1.0 instead of clipping them - which is precisely the HDR-safe behavior a plain "brightness" node won't give you.
What each operation does
- Exposure - multiplicative, in stops (
2^value). +1 = twice as bright, -1 = half. The one you'll actually use. - Gamma - a power curve. Value < 1 brightens shadows without moving white; > 1 crushes them. The classic "image is flat, not dark" fix.
- Lift/Gain - one knob for both a shadow offset and a highlight multiplier, per the source's lift-and-gain math. Good for a quick contrast reframe.
- Normalize - rescales so the frame's data sits in a sensible range; handy when a float image has drifted far from [0,1].
- Clamp - the blunt instrument: squashes everything into range. Use it right before an 8-bit export that can't hold super-whites.
The value float does double duty (in stops for Exposure, as a curve exponent for Gamma, etc.), so remember what mode you're in - the same 1.5 means very different things across operations.
Inputs and outputs
- image (required), operation (the five-way menu), value (±10, default 0), force_gpu (default true - it'll use CUDA when available and fall back to CPU otherwise).
- Outputs: processed_image and performance_info (a STRING with timing/device info, handy for confirming the GPU path actually ran - wire it to a ShowText node if you're diagnosing slowness).
There's a no-op fast path: operation at its default with value 0 passes the image through untouched.
Why it exists
Radiance's philosophy is that HDR math should stay in float32 all the way down the graph, and GPUTensorOps is the minimal version of that: fast, one knob, no clamping unless you ask for it. It overlaps with Float32ColorCorrect (which is the full corrector) and HDRToneMap (the end-of-chain look node), but it wins on simplicity - if you need one operation in the middle of a long chain, it's fewer nodes and fewer settings to babysit. Treat it as the workhorse utility of the HDR set rather than the pretty one.
Install
Part of Radiance - ComfyUI Manager → search Radiance, or:
cd ComfyUI/custom_nodes
git clone https://github.com/fxtdstudios/radiance.git
cd radiance
pip install -r requirements.txt
Restart. Under FXTD Studios/Radiance/Color.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| operation | COMBO | Exposure | 5 options: Exposure, Gamma, Lift/Gain, Normalize, Clamp |
| valueopt | FLOAT | 0.0-10–10 | — |
| force_gpuopt | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| processed_image | IMAGE | — |
| performance_info | STRING | — |