Export to Nuke
Get ComfyUI output into Nuke without the path arguments
- image
- status
- render_path
Export to Nuke does the small annoying half of a handoff that normally eats twenty minutes. It writes your frame as EXR into the shot folder and writes a .nk file containing a ready-made Read node pointing at it. Drag that snippet into your comp script and you're working. No typing paths, and no re-typing them after the next iteration.
That sounds like a small thing. It isn't, if you do this for a living. It's Radiance trying to make ComfyUI a citizen of a real VFX pipeline instead of a black box beside one, and the KB's post-processing.md §(b) is honest that this corner is nearly invisible in the community at large - which is exactly why a node like this exists rather than a bunch of forum posts.
What it writes
image is required. A single frame writes one EXR; a batch writes a numbered sequence starting at frame_start (default 1001, because that's the VFX convention and yes, the default is right). nuke_folder is the output folder and gets created if missing. filename is the base name for the files, and the same string becomes the Read node's name with anything Nuke won't accept in a node name replaced by an underscore.
half_float defaults on, which writes 16-bit half EXR. Untick it for 32-bit float. Half is the sane default - half the file size, and 16-bit float has plenty of range for most handoffs. Go 32-bit when you're passing something through where the mantissa matters.
input_space is the field worth thinking about, and its default is deliberately conservative. EXR is written scene-linear, so sRGB display linearises first, Scene-linear means take me at my word, and As is (no conversion) writes values unchanged. This is the one setting that quietly ruins comps: feed the node a plain LoadImage PNG, leave it on As is, and you've written gamma-encoded values into an EXR that Nuke will treat as light. Everything blows out and looks like a colour-management disaster.
Two outputs, both strings: status and render_path. Wire render_path into a note or an overlay is the easy way to keep track of what you just delivered.
Pushing into a running Nuke
push_to_nuke is off by default and it's the showy option: instead of writing a snippet you import by hand, the node talks to a Radiance listener running inside Nuke and creates or updates the Read node there. The requirements are specific, so read them twice.
- Run
scripts/start_nuke_server.pyinside Nuke. It ships with the pack. - Both sides authenticate with a token from
~/.radiance/dcc_token, created automatically, or fromRADIANCE_DCC_AUTH_TOKEN. If Nuke is on a different machine, copy that file over or set the variable there. nuke_host(default127.0.0.1) andnuke_port(default 1986) point at the listener, and both have environment overrides:RADIANCE_NUKE_HOSTandRADIANCE_NUKE_PORT.
Only the push path uses host and port. Leave it off and they're inert.
Install
ComfyUI Manager → search Radiance → install → restart → refresh. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/fxtd-studios/radiance.git
cd radiance
python -m pip install -r requirements.txt
EXR writing is the dependency that matters here. Radiance uses the OpenEXR wheel when one exists and falls back to OpenImageIO otherwise - relevant because there's no OpenEXR wheel for Python 3.14 yet, and the pack deliberately degrades to OpenImageIO then OpenCV rather than failing the install. If EXR output is behaving oddly, check the console first and confirm which path loaded.
Where people get burned
- Frame numbers. The default
frame_startis 1001. A batch of 40 writes 1001–1040 and the Read node says so. If editorial expects frames starting at 1, change it before you deliver. - Name collisions. Export twice with the same
filenameinto one comp and you'll get aradiance_out1. Name per shot. - No listener.
push_to_nukeon with nothing listening fails - and still leaves a perfectly good EXR and.nkon disk. The write always happens; the push is a bonus.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Frame to export. A batch is written as a numbered EXR sequence. | |
| nuke_folder | STRING | Output folder for image + .nk file. Created if missing. | |
| filename | STRING | radiance_out | Base name for the EXR file(s). The Read node gets the same name with anything Nuke does not allow in a node name replaced by _. |
| frame_startopt | INT | 10010–999999 | Starting frame number for the EXR sequence. |
| push_to_nukeopt | BOOLEAN | false | Also create or update the Read node in a running Nuke. Needs the Radiance listener running there (scripts/start_nuke_server.py). Both sides share a token from ~/.radiance/dcc_token, created automatically, or from RADIANCE_DCC_AUTH_TOKEN; for Nuke on another machine copy that file or set the variable there. |
| nuke_hostopt | STRING | 127.0.0.1 | Nuke listener host (used only when push_to_nuke is on). RADIANCE_NUKE_HOST replaces the default. |
| nuke_portopt | INT | 19861024–65535 | Nuke listener port (used only when push_to_nuke is on). RADIANCE_NUKE_PORT replaces the default. |
| half_floatopt | BOOLEAN | true | Write 16-bit half EXR (True) or 32-bit float EXR (False). |
| input_spaceopt | COMBO | As is (no conversion) | What the image holds. EXR is written scene-linear: sRGB display input is linearised first. As is: written unchanged, as before. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| status | STRING | — |
| render_path | STRING | — |