Nodes/ComfyUI-IC-Light/IC-Light Conditioning
ComfyUI Node Runs on cloud

IC-Light Conditioning

Where you actually tell IC-Light what to relight

By kijai·Created 2 years ago·Updated about a year ago· 1,157
IC-Light Conditioning
  • positive
  • negative
  • vae
  • foreground
  • opt_background
  • positive
  • negative
  • empty_latent
multiplier0.182

LoadAndApplyICLightUnet patches your model so it's capable of relighting. This node is where you hand it the actual thing to relight. It takes your subject's latent, folds it into the conditioning, and - this is the part people miss - hands back a correctly-sized empty latent to sample into. Skip wiring that last output up right and your generation comes out wrong-shaped or just wrong.

The node's own description is blunt about the one gotcha built into it: the opt_background input only does anything if you're running the fbc checkpoint. If you loaded fc or fcon in LoadAndApplyICLightUnet, feeding this input is a no-op.

How it works

IC-Light generates by conditioning on your subject's foreground latent rather than starting from pure noise the normal way. This node bakes that foreground into your positive and negative conditioning, and produces a matching empty latent sized to the foreground you gave it - sample into this latent, not a separate Empty Latent Image node, or the shapes won't line up. If you're on the fbc model, you can additionally hand it a background latent via opt_background, which is how IC-Light reads "here's the lighting context to relight into."

One small detail worth knowing: the multiplier default is 0.18215. If that number looks familiar, it should - it's SD1.5's own VAE latent-scaling constant. The node is doing the correct scaling for you by default; there's rarely a reason to touch it unless you know exactly why.

The inputs and outputs that matter

  • positive / negative (CONDITIONING) - your usual CLIP Text Encode outputs, same as any SD1.5 workflow.
  • vae (VAE) - matching your SD1.5 checkpoint.
  • foreground (LATENT) - your subject, VAE-encoded first. This is the image that gets relit.
  • multiplier (default 0.18215) - latent scaling; leave it alone unless you have a specific reason not to.
  • Optional opt_background (LATENT) - only meaningful with an fbc checkpoint loaded; supplies the lighting context as an actual image rather than a text description.

Outputs: positive and negative CONDITIONING (wire to your KSampler as normal), and empty_latent - the correctly-shaped starting latent for that same KSampler's latent_image slot.

How to install it

ComfyUI Manager, search "IC-light", install, restart - or git clone https://github.com/kijai/ComfyUI-IC-Light into custom_nodes manually. No extra models for this node itself; it needs LoadAndApplyICLightUnet upstream to have already loaded the relighting weights onto your model.

Common issues & troubleshooting

Output looks nothing like your subject, or the sampler errors on shape mismatch. Almost always someone wired a separate Empty Latent Image node into KSampler instead of this node's empty_latent output. Use the one this node gives you - it's sized and conditioned to match your foreground.

opt_background is wired but seems to do nothing. Check what you loaded in LoadAndApplyICLightUnet - this input is inert unless the model_path there was set to iclight_sd15_fbc. It's not a bug, it's exactly what the node's own description warns about.

Background colour is bleeding into your subject when you use opt_background. That's a known fbc behaviour, not a mistake on your end - it pulls colour off the background into the foreground. If it's fighting you, skip opt_background entirely, load fc instead, and describe the background in your positive prompt - foreground-only IC-Light often composites better than the background-conditioned version, counter-intuitively.

Lighting direction isn't doing what you expect. This node doesn't control direction by itself - that comes from how you set up the foreground/background you feed it (a gradient from LightSource, or a background image with the light baked in). Think of ICLightConditioning as the plumbing, not the light switch.

CategoryIC-Light

Inputs (6)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
foregroundLATENT
multiplierFLOAT0.1820–1
opt_backgroundoptLATENT

Outputs (3)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
empty_latentLATENT