Draw Things Control Net
Spatial control without installing a single preprocessor
- control_name
- control_net
- image
- CONTROL_NET
ControlNet is how you tell a diffusion model where things go, not just what they are. In stock ComfyUI that means a chain of auxiliary preprocessor nodes feeding condition images into a ControlNet loader. This node replaces the whole chain: pick a ControlNet from Draw Things' model browser, feed it an image, and let the server handle the rest.
DrawThingsControlNet produces a DT_CNET bundle that you wire into the sampler's control_net input. It's the control channel of the pack - and like everything here, it's frozen in a deprecated repo. The README says to migrate to the official draw-things-comfyui extension, but the node still runs today.
How it works
The node's add_to_pipeline builds a control stack - a list of one or more ControlNet entries, each carrying the model, an image, and the tuning knobs below. When the sampler fires, the stack goes into the gRPC request and Draw Things runs the ControlNet itself. You can chain multiple ControlNet nodes by feeding one node's DT_CNET output into the next node's optional control_net input - each node appends to the stack.
The key difference from stock ComfyUI: the node takes a raw image and a control_input_type, and Draw Things does the preprocessing internally. Pick Depth and give it a photo, and the server computes the depth map. If you'd rather feed your own preprocessed map, that's what Custom is for.
The inputs that matter
- control_name - the dropdown of ControlNets from Draw Things' model browser. Note: install the ControlNet file in Draw Things, not in ComfyUI.
- control_input_type -
Customby default, orDepth,Canny,Scribble,Pose,Color,Lineart,Softedge,Seg,Inpaint,Shuffle,Tile, and more. Only relevant if you feed an image - no image, no hint type, the entry just carries the model. - control_weight - 0 to 2.5, default 1. The tooltip says the important part: this value can be negative, which inverts the condition. 0.5–0.8 is loose guidance; 1.0+ is strict adherence.
- control_start / control_end - when during denoising the condition applies. The classic move: start 0, end ~0.5–0.6, so ControlNet locks in composition early and lets the model add its own detail later. This is the parameter the community swears by for structure-heavy work.
- control_mode -
Balanced(default),Prompt(the prompt wins arguments), orControl(the ControlNet wins). - target_blocks -
All,Style, orStyle and Layout. Style-only targets the upsampling blocks; it's the classic choice for control shuffle / style-transfer models. - invert_image - some ControlNets want their condition inverted; flip this if a model's results look reversed or wrong.
The optional image input is where your condition photo goes.
Installing it
ComfyUI Manager (search ComfyUI-DrawThings-gRPC) or:
cd ComfyUI/custom_nodes
git clone https://github.com/Jokimbe/ComfyUI-DrawThings-gRPC
Restart, then make sure the server side is configured: Draw Things app with API Server on, gRPC, TLS enabled, Model Browser enabled, Response Compression disabled (or gRPCServerCLI --no-response-compression --model-browser).
Troubleshooting
ControlNet "not doing anything" usually traces to the model list being empty (Model Browser is off on the server), or to a control weight of 1 being too weak for the condition type you picked - depth and pose are forgiving, lineart and canny want the weight up and a tight start/end window. If the result looks inverted or adversarial, that's when you try invert_image. And a reminder that's easy to forget in the middle of tuning: DT_CNET output goes to the sampler's control_net input, and the hints/preprocessing story is a sibling feature - if you want the server to build the condition from a raw photo, feeding DrawThingsHints is the other half of that workflow.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| control_name | DT_MODEL | The model used. | |
| control_input_type | COMBO | Custom | 19 options: Unspecified, Custom, Depth, Canny, Scribble, Pose, +13 |
| control_mode | COMBO | Balanced | 3 options: Balanced, Prompt, Control |
| control_weight | FLOAT | 1.000–2.5 | How strongly to modify the diffusion model. This value can be negative. |
| control_start | FLOAT | 0.000–1 | — |
| control_end | FLOAT | 1.000–1 | — |
| global_average_pooling | BOOLEAN | false | — |
| down_sampling_rate | FLOAT | 1.000–1 | — |
| target_blocks | COMBO | All | 3 options: All, Style, Style and Layout |
| invert_image | BOOLEAN | false | Some Control Nets might need their image to be inverted. |
| control_netopt | DT_CNET | — | |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONTROL_NET | DT_CNET | — |