Projectorz Controlnet Parameter
Read Stable Projectorz's ControlNet sliders from inside your ComfyUI graph
- STRING
If you're here, you already know what Stable Projectorz is: Igor Aherne's free Windows app that paints textures onto 3D geometry with Stable Diffusion, aimed at game devs who don't want to hand-paint UV maps. And you already know the catch that this whole pack exists to fix - by default Projectorz expects an A1111-style backend, and A1111 can't run Flux or Qwen. The StableProjectorzBridge pack makes Projectorz talk to ComfyUI instead, and this node is how the ControlNet settings from Projectorz's UI reach your graph.
ProjectorzControlnetParameter is a getter, not a setter. Every time Stable Projectorz fires a generation, it pushes its current ControlNet unit settings into your workflow as strings, and this node hands one of them to you. Think of it as a read-only snapshot of one controlnet unit, one parameter at a time.
The three inputs and what they mean
You only really touch two of them:
- index - which ControlNet unit (0, 1, 2…) from Projectorz's UI you're reading. This must match the unit number you configured in Projectorz, or you'll be reading the wrong sliders and wondering why nothing lines up.
- name - the parameter, a dropdown of the 13 the author bothered to expose:
enabled,resize_mode,module,model,weight,low_vram,processor_res,threshold_a,threshold_b,guidance_start,guidance_end,control_mode,pixel_perfect. You'll mostly wantweight(the ControlNet strength) and maybeguidance_start/guidance_end. - value - the actual setting, autofilled at execution. The default literally reads
!!!Autofill when executed!!!; leave it alone, it gets replaced per-request.
The single output is a STRING. Yes, everything in this bridge travels as strings, because that's how the JSON from Projectorz arrives. To feed weight into a ControlNetApply strength slot you'll need ProjectorzStringToFloat in between; for index-style numbers, ProjectorzStringToInt.
Where it sits in a workflow
In the shipped sample, one ProjectorzControlnetInput node feeds the control image into ControlNetApply, and a ProjectorzControlnetParameter node with name = "weight" supplies the strength. Because the parameter is autofilled from Projectorz at runtime, you can tune ControlNet entirely from the Projectorz UI and never touch ComfyUI - which is the entire point of the bridge: Projectorz stays the cockpit, ComfyUI stays the engine.
A genuinely useful trick: since control_mode and pixel_perfect are also exposed, you can wire pixel_perfect through the string→float converter if you want the preprocessor resolution to track your image automatically. But start simple - weight alone is enough to get your first textured mesh through.
Install
Same as every node in this pack. Easiest is ComfyUI Manager → search "Stable Projectorz Bridge" → install, then restart ComfyUI. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/tianlang0704/ComfyUI-StableProjectorzBridge
Then restart. No model downloads, no extra Python packages - the pack ships with zero dependencies beyond what ComfyUI already has, which is rare and worth appreciating.
Gotchas
Two things trip people up. First, don't hand-edit the value widget - it's overwritten every run, and typing into it does nothing but confuse future-you. Second, the bridge's frontend extension rewrites the blob-name prefixes on the input/output nodes at runtime, so if you've messed with prefixes elsewhere, leave this node's defaults alone. If your ControlNet clearly isn't applying, the usual suspect is a mismatch between index here and the unit number in Projectorz - not the node itself.
This is a niche node for a niche tool, and if you're not running Stable Projectorz it does exactly nothing. But if you are, it's what keeps your ControlNet settings flowing the right direction - Projectorz out, ComfyUI in.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| index | INT | 0 | — |
| name | COMBO | enabled | 13 options: enabled, resize_mode, module, model, weight, low_vram, +7 |
| value | STRING | !!!Autofill when executed!!! | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |