Compositor V4
The full rewrite with layers, drawing tools, and an attitude about being alpha
- config
- image
- fabricData_output
- imageName_output
Compositor V4 is the rewrite the author shipped in late 2025: same idea as V3 - place up to 8 images on a canvas, drag them, keep the layout across generations - but with an actual layers panel, paint/erase drawing tools, a toolbar full of alignment and flip controls, and a much cleaner workflow. Where V3 makes you feed images through the Config node and cross your fingers, V4 brings a thumbnail layers list (drag to reorder z-index, toggle visibility), mask previews, and a foreground drawing layer for sketching over your scene before you render.
Read that "alpha" carefully. V4.0 is explicitly a preview. The README lists current wounds: positions aren't always pixel-perfect (sub-pixel rounding), some transform tools are unreliable (equalize/distribute are disabled), mask output and advanced outputs were temporarily removed, and the whole thing gets heavy if you feed it 8 4k images onto a 4k canvas. If you want the boring, dependable tool, V3 is still right there and still maintained. Reach for V4 when you want the layers panel and draw tools and can tolerate rough edges.
How it works
Same pause-and-compose rhythm as V3: run once, the flow blocks, you compose on the canvas, and when you mouse out of the export area the green border flashes orange and the composition saves. The interface auto-manages three inputs:
fabricData- JSON state of the canvas (transforms, positions, visibility). Auto-written by the UI.imageName- the snapshot filename, auto-generated from your graph and node ID.seed- an internal seed that changes on every save to force re-execution. This is a clever bit: the widget value changes each time you save, which is what makes the node re-run downstream. It's not your sampling seed.config- theCOMPOSITOR_CONFIGfrom CompositorConfig4. This one you wire yourself.
Outputs: image (the composed result), fabricData_output (the state JSON), and imageName_output (the saved filename). In the current code the old transforms and layer_outputs sockets are commented out, so if you wanted per-layer data out of V4, the path is wiring fabricData_output into a Transforms Output node.
Installing
No models, no extra dependencies - the whole pack is just ComfyUI's own PIL/NumPy/torch. ComfyUI Manager: search "Compositor", install from erosDiffusion. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/erosDiffusion/ComfyUI-enricos-nodes.git
Restart, then search "Compositor V4" in the node menu.
Where people get burned
- It blocks and does nothing. The node stops on config change and waits for you to interact; if you've loaded a saved workflow, click into the canvas and mouse out to save before pressing Queue again. Several people report "I press continue and nothing happens" - usually the canvas hasn't captured yet.
- It's an alpha, so treat it like one. Keep canvases reasonable. The known-issues list is real, not theoretical.
- Drawing state can lie to you. The README notes the erase mode can occasionally restore erased foreground. If a layer you erased pops back, clear the foreground layer instead of fighting it.
- Snap and precision are still settling. Snap-to-grid works, but don't expect pixel-perfect placement yet on every scale level - that's the sub-pixel rounding issue.
The one-liner: V4 is the future of this pack and the nicer editor, V3 is the safer default. Pick accordingly.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| fabricData | STRING | JSON string containing the compositor state (transforms, positions, visibility). Auto-managed by the compositor interface | |
| imageName | STRING | Name of the snapshot image file. Auto-generated based on graph and node ID | |
| seed | STRING | 0 | Random seed value that changes on each save to trigger node re-execution. Auto-updated by the compositor interface |
| config | COMPOSITOR_CONFIG | Configuration from CompositorConfig4 containing canvas size, images, masks, raw tensors, and settings |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | Final composed image rendered from the compositor canvas |
| fabricData_output | STRING | Compositor state data (transforms, positions, etc.) |
| imageName_output | STRING | Filename of the saved composition snapshot |