ComfyUI Node

Image Composer

Photoshop, but it lives inside a single ComfyUI node

By EricRollei·Created 5 months ago·Updated 4 months ago· 3
Image Composer
  • image_1
  • mask_1
  • image_2
  • mask_2
  • image_3
  • mask_3
  • image_4
  • mask_4
  • image_5
  • mask_5
  • image_6
  • mask_6
  • image
  • mask
  • seam_mask
  • composition_data
  • composer_layers
composition_data

Every serious ComfyUI workflow eventually hits the same wall: you've generated your hero shot, cut out your subject, made your text layer - and now you have to arrange them, which means leaving ComfyUI for Photoshop, GIMP or a browser tab. Image Composer is the node that tries to make that trip unnecessary. It's a six-layer image compositor with per-layer transforms, blend modes, drop shadows, brightness/contrast/saturation and procedural backgrounds, all inside one node that outputs a finished composite plus its alpha.

It's the centerpiece of the Eric_Composer_Studio pack, and it's designed to eat whatever the rest of the pack produces: rembg/SAM2 cutouts, pose renders, depth maps, generated panels, and text from the sibling Text Layer node.

How it works

Six slots, each holding an (image, mask) pair plus its own transform state. One slot can be flagged BG - it draws first, ignores its mask (always shows the full frame, so you can position other layers against it) and is excluded from the output mask. Everyone else stacks back-to-front by z_order. You arrange them visually: drag to move (position can extend past the canvas edge for crop-style framing), drag handles to scale uniformly or on one axis, rotate with the ↻ handle. Hold Shift while dragging to snap to centre/quarter/edge, or to 15° rotation steps.

The detail bar for the selected layer is where it gets real: a blend mode dropdown (normal, multiply, screen, overlay, darken, lighten, color-dodge, color-burn, hard-light, soft-light, difference, exclusion), opacity, horizontal/vertical flips, and B/C/S sliders for brightness, contrast and saturation. The drop-shadow bar adds a per-layer shadow with angle, distance, blur and opacity. No layer flagged BG? You get a procedural background instead - solid, linear/radial gradient, or checker, with colour pickers and angle.

Output resolution comes from the toolbar: pick an aspect ratio from the Snap dropdown (1:1, 4:3, 16:9, 9:16, …) and a MP target for absolute resolution - Snap 16:9 + MP 1 lands around 1344×768, rounded to multiples of 8.

Inputs and outputs

Inputs are straightforward: image_1..6 and optional mask_1..6 (omit a mask and the layer is opaque), plus the composition_data string that stores canvas state - the UI owns it, leave it alone. The outputs:

  • image - final composite at canvas resolution.
  • mask - combined alpha of all visible non-background layers.
  • seam_mask - a thin map of every layer's silhouette border, for downstream harmonisation work (ground-contact blending, edge cleanup) if you want it.
  • composition_data - the state string, if you want to cache/save it.
  • composer_layers - a relay bundle (RGB + mask + bbox per layer) built for the pack's downstream edit/unify nodes.

Installing it

Same as the whole pack: ComfyUI Manager → search Eric Composer Studio → install → restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/EricRollei/Eric_Composer_Studio.git
cd Eric_Composer_Studio
python -m pip install -r requirements.txt

Then restart and it shows up under Eric_Composer_Studio in the menu. Blend modes are implemented twice - once in the JS preview, once in the numpy composite - so what you see is what you get.

Where people get burned

The Reload button in the toolbar matters more than it looks: after the very first queue (or after swapping inputs) the thumbnails can be stale, and one click re-fetches them. And if the state widgets (composition_data etc.) are visible on the node or buttons won't respond, that's the Vue Nodes "Modern Node Design" setting fighting the custom DOM - turn it off in Settings.

CategoryEric_Composer_Studio

Inputs (13)

NameTypeDefaultDescription
composition_dataSTRINGInternal composition state — managed by the canvas UI. Do not edit manually.
image_1optIMAGE
mask_1optMASK
image_2optIMAGE
mask_2optMASK
image_3optIMAGE
mask_3optMASK
image_4optIMAGE
mask_4optMASK
image_5optIMAGE
mask_5optMASK
image_6optIMAGE
mask_6optMASK

Outputs (5)

NameTypeDescription
imageIMAGE
maskMASK
seam_maskMASK
composition_dataSTRING
composer_layersCOMPOSER_LAYERS