Nodes/PeroPixfy/PeroPix Apply LUT
ComfyUI Node

PeroPix Apply LUT

Give your Anima images a film grade with a plain .cube LUT

By mrm987·Created 3 months ago·Updated about a month ago· 2
PeroPix Apply LUT
  • image
  • IMAGE
lut_name
strength1.00

If you've ever finished a batch of generations and wished they all shared one look - a film emulation, a teal-and-orange grade, a single palette across forty images - this is the node. PeroPix Apply LUT takes an image, runs it through a 3D .cube color lookup table, and hands back the graded result. It's the exact technique video colorists have used for decades, just dropped onto a ComfyUI image tensor.

It's a good fit for Anima in particular. The base model's default aesthetic is deliberately plain (that's by design, not a bug), and the usual fix is a style LoRA or an artist tag. But sometimes you don't want a different style, you want the images you already have to feel consistent. A LUT is deterministic: same image in, same look out, every time. Unlike re-rolling prompts or cranking strength on a LoRA, it unifies a set without touching the sampler at all.

How it works

A .cube LUT is just a text file - a header line (LUT_3D_SIZE 33 or similar) followed by rows of R G B values that map every input color to an output color. The node loads it from ComfyUI/models/luts/, then maps each pixel through the cube with trilinear interpolation via scipy.ndimage.map_coordinates. No GPU work, no model download, no heavy dependency: it's numpy plus the scipy that ComfyUI already ships, and scipy only gets imported the first time you actually apply a LUT.

One honest gotcha up front: the pack's README says it "registers no graph nodes," which is a lie - it registers exactly two, this one and a save node. The README is all about the fullscreen web app; these graph nodes are the bits you use when you build a real workflow instead.

The inputs that matter

Only three, and you set two of them:

  • image - the IMAGE tensor you want graded.
  • lut_name (STRING, default "") - the filename of a .cube sitting directly in ComfyUI/models/luts/. Note this is a plain text field, not a dropdown - type the exact filename, extension included, like Kodak_2393.cube.
  • strength (FLOAT, 0–1, default 1.0, step 0.05) - blends between your original and the graded version. 1.0 is full LUT, 0.5 is a half-strength grade. Handy when the LUT is too aggressive but you like the direction.

The output is an IMAGE of the same batch size. It's not an output node, so it feeds into a Preview or Save Image - pair it with this pack's PeroPix Save Image and you can grade-then-export in jpg or webp.

Installing it

Install is shared with the whole PeroPixfy pack - ComfyUI Manager, search PeroPixfy, click Install, restart. Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/mrm987/PeroPixfy.git

Then restart ComfyUI. There are no third-party Python dependencies to install (the pack's requirements.txt declares none), and the LUT node needs no model files at all - the only "download" this pack does is the optional one-click Anima model pull on the web app's first run, which you can skip entirely if you only want the nodes.

Common issues

  • Nothing happens. The node silently returns the image unchanged when lut_name is empty or the file isn't found - no error, no red box. This is a feature (empty field = passthrough, handy for A/B-ing) but it's also the #1 trap: a typo in the filename and you just get your ungraded image back. Check the name and that the file is directly in models/luts/, not a subfolder.
  • "LUT 로드 실패" / load failure in the console. That prints when the file fails to parse. It only accepts 3D .cube files (LUT_3D_SIZE), not 1D LUTs, and the row count must match size³ exactly - a malformed cube falls back to passthrough, not a crash.
  • The grade looks washed out or crushed. The node works in the standard [0,1] color domain. A LUT authored for a different range (16–235 video, or 8-bit 0–255 values) will look off - prefer LUTs made for full-range images.

Color grading is the kind of thing people ignore until they need it, then can't live without. For the price of a text file in models/luts/, it's one of the easiest post-process wins in ComfyUI.

CategoryPeroPixfy

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
lut_nameSTRING
strengthFLOAT1.000–1

Outputs (1)

NameTypeDescription
IMAGEIMAGE