Nodes/Stable Projectorz Bridge/Projectorz Controlnet Input
ComfyUI Node

Projectorz Controlnet Input

Where Stable Projectorz's control images actually land

By tianlang0704·Created 2 years ago·Updated 2 years ago· 47
Projectorz Controlnet Input
    • IMAGE
    • MASK
    index0
    name_prefixProjectorControlnetBlob_

    Stable Projectorz is a Windows app for AI-texturing 3D geometry, and it expects a Stable Diffusion backend that speaks the old Automatic1111 API. This pack is what lets it drive ComfyUI instead - which matters because Projectorz's bundled backend tops out at SD 1.5 / SDXL, while ComfyUI brings Flux and Qwen to the party. ProjectorzControlnetInput is the receiving end: it turns the control image and mask that Projectorz uploads into actual ComfyUI tensors your graph can condition on.

    When you click "Gen Art" in Projectorz with ControlNet enabled, the app posts a txt2img request to the bridge. The bridge base64-decodes the controlnet image (and a _mask.png if one was sent), saves them into ComfyUI's input/ folder using a random session id in the filename, then queues your workflow. This node just loads those files back out by prefix.

    The inputs

    • index - which controlnet unit. Default 0. If Projectorz is sending multiple controlnet units, you add one of these nodes per unit and bump the index.
    • name_prefix - the file prefix, default ProjectorControlnetBlob_. Leave it. The bridge's own JavaScript extension overwrites this widget with the live session id whenever the workflow is about to run, so editing it is both pointless and a great way to break things.

    The outputs

    • IMAGE - the control image itself (edge map, depth map, pose, whatever Projectorz preprocessed). This is the wire you run into ControlNetApply (or the Flux-era equivalent) as the conditioning image.
    • MASK - the mask PNG Projectorz sent alongside it, if any. Output is an actual ComfyUI MASK tensor, so it plugs straight into inpainting/controlnet-apply nodes that take masks.

    Mechanically it's a LoadImage under the hood - the source just calls ComfyUI's built-in image loader on the blob file. That's worth knowing because it means the usual image-loading failure modes apply: if the file isn't there, you get a blank 512×512 placeholder instead of an error. So a missing control image looks like "why is my controlnet doing nothing" rather than a helpful crash.

    What you'd actually build with it

    The shipped sample wires ProjectorzControlnetInputControlNetApply, with strength coming from a ProjectorzControlnetParameter node set to weight. That's the whole loop: Projectorz decides it wants a depth-conditioned texture pass, sends the depth map, your ComfyUI graph applies it, and the result goes back through ProjectorzOutput. The MASK output is more useful in the inpainting workflow, where the brush-fill mask from Projectorz needs to reach whatever inpaint/controlnet-inpaint node you're running.

    Install and gotchas

    Same as every node in this pack - ComfyUI Manager (search "Stable Projectorz Bridge") or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/tianlang0704/ComfyUI-StableProjectorzBridge
    

    Restart after either. No models, no extra pip packages; the pack has zero dependencies beyond what ComfyUI already ships.

    One trap worth naming: don't hand-edit name_prefix. The bridge's frontend rewrites it at runtime with the current session id, which is how the workflow knows which request's images to load. If you type your own prefix, the node will look for a file that never arrives and silently feed you the blank placeholder. When controlnet "isn't working," nine times out of ten that's the actual cause - or the node isn't in the workflow at all, in which case the bridge still uploads the files and nothing ever reads them.

    CategoryProjectorz

    Inputs (2)

    NameTypeDefaultDescription
    indexINT0
    name_prefixSTRINGProjectorControlnetBlob_

    Outputs (2)

    NameTypeDescription
    IMAGEIMAGE
    MASKMASK