Nodes/ComfyUI Body Decal/Body Decal Place
ComfyUI Node

Body Decal Place

Turn a flat decal into a body-wrapped layer

By verias·Created 3 months ago·Updated 3 months ago· 1
Body Decal Place
  • image
  • decal
  • region_data
  • decal_alpha_mask
  • image
  • decal_layer
  • decal_mask
decal_scale1.00
decal_height1.00
decal_width1.00
decal_base_rotation0
decal_rotation_offset0.0
warp_mode
manual_offset_x0
manual_offset_y0
alpha_mode
alpha_threshold0.03
alpha_softness0.10

Body Decal Place is the second stage of the modular pipeline and, honestly, the one doing the heavy lifting. It takes the region_data that Body Decal Region worked out, then sizes, rotates, warps, and alpha-processes your decal so it actually looks like it belongs on the body part. Its outputs - decal_layer and decal_mask - are the intermediate product that the next two nodes consume. You won't see the final image here, and that's fine; you're building a layer, not a picture yet.

Reach for this node when you want control over placement and warping separate from blending. If that distinction doesn't matter to you, Body Decal Apply does all of this in one box.

How it works

The decal gets resized relative to the region's length (dist, the pixel distance along the body-part axis): target height is dist × decal_height × decal_scale, and width follows the decal's own aspect ratio times decal_width. Then the two warp_mode options diverge:

  • rotate_paste - rotates the decal to the region's axis angle, then pastes it centered on the region anchor, with manual_offset_x/manual_offset_y (in pixels) for nudging. Fast, fine for most decals.
  • perspective_quad - a true projective warp onto the four-corner quad from the region. The decal leans with the limb. This is the mode for chest tattoos, rib tattoos, sleeve tattoos - anything where a flat rectangle would look Photoshopped on.

Before pasting, alpha handling runs: use_image_alpha keeps the decal's own transparency, black_to_alpha / white_to_alpha knock out solid backgrounds around a threshold with softness controlling the transition band, luma_to_alpha turns brightness into opacity, and none makes everything fully opaque (a fast way to produce a black box, see below). The optional decal_alpha_mask lets you supply a custom alpha instead of trusting the image.

Inputs that matter

image (base), decal (the artwork), and region_data (from Body Decal Region) are required. Then: warp_mode, decal_scale/decal_height/decal_width, alpha_mode (plus alpha_threshold/alpha_softness), and manual_offset_x/manual_offset_y for the last-mile positioning.

Outputs and wiring

  • image - pass-through of the base, for convenience.
  • decal_layer (IMAGE) - the warped decal composited onto a transparent canvas (delivered as RGB; the alpha travels separately).
  • decal_mask (MASK) - the decal's alpha as a mask.

Both feed Body Decal Surface Warp (its decal_layer and decal_mask inputs) and eventually Body Decal Composite. If you're skipping surface warping entirely, you can wire them straight into Body Decal Composite.

Gotchas

If region_data is empty - because Body Decal Region found no person or mask - this node quietly returns an empty layer and mask. Also, alpha_mode = none produces a fully opaque rectangle, which with rotate_paste looks exactly like a sticker pasted on top; when a decal looks wrong, alpha is usually the first thing to fix, not the warp. Install via Manager ("ComfyUI Body Decal") or clone https://github.com/verias/comfyui-body-decal.git into custom_nodes and restart; no models, just numpy and Pillow.

Categoryimage/postprocessing/body decal

Inputs (15)

NameTypeDefaultDescription
imageIMAGE
decalIMAGE
region_dataBODY_DECAL_REGION
decal_scaleFLOAT1.000.2–3
decal_heightFLOAT1.000.2–4
decal_widthFLOAT1.000.2–4
decal_base_rotationFLOAT0-180–180
decal_rotation_offsetFLOAT0.0-90–90
warp_modeCOMBO2 options: rotate_paste, perspective_quad
manual_offset_xFLOAT0-500–500
manual_offset_yFLOAT0-500–500
alpha_modeCOMBO5 options: use_image_alpha, black_to_alpha, white_to_alpha, luma_to_alpha, none
alpha_thresholdFLOAT0.030–1
alpha_softnessFLOAT0.100.001–1
decal_alpha_maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
decal_layerIMAGE
decal_maskMASK