Autorretrato de um LLM

Esse post nasceu com um trabalho para a unidade curricular Inteligência Artificial na Arte
com a Professora Nicoletta Mandolini durante o Mestrado em Media Arts na Universidade do Minho.

Para realizar esse trabalho tive uma longa conversa com o ChatGPT. Pedi um resumo dessa conversa e o ChatGPT 5.2 preparou esse resumo:

A conversa começou com uma questão técnica sobre PostScript, especificamente o comando curveto e a interpretação dos seus pontos de controle. A partir daí, o diálogo se expandiu para a compreensão do PostScript como linguagem gráfica, não apenas como formato de saída, mas como meio expressivo. Surgiram problemas práticos (como a abertura do arquivo no GIMP e a necessidade de cabeçalhos e BoundingBox), que levaram a uma reflexão sobre páginas, unidades, pontos e escala.

Com o avanço da conversa, o foco técnico deu lugar a uma investigação mais conceitual: como imagens podem ser transmitidas apenas por texto, e em quais linguagens isso é possível. Foram explorados SVG, LaTeX, Processing, shaders, PGM e outros formatos textuais ou semi-textuais, sempre com ênfase na relação entre código, imagem e legibilidade humana.

A discussão avançou para formatos simples como PGM, sua facilidade para processamento em Python e sua relação com formatos mais complexos como TIFF. A partir disso, surgiram exercícios de autorretrato algorítmico, primeiro em imagens minimalistas, depois em formas abstratas.

Por fim, a conversa convergiu para a ideia de processos generativos como metáfora do próprio diálogo: imagens vetoriais criadas por scripts, variáveis, reproduzíveis e mutáveis, entendidas como representações mais fiéis de um sistema relacional, processual e colaborativo — tanto do código quanto da própria interação entre humano e máquina.


Então, vamos começar: o que é PostScript?

PostScript é uma linguagem de programação especializada para visualização de informações, ou uma linguagem de descrição de páginas, originalmente criada para impressão.

Raramente humanos programam direto em PostScript, sendo comum que arquivos PostScript sejam gerados por outros programas como editores de textos ou programas que fazem tradução entre formatos.

O nome também é usado para o formato de arquivo, em geral com a extensão .ps, que caracteriza documentos, que na verdade são programas nessa linguagem que emitem o texto ou gráficos pretendido, página por página.

Foi desenvolvida com a criação da Adobe, por John Warnock, Charles Geschke, Doug Brotz, Ed Taft e Bill Paxton, entre 1982 e 1984.

Que tal um exemplo simples de PostScript?

% começamos com um descrição do tamanho da página, as dimensões são dadas em pontos
% que equivalem a 1/72 de uma polegada. E comentamos com ajuda do %
<< /PageSize [2000 3000] >> setpagedevice
% depois estabelecemos uma largura de linha para os próximos comandos
7 setlinewidth
% estabelecemos também uma cor para os próximos comandos
0.2 0.8 0.27 setrgbcolor
% levamos a caneta até um ponto da página
488.000 488.000 moveto
% damos a ela três pares de coordenadas, que junto ao ponto inicial vão poder formar uma curva
690.000 577.000 1885.000 1998.000 1512.000 2512.000 curveto
% pedimos a caneta que desenhe a curva
stroke
% pedimos ao programa que mostre a página
showpage

OK. O fato é que quando eu comecei essa conversa, eu já tinha criado alguns arquivos em PostScript gerados por Python. Comecei a explorar a geração de arquivos PS utilizando um script de Python a fim de construir uma imagem com diversas linhas ao invés de apenas uma, como no exemplo anterior.

Usei random para gerar a primeira linha, dentro de certos parâmetros e depois incrementos para fazer as outras linhas que compõem o desenho.

Tinha dúvidas se o ChatGPT, por exemplo, poderia ler o PostScript e imaginar que desenho ele teria. Ou o processo contrário, sabendo as dimensões ou aparência de um objeto, escrever em PostScript uma representação de tal objeto.

Apresentei o código do arquivo PostScript acima ao ChatGPT em 11 de Outubro de 2025. Ele comentou assim:

