- L’underdrawing consiste à créer d’abord, avec un outil déterministe, une image de base où figurent l’emplacement des chiffres et du texte, puis à laisser un modèle de génération d’images appliquer le style visuel par-dessus afin d’améliorer la précision
- Dans une tâche consistant à disposer 50 pas japonais en spirale et à les numéroter de 1 à 50, Gemini 3 Pro et ChatGPT Images 2 n’ont pas réussi à respecter de manière fiable les chiffres ni leur ordre sans underdrawing
- Sur la même tâche, Gemini 3.0 Pro avec un underdrawing a produit un résultat correct pour la numérotation, le nombre et l’ordre des éléments, ainsi que la forme en spirale
- La mise en œuvre est possible avec des outils comme SVG/HTML en plaçant les chiffres et le texte à l’emplacement et dans l’orientation souhaités, puis en exportant le tout en image avant de fournir cette image avec un prompt texte à un modèle d’image multimodal
- Cette méthode n’est pas parfaite à tous les coups, mais elle permet de répartir le travail entre un placement déterministe et les capacités de rendu visuel du modèle génératif lorsque la disposition du texte et des chiffres est importante
Contexte clé et méthode de mise en œuvre
- Il s’agit d’un schéma apparu lors de la création d’une image de plateau d’aventure en 100 étapes, résumé par l’idée de « donner les contours puis faire peindre par-dessus »
-
Couche déterministe
- SVG/HTML est visuellement austère, mais très efficace pour le placement mathématique et la précision
- Il suffit de placer les chiffres et le texte selon la position et l’orientation voulues, puis d’exporter une image contenant ces pixels
- On peut utiliser le format ou l’outil de son choix, comme SVG, Python ou Mermaid
-
Couche générative
- Les modèles de génération d’images produisent d’excellents résultats visuels, mais restent peu fiables pour les mathématiques et le texte
- Avec un modèle d’image multimodal capable de recevoir une image et du texte en entrée pour produire une image, comme Gemini 3.0 Pro, on fournit ensemble l’image d’underdrawing et le prompt texte
- L’exemple de prompt de l’étape 1 demande de créer un SVG où 50 pas japonais sont disposés en spirale intérieure dans le sens inverse des aiguilles d’une montre, avec une numérotation continue de 1 à 50 sur chaque pierre
- L’exemple de prompt de l’étape 2 demande de transformer cette image en un diorama en claymation photoréaliste à angle bas et légèrement incliné, où des chocolats artisanaux et des bonbons sont disposés en chemin spiralé
-
Automatisation et limites
- Claude Code ou Codex peuvent exécuter chacune des étapes à votre place
- Les résultats sont bons, mais pas parfaits à chaque fois, et dans le rendu final, le « 71 » reste invisible
1 commentaires
Commentaires Hacker News
Je trouve encourageant qu’on comprenne de plus en plus en profondeur ce que les LLM font intrinsèquement bien et mal, c’est-à-dire les tâches qui ne sont pas impossibles en soi, mais dont les chances de réussite restent faibles à cause de limitations fondamentales
Cela ressemble à l’approche où l’architecture logicielle est définie par un humain et l’implémentation des fonctions confiée au LLM, ou encore au fait de lui faire écrire des requêtes SQL plutôt que de lui demander d’effectuer lui-même l’analyse des données
J’aimerais voir émerger une taxonomie des tâches et davantage de recherches sur ce qui convient ou non aux LLM ; on commence à développer une certaine intuition, mais je vois encore beaucoup de gens trébucher régulièrement là-dessus
On leur faisait d’abord produire un plan, puis implémenter chaque fonction séparément, et des billets de blog illustrant cette approche avec un terme emprunté au travail d’animation ont été plusieurs fois postés sur HN
Il y a à peine deux ans, on disait encore que certaines tâches comme le comptage de caractères ou le traitement phonémique étaient impossibles à cause de « limitations fondamentales », alors qu’aujourd’hui elles se passent souvent très bien même sans outils
Chaque fois que je lis un prompt de génération d’image, je remarque des détails très précis que le modèle a manifestement ignorés
Ici aussi, dans les deux dernières images, les chocolats/bonbons sont loin d’avoir un aspect artisanal fait main ; ils ressemblent trop à des produits de masse stériles, et le point de vue n’est pas exact non plus
Si le modèle ignore l’essentiel, je me demande pourquoi on écrit des prompts aussi verbeux
Des termes comme rustic, homemade ou amateur peuvent peut-être mieux correspondre aux tags
Au début, je pensais que cela venait de ma mauvaise rédaction des prompts, mais dès qu’on commence à repérer ces écarts, on les voit assez souvent
S’ils voulaient une image comme la dernière, avec de petits « boutons » disposés en spirale, ça ne ressemble même pas à des bonbons, et même quelqu’un de peu à l’aise avec Blender aurait probablement pu le faire en un après-midi
J’ai trouvé une technique simple pour obtenir de manière fiable du texte et des nombres dans des images générées par IA
Je suis surpris que les modèles d’image ne le fassent pas déjà eux-mêmes, et comme je la trouve assez utile, je voulais la partager
J’utilise depuis un moment cette même technique en me servant uniquement de SVG comme image de base, et ça marche bien
Je pense que les laboratoires de recherche en génération d’images vont bientôt l’adopter
Au lieu de laisser l’utilisateur demander au modèle de résoudre le problème en 0-shot, on l’aide à trouver une solution en 1-shot ou k-shot
J’ai utilisé des techniques similaires avec beaucoup d’efficacité, et comme le domaine est encore très récent et évolue extrêmement vite, on a l’impression qu’il manque encore un vocabulaire commun ; le billet de blog et les exemples sont donc très utiles
Cela dit, il est aussi possible que ce phénomène ait déjà été observé et compris dans des communautés plus restreintes ou sous d’autres noms
Ce n’est au fond qu’un img2img où la première image, avec la bonne structure, a été créée en code
Si on utilise des modèles génératifs depuis les débuts de Stable Diffusion, c’est une technique assez courante et utile : on se sert d’un croquis (SVG, dessin à la main, etc.) comme d’un ControlNet provisoire pour guider la sortie du modèle génératif
J’utilisais une approche similaire autrefois pour mettre en place des visualisations architecturales
Si l’on voulait placer un canapé, des chaises ou d’autres meubles à des endroits précis, on pouvait créer une scène simple avec un outil comme Poser pour positionner grossièrement les principaux « éléments de décor », puis générer une depth map et la fournir à un modèle génératif de l’époque, comme SDXL, afin de guider la disposition des objets
Cette astuce fait clairement partie des idées qui donnent envie de se dire : « ah, pourquoi je n’y ai pas pensé ? »
Je suis content d’avoir ça sous la main pour la prochaine fois où la génération d’image ne sera pas à la hauteur de mes attentes
C’est juste que les performances n’étaient pas aussi bonnes qu’aujourd’hui, donc je ne vois pas bien pourquoi cela est perçu comme nouveau
L’objection standard, c’est la suivante : si le LLM était vraiment intelligent, pourquoi ne parvient-il pas de lui-même à comprendre que ce processus en deux étapes donne de meilleurs résultats ?
Pour élaborer une stratégie, examiner le résultat puis réessayer, il faut un processus de type agent par-dessus
Nano Banana et gpt-image-2 semblent en intégrer un peu, mais c’est comparable à la différence entre demander au modèle d’écrire le code d’un seul coup et laisser un agent équipé d’outils le prendre en charge
Même un agent très basique peut produire un meilleur code que ChatGPT seul
Ce genre de méthode existe depuis longtemps et ressemble à l’utilisation de depth maps ou de line art pour contrôler la silhouette
J’ai bien aimé l’impression du passage de conclusion : « ça marche, mais pas vraiment non plus »
Fidèle à l’engouement LLM/IA générative, tout l’article montre qu’on déploie beaucoup d’efforts complexes pour faire fonctionner un exemple extrêmement étroit, que cela semble presque marcher, mais qu’au final cela ne fonctionne pas vraiment correctement
Il est facile pour un humain de vérifier si les chiffres sont corrects, et s’ils sont faux, on peut simplement régénérer l’image
C’est de plusieurs ordres de grandeur plus facile que de créer l’image soi-même sans modèle
Pour le défi classique du « SVG d’un pélican à vélo », je me suis dit qu’on pourrait essayer l’approche inverse
Si on lui fait générer directement le SVG, la qualité a évidemment de fortes chances d’être mauvaise
Mais comme la génération d’images permet facilement de produire une image réaliste impressionnante, on pourrait d’abord générer l’image, puis demander au modèle de la retracer pour en faire un SVG, ce qui pourrait être une bonne manière d’obtenir un SVG correct de pélican à vélo
Après tout, même les humains fabriquent rarement une œuvre en SVG en tapant simplement des nombres dans un bloc-notes ; l’essentiel reste de la voir et de la penser comme une image
Cela ressemble aussi à la façon dont un humain s’y prendrait pour être précis
Si on demande à un artiste de dessiner d’un seul coup, sans corrections ni esquisse, un grand arrangement circulaire de pierres en les numérotant dans l’ordre, il ne serait pas surprenant qu’il fasse des erreurs de placement