Nodes/LCS/LCS Color Intervene
ComfyUI Node

LCS Color Intervene

LCS Color Intervene

By facok·Created 6 months ago·Updated 2 months ago· 160
LCS Color Intervene
  • model
  • lcs_data
  • color
  • mask
  • model
strength1.00
modeinterpolated
start_step8
end_step10

The quick way to think about LCS Color Intervene: it's color grading that happens while the image is still being drawn, not after it's finished. You feed it a hex color, it pushes the whole generation toward that color during the denoising steps, and - here's the part that makes it different from tinting the finished PNG in an editor - the model keeps drawing with that color in mind for the rest of sampling. Warm sunset clouds end up looking lit from inside, not tinted orange over an already-completed picture.

That's the entire bet of the Latent Color Subspace paper (Pach et al., ICML 2026) this pack implements: in the 64-dimensional patch space diffusion models denoise in, color lives in a 3D subspace, and PCA captures essentially 100% of the color variance there. Everything else - structure, texture, detail - sits in the remaining 61 dimensions, orthogonal to color. The node projects the denoised prediction into that 3D space, nudges it toward your target HSL value, and writes it back, leaving the 61-dim structural residual alone. It's a post-CFG hook, so it runs in-process during sampling. No API, no key, no LoRA, no training - and no VAE round-trip at generation time.

The graph

Three nodes, and it's the first thing the README shows you:

LCS Load Data → LCS Color Intervene → KSampler

Inputs that matter

  • model - your checkpoint, or the MODEL output of whatever's upstream.
  • lcs_data - from LCS Load Data, which auto-calibrates against your VAE once and caches the result by VAE fingerprint.
  • color - hex target, default #FF0000.
  • strength - 0.0–2.0. 1.0 is the paper's full shift; 0.5 is a subtle nudge. Push past ~1.2 and you're oversaturating.
  • mode - interpolated (default) blends Type I and Type II using the sigma schedule; type_i is a straight translation in 3D LCS, good for strong global shifts; type_ii is a per-patch HSL remap via bicone geometry, better for precise local control.
  • start_step / end_step - default 8–10 out of 50, which the paper calls optimal.
  • mask - optional, downsampled to the patch grid for localized control.

Output is a single model, wired straight into the KSampler.

Installing it

The whole pack installs in one shot - all LCS nodes ship together:

cd ComfyUI/custom_nodes
git clone https://github.com/facok/ComfyUI-LCS.git
pip install einops safetensors

then restart ComfyUI. Or use ComfyUI Manager and search "LCS". Dependencies are minimal (einops + safetensors), and both are already present in most installs. One thing to know: the pack uses ComfyUI's newer V3 extension API (comfy_api.latest), so if the nodes don't show up after install, update ComfyUI itself first.

Where people get burned

Strength runs away fast. 1.0 is a full paper-strength shift; anything above ~1.2 makes shadows weird and pushes skin tones into clown territory. Start at 0.6 and climb.

The step window matters. The paper's 8–10 is a tight, late window and it's the right default for full 50-step sampling. Spread the window too wide and the intervention fights the sampler instead of steering it.

Distilled models break the defaults. z-image-turbo and friends run a handful of steps, so the paper's step 8–10 advice doesn't transfer - start at step 0 or the intervention barely has room to act. This applies to every LCS node, not just this one.

Also worth knowing: calibration is per-VAE and cached, so switching VAEs triggers a fresh (automatic, a few seconds) recalibration.

Honest verdict: for a one-off recolor this is genuinely the cleanest tool in the pack, because the model adapts to the color rather than having it applied on top. For heavy relighting, a color LoRA or an img2img pass in the target palette is usually more controllable. But that "colors look intended, not painted on" quality is something post-processing can't reproduce.

CategoryLCS/intervention

Inputs (8)

NameTypeDefaultDescription
modelMODEL
lcs_dataLCS_DATACalibration data from LCSLoadData
colorCOLOR#FF0000Target color
strengthFLOAT1.000–2Intervention strength (1.0 = full, 0.0 = none)
modeCOMBOinterpolatedInterpolated blends Type I (LCS shift) and Type II (HSL shift)
start_stepINT80–50First step to apply intervention (paper optimal: 8)
end_stepINT100–50Last step to apply intervention (paper optimal: 10)
maskoptMASKOptional mask for localized color control

Outputs (1)

NameTypeDescription
modelMODEL