Nodes/ComfyUI-JH-PixelPro/LUT Import (.cube)
ComfyUI Node

LUT Import (.cube)

Apply Any .cube LUT — DaVinci Exports Included

By jetthuangai·Created 5 months ago·Updated 4 months ago· 5
LUT Import (.cube)
  • image
  • mask
  • image
filenamepack_lut.cube
strength1.00

JHPixelProLUTImport reads a .cube LUT file from disk and applies it to your image. It's the mirror image of the pack's LUT Export: that node bakes a ComfyUI grade into a .cube, this one takes any .cube - DaVinci exports, Premiere creative looks, Film Convert, Lutify.me, whatever you've accumulated - and applies it inside ComfyUI. If you came from a video workflow with a folder of LUTs, this is how you get those looks onto your SDXL outputs.

How it works: the node parses the Adobe Cube 1.0 file, builds the 3D grid, and resamples each pixel through it with trilinear interpolation - the same interpolation Resolve and OBS use by default. Colors outside the LUT's DOMAIN_MIN/DOMAIN_MAX range get clamped, with no extrapolation. So a regular LUT fed HDR values just clips; an HDR-aware LUT with an expanded domain works fine.

Inputs that matter:

  • image - the IMAGE to grade.
  • filename - path to the .cube. Relative paths resolve against ComfyUI/input/; absolute paths work verbatim. Unlike export, the .cube extension is not auto-appended on read - type it exactly.
  • strength - the blend between original and graded, 0.0–1.0, default 1.0. For a subtle dose use 0.5–0.8. This is the "is that too much?" knob, and it's the one you'll actually live on.
  • mask (optional) - gates where the LUT applies. This is the sleeper feature: wire a luminosity mask from the pack's JHPixelProLuminosityMasking and you can apply a LUT only to shadows, or only to skin, or only to the background.

Output: a single graded IMAGE.

Round-tripping: run the pack's LUT Export workflow to emit pack_lut.cube into output/, copy it to input/, and re-apply it here. That's a clean way to verify a grade survived the bake, or to move a look onto a different source. The default filename on this node is literally pack_lut.cube to close that loop.

Install is the shared pack install:

cd ComfyUI/custom_nodes
git clone https://github.com/jetthuangai/ComfyUI-JH-PixelPro.git
cd ComfyUI-JH-PixelPro
pip install -r requirements.txt

Restart and find it under ComfyUI-JH-PixelPro/color, or use ComfyUI Manager → search "ComfyUI-JH-PixelPro".

Troubleshooting: file-not-found is the #1 issue - relative paths resolve against input/, not output/, and you must include the .cube extension. If the grade looks flat or clips, check whether your LUT expects an HDR or LogC input; this node assumes linear [0,1] float, so bake the input transform upstream or supply a LUT that encodes it. Trilinear interpolation is the Resolve/OBS/OCIO default, so don't worry about the deferred tetrahedral interpolation unless you're pixel-peeping LUT vertex boundaries.

CategoryComfyUI-JH-PixelPro/color

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
filenameSTRINGpack_lut.cubePath to the .cube file. Relative paths resolve against ComfyUI's input/ directory; absolute paths are honored verbatim. The '.cube' extension is NOT auto-appended on read (explicit, so the user sees the exact filename being loaded). Pairs with the 'pack_lut.cube' default emitted by N-13 LUT Export to close the round-trip loop.
strengthFLOAT1.000–1Blend factor between the original image and the LUT-applied result: 0.0 = pass-through (LUT ignored), 1.0 = full LUT. Linear interpolation out = in * (1 - s) + lut(in) * s. Use 0.5 – 0.8 for a subtle creative-look dose.
maskoptMASK

Outputs (1)

NameTypeDescription
imageIMAGE