- image
- IMAGE
- MASK
PaintPro puts a pressure-sensitive brush, an eraser, and a handful of shape tools directly on a ComfyUI node, so you can paint and mask without leaving the graph. Feed it an image and draw over it, or leave the input empty and paint on a blank canvas from scratch. It's the newest addition to SKBundle and, going by the reception when it shipped, the one that actually filled a gap people had been hacking around for a while.
Why you'd reach for it
Before this, drawing a mask by hand in ComfyUI meant either fighting an external editor and copy-pasting through the image node's right-click menu, or wiring together a MiniPaint-style browser canvas integration that half-worked. PaintPro is the "just let me draw on the node" answer to that. And hand-drawn masks aren't a legacy habit - they're still the one thing instruction-editing models (Qwen-Image-Edit, Kontext, and friends) genuinely can't replace: exact placement and a boundary you decide, not one the model infers from a sentence. If you want to touch up one specific region and leave every other pixel bit-identical, you need a mask, and PaintPro is a fast way to make one without opening a second application.
How it works
You get a pressure-sensitive brush (so a real tablet gives you natural weight variation, and a mouse still works fine, just without that variation), an eraser to undo strokes, and shape tools for cleaner geometric selections than freehand drawing gives you. The author's been candid about scope here: no layers, no selection tools - they started building those and the code got unwieldy, so it was cut for now. That's a real limitation, not a bug you're missing a setting for. If you need proper layered compositing, the community's own workaround still applies: do the heavy layer work in GIMP or Krita and paste the result back in through the image node's right-click options, then use PaintPro for the quick, direct touch-ups it's actually built for.
Inputs and outputs
image is optional - connect an existing image to paint over and mask it, or leave it disconnected to start from a blank canvas. Two outputs: IMAGE, the painted result, and MASK, whatever you've drawn as a paintable mask region. Wire MASK into an inpainting sampler's mask input, and IMAGE wherever the painted picture itself needs to go - a straightforward pairing that slots into any standard mask-and-inpaint chain.
Installing it
Part of ComfyUI SKBundle, the personal node pack from u/skbphy (GitHub: SKBv0) - a self-described non-programmer who built it with Cursor AI's help, citing rgthree and mxToolkit as the nodes that inspired the collection. Through ComfyUI Manager, search ComfyUI SKBundle and install. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/SKBv0/ComfyUI_SKBundle.git
pip install -r requirements.txt
Restart ComfyUI after. No model downloads - it's a canvas UI, not a checkpoint.
Common issues
The biggest thing to set expectations on is scope: this is a brush-and-shapes tool, not a layered editor. If you go in expecting Photoshop-lite, you'll hit the ceiling fast - no layers, no selection/lasso tools, by the author's own admission. For anything beyond a quick paint-and-mask pass, round-trip through a real image editor instead of fighting PaintPro to do something it was deliberately kept simple to avoid. Pressure sensitivity is also tablet-dependent - if your brush feels flat and uniform, check that ComfyUI (running in your browser) is actually picking up pressure events from your tablet driver rather than assuming the node is broken. And because the pack's documentation is thin outside the README's screenshots, the fastest way to learn the shape tools is to just click through them - there isn't a manual beyond what the node itself shows you.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |