LUT Import (.cube)
Apply Any .cube LUT — DaVinci Exports Included
- image
- mask
- image
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.cubeextension 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.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| filename | STRING | pack_lut.cube | Path 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. |
| strength | FLOAT | 1.000–1 | Blend 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. |
| maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |