🦾 Compositor Transforms Output V4 🦾
Position, size, angle as ints
- x
- y
- width
- height
- angle
- bbox x
- bbox y
- bbox width
- bbox height
Compositor Transforms Output V4 turns the Compositor's visual layout into raw numbers. You feed it the transforms JSON from a Compositor V4 node, pick a layer with channel, and it outputs that layer's position, size, angle, and bounding box as nine integers: x, y, width, height, angle, and the bbox equivalents.
The reason you'd want that: regional and area conditioning. Regional prompting works by giving different prompts to different regions of the canvas, and ComfyUI's Set Area conditioning expects pixel rectangles. If you've arranged a subject at a certain spot in the Compositor, you want its actual position feeding the conditioning - not a number you guessed. This node is the bridge from "I placed it visually" to "the model knows exactly where it is."
How it works
The Compositor's fabricData_output is a JSON blob describing the canvas state. This node parses it, subtracts the canvas padding (because transforms are recorded relative to the buffer zone, not the export area), and extracts the transform for the layer you selected via channel (1–8, matching your input slots). width/height are the scaled layer dimensions; bbox values are the axis-aligned bounding box, which is what you actually want for conditioning when a layer is rotated.
The forceInt toggle (default on) rounds everything to integers - required for Set Area conditioning, which rejects floats. Turn it off only if you want the raw floats for something more precise.
The inputs that matter
transforms(required) - the STRING transforms output from the Compositor V4 node (itsfabricData_output).channel(required, INT 1–8) - which input layer to read.forceInt(required, default true) - rounds outputs to integers for conditioning compatibility.
Outputs: x, y, width, height, angle, then bbox x, bbox y, bbox width, bbox height (all INT by default).
Install
Part of ComfyUI-Beyond_nodes. ComfyUI Manager → search "Beyond_nodes" → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/beyondprompting/ComfyUI-Beyond_nodes
Restart. Needs a recent ComfyUI like the rest of the V4 family.
Common issues
- The numbers don't match where I placed the layer. Transforms are padding-based and get shifted by
paddinginternally. If your canvas has a large buffer, expected; check that the values land where the green export border sits. - Conditioning rejects the values. If it wants integers, keep
forceInton. Float rectangles are the usual culprit. - The wrong layer's numbers come out.
channelmaps to input slots 1–8 in order - check which slot the layer you're measuring actually lives in. - You're on V3? The V3 compositor has its own transforms-output node (CompositorTransformsOut3). This V4 variant expects V4's
fabricData_output.
It's the least glamorous of the Compositor family and one of the most useful: it's what turns a visual composition into geometry the model can condition on. Position-aware prompting, area-specific prompts, bounding-box targets - all of it starts here.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| transforms | STRING | — | |
| channel | INT | 11–8 | — |
| forceInt | BOOLEAN | true | — |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| x | INT | — |
| y | INT | — |
| width | INT | — |
| height | INT | — |
| angle | INT | — |
| bbox x | INT | — |
| bbox y | INT | — |
| bbox width | INT | — |
| bbox height | INT | — |