BigPlayer ControlNet State
Tell the LLM about your ControlNets so the prompt cooperates instead of fighting them
- preset_config
- controlnets_also
- preset_config
BigPlayer ControlNet State is the ControlNet half of the pack's state-indication trio, and like its siblings it does one quiet job: it tells the LLM what your graph already has so the prompt it writes works with the constraints instead of against them. Nothing is loaded, applied, or conditioned here - this node just packages context.
The input
controlnets is a multiline string. Per the tooltip, you enter one ControlNet per line or comma-separated - so depth, canny, openpose works, and so does a list from another node. controlnets_also (optional) concatenates a string or list-of-strings onto the main field, with linked entries winning dedupe ties if the same name shows up twice. Entries are deduplicated case-insensitively, and the output is a single preset_config.
Why this matters
Here's the real-world case for it. ControlNet conditioning and a text prompt can silently contradict each other: you run a depth ControlNet but the LLM writes "flat illustration, no perspective" and you get a worse image for reasons you can't see. When the LLM knows a ControlNet is active, it can write a prompt that works with the depth map rather than against it. The root renders the preset as "Workflow preset state provided explicitly: ControlNets: - canny" and the prompt fragments tell the LLM to account for "any checkpoints, LoRAs, ControlNets, and other supplied context."
Chain this node with Checkpoint State and LoRA State - preset_config flows through all three - and the root gets one combined picture: here's the checkpoint, here's the LoRA, here's the ControlNet, now write me a prompt that fits. That's the pack's core design working as intended.
The honest caveat
This is advisory context, not enforcement. The LLM knows a ControlNet is loaded, but the node doesn't validate that the names match your actual ControlNet setup - it accepts what you type. If you write canny but your graph runs a pose ControlNet, the LLM will confidently write for the wrong constraint. Keep the names accurate; the node is only as honest as the context you feed it. (The one thing it does enforce: empty input adds no context, which is fine.)
Install and troubleshooting
Pack install: ComfyUI Manager, search "BigPlayer Prompting", or git clone https://github.com/josh-ent/comfyui-bigplayer-llm-nodes into ComfyUI/custom_nodes, then restart. Deps are httpx and pydantic; no model downloads, and this node needs no API key by itself - only the root you chain it into does. One practical gotcha: commas split entries, so a ControlNet name containing a comma will be split in two. Keep names clean, one per line if you're unsure.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| controlnets | STRING | Enter one ControlNet per line or comma-separated. You can also connect a string or string-list output. | |
| preset_configopt | BIGPLAYER_PRESET_CONFIG | Optional preset config emitted by another BigPlayer state-indication node. | |
| controlnets_alsoopt | * | Takes a string or list of strings and concatenates it onto `controlnets`; linked entries win ties where needed. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| preset_config | BIGPLAYER_PRESET_CONFIG | — |