Nodes/ComfyUI-PromptChain/PromptChain Region Boxes
ComfyUI Node

PromptChain Region Boxes

The fast, flat alternative to posing a mannequin

By mobcat40·Created 9 months ago·Updated about a month ago· 15
PromptChain Region Boxes
    • MASKS
    • POSE_JSON
    box_state
    width832
    height1216
    feather0

    Not every multi-character scene needs a posed 3D mannequin. Sometimes you just need "this character occupies the left third of the frame, that one occupies the right two-thirds" - and firing up the full 3D Poser for that is overkill. Region Boxes gives you the same masks and pose data the Poser produces, from drawing flat rectangles instead of posing a rig.

    How it works

    You draw named boxes over a canvas at your target resolution, and the node compiles them into the same two outputs the 3D Poser produces - a mask per box and a JSON blob naming each region - so anything downstream that reads masks/pose from the Poser reads identically from this node. It's the lightweight sibling, not a lesser version: the pack's own Ideogram Caption node explicitly reads a Region Box's POSE_JSON to know where to place each $name{} block in Ideogram's native bounding-box caption format, which is a job the 3D Poser's pose data doesn't hand off in quite the same shape.

    The inputs and outputs that matter

    box_state is the required string field the drawing canvas writes into - not something you type by hand, same pattern as pose_state on the Poser. width and height (832×1216 by default) set the resolution your boxes are drawn against and the resolution the output masks come out at, so match them to your actual render size. The one field worth thinking about is feather: it defaults to 0, meaning hard rectangular edges, which the tooltip calls "fine for SDXL attention couple." Raise it - the tooltip suggests roughly 24–48px - if you're feeding these regions into Flux-family regional conditioning, where a hard seam between regions is more visible and worth softening. Regional-prompting techniques are notoriously architecture-specific about exactly this kind of detail - what one model's masking mechanism tolerates, another doesn't - which is why the node bothers to call the default out by model family rather than leaving it as an unexplained number.

    Two outputs: MASKS goes to the masks input on Attention Couple, Regional Conditioning, or Z-Image Regional Couple; POSE_JSON goes to the pose input on those same nodes (so renamed regions still bind to the right $name{} block) or into Ideogram Caption's pose input for bbox placement.

    How to install it

    Manager: search ComfyUI-PromptChain. Manual:

    cd ComfyUI/custom_nodes
    git clone https://github.com/mobcat40/ComfyUI-PromptChain.git
    

    Restart and add the node - no separate dependency, it's part of the base pack rather than one of the self-installing optional features.

    Common issues & troubleshooting

    Visible seams between regions. That's the hard-edge default (feather: 0) doing exactly what it's set to do. It's a reasonable default for SDXL-style attention couple, where a crisp region boundary is often what you actually want; raise feather if you're on a regional-conditioning path (Flux, Z-Image) where a soft blend reads more natural.

    A $name{} block isn't binding. Same rule as everywhere else in this pack: the name in your prompt has to match the box's name exactly, and if you rename a box after writing the prompt, make sure POSE_JSON is actually wired into the downstream node's pose input - without it, region binding has no name data to reconcile against.

    When to reach for the 3D Poser instead. If your characters need to actually be posed - not just occupy a region, but be doing something specific - Region Boxes can't help you there; that's what PromptChain_PoseStudio is for. Boxes are for layout, not pose.

    Categorypromptchain

    Inputs (4)

    NameTypeDefaultDescription
    box_stateSTRING
    widthINT83264–4096
    heightINT121664–4096
    featherINT00–128Soft edge in px. 0 = hard rectangles (fine for SDXL attention couple); raise to ~24-48 to remove region seams on Flux regional conditioning.

    Outputs (2)

    NameTypeDescription
    MASKSMASK
    POSE_JSONSTRING