Archive for the ‘ plugin ’ Category

Comment créer un filtre dans le greffon G’mic ?

0-Introduction

Ce tutoriel a pour but de montrer comment créer un filtre personnalisé pour le greffon G’mic pour Gimp. Il part du principe que le lecteur ne connaît pas du tout le langage en ligne de commande G’mic.

Vous pouvez trouver des informations sur la façon de faire un filtre au début du fichier de commandes personnalisées par défaut et directement dans le greffon dans A propos > Création de filtres et aussi ci-dessous.

Ici, vous serez d’abord invité à créer un filtre très simple afin de comprendre les bases puis il s’agira d’assembler différents filtres afin d’en créer un meilleur.

1-Mon premier filtre

1.1-Le fichier des filtres personnalisés

Tous les filtres personnalisés que vous faites doivent être écrits dans un unique fichier texte appelé “.gmic“, n’oubliez pas le point au début du nom et n’ajouter rien d’autre, le nom de votre fichier texte n’est constitué que d’un point et de 4 lettres:: “.gmic“. Vous devez créer ce fichier dans votre répertoire “home” si vous êtes sous Linux, dans votre répertoire Application Data si vous êtes sous Windows et dans votre User Home folder si vous êtes sous MacOS. Ces 2 derniers systèmes d’exploitations peuvent rendre difficile la création de fichier commençant par un point: notepad or TextEdit peuvent vous aider au besoin.

1.2-Le filtre apparaît

Pour apparaître dans le greffon, vous devez inclure une ligne qui commence par #@gimp donnant le nom de votre filtre, la commande associée à ce filtre et optionnellement, la commande pour créer l’aperçu. Quelque chose comme:

#@gimp Mon premier filtre: mon_premier_filtre_commande, mon_premier_filtre_commande_preview

Vous pouvez essayer, mettez cette ligne dans votre fichier .gmic, rafraichissez les filtres G’mic et il devrait apparaître en haut de vos Filtres disponibles.

1.3-Le filtre dit quelque chose

Dans la partie droite de la fenêtre du greffon, vous pouvez mettre du texte et proposer différentes sortes de variables utilisables par le filtre. Pour cela, vous devez encore ajouter des lignes commençant par #@gimp. Vous pouvez par exemple recopier les lignes ci-dessous dans votre fichier .gmic et rafraîchir les filtres.

#@gimp Mon premier filtre: mon_premier_filtre_commande, mon_premier_filtre_commande
#@gimp : note = note("C'est mon premier filtre, je suis tellement excité!")
#@gimp : sep = separator()
#@gimp : Angle = float(45,0,360)
#@gimp : Remplir l'espace vide = choice("en noir","comme les bords","en répétant l'image")

1.4-Le filtre fait quelque chose

Jusqu’ici, votre filtre ne marche pas, si vous cliquer sur Valider, une erreur apparaîtra. C’est parce qu’aucune commande ne s’appelle “mon_premier_filtre_commande“, elle doit être créée en utilisant le langage G’mic. Donc, notre premier filtre peut être fini avec 2 lignes supplémentaires pour devenir:

#@gimp Mon premier filtre: mon_premier_filtre_commande, mon_premier_filtre_commande
#@gimp : note = note("C'est mon premier filtre, je suis tellement excité!")
#@gimp : sep = separator()
#@gimp : Angle = float(45,0,360)
#@gimp : Remplir l'espace vide = choice("en noir","comme les bords","en répétant l'image")
mon_premier_filtre_commande :
  -rotate $1,$2

si vous mettez ceci dans votre fichier .gmic et rafraichissez les filtres une fois de plus, vous avez un filtre pleinement fonctionnel capable de tourner une image. Vous pouvez ajuster l’angle de rotation de 0 à 360° et la valeur proposée par défaut est 45. Vous avez 3 choix pour “remplir l’espace vide”.
La commande utilisée par votre filtre est “mon_premier_filtre_commande” et c’est une commande très simple qui utilise l’instruction -rotate et les 2 variables $1 et $2 font référence à celles proposées au-dessus: “Angle” et “Remplir l’espace vide”.

1.5-Le filtre fait ce que vous voulez

