Image_Detail_HL_frequencye
Frequency separation, the trick that saves IC-Light relights
- image
- detail_image
- mask
- image
Frequency separation sounds like a compositing-nerd rabbit hole right up until you actually need it, and then it's the only thing that fixes the problem. The classic case, well known in the IC-Light community: you relight a photo and the lighting looks right, but skin texture and fine detail get slightly mushed in the process. The fix is to split the image into a low-frequency layer (the big soft stuff - lighting, color, shadow) and a high-frequency layer (the fine stuff - texture, grain, sharp edges), take lighting from your generated pass and detail from the original, and recombine. Image_Detail_HL_frequencye is a generic node that does exactly that split-and-recombine between any two images - not just IC-Light output. It's also the node behind the "detail transfer" trick used in product photography workflows, where you paste original product pixels back after a scene-generation pass so labels and fine texture survive.
How it works
Usefully, the node's own description spells out exactly what each control does and which direction to turn it, so there's no guessing here:
keep_high_freq- coarseness of preserved detail (small → finer, large → coarser).erase_low_freq- hardness of the lighting/shadow layer (small → harder, large → blurrier).blend_opacity- overall strength (small → faint, large → heavy).detail_strength- how strongly detail transfers, can overexpose past 100 (small → weak, large → strong).high_freq_threshold- noise-vs-detail cutoff (small → keeps noise with the detail, large → cleans noise out, at some cost to fine texture).mask_blur- edge softness wherever a mask is applied (small → hard edge, large → soft edge).
blend_mode (default "linear light") does the actual recombination math - linear light is the standard choice for frequency separation, which is presumably why it's the default; the other six (normal/add/multiply/screen/overlay/soft light) are there if it isn't giving you what you want on a particular image.
The inputs and outputs that matter
image- your base, the one whose lighting/color you're keeping.detail_image- the source you're stealing fine detail from, typically your pre-generation original.- The six knobs above, all with sensible defaults (64 / 32 / 16 / linear light / 100 / 100 / 0.5).
mask(optional) +invert_mask- restrict the effect to part of the frame instead of the whole image.- Output:
image.
How to install it
Via ComfyUI Manager: search ComfyUI-Apt_Preset, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset.git
Windows: install.bat. Linux/Mac: pip install -r ComfyUI-Apt_Preset/requirements.txt in your venv. Restart. Pure image math, nothing to download - the pack's broader dependency list is for other corners of this ~300-star, actively maintained pack.
Common issues & troubleshooting
Detail transfer looks like it's doing nothing. Check detail_strength and blend_opacity aren't set too low, and that keep_high_freq isn't so large it's discarding the fine detail you actually wanted transferred. Start from the defaults and adjust one knob at a time using the guide above rather than guessing blind.
Result looks overexposed or blown out. That's detail_strength pushed past 100 (it goes up to 200) - dial it back toward the default.
Not just for IC-Light. Reach for this any time a generation pass nails composition and lighting but softens texture you wanted to keep - face relighting, product shots, any image-to-image pass where the model "cleans up" detail you didn't want cleaned.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| detail_image | IMAGE | — | |
| keep_high_freq | INT | 640–1023 | — |
| erase_low_freq | INT | 320–1023 | — |
| mask_blur | INT | 160–1023 | — |
| blend_mode | COMBO | linear light | 7 options: normal, add, multiply, screen, overlay, soft light, +1 |
| blend_opacity | INT | 1000–100 | — |
| detail_strength | INT | 1000–200 | — |
| high_freq_threshold | FLOAT | 0.500–1 | — |
| maskopt | MASK | — | |
| invert_maskopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |