Nodes/ComfyUI-Beyond_nodes/🦾 Compositor Transforms Output V4 🦾
ComfyUI Node

🦾 Compositor Transforms Output V4 🦾

Position, size, angle as ints

By beyondprompting·Created 9 months ago·Updated 7 months ago· 0
🦾 Compositor Transforms Output V4 🦾
    • x
    • y
    • width
    • height
    • angle
    • bbox x
    • bbox y
    • bbox width
    • bbox height
    transforms
    channel1
    forceInttrue

    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 (its fabricData_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 padding internally. 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 forceInt on. Float rectangles are the usual culprit.
    • The wrong layer's numbers come out. channel maps 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.

    Categoryimage

    Inputs (3)

    NameTypeDefaultDescription
    transformsSTRING
    channelINT11–8
    forceIntBOOLEANtrue

    Outputs (9)

    NameTypeDescription
    xINT
    yINT
    widthINT
    heightINT
    angleINT
    bbox xINT
    bbox yINT
    bbox widthINT
    bbox heightINT