Ecrire un plugin gimp en python

Où placer les scripts (plug-in) python pour gimp ?

MacOSX :

/Users/VOTRE_USERNAME/Library/Application Support/GIMP/2.10/plug-ins/

Ubuntu :

Si gimp est installé via snap :

/home/VOTRE_USERNAME/snap/gimp/current/.config/GIMP/2.10/plug-ins/
Si gimp est installé avec flatpak (probablement téléchargé sur gimp.org, méthode conseillée pour avoir python-fu) :
/home/VOTRE_USERNAME/.config/GIMP/2.10/plug-ins
Et si aucun de ces chemins ne matchent chez vous, allez regarder les chemins dans Gimp -> Préférences -> Dossiers -> Greffons !

Contenu du plug-in

Ce plugin permet de mettre "2021" dans le calque texte qui a pour nom "date".

#!/usr/bin/env python
# coding: utf-8

import gimpcolor # Necessaire pour déclarer la couleur plus bas
import math
from gimpfu import *

# La fonction principale du script avec les parametres d'entrée
def montest(
  infile,
  outfile):

  # Couleur noire
  black = gimpcolor.RGB(0,0,0)

  # Charge xcf
  img = pdb.gimp_file_load(infile, infile)

  # Charge un calque par son nom : "date"
  layer = pdb.gimp_image_get_layer_by_name(img, "date")

  # Mets la couleur noire et mets "2021" dans le calque texte
  pdb.gimp_text_layer_set_color(layer, black)
  pdb.gimp_text_layer_set_text(layer, "2021")
  
  # Enregistrer xcf
  pdb.gimp_xcf_save(0, img, None, outfile, outfile)

# Register permet d'enregistrer son plugin
register(
	"montest", # Nom du plugin il devra être prefixe par "python-fu-" lors de l'appel
	"Contenu de la modale", # Ce qui s'affichera dans la boite à l'appel du plugin (quand c'est fait par l'interface
	"Description", # Description
	"rivsc", # Auteur
	"MIT", # License
	"2021", # Date création
	"xxxxx", # Nom dans l'interface gimp
	"RGB*, GRAY*",
	[
          (PF_FILENAME, "infile", "Input file", "." ), # Parametre dans l'interface correspondant a la methode python
          (PF_FILENAME, "outfile", "Output file", "." ), # Parametre dans l'interface correspondant a la methode python
	],
	[],
	montest, # Methode python devant correspondre a la def plus haut
        menu="<Image>/Tools") # Endroit du menu ou le script sera visible

main()

pdb signifie "Procedural Database Procedures", toutes les fonctions GIMP s'appelle via cet objet (Voir ici)
Pour connaitre la liste des fonctions disponibles, lancez GIMP, puis dans Filtres -> Python-fu -> Console -> Browse, vous obtiendrez la liste ainsi que la documentation de chaque fonction sur la partie droite.
Pour vous aider, vous pouvez utiliser ce script ruby qui génère un squelette de plugin gimp : Générateur plugin GIMP
Attention vos plugins python pour gimp doivent être executable :

chmod +x montest.py

Comment l'appeler en ligne de commande ?

(Attention il faut rajouter "python-fu-" devant le nom lors de l'appel en ligne de commande, j'ai cherché 2h pour ça :/). Sinon vous aurez une erreur "Error: eval: unbound variable: montest".

MacOSX

/Applications/GIMP-2.10.app/Contents/MacOS/gimp --no-interface --batch='(python-fu-montest RUN-NONINTERACTIVE "/Users/scl/Downloads/mon_fichier.xcf" "/Users/scl/Downloads/mon_fichier_modifie.xcf")' -b '(gimp-quit 0)'

Ubuntu

gimp --no-interface --batch='(python-fu-montest RUN-NONINTERACTIVE "/home/scl/Downloads/mon_fichier.xcf" "/home/scl/Downloads/mon_fichier_modifie.xcf")' -b '(gimp-quit 0)'

Avec Flatpak il faut appeler le script de cette manière :

gimp --no-interface --batch='(python-fu-montest RUN-NONINTERACTIVE "/home/scl/Downloads/mon_fichier.xcf" "/home/scl/Downloads/mon_fichier_modifie.xcf")' -b '(gimp-quit 0)'

Dans l'interface vous le retrouverez (comme déclaré dans le fichier python) dans "Outils" -> "xxxxx".

Voilà votre premier plugin gimp en python :)