◎ Radiance Load Image
Radiance Load Image — a loader that keeps your mask separate from your pixels
- IMAGE
- MASK
The problem with masks in ComfyUI is that they're usually in the image - baked into an alpha channel, or worse, hand-painted onto a copy of the pixels so you can't change your mind without redoing it. Radiance Load Image takes the other approach: it loads an image, and separately checks for a companion mask file sitting next to it. The pixels stay untouched and the mask lives in its own file, which is the whole idea behind non-destructive masking.
It's a LoadImage-style loader - same image dropdown you already know - that does one extra thing: if a file named <yourimage>_radmask.png exists alongside the source, its alpha channel becomes the mask. No companion file, and it behaves exactly like a normal image load, mask from the image's own alpha.
How it works
The source is explicit about the format. Load your image, and the node constructs the companion path: input/myimage.png → checks for input/myimage_radmask.png. If it exists, the mask output comes from that file's alpha instead of the image's own alpha channel. That's the whole mechanism, and its power is in the split: you can re-paint the mask as many times as you like and never touch the image data, and you can hand the same image to ten different workflows each with their own companion mask.
The companion file is what the pack's frontend mask editor saves. Radiance ships a WebGL-based soft brush editor (the README calls it the "Interactive Mask Editor"): open the image, brush a soft mask, and the frontend saves the non-destructive _radmask.png via the ComfyUI API. That's the loop - brush in the editor, the mask lands in the companion file, this node picks it up the next time the workflow runs.
The outputs that matter
IMAGE- the loaded image, pixels untouched.MASK- the mask. From the companion_radmask.pngif present, else the image's own alpha.
Those are the only two, and they wire into the usual places: mask into an inpaint/refine loop, an alpha-aware composite, or the pack's own grading nodes if you're using it to drive region work. The KB's masking doc is worth reading for what to do with the mask once you have it - the whole "detailer" family lives downstream of exactly this kind of output.
Why you'd reach for this over the stock loader
The stock LoadImage gives you an image and its baked alpha, and nothing else. If you want a soft, hand-painted matte that you'll iterate on, you're either editing the PNG in an external editor or committing to a mask you can't change. This node makes the mask a separate artifact - which is the difference between a workflow you can keep tweaking and a workflow that's frozen the moment you saved. It also matches the pack's production framing: separate data from decisions, keep the source clean.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/fxtdstudios/radiance.git
cd radiance
pip install -r requirements.txt # or requirements_windows.txt / requirements_linux.txt / requirements_mac_silicon.txt
Or search Radiance in ComfyUI Manager, restart. Linux needs libopenexr-dev first.
Gotchas
The naming is the trap. The companion file must be exactly <filename>_radmask.png next to the source - if you save it as _mask.png or put it in the wrong folder, the node silently falls back to the image's own alpha and you'll swear the mask is being ignored. Second, the mask editor is a frontend feature: it lives in the pack's JS, so if you're running ComfyUI headless or via the API, there's no brush editor and you're creating companion files by hand - which is fine, it's just a PNG you paint. Third, if neither alpha exists (a JPEG, say, with no companion), the MASK output is empty, and downstream nodes that expect a mask will complain. Give it a companion file or an image with alpha.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | 1 options: example.png |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |