Draw Things Pipeline Add Control
Add a ControlNet to a Draw Things pipeline (with one big caveat)
- pipeline
- pipeline
This node adds a ControlNet's settings to a Draw Things pipeline. It slots into the advanced flow, between a pipeline builder and DrawThingsGenerateFromPipeline, and injects a control with a weight and guidance range into the config on its way through.
Read the next part carefully, because it's the thing people trip on: this node cannot send the control image. The Draw Things API can't accept mask or control images - the pack author is explicit about this. So you set the reference image (your openpose skeleton, depth map, canny edges, whatever) manually inside the Draw Things app, and this node configures how strongly that control applies. It's a settings knob, not an image pipe. If you were hoping to wire a preprocessed control image from ComfyUI into Draw Things, that path doesn't exist through the API.
Quick refresher for beginners: ControlNet conditions generation on spatial structure - edges, depth, pose - so the prompt decides what appears and the control decides where it goes. It's the single biggest composition tool in the diffusion toolkit. Here you get the control's dials; the app holds the image.
How it works
The node takes the pipeline dict, writes your control entry and its parameters into the Draw Things config, and passes the dict on. It doesn't generate - DrawThingsGenerateFromPipeline does that later. When Draw Things runs the job, it pairs the settings from this node with whatever control image you loaded in the app.
The inputs that matter
Most inputs here are advanced; a beginner really only touches a few:
pipeline(dict) - from an upstream pipeline node. Required.control(string) - the control's name, matching the Draw Things filename exactly (Copy configuration in the app to get it right).weight(default 1.0, range 0–2.5) - how hard the control pushes. The main dial. Too high and it overrides the prompt; too low and it's ignored.guidanceStart/guidanceEnd(0.0 to 1.0) - the fraction of the sampling run over which the control is active. Ending early (say 0.0–0.6) lets the model reassert detail in the later steps.controlImportance- enum ofbalanced/prompt/control, defaultbalanced- which side wins when prompt and control disagree.
The remaining inputs - noPrompt, globalAveragePooling, downSamplingRate, inputOverride, targetBlocks - are advanced tuning for specific control types; leave them at defaults unless you know you need them.
Output is pipeline (dict) - chain another Add-node or send to DrawThingsGenerateFromPipeline.
How to install it
Ships with the Draw Things pack. In Draw Things, open Advanced → enable API Server (HTTP, Port 7860, localhost). Then install via ComfyUI Manager (search ComfyUI-DrawThingsWrapper) or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/JosephThomasParker/ComfyUI-DrawThingsWrapper
cd ComfyUI-DrawThingsWrapper
pip install -r requirements.txt
then restart ComfyUI.
Common issues & troubleshooting
The control does nothing. The most likely cause is that no control image is set in Draw Things. This node only sends parameters - you must load the reference image (pose, depth, edges) in the app first. Second most likely: the control name doesn't match the Draw Things filename.
It's overpowering the prompt. Drop weight, pull guidanceEnd back so the control releases before the final steps, or switch controlImportance to prompt.
You expected to feed a preprocessor output in. You can't. Image controls go through the app, not the API - that's a hard limit of this pack, same reason inpainting doesn't work.
Nothing renders. This node only edits the pipeline. Make sure DrawThingsGenerateFromPipeline is downstream and the dict passes through this node en route.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| pipeline | dict | Draw Things pipeline | |
| control | STRING | — | |
| weight | FLOAT | 1.00–2.5 | — |
| guidanceStart | FLOAT | 0.000–1 | — |
| guidanceEnd | FLOAT | 1.000–1 | — |
| noPrompt | BOOLEAN | false | — |
| globalAveragePooling | BOOLEAN | false | — |
| downSamplingRate | FLOAT | 0.00 | — |
| controlImportance | COMBO | balanced | 3 options: balanced, prompt, control |
| inputOverride | STRING | — | |
| targetBlocks | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipeline | dict | — |