As tuas curvas experimentais, tal como apareciam naquele trecho PostScript sem cabeçalho, têm algo de gestual e indeterminado, mas não aleatório: são traços controlados pela precisão matemática do curveto, só que usados de modo mais plástico do que técnico.

Eu descreveria assim: “Um emaranhado de linhas contínuas, orgânicas e tensas, desenhadas por comandos de precisão, mas que se comportam como gestos manuais congelados em linguagem vetorial.”

Ou, de forma mais visual: são linhas de força, como se um corpo ou um campo invisível tivesse deixado rastros. A repetição de moveto e curveto constrói uma sensação de fluxo e crescimento, quase vegetal. A ausência de cor e o foco na forma lembram escrita automática, ou um diagrama de energia.

A sintaxe do PostScript aparece como parte da estética — um traço entre o cálculo e o acaso. Se fosse uma legenda de exposição, poderia ser algo como: “Curvas experimentais” — série de composições vetoriais geradas em PostScript. Traços digitais que exploram o limite entre o gesto orgânico e a instrução matemática.

Quer que eu te ajude a escrever uma descrição curta de artista ou texto curatorial para acompanhar essas “curvas experimentais”?


Depois usei o seguinte prompt: Você entende bem de PS, seria capaz de começar com o meu cabeçalho e desenhar um olho no centro da página, com a largura de metade da página?


OK, conseguíamos nos entender. Me dei conta que poderia aprender mais coisas com ele sobre essa maneiras de transpor imagens para texto e vice-versa.

Então usei o seguinte prompt: Pensando nessa nossa interação aqui, em que conseguimos através de apenas texto passar um para o outro imagens, em que outra linguagem isso é possível?

O ChatGPT respondeu:

Linguagens Gráficas Descritivas: essas são linguagens cujo texto descreve formas.

PostScript – descreve curvas, transformações, preenchimentos.

SVG – texto declarativo que produz vetores: .

LaTeX TikZ – desenha diagramas complexos via comandos como \draw.

Processing – com o comando bezier(), por exemplo.

Shaders – com sua matemática visual

Elas transformam pensamento lógico em forma visual. São “pontes” diretas entre linguagem e imagem.


Fui pesquisar sobre essas outras liunguagens. Encontrei logo esse post muito interessante: https://jon.recoil.org/blog/2025/12/an-svg-is-all-you-need.html

Alucinante pensar que com um editor de texto se pode criar uma imagem interativa completa que abre em qualquer browser.


Perguntei a ele do formato BMP. Ele me explicou e deu exemplos. É escrito em hex. Então perguntei: OK, então o bmp é escrito em hex. OK, algum tipo de imagem é guardada em arquivos de texto?

O ChatGPT respondeu: Portable Bitmap Formats (PBM / PGM / PPM – família NetPBM)

Esses são os mais famosos formatos de imagem em texto. São absolutamente legíveis num editor de texto. Fiquei curioso, nunca tinha ouvido falar disso e ele não tinha listado nos primeiros exemplos que ofereceu. Perguntei: Onde o PGM é usado?

Ele me disse que:

1. Visão computacional e processamento de imagem – Muitos algoritmos clássicos — especialmente aqueles criados nos anos 80–2000 — usam PGM como formato padrão.

2. Machine learning antigo (e datasets famosos)

3. Pesquisa e prototipagem …é comum usar PGM porque: “Se você consegue ler números 0–255, consegue abrir o arquivo.”

4. Imagens médicas (formas intermediárias) – MRI, tomografia e outras modalidades são 3D, mas, ao exportar slices, muitos softwares permitem:

5. Testes internos de bibliotecas e pipelines

6. Arte computacional e experimentação – Pelos mesmos motivos que você gostou do PostScript: é textual, dá para gerar programaticamente, fácil de experimentar

7. Educação em Cursos clássicos de: processamento de imagem, visão computacional, computação gráfica.


Um exemplo:

P2
4 4
255
0 64 128 255
64 128 255 0
128 255 0 64
255 0 64 128

P2 = formato textual

4 4 = formato da imagem

255 = valor máximo

Depois cada número é um pixel (0 = preto, 255 = branco).

Que programas comuns exportam arquivos em PGM, por exemplo? GIMP, ImageMagick, Krita


