Draw Things Img2Img Pipeline
An editable img2img config for the Draw Things wrapper
- images
- pipeline
This is the pipeline-mode counterpart to the basic Draw Things img2img node. It takes an image plus the usual settings and, instead of running the generation, outputs a settings blob (a "pipeline") you can edit before it fires. The actual render happens in DrawThingsGenerateFromPipeline, which sits at the end of the chain.
The reason to use it over the plain DrawThingsImg2Img node is the editable gap in the middle. With a pipeline in hand you can pipe it through DrawThingsPipelineAddLora, DrawThingsPipelineAddControl, or DrawThingsPipelineAddCustom to layer on a LoRA, a ControlNet, or any raw Draw Things API field the basic nodes don't surface - all without leaving ComfyUI. The basic img2img node bundles build-and-generate into one step, so there's nowhere to slot those extras. This node is what you reach for when a straight img2img isn't enough and you want to stack options from inside the graph.
Doing plain image-to-image with nothing fancy on top? Skip this and use DrawThingsImg2Img - fewer wires, same result.
How it works
The node packs your image and inputs into a Python dict of Draw Things parameters and outputs that dict. No network call, no image yet. It's the exact payload the basic node would have sent to the Draw Things API, just held so you can modify it. When DrawThingsGenerateFromPipeline receives the (possibly edited) dict, it POSTs it to Draw Things on port 7860 and Draw Things does the img2img pass on Apple Silicon.
The inputs and outputs that matter
Inputs mirror the basic img2img node:
images(IMAGE) - the source picture. Note there's no width/height; geometry follows the input.denoise(default 1.0, range 0–1) - the defining img2img control. 1.0 basically ignores the source; pull it toward 0.4–0.6 to keep the original composition and just restyle. This is the knob you'll tune most.model- a string matching the Draw Things filename exactly, e.g.flux_1_dev_q8p.ckpt. Get it from Draw Things' "..." → Copy configuration; don't retype from memory.prompt,seed(42),steps(20),guidance_scale(3.5).sampler- enum of 17 Draw Things samplers, defaultEuler A Trailing.
Output is pipeline (dict) - send it to an Add-node or straight to DrawThingsGenerateFromPipeline.
How to install it
Ships with the whole 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
No image comes out. By design - this node only builds a dict. You need DrawThingsGenerateFromPipeline downstream to render. Forgetting it is the most common mistake with the pipeline route.
Denoise behaves like a light switch. 1.0 discards the input entirely; if your output looks unrelated to the source, lower denoise. Around 0.4–0.6 keeps structure while changing style.
Model name errors. model is a literal Draw Things filename - Copy configuration, paste, use verbatim.
Inpainting won't work. The Draw Things API can't take masks, so no node in this pack can inpaint. Do masked edits inside the Draw Things app itself.
Added modifiers do nothing. An Add-Lora/Add-Control node has to sit inline between this node and the generate node so the pipeline dict flows through it. Off to the side, it's ignored.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | input image | |
| model | STRING | flux_1_dev_q8p.ckpt | — |
| prompt | STRING | — | |
| seed | INT | 42 | — |
| guidance_scale | FLOAT | 3.50–25 | — |
| sampler | COMBO | Euler A Trailing | 17 options: UniPC, DPM++ 2M Karras, Euler a, DPM++ SDE Karras, PLMS, DDIM, +11 |
| steps | INT | 201–150 | — |
| denoise | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipeline | dict | — |