Maintenant, vous avez les bases, vous avez juste besoin de vous inspirer des filtres déjà disponibles et de leur code source et si vous ne le connaissez pas encore, apprenez le langage de programmation G’mic. Pour ceux encore réticents à son apprentissage, il est possible d’assembler des filtres déjà existant en connaissant juste quelques trucs en plus.

2-Assembler des filtres

Après avoir utilisé le greffon, vous trouvez peut-être que ce serait bien si certains de vos filtres favoris pouvaient être assemblés afin de minimiser le nombre de clics. C’est d’une certaine façon possible.

2.1-Mimer un travail séquentiel

Si votre travail est purement séquentiel, c.à.d. si vous appliquez votre premier filtre sur une image, puis vous appliquez votre second filtre sur le résultat obtenu, etc. il est alors relativement facile de créer un filtre qui effectue les deux en un seul clic. Pour ça, vous devez récupérer les lignes de commandes exécutées par le greffon et les utiliser pour recréer un filtre comme expliqué au premier chapitre.
Par exemple, imaginons que vous vouliez assembler B&W pencil suivi de Soft glow (tous deux dans le répertoire Artistic folder). Pour récupérer la ligne de commande, la façon la plus facile est d’exécuter Gimp depuis un terminal et de régler les messages de sortie du greffon sur verbeux. Pour les 2 filtres en questions, vous obtiendriez dans votre console (ou votre fichier log) des lignes intéressantes comme:

[gmic_gimp]./apply/ -v -99 -gimp_pencilbw 0.3,60,0,0,0
[gmic_gimp]./apply/ -v -99 -gimp_glow 1,0,0

Votre nouveau filtre peut alors être écrit:

#@gimp BWpencil et Glow: bwpencil_glow, bwpencil_glow
bwpencil_glow :
  -gimp_pencilbw 0.3,60,0,0,0
  -gimp_glow 1,0,0

Et cela marche de la même façon avec 3, 4 et plus de filtres.

2.2-Proposer des réglages

Mais vous aurez remarqué (si vous l’avez essayé), il n’y a pas de réglages proposés dans l’assemblage de filtres. Pour en ajouter, vous devez faire comme expliqué ci-dessus. Ainsi, si vous voulez pouvoir régler la taille et l’amplitude pour B&W pencil et l’amplitude pour Soft glow, vous adapterez de cette façon:

#@gimp BWpencil and Glow: bwpencil_glow, bwpencil_glow
#@gimp : taillle = float(0.3,0,5)
#@gimp : Amplitude pour B&W pencil= float(60,0,200)
#@gimp : Amplitude pour Soft glow = float(1,0,20)
bwpencil_glow :
  -gimp_pencilbw $1,$2,0,0,0
  -gimp_glow $3,0,0

2.3-Assemblage complexe

Les choses deviennent plus compliquées quand vous gérer plusieurs images pendant la séquence de filtres que vous voulez assembler. Cela arrive, par exemple, si vous conservez l’original en réglant le Mode de sortie sur Nouveau(x) calque(s) (ou Nouveau(x) quoique ce soit) ou si un de vos filtres initiaux créent plusieurs images (comme Layers > Tiles to layers ou Layers > Split tones). Vous pouvez maitrisez cela en apprenant 2 autres petits trucs faciles du langage G’mic.

2.3.1-Conserver l’original

Jusqu’à maintenant, pour appeler une commande G’mic, vous mettiez un tiret (-) suivi du nom de la commande, par exemple:

  -gimp_pencilbw 0.3,60,0,0,0

Et bien, si vous mettez 2 tirets à la place, G’mic procède de la même façon avec les images, mais il conservera aussi l’original. Si vous essayez le filtre ci-dessous, même si vous réglez le Mode de sortie sur Sur place, vous obtenez votre résultats dans un nouveau calque:

#@gimp Keep BWpencil : keep_bwpencil, keep_bwpencil
keep_bwpencil :
  --gimp_pencilbw 0.3,60,0,0,0
2.3.2-Gérer plusieurs images

Pour gérer plusieurs images, G’mic leur donne des numéros commençant par 0. Donc, dans l’exemple précédent, votre image originale serait la numéro 0 et celle créée par le B&W pencil serait la numéro 1.
Si vous ne spécifiez rien, par défaut, la commande suivante est appliquée à toutes les images. Par exemple, dans le filtre qui suit, Soft glow est appliqué sur l’originale et sur celle provenant de B&W pencil.

