MakeUpTransfer PM
A Whole GAN Just to Borrow Someone's Eyeliner
- source_image
- makeup_image
- IMAGE
PM_MakeUpTransfer is the glamour node in the Portrait-Maker pack. You give it a photo of a face and a photo of a face wearing makeup you like, and it transfers the makeup - eye shadow, eyeliner, lipstick, the works - from the reference onto your subject. Same function as the makeup-transfer step in EasyPhoto (the webui project this whole pack is adapted from), and like that original, it's a straight GAN pipeline, not a diffusion trick.
How it works
Under the hood it runs PSGAN (the "Pose and Shape robust GAN" from the 2019 makeup-transfer literature). The flow: both images get preprocessed - faces detected and cropped via the pack's RetinaFace matting - then the makeup reference's style is baked onto the source face's geometry, and the result is pasted back into the original crop. It needs three pieces of model weight to do it: makeup_transfer.pth and face_landmarks.pth (both downloaded into the pack's models/ folder on first run, from Aliyun's OSS), plus the RetinaFace face detector and face-skin mask, which modelscope pulls lazily on the first call.
Practical consequence: the first time you run it, nothing happens for a while - model loading, not a hang. Subsequent runs are fast. It's also built for CUDA: the source hardcodes "cuda" for the inference device, so on a CPU-only machine this node will fail outright. That's worth knowing before you wire it into a laptop workflow.
The inputs
Two images in, one out. That's the entire schema:
- source_image - the face that gets the makeup.
- makeup_image - the reference whose makeup gets borrowed.
One IMAGE comes out, same size as the source. No intensity slider, no "how much makeup" control. If you want a subtler effect, you can composite the output back toward the original - this pack's PM_RatioMerge2Image does exactly that, and it's the standard trick. (You can't build that blend in the newv2 "Super" nodes mentioned in the README changelog, but for the plain node here, ratio-merging is your dial.)
Expectations, calibrated
This is 2019-era GAN tech, and it shows. It's genuinely decent at transferring bold, colorful looks - dramatic eyeshadow, strong lips - but "realistic" here is a soft, slightly plastic finish, not a photoreal regrade. Don't expect it to understand subtle everyday "no-makeup" makeup. For the artistic/editorial look it was built for, it's honestly still the quickest two-image shortcut in this pack, which is why it survives while newer identity tools have taken over the other job of keeping someone recognizable (see the KB's identity-preservation docs - InstantID, PuLID, IP-Adapter own that space now; this GAN never tried to).
Install and gotchas
Ships in ComfyUI-Portrait-Maker. Install via ComfyUI Manager (search "Portrait-Maker") or:
cd ComfyUI/custom_nodes
git clone https://github.com/THtianhao/ComfyUI-Portrait-Maker.git
restart, then be patient on first launch - the pack installs heavy deps (tensorflow, insightface, modelscope, a pinned diffusers 0.18.2) and downloads many models with no hash verification. Interrupted downloads must be deleted manually and re-fetched.
Two practical tips: pre-scale both faces to a sane working size with PM_ImageScaleShort (crop_face on) - the GAN behaves better on aligned, not-huge crops. And match the two images' face sizes reasonably; wildly different face scales make the transfer look off. When in doubt, run both through the same scaling node.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| source_image | IMAGE | — | |
| makeup_image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |