Nodes/ComfyUI_Stable_Makeup/StableMakeup_Sampler
ComfyUI Node

StableMakeup_Sampler

The Node That Actually Puts the Makeup On

By smthemex·Created 2 years ago·Updated about a year ago· 108
StableMakeup_Sampler
  • id_image
  • makeup_image
  • model
  • image
facedetector
dataname
cfg1.6
steps30
width512
height512

StableMakeup_Sampler is where the Stable-Makeup magic actually happens. You feed it two images - a face to decorate and a photo of the makeup look you want - and it returns a new image of the first face wearing the second's makeup. It's the only consumer of the MAKEUP_MODEL that StableMakeup_LoadModel produces, and the two nodes form a complete, self-contained mini-pipeline. No KSampler, no prompt, no seed. Just two pictures in, one out.

How it works

The sampler runs a four-step dance under the hood:

  1. Both images get upscaled to the width/height you set.
  2. A face detector (mobilenet or resnet) finds the face in the identity image.
  3. SPIGA, a facial-landmark model, maps that face and renders a landmark-conditioning image (a rough "pose map" of eyes, nose, mouth).
  4. The makeup detail encoder embeds the makeup reference through its CLIP image encoder - that embedding is the prompt - then the identity and pose ControlNets guide the UNet denoise so the result keeps your subject's face and structure while adopting the reference's makeup.

That's also why the default cfg is 1.6 instead of the 7 you're used to. There's no text prompt here; an image embedding is doing the steering, and image-prompt conditioning responds to much lower guidance. If you crank cfg toward 30 you'll probably get a mess.

The inputs you'll actually set

  • id_image - the face that stays. makeup_image - the look that gets transferred. Both plain IMAGE inputs, so any LoadImage / image-generating node works.
  • model - the MAKEUP_MODEL output of StableMakeup_LoadModel.
  • facedetector - mobilenet (uses mobilenet0.25_Final.pth) or resnet (uses resnet50.pth). ResNet is the more robust detector if faces are small or angled.
  • dataname - which SPIGA landmark model to use. Stick with 300wpublic: the README only documents downloading spiga_300wpublic.pt. The other options (300wprivate, merlrav, wflw) expect their own spiga_*.pt files in models/stable_makeup that the README never tells you to fetch.
  • steps (default 30), width/height (default 512, 256–768, step 64). This is an SD 1.5 model; 512–640 is the happy zone.

Output

One image. Wire it to a PreviewImage or SaveImage like anything else.

Gotchas worth knowing before you get excited

  • Silent black output. If SPIGA can't find a face (profile shots, tiny faces, heavy occlusion), the code substitutes a black image and keeps going. You get a black rectangle, not an error. Re-run with a clearer front-facing photo.
  • No seed, no prompt. Variation means re-running. The trigger words you might have set on the loader side don't reach this node - there's no text in this pipeline.
  • Set expectations on what "makeup" means here. A community user who tried it described it as basic makeup - eyeshadow, lips, nose, eyebrows, blush. Detailed hand-drawn face patterns don't transfer. If you need pattern-on-face work, people drift toward instruction-editing LoRAs on Flux Fill instead.
  • Heavy. It inherits the full float32 SD 1.5 pipeline from the loader node, so this is not a fast or cheap sampler. First run is especially slow because the loader had to spin everything up.
  • Install is the same as the loader: ComfyUI Manager ("Stable Makeup") or git clone https://github.com/smthemex/ComfyUI_Stable_Makeup into custom_nodes, pip install -r requirements.txt (just insightface), and the model files into models/stable_makeup - the three pytorch_model*.bin, a face detector, spiga_300wpublic.pt, plus an SD 1.5 checkpoint and clip_l.safetensors.
CategoryStable_Makeup

Inputs (9)

NameTypeDefaultDescription
id_imageIMAGE
makeup_imageIMAGE
modelMAKEUP_MODEL
facedetectorCOMBO2 options: mobilenet, resnet
datanameCOMBO4 options: 300wpublic, 300wprivate, merlrav, wflw
cfgFLOAT1.60–30
stepsINT301–10000
widthINT512256–768
heightINT512256–768

Outputs (1)

NameTypeDescription
imageIMAGE