O que você vai aprender

  • Escrever scripts Script-Fu em Scheme para automatizar tarefas no GIMP
  • Registrar scripts no PDB para aparecem nos menus
  • Usar o console interativo para testar chamadas ao PDB antes de criar o script final

Definição🔗

Script-Fu e a linguagem de scripting nativa do GIMP, baseada em Scheme (dialeto da família Lisp). O interpretador embutido e o TinyScheme, uma implementação leve do padrão R5RS. Script-Fu permite automatizar qualquer ação do GIMP através de chamadas ao PDB, sem dependência externa: o interpretador vem compilado no próprio binário do GIMP.

Use Script-Fu quando: precisa distribuir um script .scm que roda em qualquer instalação sem instalação adicional; quer testar interativamente uma operação via console; ou precisa de macros simples em arquivos únicos.

Conceitos🔗

flowchart LR
    A[Arquivo .scm] --> B[TinyScheme interpreter]
    B --> C{Função registrada?}
    C -->|sim| D[script-fu-register]
    C -->|não| E[Console interativo]
    D --> F[PDB]
    E --> F
    F --> G[libgimp / GEGL]

Conceitos-chave:

  • S-expression — toda expressão Scheme é uma lista entre parênteses (funcao arg1 arg2 ...). Operadores matemáticos são funções e ficam em primeiro lugar: (+ 1 2) retorna 3.
  • define — declara uma variável ou função: (define (minha-func img) ...).
  • let / let* — escopo local: (let* ((a 1) (b (+ a 1))) b).
  • Tipo de retorno do PDB — todo procedimento retorna uma lista; valores escalares vem em uma lista de um elemento: (car (gimp-image-new 640 480 RGB)) extrai o ID da imagem.
  • script-fu-register — registra o procedimento no PDB para que apareça no menu do GIMP e possa ser chamado por outras linguagens.

Fluxo de Uso🔗

flowchart TD
    A[Abrir console: Filtros > Desenvolvimento > Script-Fu > Console] --> B[Testar expressão no prompt]
    B --> C{Funciona?}
    C -->|Não| B
    C -->|Sim| D[Escrever arquivo .scm]
    D --> E[Adicionar script-fu-register]
    E --> F[Copiar para ~/.config/GIMP/2.10/scripts/]
    F --> G[Reiniciar GIMP]
    G --> H[Script aparece no menu]

Exemplos Práticos🔗

Exemplo 1 — Soma aritmética no console Script-Fu

O Console Script-Fu aceita qualquer expressão Scheme. Comece verificando o interpretador:

(+ 3 5 6)
(car (gimp-version))

A primeira linha retorna 14; a segunda extrai o número de versão principal do GIMP.

Exemplo 2 — Inverter cores de uma imagem carregada

(let* ((image (car (gimp-file-load RUN-NONINTERACTIVE "entrada.png" "entrada.png")))
       (drawable (car (gimp-image-get-active-drawable image))))
  (gimp-image-undo-group-start image)
  (gimp-drawable-invert drawable FALSE)
  (gimp-image-undo-group-end image)
  (gimp-displays-flush))

A função gimp-drawable-invert aplica a inversão. RUN-NONINTERACTIVE evita qualquer diálogo modal; em modo interativo use RUN-INTERACTIVE. Envolver as operações em undo-group-start / undo-group-end permite reverter tudo com um único Ctrl+Z.

Exemplo 3 — Registrar um script persistente

(define (script-fu-redimensionar-maximo image drawable max-largura)
  (let* ((largura (car (gimp-image-width image)))
         (altura (car (gimp-image-height image)))
         (proporcao (/ max-largura largura))
         (nova-altura (round (* altura proporcao))))
    (gimp-image-scale-full image max-largura nova-largura INTERPOLATION-CUBIC)))

(script-fu-register
  "script-fu-redimensionar-maximo"
  "Redimensionar para largura maxima..."
  "Redimensiona a imagem mantendo proporcao."
  "Autor"
  "Copyright 2024"
  "2024"
  "*"
  SF-IMAGE    "Imagem"   0
  SF-DRAWABLE "Drawable" 0
  SF-VALUE    "Largura maxima (px)" "1024")

(script-fu-menu-register "script-fu-redimensionar-maximo"
                         "<Image>/Filters/Customizados")

Após salvar em ~/.config/GIMP/2.10/scripts/redimensionar.scm e reiniciar o GIMP, o item aparece em Filtros > Customizados.

Exemplo 4 — Aplicar vários filtros em sequência

(define (script-fu-pipeline image drawable)
  (gimp-image-undo-group-start image)
  (gimp-drawable-desaturate drawable DESATURATE-LUMINOSITY)
  (gimp-drawable-brightness-contrast drawable 10 -20)
  (plug-in-gauss RUN-NONINTERACTIVE image drawable 2.0 2.0 0)
  (gimp-image-undo-group-end image)
  (gimp-displays-flush))

O exemplo encadeia dessaturação, ajuste de brilho/contraste e Gaussian Blur. Como tudo está em um único undo group, você reverte com um só Ctrl+Z.

Exemplo 5 — Iterar sobre arquivos com file-glob

(let* ((arquivos (cadr (file-glob "*.jpg" 1)))
       (nome ""))
  (while (not (null? arquivos))
    (set! nome (car arquivos))
    (let* ((img (car (gimp-file-load RUN-NONINTERACTIVE nome nome)))
           (drw (car (gimp-image-get-active-drawable img))))
      (gimp-drawable-desaturate drw DESATURATE-LUMINOSITY)
      (file-png-save RUN-NONINTERACTIVE img drw nome nome 0 9 1 1 1 1 1))
    (set! arquivos (cdr arquivos))))

file-glob retorna uma lista com (contador . arquivos). O loop aplica dessaturação em cada .jpg do diretório atual e sobrescreve no formato PNG.

Diretórios de Instalação🔗

PlataformaCaminho
Linux~/.config/GIMP/2.10/scripts/
macOS~/Library/Application Support/GIMP/2.10/scripts/
Windows%APPDATA%\GIMP\2.10\scripts\

Após copiar o script, reinicie o GIMP. Ele aparecerá no menu definido em script-fu-menu-register. Se não aparecer, verifique o conteúdo do Error Console em Windows > Dockable Dialogs > Error Console — erros de sintaxe são reportados ali.

Você aprendeu

  • Script-Fu é baseado em Scheme (TinyScheme) — linguagem de scripting nativa do GIMP sem dependências externas
  • Scripts são registrados no PDB via script-fu-register e aparecem nos menus
  • O console interativo permite testar chamadas PDB antes de criar o script final

Referências🔗