External EXR (ComfyUI Deploy)
Feed HDR EXR files into a workflow — tonemapping included, no Photoshop trip required
- default_image
- default_mask
- image
- mask
If your pipeline touches HDR imagery - lighting passes, 3D-render EXRs, IC-Light-style relighting inputs, VFX plates - this is the ComfyDeploy input node for it. "External EXR" loads an OpenEXR file from a URL or a local path, converts it into a regular IMAGE tensor, and even hands you the alpha channel as a MASK. It's the image input node for people whose source material is brighter than 1.0.
Why this matters in the ComfyUI Deploy context: the standard External Image node reads JPEG/PNG, which clamps everything to the 0–1 display range. EXR files carry real float32 HDR values - highlights that blow past 1.0, scene-linear data straight out of a renderer. Feed that into the plain image path and you get clipped garbage; this node preserves the intent and lets you choose how to compress it back into something a diffusion model can see.
How it works
It reads the EXR with OpenCV (imread with the unchanged flag), flips it to RGB, and then applies the tonemap you picked:
linear- leaves values as-is. Use this if a downstream node (or you) will handle the HDR math.sRGB- the default, encodes linear values back to sRGB display space and clamps. Safest for feeding into a standard img2img chain.Reinhard- tone-maps highlights with the classicx / (1 + x)curve, then applies sRGB. Best when the source has crazy dynamic range and you want everything visible.
If the file has an alpha channel, it becomes the mask output - handy for compositing or for workflows that need transparency.
Inputs and outputs
input_id- the key ComfyDeploy matches API arguments to.exr_file- a local path or anhttp(s)://URL. Empty means "use the defaults."tonemap-linear,sRGB, orReinhard(defaultsRGB).- Optional:
default_image,default_mask(used when no file is given or loading fails), plusdisplay_name/descriptionfor how it shows in the dashboard.
Outputs: image (IMAGE) and mask (MASK). Wire the image into your VAE/img2img input and the mask into anything that wants a transparency signal.
Installing it
Pack install, same as the rest of ComfyUI Deploy:
cd ComfyUI/custom_nodes
git clone https://github.com/BennyKok/comfyui-deploy.git
Restart ComfyUI, or grab it via ComfyUI Manager ("ComfyUI Deploy"). OpenCV is a declared dependency of the pack, so EXR support should just be there - it's the same library the EXR output node uses. No model downloads.
Where people get burned
The classic mistake is not realizing the tonemap matters: leave it on linear and feed the result straight into a model and you'll wonder why everything looks washed out or blown - the model expects display-range data. sRGB is the safe default for most pipelines.
Also, this node expects EXR input. Point it at a .png and OpenCV's IMREAD_UNCHANGED may read it as a different channel layout entirely, producing a weird tensor instead of a clean error. If something's off, check your source file is genuinely EXR - and if ComfyDeploy is downloading it from a URL, remember it has to survive the dashboard's storage, not just your local disk.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| input_id | STRING | input_exr | — |
| exr_file | STRING | — | |
| tonemap | COMBO | sRGB | 3 options: linear, sRGB, Reinhard |
| default_imageopt | IMAGE | — | |
| default_maskopt | MASK | — | |
| display_nameopt | STRING | — | |
| descriptionopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |