Files
AlekPet 1169fe83fe update PainterNode
+ added created and updated date in metadata
+ view dates in asset manager
2026-09-28 14:10:13 +03:00
..
2026-09-28 14:10:13 +03:00
2023-07-15 15:23:14 +03:00
2026-09-27 17:47:06 +03:00
2026-09-27 17:28:15 +03:00

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

Screenshot PainterNode connecting to ControlNet

Symmetry Brush

Screenshot PainterNode Symmetry Brush

MyPaint Brush (tools)

Screenshot MyPaint Brush

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:

More brushes mypaint is here

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))

Screenshot Piping

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");