Brush Procedure Plugin | Draft Proposal

Premise and Backgrounds

Basically, the idea is to centralize all brush creation calls in a unique instance. I am interested to create a conditional way to simplify, mainly, the gih brush creation, so improving the correct creation of gih arrays this could be useful to amplify the usage of the .gih brushes on GIMP. The .gih brushes together good paint dynamics can be used to resolve many issues around painting techniques… in the last two years, I have collected many cases and aspects of these topics.
I am focused on this specification only with .gih brushes because they are a more complex case. Perhaps, add also the instances to the .gbr brushes in these procedures is not so difficult.

Main Concept and Evolving

The main plugin concept is creating a procedure that could be used externally and also plugged on GIMP, perhaps with the same concept of GMIC filter procedures. Is possible to use this structure to evolving the usage to other kind assets, for instance, patterns.

Brush Scenario on GIMP

I am a digital painter with a great 'passion' to painting's tools and this is a task that I have and I do as a part of my style. The importance of the brushes for each artist is different… and many times, all depends of his style… for instance, in Japanese calligraphy, I have seen the usage of brooms ;-).
Recently, with Jehan Pagés, I had some conversations about the brushes, mainly after my bug report, Improvements on brush creation and their filtering (tags) | Proposal , below I have put some excerpts of our conversation about.

Jehan

I think improving brush creation is a very good idea. Currently, this is quite shitty (basically this is pretty non-existent and you have to find some hidden outdated tutorials on the topic to understand this is even possible).
As a crowdfunding project, if you work with us to specify the plugin (I mean: if we think that's in the good direction, but as said before, I don't think we can really go in the wrong direction on this topic since current state is just sad), we'll be happy to help on the "marketing" side as we can (a news on gimp.org, some retweets/reshares on social networks…).

Americo

So, my idea is to find a way to simplify the creation/management of brushes… we need to understand well the current instances around brushes to design another flow, more simplified and effective to this asset.
In the next days, I will begin organizing my notes and I will publish on the wiki, perhaps this is the correct place.
But, is possible that we must discuss this via private email… in this way for me, to write the draft, is much efficient.
When the scenario is ready we can share the draft with our ideas and concepts to have other inputs, issues, etc…

Brush Assets Issues

I have opened some bug reports about the brushes on Bugzilla, the great part of them are referred mainly the usage of the 'clipboard' (mainly artifacts effects) and with features and parameters present on the Tool Options dialog. So, is important have all paint tools working well, also in prevision of brush improvements … I am not saying that is necessary to revise the whole structure but is important, understand the strengths and weaknesses of brush instances on GIMP.

GIMP & Asset Portability

I think that the portability of assets, in general, are very important between Free Software mainly. Krita is using as raster brushes many .gbr from the GIMP 2.8 library, also in Krita has partial support to the .gih brushes. Another interesting issue is beginning to talk about a more general brush, perhaps a universal standard to raster and parametric for all painting apps on the free software world.

General Plugin Concept

I have prepared a schema to describe my idea around this plugin, so, is not definitive and I am not a programmer to represent this in their manner, but I think useful the schematics with flows to resolve descriptions complexes and languages misleading :-)
all-modules-brush-plugin_v1.png

Modules and Features

Dynamic Brush File/Edit Module

Dynamic Brush File/Edit Module is the manager of the file/edit actions and inputs that are chosen by the user during the creation or editing process of a brush, for instance:

  1. New brush and options to create and edit it (via the plugin or as 'Open as Image'.
  2. What is the source of the image that will be used on the brush (clipboard or library).
  3. Inputs (icon, name, array template*, aspect behavior*, size, morphing type, gray/color mode).

Image Reference

Essentially 'Image Reference' is the image's source kind:
a) From Clipboard
b) From a Library (discuss how to organize this)
The Image Reference module has the ability to resize or adapt the images to the brush properties, size, and mode (color or grayscale) mainly to adequate with properties that are being chosen on the 'Dynamic Brush File/Edit Module'.

How work Image Reference

The clipboard and the Library resources are images or cutoff of them that can be used as the start of the creation brush process.
In this process, is important, that many times we don't have a standard (format image, size, precision, etc…). In this sense is important to understand how to use these resources from Clipboard and/or an external library.

Array Template Module

The Array Template Module is a procedure that permits to use a .xcf template, created with scope to formatting .gih brushes, and fill it with the outputs realized on the 'Procedure Dynamic Brush Module'.

How work Array Template Module

We can think in two possibilities, the first with a restrict collection of cases (that I prefer), the second a free way to resolve automatically the array of gih in basis what wants the user.

Library

I have made many tests with .gih brushes and this is a sum of my knowledge:
arrays-templates.png

