IC-Light Conditioning
Where you actually tell IC-Light what to relight
- positive
- negative
- vae
- foreground
- opt_background
- positive
- negative
- empty_latent
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 anfbccheckpoint 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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| foreground | LATENT | — | |
| multiplier | FLOAT | 0.1820–1 | — |
| opt_backgroundopt | LATENT | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| empty_latent | LATENT | — |