Nodes/ComfyUI-IC-Light-Video/IC-Light Video (Frame by Frame)
ComfyUI Node

IC-Light Video (Frame by Frame)

IC-Light Video (Frame by Frame)

By Polygoningenieur·Created 12 months ago·Updated 12 months ago· 2
IC-Light Video (Frame by Frame)
  • images
  • model
  • positive
  • negative
  • vae
  • sampler
  • sigmas
  • latent_image
  • opt_background
  • images
start1
stop0
step1
multiplier0.182
add_noisetrue
noise_seed0
cfg8.0

The name is doing honest work. IC-Light Video (Frame by Frame) takes a batch of frames - say, a loaded video - runs IC-Light's relighting on every single frame, and hands you back a fresh image stack you can wire straight into a VideoCombine node. It's not cleverer than that, but it doesn't need to be. Without it, relighting a clip means building the same encode → condition → sample → decode chain once per frame, and this node collapses all of that into one box.

A quick refresh on the model underneath, because it matters for everything else here. IC-Light is lllyasviel's SD 1.5 relighting model: you give it a subject and a lighting description, and it re-lights the image and the background that lighting implies, while leaving the subject's material and structure alone. Its code has been frozen since a day after release in May 2024, and it's still the right answer for one narrow job - relighting where details must survive. This pack is a fork of kijai's standard ComfyUI-IC-Light with exactly one node added on top, and the whole rest of the pack is kijai's machinery.

How it works

For every frame the node VAE-encodes it, builds IC-Light's conditioning (the foreground latent concatenated into the sampler at a multiplier), runs a custom-sampler pass, and decodes back to an image. All the fiddly parts - the 8-channel UNet patch, the concat-latent conditioning, the extra_conds handling - are the same kijai implementation, just looped over your frames. You don't build that graph; you feed the node its pieces and it grinds through the clip.

The required inputs are exactly what a kijai-style IC-Light workflow would need: images (your frames), model (an SD 1.5 checkpoint with the pack's Load And Apply IC-Light node applied - IC-Light refuses anything that isn't SD 1.5), positive and negative conditioning (describe the light: "sunset over sea, warm light from the right"), vae, and the sampler + sigmas pair from a scheduler node.

The optional inputs worth actually touching:

  • start, stop, step - the frame slicer. start defaults to 1 and is 1-indexed, so frame 1 is your first frame. stop left at 0 means all frames; set it to 8 and it processes frames 1–8 inclusively. step skips frames if you only want every Nth one.
  • cfg (default 8.0), noise_seed, add_noise - the sampling knobs, same as you'd set on a KSampler.
  • multiplier (default 0.18215) - the IC-Light conditioning strength, same default kijai uses. Dial it down and the relight gets subtler.
  • latent_image - plug a latent in if you want the sampler to start from something other than the empty one.
  • opt_background - only valid with the fbc model variant (the one conditioned on a background image), and even then the KB's warning stands: fbc bleeds background color into the subject, so fc usually composites better.

The output is a single images tensor with every processed frame concatenated - that's your feed for VideoCombine from VideoHelperSuite.

Installing it

ComfyUI Manager is the easy route: search "IC-Light" (or "IC-Light-Video") and install. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/Polygoningenieur/ComfyUI-IC-Light-Video

then restart ComfyUI. The only real dependency is opencv-python; Manager sorts it out. Grab the models through Manager (search "IC-light", they land in ComfyUI/models/unet/IC-Light) or download iclight_sd15_fc.safetensors (the default), fcon (when fc washes out your darks), or fbc from lllyasviel/ic-light on HuggingFace into models/unet. One real gotcha: don't install this alongside kijai's ComfyUI-IC-Light - the README says only one is needed, and since they share the other node classes you'll get duplicate registration.

The honest take on video

Here's the part nobody advertises: each frame relights independently, so your output flickers exactly as much as IC-Light's frame-to-frame consistency allows - and the KB's verdict is blunt that video was never really solved with IC-Light, because temporal consistency was always the blocker. This node is the convenient version of that 2024-era approach, and the convenience is real. Reach for it on short clips or static-ish shots, and plan a deflicker/denoise pass afterward.

Two more things to know. First, if every frame errors (wrong model, bad conditioning), the node doesn't crash - it silently returns your original frames, so watch the console log for "Error" lines or you'll think the relight just wasn't strong enough. Second, expect the warm skin-tone shift on people; the pack's Detail Transfer node is a frequency-separation blend, which is the standard fix - take lighting from the relight, detail from the original.

CategoryIC-Light

Inputs (16)

NameTypeDefaultDescription
imagesIMAGEMultiple Images
modelMODELIC-Light model
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
samplerSAMPLER
sigmasSIGMAS
latent_imageoptLATENTPlug in a latent image for the sampler, otherwise an empty latent is used.
opt_backgroundoptLATENT
startoptINT11–18446744073709550000Frame to start at.
stopoptINT00–18446744073709550000Frame to stop at. Leave at 0 to use all frames.
stepoptINT11–18446744073709550000How much frames to step over each iteration.
multiplieroptFLOAT0.1820–1Conditioning Multiplier
add_noiseoptBOOLEANtrueAdd noise to sampler.
noise_seedoptINT00–18446744073709550000Sampling Noise Seed
cfgoptFLOAT8.00–100Sampling cfg

Outputs (1)

NameTypeDescription
imagesIMAGE