Creation Process Module

The module 'Creation Process Module, is a procedure that we can briefly sum up as to align/transform the actions and inputs setting and managed on the DYNAMIC BRUSH FILE/EDIT MODULE, and send them to 'Procedure Dynamic Brush Module'.

How work Creation Process Module

In my opinion, the natural flow is described by:

  1. Create a new Brush or Edit an existent (the editing of existent brush, is basically changing the Name*, Morphing (?!) and Gray/Color);
  2. Choose the 'Size';
  3. Choose the image reference from 'Image Reference Module';
  4. Insert the general inputs:
    1. Name*, think as is possible to manage alias name (brush on the lists GIMP) and the name of the .gih brush archive.
    2. Array Template, we have an 'Array Template Module' with a small library of good and well-formed templates to .gih brushes (dimensions/aspects).
    3. Size, I think important have a square format, so the size is essentially one and the unit is pixel.
    4. Morphing, list of cases well-formed to the brushes, normally, in the basis of my experiments some cases of embossing convolutions.
    5. Gray/Color, if the brush will be used as RGB or in Grayscale mode (normally this is the more common type).

Procedure Dynamic Brush Module

This procedure is the assemblage of 'Morphing' and 'Matrix' procedures, and they are responsible:

  1. Morphing Procedure transforms the image(s) that will be used in the brush array.
  2. Matrix Procedure fills the array template chosen by the user on 'Dynamic Brush File/Edit Module'.

Morphing Procedure

Morphing Procedure is based on the actions of the ImageMagick Morphology library commands.

Concept

A single stain can be used as a paint stroke, normally the static raster brushes are thought so, as the GIMP .gbr brush.
This module is mainly specialized on the dynamic brushes, or also named on GIMP as 'animated brush' ;-). So this module produces a series of stains based in the kernel image, chosen on the 'Dynamic Brush Editor Module'. The idea is to use the ImageMagick Morphology commands to produces stain variations of each aspect in gih brush.

Morphing brushes (.gih)
Some morphing brushes (.gih)
Some morphing brushes (.gih)

Examples applied

A morphing doodle
Morphing brushes in action... a doodle ;-)
Morphing brushes in action… a doodle ;-)

Matrix Procedure

Matrix procedure specialized to fill with images processed by the Morphing Procedure a short number of xcf templates specialized (size variable?! or cases of .xcf templates?) in the .xcf arrays ready to Gih Brush Procedure produces the brush outputs.

How work Matrix Procedure

The flow that I have imagined is referred to as different modules as follow:

a. A kind array is chosen of a restrict series of the use cases (matrix cases on Array Template Module);
b. An image or more is/are already chosen (it depends on how many dimensions as the array);
c. Morphing Procedure transform the image in how many are necessary to fill the array conform the choice in a);
d. The Matrix Procedure link → b) → c) and fill a);
e. Gih Brush Procedure produces the gih brush.

.Gih Brush Procedure

Basically is the current plugin to create the .gih brushes on GIMP.
The idea is to redesign this plugin to work in the background, in line with the procedures thought to Brush Procedure Plugin to GIMP.

Save Module

The Save Module is a part of the 'Dynamic Brush File/Edit Module' but as separated dialog when the process is terminated, after '.GIH Brush Procedure'.

Features of the 'Save Module'

The 'Save Module' has, in short, the essential part of 'Dynamic Brush File/Edit Module'.

  1. General data about the brush with edit enabled:
    1. Icon
    2. Name/Name file
    3. Tags
  2. Infos
    1. Size
    2. Gray/color
    3. Array type
    4. Weight file

Preview Module

Preview Module is a 'link' based with certain procedures or plugins of GIMP used to render a brush along a default path with:
a) Brush;
b) Tool Options setting;
c) Paint Dynamics current.

Idea and improvements

The path is possible to apply the 'dynamic stroke' in a transparent layer… as a kind of 'Sample Merged' feature. The Path Tool has the ability to apply on the paths:
a) any paint tool using:
a.1) Tool Options setting;
a.2) Paint dynamics current.

What is necessary to verify:

a) if the bug report Ctrl+Shift/dynamics (in prevision) has relation with this feature on path tool (perhaps, yes).
[see paint-tools-with-paint-dynamics.gnumeric].
b) create a module in GEGL to realize a continuous cycle.

So, this module would be a GIMP module that could be used externally by plugins, for instance.
The preview is thought only to create a preview when the brush is ready, not in progress or during of the creation process, or we need a basic brush to modify it with new properties and inputs.

Workgroup and Crowdfunding Project

Deadlines

Notes or Points ;-)

* Composing .gbr(s) to .gih as procedure to this plugin?!

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License