PainterNode in ComflyUI for ControlNet
PainterNode allows you to draw in the node window, for later use in the ControlNet or in any other node.
Changelog:
2026.09.27 - Canvas data saving method has been changed.
2025.07.29 - Add tool Crop canvas
2024.05.10 - Implement piping in an image (issue in an image) (example Piping in an image)
2024.04.11 - Implement MyPaint brush tool (issue MyPaint Brush make)
2024.02.05 - Add Symmetry Brush and change structures toolbar options (examle Symmetry Brush)
Features:
- Ability to draw shapes (circle, square, triangle, line), and use pencil and erase
- Set fill color with transparency
- Set color with transparency and line weight
- Set the background
- Use the resize mod to move, rotate and resize drawn objects
- Prohibition of certain modifications in the change mode, prohibition of movement along certain axes, scaling and rotation
- Support brushes mypaint (MyPaint Brush tool)
- Crop image
- Connect image on input (piping) and change type insert background or as image and other settings
- Drag and drop image on canvas node
- Paste image on canvas node (Ctrl+Shift+V or Ctrl+K V)
- Select image in combo and insert to the canvas
Saved canvas data, version 2.0
All canvas data is saved in the ComfyUI\user\__alekpet\painter_assets folder
and has the following structure:
└── user
└── __alekpet/
└── painter_assets/
└── 8f3c.../
└── state.json ← Fabric/Painter node data
└── 1fn6.../
└── state.json ← Fabric/Painter node data
...
Example
Symmetry Brush
MyPaint Brush (tools)
Thanks to Mypaint team and Yap Cheah Shen for his library brushlib.js, none of this would have happened without it 😉!
Rights to brushes belong to their owners, licensing-policy.
List of brushes:
-
New version is not working Deevad
Author site: Deevad4
-
Dieterle (doesn't work, not added to brushes)
NOTE: Not all brushes work correctly (brushlib.js does not support the functions of the latest version of mypaint), use the settings to adjust!
NOTE: All brushes needs converts, using my converter
Convert information:
All avaiables convertered brushes written indise in the file web_alekpet_nodes\assets\painternode\json\brushes_data.json and files brushes to web_alekpet_nodes\assets\painternode\brushes
Use brushConverter.py:
run_converter_python.cmd
Convert brushes (python)
python brushConverter.py convert
Generate list brushes (python)
python brushConverter.py brushes
Use brushConverter.js nodejs:
Convert brushes (nodejs)
npm run convert
Generate list brushes (nodejs)
npm run brushes
Read more in file txt inside folder packs_brushes
Piping
Implemented the ability to connect an image to the PainterNode input, thereby creating piping in image.
There are options to configure piping (button Settings):
- Add as background
- Add as image
- Size adjustment
- Send to back canvas
There are also options:
- Change size (change the canvas size in accordance with piping in image at the input)
- Update image (not update the images of the node with piping in image (Note: you must enable this option so that the mask does not change))
User custom fonts
To add custom fonts, they must be written in the css file:
web_alekpet_nodes\css\painternode\painter_node_user_fonts.css
Two variants:
Variant 1: Path to fonts, fonts puts in the web_alekpet_nodes\fonts\painternode, adn add to the code in the css.
@font-face {
font-family: "Pricedown";
src: url("./../../fonts/painternode/pricedown.otf") format("opentype");
}
Variant 2: Add url to font in the web_alekpet_nodes\css\painternode\painter_node_user_fonts.css, example used link google fonts.
@import url("https://fonts.googleapis.com/css2?family=Jacquard+12&display=swap");



