SK Interactive Editor
Click points and paint a mask without leaving the canvas
- images
- mask
- image_doodle
- image_points
- json_points
If you've ever wanted to say "put a mask here" by just clicking on the image, this is the node. It takes an image, a set of numbered click points, and an optional hand-painted doodle layer, and turns them into the things the rest of your workflow actually wants: a proper ComfyUI MASK tensor and annotated image outputs. It's the interactive half of the pack's tooling - the node that turns your clicks into data.
Point-prompting is a real technique, not a gimmick. SAM and friends segment from a point or a box, and regional-control workflows commonly want "click the subject, then run the masked pass." This node gives you that clicking surface in-graph: the pack's frontend draws on the image, you click, and the coordinates get serialized back into the node's widgets.
How it works. The backend is plain PIL. It loads your image (applying EXIF rotation so phone photos don't come out sideways), parses points_data as JSON - a list of {"x": ..., "y": ...} - and paints a red numbered circle at each point. It also takes mask_data, a base64-encoded PNG, pastes it as a doodle layer, and uses its alpha channel as the mask: whatever you painted opaque becomes mask-white. Then it composites the variants and converts everything to tensors.
Inputs. image is an upload from your input folder. points_data defaults to "[]". mask_data defaults to empty - no doodle, no mask, and the mask output comes back blank. All three get filled by the interactive UI, so most people never type a coordinate by hand.
Outputs. The ones that matter:
mask- theMASKtensor from your doodle's alpha. This is the practical output: wire it into an inpainting or regional-conditioning setup.images- the full composite (base + points + doodle), good as a preview.image_doodle- base + doodle only.image_points- base + numbered points only.json_points- the raw points as a string, so downstream nodes can read the coordinates you clicked.
Installing. ComfyUI Manager (search "SK LoRA Manager") or:
cd ComfyUI/custom_nodes
git clone https://github.com/sinvks/ComfyUI-SKLora-Manager.git
pip install -r requirements.txt
Restart, and give the frontend a second to load - the editor UI is part of the pack's panel, not the node alone.
Gotchas. This is a front-end-driven node: if you just drop it on the canvas and wire an image in with default widgets, you'll get a blank mask and empty points. You interact through the pack's editor, which writes the widget values for you. The changelog also notes a fix in v1.0.3 for freezing when pasting images from the clipboard into these editor nodes - if you're on an old version and the canvas hangs on paste, update the pack. And when you're iterating, remember the mask comes from the doodle's alpha - a doodle with full opacity everywhere is just a full white mask, which is useless for masking. Paint the region, not the whole frame.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | 1 options: example.png | |
| points_data | STRING | [] | — |
| mask_data | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| mask | MASK | — |
| image_doodle | IMAGE | — |
| image_points | IMAGE | — |
| json_points | STRING | — |