Nodes/draw-things-comfyui/Draw Things Sampler
ComfyUI Node

Draw Things Sampler

Your ComfyUI sampler, except Draw Things does the actual denoising

By drawthingsai·Created 9 months ago·Updated 2 months ago· 34
Draw Things Sampler
  • model
  • image
  • mask
  • lora
  • control_net
  • upscaler
  • refiner
  • hints
  • IMAGE
  • AUDIO
settingsBasic
serverlocalhost
port7859
use_tlstrue
strength1.00
seed0
seed_modeScaleAlike
width512
height512
steps20
num_frames14
cfg4.5
cfg_zero_starfalse
cfg_zero_star_init_steps0
speed_uptrue
guidance_embed4.5
sampler_nameDPM++ 2M AYS
stochastic_sampling_gamma0.30
res_dpt_shifttrue
shift1.00
batch_size1
fps5
motion_scale127
guiding_frame_noise0.02
start_frame_guidance1.0
causal_inference0
causal_inference_pad0
clip_skip1
sharpness0.6
mask_blur1.5
mask_blur_outset0
preserve_originaltrue
high_res_fixfalse
high_res_fix_start_width448
high_res_fix_start_height448
high_res_fix_strength0.70
tiled_decodingfalse
decoding_tile_width640
decoding_tile_height640
decoding_tile_overlap128
tiled_diffusionfalse
diffusion_tile_width512
diffusion_tile_height512
diffusion_tile_overlap64
tea_cachefalse
tea_cache_start5
tea_cache_end2
tea_cache_threshold0.20
tea_cache_max_skip_steps3
separate_clip_lfalse
clip_l_text
separate_open_clip_gfalse
open_clip_g_text
color_calibrationDisabled
positive
negative

First, the honest headline: this pack is deprecated. The README says so in its first line - the project moved, and you should switch to the official draw-things-comfyui extension. Plenty of workflows still ship with these nodes installed, though, so here's what this one does while it still works.

DrawThingsSampler is the centerpiece of the pack - the node every other "Draw Things" node feeds into. Instead of sampling with ComfyUI's own KSampler (which uses ComfyUI's checkpoints and your GPU), this node packages your settings and pushes them over gRPC to a Draw Things server - the macOS/iOS app or the gRPCServerCLI binary - and that server does the denoising. The image comes back and lands in the normal IMAGE output you'd wire straight into a SaveImage.

In plain terms: ComfyUI becomes the graph editor, Draw Things becomes the inference engine. That's the play on Apple Silicon, or if you want Draw Things' heavily optimized low-VRAM engine (it runs Wan 2.1 14B on a 16 GiB MacBook Air) driven by a visual workflow instead of the app's own UI.

How it works

The sampler connects to a gRPC service at server:port (defaults: localhost, port 7859, TLS on - Draw Things uses its own pinned root cert). It calls the server's model browser to populate the model dropdowns, builds a FlatBuffers config from your widgets, then fires a streaming GenerateImage request. The stream carries per-step progress and previews back, and the final image arrives as a normal ComfyUI tensor. Everything else in this pack - the LoRA, ControlNet, refiner, upscaler, and prompt nodes - exists to hand this node pre-built inputs.

The inputs that matter

The node has a settings dropdown with three states - Basic, Advanced, All - that collapse and reveal the giant pile of widgets. Beginners want Basic. Start there:

  • model - a dropdown filled from Draw Things' own model library, not ComfyUI's models folder. Install models in Draw Things, not in ComfyUI.
  • positive / negative - wire the POSITIVE and NEGATIVE string outputs from the prompt nodes in here.
  • width / height, steps, cfg - standard sampler fare. CFG 4.5 is a sane default for SD-family checkpoints; on guidance-distilled models (Flux-style, low CFG) it's wrong - see below.
  • seed + seed_mode - ScaleAlike (the default) keeps seeds reproducible across resolutions; Legacy is old behavior. If you're switching between local and cloud draws, ScaleAlike is the one that behaves.
  • strength - 1.0 means pure text-to-image. Feed an image into the optional image input and drop strength to 0.4–0.6 for img2img; the tooltip says it plainly: lower strength means more influence from the original.
  • sampler_name - mirrors Draw Things' samplers (DPM++ 2M Karras, Euler A, LCM, TCD, the AYS and Trailing variants). For SD 1.5/SDXL, DPM++ 2M Karras at 20–30 steps is the reliable default; distilled models want their own few-step sampler instead.
  • num_frames / fps / motion_scale - these only matter for video models (Wan, Hunyuan, SVD). Ignore them for stills.

Everything past Basic is Draw Things' own parameter surface - high_res_fix, tiled_diffusion, tea_cache, shift, causal_inference for video, and more. All genuinely wired to the server; none of it is decoration.

Installing it

Via ComfyUI Manager, search ComfyUI-DrawThings-gRPC, or:

cd ComfyUI/custom_nodes
git clone https://github.com/Jokimbe/ComfyUI-DrawThings-gRPC