#@gimp Keep BWpencil plus glow : keep_bwpencil_glow, keep_bwpencil_glow
keep_bwpencil_glow :
  --gimp_pencilbw 0.3,60,0,0,0
  -gimp_glow 1,0,0

Mais, si vous accolez le numéro de l’image entre crochets à votre nom de commande, alors le filtre ne sera appliqué qu’à l’image spécifiée. Ainsi, si vous modifiez le filtre précédent comme ci-dessous, le Soft glow n’est exécuté que sur l’image résultant de B&W pencil, laissant l’originale intacte:

#@gimp Keep BWpencil plus glow : keep_bwpencil_glow, keep_bwpencil_glow
keep_bwpencil_glow :
  --gimp_pencilbw 0.3,60,0,0,0
  -gimp_glow[1] 1,0,0

Vous pouvez spécifiquement demander à un filtre de s’exécuter sur plusieurs images en ajoutant d’autres nombres séparés par une virgule. Pour filtrer la première, la troisième et la cinquième, vous accoleriez [0,2,4] au nom de votre commande. Il y en plus à savoir à ce sujet.

2.3.2-Finissions ce machin

Au point où on en est, ce filtre me semble non-fini. J’ai l’impression qu’il pourrait être utile à quelqu’un si les 2 calques obtenus étaient recomposés ensemble avec une sorte de Layers Multiply et si quelques possibilités de réglage étaient offertes à l’utilisateur. Et puisque 2 filtres ont été construits pendant ce tutoriel, mettons-les tous les deux dans le fichier .gmic afin qu’ils puissent tous deux être utilisés dans le greffon. En totalité, cela ressemblera à quelque chose comme:

#@gimp Mon premier filtre: mon_premier_filtre_commande, mon_premier_filtre_commande
#@gimp : note = note("C'est mon premier filtre, je suis tellement excité!")
#@gimp : sep = separator()
#@gimp : Angle = float(45,0,360)
#@gimp : Remplir l'espace vide = choice("en noir","comme les bords","en répétant l'image")
mon_premier_filtre_commande :
  -rotate $1,$2

#@gimp Filtre du tutoriel  : filtre_tuto, filtre_tuto
#@gimp : Size = float(0.3,0,5)
#@gimp : Amplitude pour B&W pencil= float(60,0,200)
#@gimp : Amplitude pour Soft glow = float(1,0,20)
filtre_tuto :
  --gimp_pencilbw $1,$2,0,0,0
  -gimp_glow[1] $3,0,0
  -compose_multiply

2.4-Pour aller plus loin

Puisque qu’il s’agit de programmation, il est probable que vous rencontriez quelques bugs. Pour debugger, penser à régler les Messages de sortie sur Mode verbeux ou Très verbeux. Et ne restez pas bloqués seuls venez trouver inspiration et aide et partager ce que vous avez fait.
Une fois que vous aurez un peu jouer, vous voudrez peut-être apprendre quelques trucs en plus.

Advertisements

G’mic : Making better custom filters

0-Introduction

Here, it is supposed that you read the previous article on the subject and are ready for more. The official goal is give tricks to make slicker and more reliable filters.

1-Better preview

1.1-Default zoom

You can specify what should be the default zoom for your preview by pasting a float number between parenthesis to the preview command at the first line end of your custom filter. Ex:

#@gimp Better Filter  : better_filter, better_filter_preview(0)

(0) means 1:1 preview, (1) means previewing the whole image, (2) means 1/2 image and so on…

1.2-Split preview

You must have seen that some filters propose a split preview, so you can accurately compare the existing image with the future filtered one. You can add this functionality to your filter if you:

  1. add a new choice option dedicated to the preview type and
  2. embed your filter command inside the -gimp_split_preview command.

The filter from the previous article would become:

#@gimp Better Filter  : better_filter, better_filter_preview(0)
#@gimp : Size = float(0.3,0,5)
#@gimp : Amplitude for B&W pencil= float(60,0,200)
#@gimp : Amplitude for Soft glow = float(1,0,20)
#@gimp : sep = separator()
#@gimp : Preview type = choice("Full","Forward horizontal","Forward vertical","Backward horizontal","Backward vertical")
better_filter :
  --gimp_pencilbw $1,$2,0,0,0
  -gimp_glow[1] $3,0,0
  -compose_multiply
better_filter_preview :
  -gimp_split_preview "-better_filter ${1--2}",$-1

Thanks to Editor B, CC-by

2-Multiple input management

2.1-A possible issue

As a user, if you have several layers and want to apply the filter above on each of them, you might feel natural to just set the Input layer option to All and proceed. But with the filter as it is right now, you won’t get the expected result.
This is because the -gimp_pencilbw and the -compose_multiply commands are applied on every layers without discernment. To address this issue, one solution is to create a loop inside which, each layer is considered one by one.

2.2-The saving loop

For that, you create a “-repeat ... -done” loop that runs as many times as you have layers. Then, inside that loop, you isolate the layer that has to be processed this time with a “-local ... -endlocal” block. The filter then becomes:

#@gimp Better Filter  : better_filter, better_filter_preview(0)
#@gimp : Size = float(0.3,0,5)
#@gimp : Amplitude for B&W pencil= float(60,0,200)
#@gimp : Amplitude for Soft glow = float(1,0,20)
#@gimp : sep = separator(), Preview type = choice("Full","Forward horizontal","Forward vertical","Backward horizontal","Backward vertical")
better_filter :
  -repeat @# -local[@{>,-1}]
  --gimp_pencilbw $1,$2,0,0,0
  -gimp_glow[1] $3,0,0
  -compose_multiply
  -endlocal -done
better_filter_preview :
  -gimp_split_preview "-better_filter ${1--2}",$-1

The variable @# returns the number of layers. If you have 3 layers the code inside the loop will be run 3 times.
The variable ~> is the counter telling you how many times the loop has been run so far. So, for 3 layers, it takes successively the values 0,1,2.
Only one layer enter the “-local[~>] ... -endlocal” block, and inside that block, it is considered as being number [0].

3-Sort out your filters

Having many custom filters in your .gmic file can create a mess in your plug-in window. To sort out that, you can create directories! The next line means : “everything that follows will be placed in the directory called: My Directory”

#@gimp My Directory

Whereas that one means : “everything that follows will be in the parent directory”

#@gimp _

So put the first one at the top of your .gmic file and the second one at the bottom and things are sorted out.

How to create a custom filter in the G’mic plug-in

0-Introduction

This tutorial intends to show how to create a so called user-defined filter in the G’mic plug-in for Gimp. It supposes that you don’t know anything in the G’mic command line language.

You can find some quick informations on how to make such a filter close to the beginning of the default custom command file and directly in the plug-in at About > Filters design and here below.

Below, you will be first invited to create a pretty simple filter to understand the basis and then the purpose will be to assemble different filters in order to create a better one.

1-My first filter

1.1-The user-defined filter file

All the user-defined filters that you make have to be written in one single text file called “.gmic” under linux or MacOS and only “gmic” under Windows (there’s a dot at the start of the filename under linux or MacOS, not under Windows). You need to create that file in your home directory if you are under linux or MacOS and in your Application Data folder if your are under Windows. For those having difficulties to create a file beginning with a dot under MacOS, use TextEdit.

1.2-The filter appears

To appear in the plug-in, you should include a line starting by #@gimp giving your filter’s name, the command name associated with that filter and optionally, a command name to create the preview. Something like that:

#@gimp My first filter: my_first_filter_command, my_first_filter_command_preview

You can try, put it in your .gmic file, refresh the G’mic filter and it should appear at the top of the available filters.

1.3-The filter says something

In the right part of the plug-in window, you can put text and propose different kinds of variables that can be used by the filter command. For that you need again lines beginning by #@gimp. As an example, you can paste the lines below in your .gmic file and refresh your filter.

#@gimp My first filter: my_first_filter_command, my_first_filter_command
#@gimp : note = note("It is my first filter, I am so excited!")
#@gimp : sep = separator()
#@gimp : Angle = float(45,0,360)
#@gimp : Fill the empty space = choice("in black","like the borders","by repeating the image")

1.4-The filter does something

So far, your filter doesn’t work, If you click on apply, an error message will appear. It is because no command is called “my_first_filter_command“, it has to be created using the G’mic command line language. So, our first filter can be completed with 2 more lines to become:

#@gimp My first filter: my_first_filter_command, my_first_filter_command
#@gimp : note = note("It is my first filter, I am so excited!")
#@gimp : sep = separator()
#@gimp : Angle = float(45,0,360)
#@gimp : Fill the empty space = choice("in black","like the borders","by repeating the image")
my_first_filter_command :
  -rotate $1,$2

if you put that in your .gmic file and refresh once again the filter, you now have a fully functional filter able to rotate an image. You can adjust the rotation angle from 0 to 360° and the default proposed value is 45. You have 3 choices to “fill the empty space”.

The command used for your filter is called “my_first_filter_command” and it is a quite simple command that use the -rotate instruction and the two variables $1 and $2 refer to the 2 ones proposed above: “angle” and “fill the empty space”.

1.5-The filter does what you want

Now you know the basis, you just have to get inspired by the already available filters and their source code and if you don’t already know it, learn the G’mic programming language. For those of you still reluctant to learn it, by just knowing a few more things, it is possible to assemble already existing filters.

2-Assembling filters

After some use of the G’mic plug-in, you might feel that it would be great if some of your favorite filters would be assembled together in order to minimize the number of click. It is somehow possible.

2.1-Mimic a sequential work

If your work is purely sequential, i.e. you apply the first filter on an image, then you apply the second filter on the result etc. then it is relatively easy to create a filter that do both in just one click. For that, you need to get the command lines run in the background of the plug-in and use them to recreate a filter as explained in the first chapter.

For example, let’s imagine that you want to assemble B&W pencil followed by Soft glow (both in the Artistic folder). To get the command lines run for those filters, the easiest way is to run gimp from a terminal and to set the plug-in to verbose. For the 2 filters, you would get in your terminal some interesting lines like:

[gmic_gimp]./apply/ -v -99 -gimp_pencilbw 0.3,60,0,0,0
[gmic_gimp]./apply/ -v -99 -gimp_glow 1,0,0

Then your new filter can be written:

#@gimp BWpencil and Glow: bwpencil_glow, bwpencil_glow
bwpencil_glow :
  -gimp_pencilbw 0.3,60,0,0,0
  -gimp_glow 1,0,0

And it works the same with 3, 4 and more filters.

2.2-Propose some settings

But you might have noticed (if you tried it), there is no setting proposed in the assembled filter. To add some, you need to do as explained above. Thus if you want to be able to set the size and amplitude for the B&W pencil and the amplitude for the Soft glow, you would adapt the filter this way:

#@gimp BWpencil and Glow: bwpencil_glow, bwpencil_glow
#@gimp : Size = float(0.3,0,5)
#@gimp : Amplitude for B&W pencil= float(60,0,200)
#@gimp : Amplitude for Soft glow = float(1,0,20)
bwpencil_glow :
  -gimp_pencilbw $1,$2,0,0,0
  -gimp_glow $3,0,0

2.3-Complex assembling

Things become more complex when you have to deal with several images during the filter sequence that you want to assemble. It happens if you keep the original by setting the Output mode to New layer (or New whatever) or if one of your original filters creates several images (as Layers > Tiles to layers or Layers > Split tones). You can master that by just learning 2 easy more things from the G’mic language.

2.3.1-Keeping the original

So far, to call a G’mic command, you write a dash (-) followed by the command name, for example:

  -gimp_pencilbw 0.3,60,0,0,0

Well, if you put 2 dashes instead, G’mic processes the image the same way, but it also keeps the original. If you try the filter below, even if you set the Output mode to In place, you get your result in a new layer:

#@gimp Keep BWpencil : keep_bwpencil, keep_bwpencil
keep_bwpencil :
  --gimp_pencilbw 0.3,60,0,0,0
2.3.2-Dealing with several images

When it deals with multiple images, G’mic gives them numbers starting from 0. So in the previous example, your original image would be the number 0 and the B&W pencil processed one would be the number 1.

If you don’t specify anything, by default, the next command apply to every images. For instance, in the next filter, Soft glow is applied to the original and to the B&W pencil processed ones.

#@gimp Keep BWpencil plus glow : keep_bwpencil_glow, keep_bwpencil_glow
keep_bwpencil_glow :
  --gimp_pencilbw 0.3,60,0,0,0
  -gimp_glow 1,0,0

