Nodes/draw-things-comfyui/Draw Things Control Net
ComfyUI Node

Draw Things Control Net

Spatial control without installing a single preprocessor

By drawthingsai·Created 9 months ago·Updated 2 months ago· 34
Draw Things Control Net
  • control_name
  • control_net
  • image
  • CONTROL_NET
control_input_typeCustom
control_modeBalanced
control_weight1.00
control_start0.00
control_end1.00
global_average_poolingfalse
down_sampling_rate1.00
target_blocksAll
invert_imagefalse

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 - Custom by default, or Depth, 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), or Control (the ControlNet wins).
  • target_blocks - All, Style, or Style 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.

CategoryDrawThings

Inputs (12)

NameTypeDefaultDescription
control_nameDT_MODELThe model used.
control_input_typeCOMBOCustom19 options: Unspecified, Custom, Depth, Canny, Scribble, Pose, +13
control_modeCOMBOBalanced3 options: Balanced, Prompt, Control
control_weightFLOAT1.000–2.5How strongly to modify the diffusion model. This value can be negative.
control_startFLOAT0.000–1
control_endFLOAT1.000–1
global_average_poolingBOOLEANfalse
down_sampling_rateFLOAT1.000–1
target_blocksCOMBOAll3 options: All, Style, Style and Layout
invert_imageBOOLEANfalseSome Control Nets might need their image to be inverted.
control_netoptDT_CNET
imageoptIMAGE

Outputs (1)

NameTypeDescription
CONTROL_NETDT_CNET