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)retorna3. 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🔗
| Plataforma | Caminho |
|---|---|
| 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