LayerColor: ColorAdapter
ColorAdapter — match one image's color to another's
- image
- color_ref_image
- image
You've composited a cutout onto a new scene and it looks wrong - the subject is cool and clean, the background is warm and golden, and your eye instantly clocks it as fake. ColorAdapter fixes that. It takes your image and a reference image, and shifts the first one's color and tone to match the second. Point it at the background as the reference and the pasted-in element suddenly belongs.
Same trick works for consistency across a set: run every shot through with one hero frame as the reference, and they all pick up the same grade. It's a color-transfer node, and it's the one to reach for when the problem is "these two don't feel like they were shot together."
How it works
It's statistical color transfer: the node reads the color distribution of the reference image and reshapes your image's colors toward it, so the overall palette, warmth, and tonal balance line up. It's matching the feel of the reference's color, not copying content. The opacity control then blends that shift back against your original, so you can take a partial dose instead of the full match.
The inputs and outputs that matter
Three inputs, and really you only tune one:
image- the one being corrected.color_ref_image- the look you're matching to. This is the whole game: pick a reference whose color you actually want.opacity(0–100, default 75) - how far to push toward the reference. 100 is a full match (can be too much and shift skin tones oddly); the 75 default is a sensible "clearly matched but not overcooked" starting point. Dial down if it overcorrects.
Output: one adapted image.
How to install it
Part of the LayerStyle pack. Via ComfyUI Manager: search LayerStyle, install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/chflame163/ComfyUI_LayerStyle
pip install -r ComfyUI_LayerStyle/requirements.txt
then restart. It's under 😺dzNodes → LayerColor. No dedicated model download.
Common issues & troubleshooting
The match is too aggressive. Pull opacity down. A full-strength transfer can drag skin tones toward the reference's cast or flatten contrast - 40–70 often looks more natural than 100.
It picks up the wrong color. The node matches the reference's overall distribution, so if your reference is mostly sky, your image goes blue. Crop or choose a reference that represents the grade you actually want, not one dominated by a single color.
Two shots still don't match after adapting each separately. Adapt them both to the same reference frame, not to each other. Chaining pairwise drifts.
The node is missing. The LayerStyle pack failed to import. The usual reason is a broken transformers install (a stray TensorFlow is the classic offender) crashing the whole pack on load. Read the startup traceback, use "Try Fix" in Manager, or repair the offending dependency.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| color_ref_image | IMAGE | — | |
| opacity | INT | 750–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |