Nodes/BV Node Pack/πŸŒ€ BV LUT Job
ComfyUI Node

πŸŒ€ BV LUT Job

Chain looks together by hand, one node at a time

By BlackVortexAIΒ·Created 8 months agoΒ·Updated a day agoΒ· 6
πŸŒ€ BV LUT Job
  • lut
  • plan
  • mask
  • plan
  • job_count
  • summary
β—„strength1.00β–Ί
β—„mask_invertfalseβ–Ί

BV LUT Job is the "manual chains" way to build a LUT plan: each instance of the node appends one LUT + mask operation to an immutable list, and you chain several of them together to describe a sequence of grades. If BV Regional LUT Plan is the fancy route where regions and detectors decide everything, this is the plain, visible, no-magic route - better for small hand-built stacks and for learning what a plan actually is.

A plan here is just a versioned list of jobs, each with a LUT, an optional mask, a strength, and a mask-invert flag. Chain three Job nodes and you've described a three-step grade: warm base, sky swap, vignette. Later, hand that plan to BV LUT Loop Start and the loop executes it in order.

How it works

Each Job node takes a lut (from BV LUT Loader or a registry) plus a strength and a mask-invert toggle, optionally a mask, and - if you're chaining - the previous node's plan. It validates the incoming plan (the author's schema checks are strict: every job needs lut, strength, and mask_invert), appends its own job to a copy, and returns the new plan.

The important word there is immutable: it never mutates the incoming plan, it builds a new one. That matters because it makes plans safe to reuse - the same base plan can feed two different chains without one contaminating the other, which is a surprisingly rare property in graph node land.

Its summary output is the nice touch: a string like Warm Contrast -> Dustfire built from the accumulated job titles. Wire it to a display node and you can read the whole chain at a glance without opening anything.

The inputs and outputs that matter

  • lut - the LUT for this step. A BV_LUT_PROTOTYPE from the Loader or Registry.
  • strength - 0–1, how strongly this step applies.
  • mask_invert - boolean; flips the mask so the grade hits everywhere except the mask.
  • plan (optional) - the incoming plan when chaining; leave unconnected to start a fresh one.
  • mask (optional) - restrict this step to a region.
  • Outputs: plan (feed to the next Job or to Loop Start), job_count, summary.

How to install

Ships in BV Node Pack:

cd ComfyUI/custom_nodes
git clone https://github.com/BlackVortexAI/bv_nodepack.git

Restart ComfyUI, hard-refresh the browser. Or ComfyUI Manager β†’ "BV Node Pack". No model downloads.

Common issues

  • "BV LUT prototype plan job N is invalid" - the incoming plan was built by something that isn't a prototype-format plan, or a job is missing a required field. If you mixed a regional plan into a manual chain, that's your culprit - the two schemas differ.
  • "plan must be a version 1 BV LUT prototype plan" - the plan input isn't a plan at all; you probably connected the wrong output.
  • The loop runs in the wrong order - jobs execute in the order they're appended, so the node closest to Loop Start in the chain is job 1. The summary string shows the order; check it.

For a single look you don't need a plan at all - just BV Apply LUT. But if you're stacking grades and want to keep them explicit, editable, and inspectable, chaining Job nodes beats a pile of nested Apply nodes every time.

CategoryπŸŒ€ BV Node Pack/regional/LUT/Manual Chains (Optional)

Inputs (5)

NameTypeDefaultDescription
lutBV_LUT_PROTOTYPEβ€”
strengthFLOAT1.000–1β€”
mask_invertBOOLEANfalseβ€”
planoptBV_LUT_PLANβ€”
maskoptMASKβ€”

Outputs (3)

NameTypeDescription
planBV_LUT_PLANβ€”
job_countINTβ€”
summarySTRINGβ€”