Nuke Read
Finally load EXRs and image sequences in ComfyUI
- IMAGE
ComfyUI's built-in Load Image is great at exactly one thing: PNGs and JPEGs you can see. The moment you need to pull an EXR, a DPX, a multi-frame sequence, or anything with a bit depth beyond 8-bit, the default loader just shrugs. NukeRead is the node that fixes that - it reads images and image sequences from disk with real format support, the way Nuke's Read node does.
This is the node that makes a footage pipeline possible inside ComfyUI. Render frames from Blender or a game engine, point NukeRead at plate.%04d.exr, and suddenly you're compositing actual rendered data into your generation workflow instead of screenshots. You can read a sequence as a batch and feed it frame-by-frame through a video pipeline, or read a single EXR, grade it, and write it back out.
How it works
Reads go through the pack's I/O layer, which tries OpenImageIO first, then OpenCV, then PIL - so format support tracks whatever you've installed. OIIO (installed by the pack's requirements) covers EXR, TIFF, DPX, HDR, PSD and friends; without it you're back to OpenCV/PIL and its narrower world.
The path handling is where it shines. It parses %04d and #### frame patterns, auto-detects a sequence from a single padded filename (image.0001.exr), and lets you load one frame, a range, or all frames. Missing frames get handled the way you choose: error (log), black (return a black frame), hold (repeat the last good one), or nearest (snap to the closest existing frame).
The colorspace dropdown is the part people get wrong. It describes the colorspace the file is in on disk, and the node decodes from that into linear Rec.709 working space - matching Nuke's convention. An sRGB PNG should be loaded with colorspace="sRGB" (it applies the IEC 61966-2-1 EOTF); an EXR is usually linear; a linear ACEScg file gets an AP1→Rec.709 primary matrix. raw just passes through untouched.
Inputs that matter
file_path- path or pattern.frame- which frame (default 1).frame_mode-single,range, orall.missing_frames- defaultblack. This is why you sometimes see silent black frames: that's the default.colorspace-raw,sRGB,linear,ACEScg. Defaultraw.show_preview- thumbnail on the node.
Output is a batched IMAGE (one frame per batch slot), which is what the whole graph eats.
Installing it
NukeRead is part of the Nuke Nodes pack. Manager: search "Nuke Nodes", install. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/sumitchatterjee13/nuke-nodes-comfyui.git nuke-nodes
cd nuke-nodes
pip install -r requirements.txt
Restart and find it under Add Node → Nuke → IO. OpenImageIO comes from requirements - for EXR/DPX work, make sure it actually installed. No model downloads.
Gotchas
- Black frames are the default lie. With
missing_framesatblack, a typo'd path or a missing frame silently yields 512×512 black frames, and your downstream node will happily process them. If outputs look "empty," check the console - NukeRead logs[NukeRead] Frame not foundloudly. - Colorspace wrong = wrong look. Load an sRGB PNG with
rawand it stays encoded, so downstream grading acts on gamma-encoded values. Match the dropdown to the file, or your whole grade is off. rawis not "auto." It's "do nothing." If you're not sure what the file is, NukeReadInfo exists for exactly that.- This pack has no community presence yet - zero threads, no tutorials. If a format won't load, it's an OIIO-install or file-problem question, and the well-commented
io_nodes.pyis your best reference.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| file_path | STRING | — | |
| frame | INT | 1-999999–999999 | — |
| load_as_sequenceopt | BOOLEAN | true | Treat path as image sequence (enable for patterns like ####, %04d) |
| first_frameopt | INT | 1-999999–999999 | — |
| last_frameopt | INT | 1-999999–999999 | — |
| frame_modeopt | COMBO | single | 3 options: single, range, all |
| missing_framesopt | COMBO | black | 4 options: error, black, hold, nearest |
| colorspaceopt | COMBO | raw | Colorspace the FILE IS IN on disk (matches Nuke's Read node convention). The node converts from this into the OCIO working space (the config's scene_linear role, e.g. ACEScg). raw - no conversion (pixels are passed through as stored) any other entry - OCIO colourspace the file is encoded in (e.g. 'sRGB Encoded Rec.709 (sRGB)' for PNG / JPG, 'ACEScg' for linear EXR) The list comes from the active OCIO config ($OCIO, or the built-in ACES Studio config) and is built when ComfyUI starts - restart ComfyUI after changing $OCIO. |
| show_previewopt | BOOLEAN | true | Show thumbnail preview in node |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |