Smart Draw Points
Draw your keypoints so you can actually see them
- image
- points
- IMAGE
Point-based workflows are everywhere in ComfyUI once you look - seed points for flood-fill background removal, keypoints for warping and compositing, anchor marks for region selection - but the points themselves are invisible. You're wiring around abstract coordinates and hoping they mean what you think. Smart Draw Points fixes the visibility problem: give it a POINT_SET and it paints a colored dot at every point, right on the image.
How it works
It's simple by design. For each point in the set, it converts the normalized coordinates (0–1, the convention the pack's other point nodes use) into pixel positions on the image, then draws a filled circle with OpenCV. The color dropdown matches the rest of the pack - including a transparent option that draws nothing, which is useful when you want the node in the graph purely for its pass-through behavior.
The natural pairing is SmartImagePoint, which outputs the POINT_SET you're placing interactively. Wire SmartImagePoint → SmartDrawPoints and your clicks instantly render as red circles on a preview you can actually check. You can also feed it the points output of anything else that emits a point set.
Inputs and outputs
image- theIMAGEto draw on.points- aPOINT_SETof normalized (x, y) points.color- one of the pack's 15 named colors.circle_size- radius in pixels, default 5.
Output: one IMAGE with the dots drawn in.
Installing it
Same pack as always:
cd ComfyUI/custom_nodes
git clone https://github.com/slvslvslv/ComfyUI-SmartImageTools
pip install -r ComfyUI-SmartImageTools/requirements.txt
Restart ComfyUI, or grab it via ComfyUI Manager ("SmartImageTools").
Where it fits
Think of it as a debugging/verification node rather than a deliverable. Before you let SmartBackgroundRemove flood-fill from five seed points, render them first and confirm they're on the background, not on the subject's nose. The one thing to remember: point y-coordinates are normalized 0–1 from the top, and OpenCV draws from the top-left, so the node flips the y axis for you - don't be surprised when a point you set as "near the bottom" renders correctly anyway. That's the intended behavior, and it keeps the points consistent with the pack's other nodes.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| points | POINT_SET | — | |
| color | COMBO | 15 options: transparent, red, green, blue, black, white, +9 | |
| circle_size | INT | 51–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |