ChatGPT sait faire des GIF, y compris via une planche de six images

ChatGPT sait faire des GIF, y compris via une planche de six images

Le 4 novembre, OpenAI a dévoilé ChatGPT Images 2.6, dont la nouveauté la plus remarquée est le GIF : à partir d'une phrase ou d'une photo, on obtient une animation en boucle, dont on peut ensuite régler la vitesse et retoucher les images une à une. Le prompt de la démonstration officielle est d'une simplicité presque désinvolte : « can you make a gif of a cat dancing? ».

Nous avons utilisé le Codex installé sur notre machine pour réaliser une série d'animations sur ce modèle, et dès la première étape, les choses ne se sont pas passées comme prévu.

Un GIF demandé, un PNG reçu

OpenAI affirme qu'Images 2.6 est ouvert à tous les forfaits de ChatGPT et de Codex. Dans Codex, nous avons demandé directement un GIF d'un bateau en papier ; au bout d'environ 21 secondes, nous avons reçu un PNG d'une seule image de 1536×1024.

L'outil de génération d'images intégré à Codex n'accepte que quatre entrées : le prompt, le chemin d'une image de référence, le nombre d'images récentes à joindre et le choix d'un fond transparent. Le nom du modèle, le format de sortie et le nombre d'images n'en font pas partie, et le retour n'indique pas non plus la version du modèle.

Il faut donc préciser d'emblée l'origine de cette série : toutes ces images ont été produites dans Codex en demandant explicitement les capacités d'Images 2.6, mais nous ne pouvons pas confirmer qu'elles proviennent réellement de la 2.6. Ne pas avoir obtenu de GIF natif cette fois ne permet pas non plus de conclure que la 2.6 ne le gère pas, car la version web de ChatGPT et l'API passent par d'autres entrées. D'autres articles indiquent par ailleurs que le GIF est déployé progressivement, il est donc normal que certains comptes ne le voient pas encore.

Un autre chemin : dessiner d'abord une planche de six images

L'exemple officiel d'OpenAI en donne en fait l'idée : dessiner le mouvement sous forme de sprite sheet, puis enchaîner les images en animation. Cette méthode ne dépend pas de l'entrée utilisée et fonctionne partout où l'on peut générer des images. Le prompt est structuré ainsi :

Une sprite sheet de 3 colonnes × 2 lignes, 6 images au total, toutes de même taille,
sens de lecture de gauche à droite et de haut en bas.
Contenu : un bateau en papier origami blanc se balance doucement sur une eau bleu clair, les vaguelettes changeant avec lui.
Le cadrage, la forme du bateau et l'arrière-plan restent identiques sur toutes les images.
L'image 6 doit se raccorder naturellement à l'image 1.
Pas de texte, de chiffres ni de logo.

Une fois l'image obtenue, on la découpe, et quelques lignes de Python suffisent pour monter l'animation :

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)

Le bateau en papier a été réalisé exactement ainsi : 6 images de 140 millisecondes chacune, en 512×512, pour un fichier de moins de 500 Ko.

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

Ce que nous avons observé après quatre animations

L'aspect du personnage est plus stable que prévu. L'écharpe, le ventre et les oreilles de ce petit renard original concordent sur les six images ; seuls la texture de pâte à modeler et le contour tremblent un peu.

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

Plus l'arrière-plan est morcelé, plus la supercherie se voit. La texture de l'eau sur l'image du bateau change légèrement à chaque image, et on le remarque au ralenti. Pour une boucle propre, mieux vaut un fond uni ou de grandes zones de couleur.

Les mouvements de trajectoire sont les plus difficiles. L'avion en papier tournant en cercle avait une trajectoire tordue dans la première version et il a fallu le redessiner pour qu'il soit utilisable ; la dernière version montre encore une légère dérive aux angles du parcours. Les petits gestes sur place, comme saluer de la main, se balancer ou hocher la tête, réussissent nettement plus souvent.

Six images suffisent, mais mieux vaut ne pas en demander trop. Un GIF ne devrait exprimer qu'une seule chose. La méthode la plus sûre consiste à en faire d'abord un, à générer plusieurs versions du même personnage, à vérifier que le visage, les couleurs et le logo ne se sont pas déformés, puis à décider s'il faut produire en série.

Les paramètres de l'API sont plus explicites

Côté développeurs, les paramètres sont en bonne et due forme : output_format réglé sur gif, avec frame_count et frame_duration_ms, soit 9 images de 200 millisecondes par défaut. La documentation diverge sur le plafond du nombre d'images : le guide indique de 2 à 64, la référence de l'API de 2 à 16. Par prudence, mieux vaut rester dans la limite de 16.

Avant d'animer, fixer l'image statique

Les retouches viennent le plus souvent avant le mouvement. Si la forme du visage, la palette et la façon de nouer l'écharpe ne sont pas encore arrêtées, il suffit qu'une des six images dérape pour que toute la planche soit à refaire.

L'ordre qui fait gagner du temps est donc de produire d'abord une image statique de référence satisfaisante, puis de la mettre en mouvement une fois validée. Cette étape n'a pas forcément lieu dans ChatGPT. La page GPT Image 2.6 de PixPix s'ouvre justement sur ce type de flux : on peut partir d'un prompt ou d'une image de référence, ne modifier qu'un point à la fois et préciser les détails à conserver ; le choix par défaut est Sunburst, plutôt orienté vers le détail. Le prompt de sprite sheet ci-dessus est en soi une demande d'image statique et pourrait en théorie y être essayé, le découpage et le montage restant réalisés en local. Nous n'avons pas testé cette voie, et la page de PixPix ne mentionne aucune fonction GIF : ce n'est qu'une piste.

Avant de publier, quelques points demandent encore de l'attention : certaines plateformes gèrent mal le téléversement de GIF et il faudra peut-être convertir en vidéo ; le texte et les logos dans l'image doivent être vérifiés image par image ; et si l'on anime la photo d'une autre personne, il faut d'abord obtenir son accord.

Sources : annonce de la communauté des développeurs d'OpenAI, CocoLoop, documentation de génération d'images d'OpenAI, The Decoder, AI×SNS Lab ; les durées et paramètres de fichiers proviennent de mesures propres, la version du modèle n'a pu être confirmée.