Nodes/ComfyUI-NL_Nodes/🎨 NL OCIO Convert
ComfyUI Node

🎨 NL OCIO Convert

Explicit colorspace conversion, for when auto is not the answer

By NOLABEL-VFXΒ·Created 9 months agoΒ·Updated 2 months agoΒ· 0
🎨 NL OCIO Convert
  • images
  • image
  • image_info_json
β—„target_color_spaceACEScgβ–Ί
β—„image_info_jsonβ€”β–Ί
β—„source_color_spaceautoβ–Ί

Most of the color handling in the NOLABEL pack is automatic - NL Read normalizes sources into the working space as they load, and you mostly don't think about it. NL OCIO Convert is the explicit exception: a node that says "take this tensor from colorspace X to colorspace Y, right now, because I have a reason." It exists for pipeline and debugging cases where the auto path isn't enough - which happens more than you'd think once real footage and real deliverables enter the mix.

It's a thin, honest node. Input images, pick a target_color_space, and it converts. The source_color_space input defaults to auto, which means "figure it out from image_info_json." That's the right default, and the reason this node is worth having in a managed pipeline: the metadata from NL Read tells the converter what space the tensor is actually in, so the conversion is grounded instead of assumed. When there's no metadata, auto falls back to the pack's working space assumption.

The inputs that matter

  • images - the tensor to convert.
  • target_color_space - the destination. ACEScg is the default, because that's the pack's canonical working space, but this is where you'd go to a display or delivery space when needed.
  • source_color_space - auto, or an explicit override when you know the metadata is wrong.
  • image_info_json - the serialized metadata from NL Read. Feed it, and the converter also emits updated metadata on the way out.

Outputs are image and image_info_json - the converted tensor and its refreshed metadata, ready to continue down the pipeline.

When you'd actually use this

Two honest use cases. First, debugging: when colors look wrong somewhere, an explicit convert lets you bisect whether the problem is the read interpretation or something downstream. Second, mixing sources: if you're compositing a model-generated image (which arrives in model space) over an ACEScg plate, an explicit convert at the join point makes the intent visible in the graph instead of implicit.

Install

Part of the shared pack:

cd ComfyUI/custom_nodes
git clone https://github.com/NOLABEL-VFX/ComfyUI-NL_Nodes

or ComfyUI Manager β†’ "ComfyUI-NL_Nodes", restart. This one genuinely needs the optional color dependencies - PyOpenColorIO (the opencolorio package) and OpenEXR from requirements-color.txt - since it's the node doing real OCIO transforms. If the node errors at load or silently passes pixels through, that dependency list is the first suspect. And remember: for most graphs you don't need this node at all. The pack's read/write nodes handle the managed path for you. Reach for explicit conversion when you have a reason, not because it looks professional.

CategoryNOLABEL/Color

Inputs (4)

NameTypeDefaultDescription
imagesIMAGEInput image tensor.
target_color_spaceCOMBOACEScgDestination OCIO colorspace name.
image_info_jsonoptSTRINGOptional serialized image metadata from NL Read.
source_color_spaceoptCOMBOautoSource colorspace override. If 'auto', image_info_json is used.

Outputs (2)

NameTypeDescription
imageIMAGEβ€”
image_info_jsonSTRINGβ€”