Then restart. The node's real dependency list (grpcio, flatbuffers, protobuf, fpzip) installs with it. You also need the server side: in the Draw Things app, enable API Server, set Protocol to gRPC, TLS to Enabled, Enable Model Browser to Enabled, and Response Compression to Disabled. Or run the CLI:

gRPCServerCLI-macOS [path to models] --no-response-compression --model-browser

Troubleshooting

The error you'll actually hit is "Couldn't connect to Draw Things gRPC server." Usual culprits, in order: Draw Things' API server isn't running, the server isn't localhost/port isn't 7859, use_tls doesn't match the server's TLS setting, or - the sneaky one - Response Compression is still enabled, which the protocol expects off. The Model Browser also has to be on, or the model dropdowns stay empty.

One more trap: if images come out with no prompt influence or the negative field does nothing, check CFG. On guidance-distilled models CFG 1 is the real default and the negative prompt is inert there; this node's 4.5 default targets classic SD-family checkpoints. And remember - if Draw Things can't find a model you downloaded, it isn't installed in Draw Things.

Since the pack is frozen, hit the Discord linked in the README for support, and plan the migration to the official extension eventually. It works today; it's just not getting fixed.

CategoryDrawThings

Inputs (64)

NameTypeDefaultDescription
settingsCOMBOBasic3 options: Basic, Advanced, All
serverSTRINGlocalhostThe IP address of the Draw Things gRPC Server.
portSTRING7859The port that the Draw Things gRPC Server is listening on.
use_tlsBOOLEANtrue
modelDT_MODELThe model used for denoising the input latent.
strengthFLOAT1.000–1When generating from an image, a high value allows more artistic freedom from the original. 1.0 means no influence from the existing image (a.k.a. text to image).
seedINT0-1–4294967295The random seed used for creating the noise.
seed_modeCOMBOScaleAlike4 options: Legacy, TorchCpuCompatible, ScaleAlike, NvidiaGpuCompatible
widthINT512128–8192
heightINT512128–8192
stepsINT201–150The number of steps used in the denoising process.
num_framesINT141–257The total number of frames to be generated. This value will be rounded up to the next valid value for the selected model.
cfgFLOAT4.50–50The Classifier-Free Guidance scale balances creativity and adherence to the prompt. Higher values result in images more closely matching the prompt however too high values will negatively impact quality.
cfg_zero_starBOOLEANfalse
cfg_zero_star_init_stepsINT00–50
speed_upBOOLEANtrue
guidance_embedFLOAT4.50–50
sampler_nameCOMBODPM++ 2M AYSThe algorithm used when sampling, this can affect the quality, speed, and style of the generated output.
stochastic_sampling_gammaFLOAT0.300–1
res_dpt_shiftBOOLEANtrue
shiftFLOAT1.000.1–16
batch_sizeINT11–4
fpsINT51–30
motion_scaleINT1270–255
guiding_frame_noiseFLOAT0.020–1
start_frame_guidanceFLOAT1.00–25
causal_inferenceINT00–129Set to 0 to disable causal inference
causal_inference_padINT00–129
clip_skipINT11–23
sharpnessFLOAT0.60–30
mask_blurFLOAT1.50–50
mask_blur_outsetINT0-100–1000
preserve_originalBOOLEANtrue
high_res_fixBOOLEANfalse
high_res_fix_start_widthINT448128–2048
high_res_fix_start_heightINT448128–2048
high_res_fix_strengthFLOAT0.700–1
tiled_decodingBOOLEANfalse
decoding_tile_widthINT640128–2048
decoding_tile_heightINT640128–2048
decoding_tile_overlapINT12864–1024
tiled_diffusionBOOLEANfalse
diffusion_tile_widthINT512128–2048
diffusion_tile_heightINT512128–2048
diffusion_tile_overlapINT6464–1024
tea_cacheBOOLEANfalse
tea_cache_startINT50–1000
tea_cache_endINT2-151–150A positive value corresponds to last step tea_cache should be appplied. Use a negative value to specify steps from the end+1. IE: -1 is the last step, -2 is the second to last step, and so on.
tea_cache_thresholdFLOAT0.200–1
tea_cache_max_skip_stepsINT31–50
separate_clip_lBOOLEANfalse
clip_l_textSTRING
separate_open_clip_gBOOLEANfalse
open_clip_g_textSTRING
color_calibrationCOMBODisabled2 options: Disabled, Lab
imageoptIMAGE
maskoptMASKA black/white image where black areas will be kept and the rest will be regenerated according to your strength setting.
positiveoptSTRINGThe conditioning describing the attributes you want to include in the image.
negativeoptSTRINGThe conditioning describing the attributes you want to exclude from the image.
loraoptDT_LORA
control_netoptDT_CNET
upscaleroptDT_UPSCALER
refineroptDT_REFINER
hintsoptDT_HINTSHint images, or control inputs, are used with ControlNets and certain other models, like Kontext, to help guide the generation.

Outputs (2)

NameTypeDescription
IMAGEIMAGE
AUDIOAUDIO