Stable Diffusion é um modelo de aprendizado profundo de texto para imagem que foi lançado em 2022(1). É usado principalmente para gerar imagens detalhadas com base em descrições de texto, mas também pode ser aplicado a outras tarefas, como preenchimento, gerando imagens de dentro para fora e traduções de imagem para imagem guiadas por um texto. Stable Diffusion 2.0 foi lançado em novembro de 2022 e inclui modelos robustos de texto para imagem treinados usando um novo codificador de texto chamado OpenCLIP. É capaz de gerar imagens fotorrealistas com qualquer entrada de texto e pode ser usado para criar arte em segundos. A Diffusion Estável é um modelo de aprendizado de máquina de código aberto que pode ser executado em um PC usando Python.
Há a opção de começar com as versões gratuitas no https://stability.ai/ ou https://getimg.ai/.
No nosso exemplo, usando stability.ai, vamos começar com a descrição:
A dungeon battlemap in the style of the Ultima videogame series
Eu escolhi a expressão “battlemap” (mapa de batalha) em vez de só “map” (mapa), porque a palavra mapa faz com que a IA entenda que eu quero um desenho grande de um mapa de mundo inteiro, não o mapa fechado de uma sala ou quarto. É o tipo de coisa que precisamos descobrir na tentativa e erro. Infelizmente, os modelos de IA não nos deixam ver (ainda) as conexões entre as palavras na “mente” do computador. Se deixassem, seria mais fácil selecionar as palavras específicas ligadas a cada elemento visual.
Por esse e outros motivos, é bom ser específico tanto nos objetos quanto no estilo do desenho. Se eu pedisse um “battlemap” de videogame, poderia ser qualquer tipo de videogame. Estatisticamente, a IA me daria o mais comum no banco de dados dela. O que eu quero é um mapa tridimensional de salas medievais. Poderia pedir “mapa 3d medieval”? Poderia. Mas é mais certo utilizar palavras que não existem em outros nichos. Mapa, 3d e medieval são palavras muito comuns. Já “série de videogame Ultima” é uma coisa só.
Imagem resultante abaixo.
É possível pedir para que a IA gere 1, 2, 5, 10 imagens diferentes e escolher uma delas. Mas não é necessário, porque o ideal é tentar ver se os elementos estão na cena antes de pedir que a IA continue a construir versões diferentes das mesmas instruções.
A seguir eu adicionei uma estátua à cena. A descrição foi:
A statue in the middle of a dungeon battlemap in the style of the Ultima videogame series
Por sorte, a interpretação foi bem literal. Isso não acontece sempre:
O em alguns casos, os elementos podem estar certos, mas a gente quer mudar alguma parte da cena. Já podemos fazer isso com o algoritmo “Instruct Pix2Pix” que converte uma instrução de texto em alterações na imagem. O getimg.ai permite isso no seu Editor por IA (AI Editor), uma das opções do site.
Eu pedi que a estátua fosse alterada para um dragão de fogo:
Como dá para ver na imagem, a IA alterou o cenário, adicionou “fogo” nas luzes e colocou um pequeno dragão no lugar da estátua. Muito legal. Mas eu queria uma alteração maior. Será que a IA consegue?
Nas configurações do AI Editor, existe um “guidance scale”, que é o indicador de o quanto a IA vai tentar obedecer a minha instrução em detrimento da imagem original. Um valor como 30 (o máximo) faz com que ela crie uma imagem completamente nova. Um valor como 0 (o mínimo) faz com que nada seja alterado. O padrão era o 14, alterei para 22 e obtive a imagem abaixo.
Dá para ver que a IA alterou as luzes, como fez da primeira vez, adicionando o vermelho para a palavra “fogo”. E adicionou um segundo dragão.
IAs em geral não sabem contar. Não adianta pedir. Se a gente escrever “sete dragões”, elas vão gerar vários dragões. Talvez sete, mas mais provavelmente uns 30, 40 ou quantos couberem na imagem.
Se pedirmos “um único dragão”, a probabilidade de que seja apenas um dragão é alta, mas, se couber mais um dragão, ela vai tentar desenhar mais um dragão.
De certa forma, me parece mais útil pedir que a IA crie as partes separadas da imagem para depois recortar e colar do que pedir para a IA editar ela mesma. Mas, por enquanto, seguimos com o exercício.
Pedi outros “battlemap” para experimentar. A descrição é a mesma, a IA cria variações por si mesma, porque minha descrição inicial foi muito genérica.
Esse ficou bom. Fiz seis ou sete que não postei aqui. Vamos tentar adicionar uma estátua na imagem àcima.
A imagem não parece ter ficado com boa definição. Parece só um amontoado de pedras. Vamos mudá-la para um dragão.
Eu gostei, mas dá para ver que a IA alterou mais do que devia no cenário. Adicionou uma porta estranha no canto superior. E a “estátua” se parece mais com um dragão normal do que com a estátua de um dragão. Como eu disse, o mais fácil seria recortar esse dragão e colá-lo na minha imagem original. Assim eu me livraria daquela porta ali de cima. Mas vamos tentar de novo.
Agora a estátua está desalinhada. Bem, não se pode ter tudo, mas o resultado ficou muito bom.
Eu sei que desenhistas, designers etc. vão dizer que está ruim… está. Está visualmente estranho. É difícil manter uma conexão visual entre os objetos adicionados dessa forma. O dragão é claramente diferente da sala onde foi colocado.
Mas ainda assim está muito melhor do que se eu estivesse tentando fazer com meus dons de arte digital.
O que seria mais fácil ainda?
Nesse caso, apenas um software alimentado especificamente por imagens de videogames. Ou ainda um software alimentado por código de geração procedural de mapas de Diablo, por exemplo.
O GPT-3.5 consegue produzir código sem esforço. E consegue, inclusive, “desenhar” mapas e fluxogramas utilizando a PlantUML (sim, alguém usa PlantUML!).
Mas essa já é outra conversa.