::

PaYnter


[The development is: Paused]

The journey

I started to make proper generative art with a little python script to automate mouse and keyboard input to interact with Krita, a digital drawing tool. I like the complexity of the brushes and all the tool available inside Krita, but after few generations it started to feel pretty hacky and uncomfortable to use.

So after that I wanted to try and replicate the brushes and complexity of an image editing software by myself by making a python program that emulated that. That was the birth of PaYnter.

The main features of PaYnter are:

Brushes emulation

With paynter you draw on your digital image with brushes just like you do on Photoshop. You can create brushes starting from images defining the brush tip, and then you can define a bunch of brush parameters like:

Layer management

Each image is composed by one or multiple layers. Each layer internally is one 3D array of [imageWidth * imageHeight * 4] to store the RGBA value of each pixel of the layer.

When drawing you specify on which layer you are using, and then when you are done with the editing you can then merge all the layers using various blend modes to create many different effects.

Palette management

You can choose color individually or use one of the PaYnter preset palette generation where you can specify some starting values and generate opposite or complementary colors from the starting one.

Each color can then be tweaked individually from saturation, hue, and value.

The project got discontinued when I realize that it was too slow and, even through many optimization iterations the performance wasn't enough for my needs. I used a lot of matrix operation which could have been optimized a lot by using the GPU, but sadly it seems that all the decent framework for that uses nVidia drivers and I don't have a nVidia GPU, so that was not an option.

References:

PaYnter Documentation => https://paynter.readthedocs.io/en/latest/
PaYnter Repository => https://github.com/elkiwy/paynter