🎈LG Relight Ultra
The multi-light 3D relight editor, depth map and all
- bg_img
- bg_depth_map
- bg_normal_map
- mask
- IMAGE
This is the flagship of the LAOGOU Relight pack, and the one the other two are build-ups to. LG Relight Ultra is a full 3D lighting editor that runs in your browser: it takes your image plus its depth and normal maps, reconstructs the scene as an actual textured 3D surface, and lets you drop in multiple light sources - point lights and spotlights - each with its own color, intensity, radius and falloff. A single node's lighting was always limited, the author's README admits; Ultra is the answer to that.
If you've ever wanted "studio lighting" control over a single still image without leaving ComfyUI, this is the closest thing in the pack.
How it works
Unlike the Basic and plain LG Relight nodes, Ultra feeds three inputs into the editor. The bg_img is your image. The bg_depth_map drives actual geometry: the three.js scene displaces the image plane along Z so surfaces really catch light at an angle. The bg_normal_map supplies surface orientation for shading. In the editor you get per-light controls - point light radius, spotlight angle and penumbra (soft edge) - plus ambient light strength, a Z offset for pushing the whole light rig toward or away from the camera, and a normal strength slider. There's even a seed widget on the node so you can randomize the light setup and explore.
The optional mask restricts where the relight applies, which is the honest way to keep a relight from wrecking something you want left alone. When you Apply, the rendered frame is uploaded back and the node returns a single IMAGE.
Two inputs you should know about because they control the failure mode:
wait_timeout(5–300, default 120) - how many seconds the node waits for the frontend to answer. If the editor never responds in time, Ultra returns your originalbg_imguntouched. That reads as "nothing happened," not a crash.skip_dialog(default off) - the batch button. Turn it on and the node skips the editor entirely, reusing the light settings you last saved (or defaults if there are none). That's the difference between relighting fifty catalog shots manually and letting them fly through.
Installing it
Identical to the rest of the pack:
ComfyUI Manager → Install Custom Nodes → search "Comfyui-LG_Relight"
or cd ComfyUI/custom_nodes && git clone https://github.com/LAOGOU-666/Comfyui-LG_Relight, then restart ComfyUI and hard-refresh the browser. No requirements.txt, no model downloads - the pack itself is lightweight. The preprocessors you feed it are another story: the shipped example workflows pair Ultra with DepthAnythingPreprocessor and Metric3D-NormalMapPreprocessor from comfyui_controlnet_aux, and those pull real models on first run. Factor that in if you're on a slow connection.
Common issues
- You get your original image back. That's the
wait_timeoutfallback - the frontend didn't respond in time, or you cancelled the editor. Bump the timeout, check the browser console for a failed three.js load from the CDN, and confirm the tab is actually focused. - Relight looks flat. Your depth and normal maps don't match the image - wrong crop, wrong orientation, or you swapped the two. Re-run the preprocessors from the example workflow.
- Editor won't open on a headless/remote server. It should work, since the editor is in-browser (the pack deliberately dropped its old PyQt window), but the browser still needs internet for the CDN-hosted three.js.
The README's closing note is worth keeping: even at Ultra's level of control, this is a lighting pass - the author pairs it with IC-Light for the best results. Think of Ultra as getting the direction and mood exactly right, and IC-Light as finishing the job. The pack's own relight_ultra+LBM.json example even chains it with an LBM sampler pass. For one pack that's a surprising amount of range: a slider node, an interactive editor, and this.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| bg_img | IMAGE | — | |
| bg_depth_map | IMAGE | — | |
| bg_normal_map | IMAGE | — | |
| wait_timeout | INT | 1205–300 | 等待前端响应的最大时间(秒) Maximum time to wait for frontend response (seconds) |
| maskopt | MASK | — | |
| skip_dialogopt | BOOLEAN | false | 开启后将不再显示光照编辑窗口,直接使用之前保存的光照设置(如果没有则使用默认设置) Enable to skip the lighting editor dialog and directly use previously saved lighting settings (or default settings if none exist) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |