Nodes/TrentNodes/Bevel/Emboss Effect
ComfyUI Node

Bevel/Emboss Effect

Photoshop's bevel and emboss, as a node

By TrentHunter82·Created 9 months ago·Updated 4 days ago· 36
Bevel/Emboss Effect
  • image
  • mask
  • IMAGE
depth5.0
angle135
highlight_opacity0.75
shadow_opacity0.75
soften0.0
mode
bevel_width5.0
debug_devicefalse
mask_mode
mask_blur0.0

Bevel and emboss is the classic Photoshop layer-style effect, and this node ports it to the graph: it computes a synthetic depth map from the image and lights it from a chosen angle, so edges either pop up (bevel) or get pressed down (emboss). It's pure deterministic pixel math - no model, no diffusion pass - which is exactly the kind of job the post-processing layer of the ecosystem says you should reach for a node for instead of burning a generation. Think UI panels, game assets, chunky title art, "engraved" labels, or giving a flat render a fake 3D rim.

The mechanism is old-school and cheap. An angle vector (from angle, in degrees, default 135 - the classic upper-left light) is used with depth to build an offset, and the result is split into highlight and shadow channels whose strengths are set by highlight_opacity and shadow_opacity (both default 0.75, and both allowed up to 5.0 if you want to overdrive them). soften blurs the transition for a rounder, less chiseled look. There are four modes:

  • emboss - raises the whole surface; the classic "pressed into metal" relief.
  • bevel_inner - a bevel cut inward from the image's alpha/edge.
  • bevel_outer - a bevel that extends outward past the shape.
  • pillow_emboss - the rim-lighting effect that looks like the subject is resting on a cushion of light.

bevel_width controls how far the bevel extends from the edge (default 5). Because some of these modes key off the image's shape, feeding it a cutout with a clean alpha gives you the Photoshop experience; a flat full-frame image mostly bevels the outer border.

Masking it

The optional mask input is where this gets more useful than the Photoshop filter. With mask_mode you pick apply_to_masked or apply_to_unmasked, so you can bevel only a specific region (a logo, a face, one object) while the rest of the frame stays untouched. mask_blur feathers the mask boundary so the effect doesn't stop at a hard line - which is the difference between "inserted" and "designed." If you've got a mask from a segmentation model, this is the way to apply the effect precisely instead of to the whole frame.

Output is a single IMAGE. The only required inputs are image, depth, angle, the two opacities, soften, mode, bevel_width, and debug_device (a leftover toggle that prints device info - you can ignore it). Everything has a sensible default; you can add the node and move exactly one slider and get a reasonable result.

The one thing to watch: depth and bevel_width interact, and cranking both makes the effect go muddy rather than "more 3D." Start with depth around 5 and bevel_width 5, then raise soften if edges look too hard. Since it's GPU-accelerated it's effectively free per frame, so it's a legitimate video-batch effect too - apply it to every frame of a UI-animation render.

It ships in TrentNodes (ComfyUI Manager, search "Trent Nodes", or clone + pip install -r requirements.txt), and has no model downloads. For a Photoshop-style post effect that runs in milliseconds and never invents detail, it's the right tool.

CategoryTrent/Image

Inputs (12)

NameTypeDefaultDescription
imageIMAGE
depthFLOAT5.00–100
angleINT135-360–360
highlight_opacityFLOAT0.750–5
shadow_opacityFLOAT0.750–5
softenFLOAT0.00–50
modeCOMBO4 options: emboss, bevel_inner, bevel_outer, pillow_emboss
bevel_widthFLOAT5.01–100
debug_deviceBOOLEANfalse
maskoptMASK
mask_modeoptCOMBO2 options: apply_to_masked, apply_to_unmasked
mask_bluroptFLOAT0.00–100

Outputs (1)

NameTypeDescription
IMAGEIMAGE