ColorTransfer PM
A portrait color match that needs no model, no VRAM, and no download
- transfer_from
- transfer_to
- IMAGE
ColorTransfer PM is the rare Portrait-Maker node that has nothing to do with the models. No weights, no VRAM spike, no download. It takes two images, recolorizes one to match the other's color mood, and hands you a single result. Deterministic, instant, and honestly kind of old-school - which is exactly why it's worth having in a portrait workflow where the diffused output keeps drifting into a slightly wrong color cast.
When you'd reach for it
Portrait pipelines live and die on skin tones. You regenerate a face, and it comes back technically correct but a shade too warm, or the whole frame has a greenish cast the sampler introduced. ColorTransfer PM pulls the output back toward a reference photo's grade. In the EasyPhoto-style flow this pack is built around, it's the step that makes the generated ID photo look like it was shot in the same light as your input shot - the diffused image gets its color statistics remapped onto the reference's.
How it works
This is the classic Reinhard color transfer, a trick that predates diffusion by a couple of decades. Both images go into CIELAB color space, the code computes the mean and standard deviation of each channel in both, then rescales the source's distribution to match the target's: shift the mean, scale the spread. No learning involved - it's statistics, and it works surprisingly well for matching overall tone and mood between two photos of the same subject.
The two inputs that matter
- transfer_from - the image you want recolored (typically your generated output).
- transfer_to - the color reference, i.e. the look you want to end up with.
Output is a single IMAGE, the recolored transfer_from. Wire it into the sampler's latent, into a merge, or into a Save Image and eyeball the difference.
Where people get burned
It's global, not per-face. The transfer runs on the whole frame, so a strongly colored background will dominate the statistics and your face might not shift as much as you hoped. If that bites, crop to the face (or mask it) before transferring, or pick a transfer_to with a similar composition. Also note there are no tuning knobs - it's one shot. If the result is too aggressive, that's what the pack's RatioMerge2Image PM is for: blend the recolored result with the original at a ratio you like.
Installing it
ColorTransfer PM needs zero model files, but it doesn't get to skip the pack's first-run ritual. Install the whole pack either through ComfyUI Manager (search "ComfyUI-Portrait-Maker") or:
cd ComfyUI/custom_nodes
git clone https://github.com/THtianhao/ComfyUI-Portrait-Maker.git
Then restart ComfyUI. The pack downloads roughly a dozen models at startup with no hash verification - you can't avoid that download even for a node that doesn't use any of them. Dependencies are the heavy part here: modelscope, insightface, opencv, tensorflow, and diffusers==0.18.2. On Windows you'll want Python 3.11 (the pack ships a prebuilt insightface wheel for it), and the README openly flags ongoing ModelScope Windows dependency issues. Once installed, this particular node runs in milliseconds on CPU - it's the lightest thing in the pack.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| transfer_from | IMAGE | — | |
| transfer_to | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |