Nodes/ComfyUI-PromptChain/PromptChain 3D Poser
ComfyUI Node

PromptChain 3D Poser

Pose a scene instead of hunting for a reference image

By mobcat40·Created 9 months ago·Updated about a month ago· 15
PromptChain 3D Poser
    • IMAGE
    • POSE_JSON
    • MASKS
    control_map
    pose_state
    width832
    height1216

    Getting two characters into a specific pose with plain ControlNet usually means finding a reference image that already roughly matches what you want, or turning yourself into an amateur figure-drawing app with an OpenPose editor. The 3D Poser skips that: you pose an actual mannequin - full body, IK, per-finger hands, foot pinning - right on the ComfyUI canvas, and it hands you a control map plus, just as importantly, a mask for every figure in the scene.

    How it works

    This is the node that makes the rest of the pack's multi-character machinery possible. You stage figures (people, or first-class rigged creatures like a horse or a cat), reshape them live with a MakeHuman-derived slider engine - height, weight, muscle, age, applied instantly with no rebake - pose them with move/rotate/scale gizmos, and drop in props from a categorized library or your own imported .glb/.obj. The scene compiles down to a depth or OpenPose control map, and - the part a plain pose editor can't give you - a per-figure silhouette mask plus a JSON blob naming every figure and prop in the scene. That JSON is what lets a $name{...} block in your Prompt Chain prompt find the exact mask that belongs to it, even after you rename a figure.

    The inputs and outputs that matter

    control_map and pose_state are the two required string fields, and neither is something you type - they're the serialized scene state the browser-side 3D panel writes back into the node, the same pattern as Prompt Chain's own editor. width and height (defaulting to a portrait 832×1216) set the resolution the control map and masks come out at - match these to whatever you're actually sampling at.

    Three outputs:

    • IMAGE - the compiled depth/OpenPose control map, which goes into a ControlNet apply node same as any other preprocessor output.
    • POSE_JSON - the figure-name and head-position data. Wire it into any of the pack's regional nodes' optional pose input so renamed $name{} blocks bind correctly, or into Regional Detailer's pose input to unlock its "mannequin heads" detection mode.
    • MASKS - the per-figure silhouette masks, straight into the masks optional input on Attention Couple, Regional Conditioning, or Z-Image Regional Couple.

    How to install it

    Manager: search ComfyUI-PromptChain. Manual:

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

    Restart, add the node, and the pack's onboarding flow handles the rest - including offering to self-install ControlNet support if you don't already have it, since the Poser is only useful once its control map reaches a ControlNet-conditioned sampler. The pack also bundles its own license-clean OpenPose and Depth preprocessors, so you're not separately dependent on comfyui_controlnet_aux to use what this node produces.

    Common issues & troubleshooting

    A figure's mask isn't matching its prompt block. Same trap as Prompt Chain itself: $name{} binds by name, and if you renamed a figure in the Poser after writing the prompt, wire POSE_JSON into the regional node's pose input - that's specifically what carries the current names across so a rename doesn't break the binding.

    You don't actually need full 3D posing. If you just want "character on the left, character on the right" with no specific pose, PromptChain Region Boxes (PromptChain_RegionBox) gives you the same MASKS/POSE_JSON output pair from flat rectangles instead - much faster to set up when you don't need a posed mannequin.

    It's beta. Same standing caveat as the rest of the pack: an early public release, subject to breaking changes between updates. A tool this ambitious - full IK, mesh sculpting, freehand geometry, all running in a ComfyUI node - is exactly the kind of thing worth the roughness while it settles.

    Categorypromptchain

    Inputs (4)

    NameTypeDefaultDescription
    control_mapSTRING
    pose_stateSTRING
    widthINT83264–4096
    heightINT121664–4096

    Outputs (3)

    NameTypeDescription
    IMAGEIMAGE
    POSE_JSONSTRING
    MASKSMASK