ComfyUI Node

Viewer

A VFX review tool in a node graph, and this one doesn't dead-end

By FXTD-Studios·Created 8 months ago·Updated about 18 hours ago· 246
Viewer
  • image
  • compare_image
  • zdepth
  • image
◄exposure_bracketingfalse►
◄input_spaceAuto►
◄float_precisionHalf (16-bit)►
◄fps0.000►

Most ComfyUI preview nodes answer one question: "did it render?" The Viewer answers the questions you ask next - is the highlight clipping, does this grade match the previous shot, what does the alpha actually look like, is the second frame flickering against the first.

It's the node that made the Radiance pack visible: a March 2026 r/comfyui post called the whole thing a hidden gem for film and VFX work and landed around +78. The comments were also fair about the limits, which is useful. One of them: a 16/32-bit EXR export "won't create real" data - if your input doesn't have the range, the container doesn't invent it. Keep that in mind for the whole HDR half of this pack. The Viewer's job is to show you what you have.

What's in it

It has a Simple mode (picture, compare, playback) and an Advanced mode with everything, switched from the title bar. To be specific about "everything": GPU Waveform, RGB Parade, Vectorscope and Histogram scopes; compare against the B input or a pinned frame with wipe, difference, blink and B-only modes; Power Windows masking with radial and box shapes, feather and rotation; a Comparison Bridge with a draggable wipe and an 8-still reference shelf; channel viewing (RGB / R / G / B / Alpha / Luma); false colour and zebra; anamorphic streak and Brown-Conrady k1/k2 distortion preview; and an edge-preserving bilateral denoise. Exports go out as 16-bit PNG, a .rhdr HDR sidecar, or .exr.

That's a colourist's and a compositor's toolkit sitting where a "Preview Image" node would be.

Inputs

image is the only required one, and it takes IMAGE or VIDEO. The output is that same image passed through unchanged, which matters: older versions were a dead end, and there are still workflows built around the idea that you must re-wire around the viewer.

Optional, and worth knowing:

  • compare_image - the B side for wipe/difference/blink. Also accepts VIDEO.
  • zdepth - a depth map to flip to with the Z button, film-standards style.
  • input_space - the important one, default Auto. A ComfyUI IMAGE is sRGB-encoded and is shown untouched; linear sources (HDR Decode, SDR → HDR, a linear Read) are shown through OpenColorIO's ACES 2.0 SDR view. Auto decides based on whether any value is above 1.0 or below 0 - and the tooltip flags the case it can't cover: linear material that happens to stay inside 0–1. Set it explicitly when you're working scene-linear and it looks washed out.
  • float_precision - Half (16-bit) by default, which is what OpenEXR, RV and Nuke's viewer cache use; Full (32-bit) only if you're probing values above 65504 or need bit-exactness.
  • fps - 0 uses the source rate for VIDEO and 24 for an image batch. NTSC rates (23.976 / 29.97 / 59.94) are handled properly, which is a nice touch for anything destined for a timeline.
  • exposure_bracketing - off by default, and that default is deliberate. When it was silently on, every frame was processed three times and each bracket pass wrote extra sidecar files nobody read; the pack's own source comments put it at roughly 67 GB into temp/ for 500 frames at 1080p. Leave it off unless you want the ±2 EV thumbnails on the analysis shelf.

Install

ComfyUI Manager → search Radiance → install → restart → refresh the browser. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/fxtd-studios/radiance.git
cd radiance
python -m pip install -r requirements.txt

Windows portable users should run pip via python_embeded\python.exe. This is the node that actually needs the colour libraries - install.py gets OpenEXR and OpenColorIO in for you, and it points OpenColorIO at your $OCIO if you have one, otherwise at its built-in ACES studio config.

Where people get burned

WebGPU. The renderer defaults to WebGL and that's the tested path. WebGPU is opt-in and, by the pack's own known-issues list, masks, qualifiers and OCIO are inert there, along with a list of other panel differences. Don't switch backends and then debug the node.

Expecting the preview to change your data. Viewer adjustments affect the preview only. Nothing you twiddle in the panel is applied to the tensor leaving the node - you have to replicate the look with real nodes if you want it baked in. That's the correct design and a frequent source of confusion.

Video vs image batches. A VIDEO input can carry audio. An IMAGE batch can't. If audio vanished on the way to your Write node, that's why.

Expired temp previews. If the images vanish, rerun the workflow. ComfyUI's temp files get cleaned up under you.

CategoryFXTD STUDIOS/Radiance/Review

Inputs (7)

NameTypeDefaultDescription
imageIMAGE,VIDEOIMAGE batch or VIDEO to review. Returned unchanged as an IMAGE; input_space decides how it is displayed.
compare_imageoptIMAGE,VIDEOOptional B side (IMAGE or VIDEO) for the viewer's wipe and compare modes. Every frame is sent; its display space is resolved like image's.
zdepthoptIMAGE,VIDEOZ-Depth map to display when pressing Z button
exposure_bracketingoptBOOLEANfalseWrite -2 EV / +2 EV preview thumbnails for the analysis shelf. One extra PNG per frame per bracket; off by default because a long shot pays for it on disk.
input_spaceoptCOMBOAutoWhat the incoming pixels are. A ComfyUI IMAGE is sRGB-encoded and is shown untouched, exactly as ComfyUI previews it. Linear sources (HDR Decode, SDR -> HDR, Read in a linear working space) are shown through OpenColorIO's ACES 2.0 SDR view. Auto: linear when any value is above 1.0 or below 0, otherwise sRGB. Set it explicitly for linear material that stays inside 0-1.
float_precisionoptCOMBOHalf (16-bit)Precision of the float frames sent to the browser. Half is what OpenEXR, RV and Nuke's viewer cache use: exact for display and grading, half the size (about 60 MB less per 4K frame). Full keeps every fp32 bit for values above 65504 or bit-exact probing.
fpsoptFLOAT0.0000–240Playback rate. 0 = the source's rate (a VIDEO input carries it), 24 for an image batch. 23.976 / 29.97 / 59.94 are handled as the NTSC rates.

Outputs (1)

NameTypeDescription
imageIMAGE—