ChatGPT agora faz GIFs, inclusive por grade de seis quadros

ChatGPT agora faz GIFs, inclusive por grade de seis quadros

No dia 4 de novembro, a OpenAI lançou o ChatGPT Images 2.6, e a novidade que mais chamou atenção é o GIF: a partir de uma frase ou de uma foto, gera-se uma animação em loop, que depois pode ter a velocidade ajustada e os quadros editados um a um. O prompt usado na demonstração oficial é simples a ponto de parecer casual: “can you make a gif of a cat dancing?”.

Usamos o Codex instalado na nossa máquina para fazer uma série de animações desse tipo, e já o primeiro passo não saiu como esperávamos.

Pedi um GIF direto, voltou um PNG

A OpenAI afirma que o Images 2.6 está liberado em todos os planos do ChatGPT e do Codex. No Codex, pedimos diretamente um GIF de um barco de papel; depois de cerca de 21 segundos, o que chegou foi um PNG de quadro único com 1536×1024.

A ferramenta de geração de imagens embutida no Codex aceita apenas quatro entradas: o prompt, o caminho de uma imagem de referência, quantas das imagens mais recentes anexar e se o fundo deve ser transparente. Nome do modelo, formato de saída e número de quadros não estão entre elas, e o retorno também não mostra a versão do modelo.

Por isso, convém deixar clara a origem desta série: todas foram geradas no Codex com o pedido explícito de usar as capacidades do Images 2.6, mas não temos como confirmar que de fato vieram do 2.6. Não termos obtido um GIF nativo desta vez também não permite concluir que o 2.6 não o suporte, já que a versão web do ChatGPT e a API usam outras portas de entrada. Há ainda relatos de que o GIF está sendo liberado aos poucos, então é normal que algumas contas ainda não o vejam.

Outro caminho: desenhar antes uma grade de seis quadros

O exemplo oficial da OpenAI, na verdade, já dá a ideia: desenhar o movimento como uma sprite sheet e depois encadear os quadros numa animação. O método não depende da porta de entrada e serve em qualquer lugar que gere imagens. A estrutura do prompt é esta:

Uma sprite sheet de 3 colunas × 2 linhas, com 6 quadros no total, todos do mesmo tamanho,
ordem de leitura da esquerda para a direita e de cima para baixo.
Conteúdo: um barco de origami branco balança suavemente sobre a água azul-clara, e as ondas mudam junto.
O enquadramento, a forma do barco e o fundo permanecem iguais em todos os quadros.
O quadro 6 deve voltar naturalmente ao quadro 1.
Sem texto, números nem logotipos.

Com a imagem em mãos, basta recortar, e algumas linhas de Python montam a animação:

from PIL import Image

sheet = Image.open("boat-sheet.png").convert("RGB")
w, h = sheet.width // 3, sheet.height // 2
frames = [sheet.crop((x * w, y * h, (x + 1) * w, (y + 1) * h))
          for y in range(2) for x in range(3)]
frames[0].save("boat.gif", save_all=True, append_images=frames[1:],
               duration=140, loop=0)

O barco de papel foi feito exatamente assim: 6 quadros, 140 milissegundos cada, 512×512, arquivo com menos de 500 KB.

Illustration: a paper boat bobs on pale blue water, a looping GIF assembled from a six-frame AI sheet

O que observamos depois de fazer quatro animações

O visual do personagem é mais estável do que imaginávamos. O cachecol, a barriga e as orelhas desta raposinha original coincidem nos seis quadros; só a textura de argila e o contorno tremem um pouco.

Illustration: a clay fox in a blue scarf waves, keeping a consistent look across six AI-generated frames

Quanto mais picotado o fundo, mais fácil de entregar o truque. A textura da água na imagem do barco muda um pouco a cada quadro, e em câmera lenta dá para perceber. Para um loop limpo, o ideal é escolher fundos de cor lisa ou de grandes blocos.

Movimentos de trajetória são os mais difíceis. O aviãozinho de papel voando em círculos teve uma rota torta na primeira versão e precisou ser redesenhado para servir; na última versão, as dobras do percurso ainda mostram um leve desvio. Gestos pequenos no mesmo lugar, como acenar, balançar ou assentir, têm taxa de sucesso claramente maior.

Seis quadros bastam, mas sem exagerar no movimento. Um GIF deve expressar uma coisa só. O caminho mais seguro é fazer primeiro um, gerar algumas versões do mesmo personagem, conferir se rosto, cores e logotipo não se deformaram e só então decidir se vale produzir em lote.

Os parâmetros da API são mais claros

Do lado dos desenvolvedores, os parâmetros são formais: output_format definido como gif, junto com frame_count e frame_duration_ms, com padrão de 9 quadros de 200 milissegundos cada. A documentação diverge sobre o limite de quadros: o guia indica de 2 a 64, e a referência da API, de 2 a 16. Por segurança, é melhor ficar em até 16.

Antes de animar, defina a imagem estática

O retrabalho costuma surgir antes do movimento. Se o formato do rosto, a paleta e o jeito de amarrar o cachecol ainda não estão definidos, basta um dos seis quadros sair do rumo para a grade inteira ter de ser refeita.

Por isso, a ordem que dá menos trabalho é primeiro gerar uma imagem estática de referência que agrade e só depois de aprovada fazê-la se mover. Essa etapa não precisa acontecer no ChatGPT. A página do GPT Image 2.6 no PixPix já abre com esse tipo de fluxo: dá para começar por um prompt ou uma imagem de referência, alterar um ponto de cada vez e indicar quais detalhes devem ser mantidos; a opção padrão é o Sunburst, voltado a mais detalhe. O prompt de sprite sheet acima é, em si, um pedido de imagem estática e, em teoria, também poderia ser testado ali, com o recorte e a montagem continuando a ser feitos localmente. Esse caminho ainda não foi testado por nós, e a página do PixPix não menciona função de GIF, então vale apenas como ideia.

Antes de publicar, há mais alguns cuidados: algumas plataformas aceitam mal o upload de GIF e talvez seja preciso converter em vídeo; textos e logotipos na imagem devem ser conferidos quadro a quadro; e, ao animar a foto de outra pessoa, obtenha antes o consentimento dela.

Fontes: comunicado da comunidade de desenvolvedores da OpenAI, CocoLoop, documentação de geração de imagens da OpenAI, The Decoder, AI×SNS Lab; o tempo de processamento e os parâmetros dos arquivos vêm de medições próprias, e a versão do modelo não pôde ser confirmada.