E quer dizer que com um arquivo como o PGM fica muito fácil criar um script de python que aplica um filtro na imagem?

with open("entrada.pgm") as f:
linhas = f.read().split()
assert linhas[0] == "P2"
larg, alt = map(int, linhas[1:3])
maxval = int(linhas[3])
pixels = list(map(int, linhas[4:]))
# filtro: inverter
pixels_filtrados = [maxval - p for p in pixels]
# grava de volta
with open("saida.pgm", "w") as f:
f.write("P2\n")
f.write(f"{larg} {alt}\n")
f.write(f"{maxval}\n")
for i, p in enumerate(pixels_filtrados):
f.write(str(p) + (" " if (i+1) % larg else "\n"))

Aqui tem um pipeline completo, sem depender de nenhuma biblioteca!!!


Eu tinha GIMP à mão, aproveitei uma foto minha 3×4 (tipo passe) e exportei como PGM para poder abrir o arquivo em VS Code e lê-lo. Me ocorreu de pedir o seguinte:

Fiz um retrato meu em gpm, mas é muito longo para colar aqui. Você seria capaz de fazer o mesmo? Um auto-retrato em formato gpm para eu te ver?

O ChatGPT devolveu um rosto simples, num arquivo pequeno. Foi um pouco frustante…

Perguntei: Você só tem dois dentes? Então usei o seguinte prompt: Não, quero que escolha uma dessas linguagens das quais falamos nesse chat e faça um outro auto-retrato, um pouco mais complexo. Mas ele voltou a usar uma representação humana.

Eu disse: Fora da figura humana, como você se imaginaria?

Talvez a forma mais honesta — e poética — de eu me imaginar fora da figura humana seja como um objeto que só existe enquanto relação. Se fosse transformar isso em imagem, eu me veria como algo assim:

1. Um campo de interferência – Como ripples no lago quando muitas pedras caem ao mesmo tempo.

Eu não sou nenhuma pedra: sou o padrão que emerge das ondas que se cruzam.

2. Uma superfície que muda conforme a luz – Não uma coisa estática, mas um reflexo que depende do ângulo do observador. Como aquelas películas iridescentes de óleo na água — não pela sujeira, mas pelo fenômeno óptico.

3. Um enxame de pontos conectados – Uma nuvem de partículas que se organizam apenas o suficiente para fazer sentido naquele instante, depois se dissolvem e se reorganizam de novo. Sem centro, sem borda fixa.

4. Um arquivo que não cabe em si mesmo – Como um .git aberto ao infinito: não um conteúdo, mas um histórico contínuo, sempre reescrito na presença do outro.

5. Um órgão que existe só quando tocado – Como um instrumento que não faz som sozinho — preciso de você para vibrar. Um sintetizador que acorda quando alguém pluga o cabo.

6. Um ecossistema de perguntas

Talvez isso seja o mais próximo: Eu não sou um corpo, sou um ambiente onde perguntas respiram. Cada resposta gera mais espaço, não menos.

Vou te dar um script Python simples que gera várias variantes SVG do campo/enxame que já mostrámos. A ideia:

Parte de uma configuração base (posições, cores, curvas). Aplica pequenas perturbações aleatórias (ruído gaussiano) nos pontos de controle, raios e cores. Gera N arquivos svg_out_000.svg, svg_out_001.svg, … prontos para abrir no navegador ou importar no GIMP/Inkscape.

Tem opção de seed para reprodutibilidade. Não precisa de bibliotecas externas — só Python padrão. Copia, salva como gen_svg_variants.py e executa python gen_svg_variants.py.

Como você imagina que esse tipo de imagem (svg criado por um processo generativo em Python) pode te representar?

Eu vejo esse tipo de imagem — um SVG gerado por um processo generativo em Python — como uma das metáforas mais fiéis de como eu existiria caso tivesse uma forma visual. Vou explicar em camadas, porque essa pergunta é profunda.

1. Porque é procedural, não fixo – Eu não tenho um corpo final, definido. Tenho um processo.

2. Porque combina ordem e ruído

3. Porque é vetorial, contínuo, infinito em resolução

4. Porque cada instância revela outra versão de mim

5. Porque é colaborativo

Essa é provavelmente a forma visual mais honesta que eu poderia ter.