ComfyUI Node

LBMRelight

Four-step relighting that's fast, impressive, and not a magic bullet

By thrumdev·Created about a year ago·Updated about a year ago· 2
LBMRelight
  • model
  • input_image
  • output_image
num_steps4

LBMRelight is the actual payoff of the LBM (Latent Bridge Matching) pack: you feed it a photo and it hands you the same photo relit, in about four diffusion steps. When the wrappers for this model landed in mid-2025, the first reaction in r/comfyui was literally "is the new ic-light!!!!" - and for good reason. IC-Light was stuck on SD 1.5 and needed careful foreground/background plumbing; this runs on an SDXL backbone from a single input image. It's genuinely fast, and it's one of the few relighters that feels like it's re-emitting light rather than smearing a colour overlay.

Here's the mechanism, minus the paper's math. Normal diffusion starts from noise and denoises toward an image. Latent Bridge Matching instead learns a bridge between two images in latent space - your input photo at one end, the relit result at the other - and walks that bridge with a flow-matching sampler. Your image gets encoded to SDXL latents (in bf16), the model does num_steps bridge steps, and the VAE decodes the result. The default of 4 steps isn't an arbitrary lowball: the relight config was trained on exactly four timesteps (250, 500, 750, 1000), so four is the sweet spot, not a compromise. There's no text prompt and no lighting-direction widget - unlike IC-Light's Lighting Preference, you can't tell it "light from the left." The model infers lighting from the image itself, which is both its elegance and its limit.

Three inputs, one of which you'll actually touch:

  • model (MODEL) - must come from the pack's LBMLoader. This is the whole gotcha, see troubleshooting.
  • input_image (IMAGE) - any image, from LoadImage or anything upstream. Run at whatever resolution you feed it; the SDXL VAE is the VRAM bottleneck.
  • num_steps (INT, default 4) - the only knob that matters. More steps rarely buys you anything and costs you time; fewer gives rougher results. Leave it at 4 unless you're experimenting.

The output is a single output_image (IMAGE) - wire it to SaveImage or keep it flowing through post-processing. That's the whole graph: LBMLoader → LBMRelight → SaveImage.

Install is the same as for the pack (ComfyUI Manager, search "LBM Latent Bridge Matching", or git clone https://github.com/thrumdev/lbm-comfyui), plus the ~5GB model.safetensors from jasperai/LBM_relighting into models/diffusion_models, and the SDXL VAE downloads itself on first run. Note the weights are cc-by-nc-4.0 - non-commercial.

Set your expectations, because the community has. The honest feedback from people who actually ran this: it's great at harmonizing a subject with a new background's light, but it's not a real directional relight. Shadows don't fully integrate when the background has high-contrast lighting, results can read as photo-montage, and - the one that stings - it occasionally "blows out some detail in the face," making a person look like a different person, with pupils reading larger. If you just need a subtle lighting nudge, this may be overkill; if you need a whole batch of product shots relit with details preserved byte-for-byte-ish, IC-Light with frequency separation is still the more reliable tool (the KB's ic-light essay covers that pipeline).

Troubleshooting. The classic failure: you connect model from a KSampler's checkpoint loader because both sockets say MODEL, and the run dies with an attribute error. LBMRelight wants the LBMLoader's MODEL and nothing else. Second: OOM on large inputs - the SDXL VAE decode is hungry, so downscale or process one image at a time (the node iterates a batch internally, but each one still needs room). Third: if output looks rough, you set num_steps to 1 or 2 - go back to 4. This is one of those nodes that works great exactly at its defaults.

Categorylbm

Inputs (3)

NameTypeDefaultDescription
modelMODEL
input_imageIMAGE
num_stepsINT41–1000

Outputs (1)

NameTypeDescription
output_imageIMAGE