But, if you paste the image number into square brackets to your command name, then the process will apply only to the specified image. Thus, if you modify the previous filter as below, the glow is only performed on the B&W pencil processed image, leaving the original untouched:

#@gimp Keep BWpencil plus glow : keep_bwpencil_glow, keep_bwpencil_glow
keep_bwpencil_glow :
  --gimp_pencilbw 0.3,60,0,0,0
  -gimp_glow[1] 1,0,0

You can ask to specifically process several images by adding numbers separated by a comma. To process the first, the third and the fifth one, you would paste [0,2,4] to the command name. There is more you might want to know about that.

2.3.2-Let’s finish that

This last filter seems so far unfinished to me, I feel that it could be useful to someone if the two layers obtained were composed together with some kind of Layers Multiply and if some tweaking possibilities was offered to the user. And since 2 filters were built during this tutorial, let’s place them both in the .gmic file, so that both can be used in the plug-in. The whole thing becomes then something like:

#@gimp My first filter: my_first_filter_command, my_first_filter_command
#@gimp : note = note("It is my first filter, I am so excited!")
#@gimp : sep = separator()
#@gimp : Angle = float(45,0,360)
#@gimp : Fill the empty space = choice("in black","like the borders","by repeating the image")
my_first_filter_command :
  -rotate $1,$2

#@gimp Filter tutorial : filter_tuto, filter_tuto
#@gimp : Size = float(0.3,0,5)
#@gimp : Amplitude for B&W pencil= float(60,0,200)
#@gimp : Amplitude for Soft glow = float(1,0,20)
filter_tuto :
  --gimp_pencilbw $1,$2,0,0,0
  -gimp_glow[1] $3,0,0
  -compose_multiply

2.4-Further

Since this is programming, you are ought to meet some bugs. To debug, think about running gimp from the terminal and set the Output messages to Verbose or Very verbose. And don’t stay stuck alone, get inspired, get help and share what you’ve made.
Once you’ll have played a bit, you might want to learn a few more tricks for your filters.

G’mic: The command line behind the Gimp plug-in

0-Expendable introduction

The G’mic plug-in for Gimp is based on the G’mic language. Each filter proposed in the plug-in corresponds to a G’mic command line, each setting is just a parameter of that command line. And command lines are great because :

  1. it is a way to remember settings and filter sequences,
  2. it allows to (almost) effortlessly apply on a large set of images what you just did graphically.

Anything said below supposes that you run some kind of linux, but the spirit of it apply under other OS too.

1-How to get the command lines?

To have the plug-in tells you what you do graphically in the command line language, you just have to start Gimp from a terminal and to set it to “verbose mode”.

To start from a terminal, just open a terminal and type :

gimp

To set it to “verbose mode”, once you have open the plug-in, set the “ouput messages…” menu on the left to “Verbose”.

From now on, you’ll see text appearing in the terminal each time G’mic adapt the preview to your new setting and each time you apply a filter on your image.


Image from PhotoComiX, CC-by-nc

2-What it looks like?

Two kind of lines appear in the terminal. The ones telling what command is used to create the preview (containing the /preview/ sequence) and the ones telling what command is really applied on the picture (containing the /apply/ sequence). You are probably only interested in the last kind.

For example, the line:

[gmic_gimp]./apply/ -v -99 -gimp_mix_rgb 1,0,0,1,0,0,1,0,0,0,2,0

tells that the command called was gimp_mix_rgb and all the numbers behind correspond to the settings.

3-What to do with it?

You could just be happy to know what happens and to be able to keep everything in a text file with a simple copy/paste, but you could also want to apply it in a terminal. Just go to the directory where your file (say image.jpg) is and type:

gmic image.jpg -gimp_mix_rgb 1,0,0,1,0,0,1,0,8.5,0,2,0

Your processed image will be displayed, but not saved.
To save it instead of displaying it:

gmic image.jpg -gimp_mix_rgb 1,0,0,1,0,0,1,0,8.5,0,2,0 -o processed_image.jpg

If you have many images (whose names finish by jpg) that you want to be processed, a script like that should do it:

for i in *jpg
do
gmic $i -gimp_mix_rgb 1,0,0,1,0,0,1,0,8.5,0,2,0 -o processed_$i
done

Image Wikimedia

4-By the way

If you only want the “interested” lines to appear in your terminal, you should run Gimp with this command instead:

gimp |grep apply