IC-Light V2 (fal.ai)
The fal.ai wrapper, explained
- image
- mask
- images
The title says "IC-Light V2," so the important part first: this node doesn't run the model, and it won't ask you to download a single checkpoint. It's a wrapper for the fal.ai API. Your image leaves your machine, a paid server does the relighting, and the result comes back. No GPU, no 10+ GB Flux model, no model files at all - just an API key and a card on file.
Why does a wrapper like this even need to exist? Because of one of the weirdest release stories in the whole ecosystem. lllyasviel shipped IC-Light in May 2024 as three SD 1.5 checkpoints that relight a photo by construction - light changes, but logos, stitching and label text hold still, which is exactly what whole-frame editors can't promise. Then he announced V2, a Flux-based rebuild that was supposed to fix V1's worst habits: small-face degradation, the warm orange skin-tone shift, and stylised art being dragged toward photorealism. And then he never released the weights. Two years later, V2 still only exists behind the fal.ai API at roughly $0.10 per megapixel. This node is the ComfyUI door to that API - the only door, since even the HuggingFace demo Spaces have decayed.
So the honest framing: if you've been fighting V1's limits on product or portrait work, this is the paid upgrade path. If you googled "IC-Light V2" expecting open weights, this is the node that tells you they don't exist.
How it works
The mechanism is unglamorous and reliable. When the node runs, it serializes your input IMAGE to a temp file, uploads it to fal, subscribes to the fal-ai/iclight-v2 endpoint with your parameters, downloads whatever comes back, saves a copy into ComfyUI's output folder (look for iclight_v2_*.png/jpg), and hands you a tensor so the result can flow into the rest of your graph. The dependencies are light: fal-client>=0.5.0, requests, pillow, configparser. There's nothing to download because the model never leaves fal's servers.
The inputs that matter
The parameter list is long, but you'll actually touch four of them:
- image + prompt - the photo and a lighting sentence, not an instruction. "Golden hour, soft window light" works; "relight this from the left" doesn't. That's the IC-Light prompting style carrying over from V1.
- initial_latent - the direction bias:
None,Left,Right,Top,Bottom. This is V1's Lighting Preference control, reborn. - mask (optional) - a native ComfyUI MASK that restricts which region gets relit. The node uploads it as a separate PNG, which is handy for protecting the subject while the background does all the work.
- enable_hr_fix - a two-pass high-res fix with
lowres_denoise,highres_denoiseandhr_downscalebehind it. Flip it when faces come back soft.
Everything else mostly deserves its default. guidance_scale (how strictly the prompt is enforced) and cfg (the model's CFG scale) are two separate knobs on the fal API - leave them alone until you know what you're doing. Set seed to anything but -1 for reproducible results; num_images (up to 4) multiplies your bill along with your variations. The single output, images, wires straight into a preview or save node.
Install
Easiest via ComfyUI Manager - search "IC-Light V2 (fal.ai)" and hit install. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/a-und-b/ComfyUI_IC-Light-v2_fal.git
cd ComfyUI_IC-Light-v2_fal
pip install -r requirements.txt
Then the API key, which is the step everyone half-skips. Copy config.ini.template to config.ini in the node folder and paste in your fal key, or export FAL_KEY as an environment variable. No key and the node raises a hard ValueError on first run - that's it telling you the config didn't land. Restart ComfyUI after install.
Where people get burned
- A stale
fal-client. The requirements pinfal-client>=0.5.0because anything older breaks with a baffling "module 'fal_client' has no attribute 'subscribe'". If you see that,pip install -U "fal-client>=0.5.0". - The price sneaks up. $0.10 per megapixel is roughly a 1024×1024 image, and HR fix plus multiple variations are extra passes on top. A batch of 20 product shots is no longer free or cheap.
- Privacy. Your image is uploaded to a third party. Fine for shots you own; a genuine problem for client work under an NDA. If that's your situation, the local kijai IC-Light node on V1 is the offline fallback.
- It's a dependency chain, not a model. If fal's endpoint is down or your card is declined, you get an error, not an image - there's no local fallback baked in.
For general free relighting in 2026 you'd honestly reach for Qwen-Image-Edit or Flux 2 Klein instead. This node exists for the specific case where V2's detail preservation is worth paying for - the batch product catalogue where logos must not drift.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| prompt | STRING | — | |
| negative_prompt | STRING | — | |
| num_inference_steps | INT | 281–100 | — |
| guidance_scale | FLOAT | 5.01–20 | — |
| seed | INT | -1-1–2147483647 | — |
| initial_latent | COMBO | None | 5 options: None, Left, Right, Top, Bottom |
| enable_hr_fix | BOOLEAN | false | — |
| lowres_denoise | FLOAT | 0.980–1 | — |
| highres_denoise | FLOAT | 0.950–1 | — |
| hr_downscale | FLOAT | 0.500.1–0.9 | — |
| num_images | INT | 11–4 | — |
| cfg | FLOAT | 1.00–30 | — |
| output_format | COMBO | jpeg | 2 options: jpeg, png |
| maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |