Guillaume Duvernay

Expérience

Confier l'annotation de mes captures d'écran pour la doc à un agent

La question
Puis-je donner à un agent un dossier de captures d'écran sans nom, lui demander d'identifier leur contenu et obtenir en retour les figures annotées nécessaires pour une page de documentation ?
Le résultat
Oui pour la lecture et le dessin. Le placement de la légende reste une question de jugement, et cela dépend de l'espace blanc disponible dans l'interface.

documentationagentstooling

Ce que je voulais découvrir

Quand je rédige de la documentation, je prends des captures d’écran au fur et à mesure, et elles atterrissent sur mon bureau avec des noms comme Screenshot 2026-09-14 at 18.03.12.png. Vient ensuite la partie fastidieuse : ouvrir chaque fichier, déterminer à quelle étape il correspond, le recadrer, tracer un cadre autour du bouton, et écrire la légende là où elle ne cache pas l’élément désigné.

La question était de savoir si je pouvais sauter toutes ces étapes. Donner le dossier à l’agent, le laisser analyser les images pour comprendre le sujet, l’aider pour le texte, puis lui faire produire les figures annotées. Pas de Figma, pas d’allers-retours pour savoir où placer un cadre.

Je pensais que le dessin serait la partie difficile. Ce ne fut pas le cas.

Comment cela a été testé

Une annotation est un module JavaScript, pas un dessin. Elle définit une image source et une liste de formes exprimées en pourcentages du cadre, puis un moteur de rendu les superpose à la capture d’écran dans Chrome et re-photographie la page avec Playwright.

Tout le secret réside dans Chrome. Les coins arrondis, les ombres, le rendu du texte et le flou sont gérés par le navigateur : rien n’a besoin d’être réimplémenté, et le résultat est un PNG aux dimensions exactes de la source.

Seule l’étape trois nécessite une intervention humaine sur l’image. Le reste est une commande.

L’étape trois est celle où l’expérience a failli échouer. À qui on demande de placer un cadre autour d’un bouton à l’œil, l’agent se trompe d’environ 2 %, ce qui est négligeable sur le papier mais flagrant sur l’image. La solution a été d’arrêter de lui demander d’estimer : une grille de pourcentages est d’abord rendue sur la capture, il lit les chiffres sur cette grille une seule fois, et chaque cadre suivant tombe pile sur le pixel.

Une interface de liste de tâches avec une grille rouge et bleue superposée, graduée tous les dix pour cent horizontalement et verticalement.
Le passage par la grille. Elle n’existe que pour être consultée : lire x : 88.1, y : 19.4, puis la supprimer. Les coordonnées restent en pourcentages, donc une nouvelle capture d’une taille différente est ré-annotée sans toucher aux chiffres.

Six primitives couvrent les besoins d’une figure de documentation.

PrimitiveFonction
boxLe cadre arrondi et son halo, avec un numéro et une légende optionnels
arrowUne flèche courbe, orientée vers la pointe, pour un seul “cliquez ici”
noteUne carte de texte : un titre et une ligne de corps de texte
spotlightAssombrit tout sauf les zones découpées
zoomUne loupe : un recadrage, agrandi, placé dans un espace vide
redactFloute une région

Les résultats

La lecture des captures d’écran fonctionne. À partir du dossier sans noms de fichiers utiles, l’agent a identifié quel produit chaque capture montrait, quel écran, et laquelle illustrait quelle étape, suffisamment bien pour rédiger le texte environnant.

Le dessin fonctionne aussi, et c’est rapide : comme la spec est du code, une capture reprise après un changement d’interface est ré-annotée en relançant une commande, tant que rien n’a bougé de plus de 1 % environ.

La seule partie qui ne se réduit pas à une commande est l’emplacement de la légende, lequel est dicté par la capture d’écran plutôt que par l’outil.

Une liste de tâches. Quatre badges rouges numérotés sont posés sur la boîte de filtre, les jetons de statut et de priorité, le bouton d’affichage et le bouton d’ajout de tâche. Il n’y a aucune légende sur l’image.
Pas de place. La barre d’outils est collée à l’en-tête du tableau, il n’y a donc pas 60px d’espace vide au-dessus ou en dessous. Toute légende placée ici masquerait l’interface, donc la figure ne comporte que des badges numérotés et la liste numérotée se trouve dans le texte.
Un tableau de bord avec quatre cartes de statistiques. Trois badges numérotés portent chacun une courte légende placée à côté de l’élément désigné, dans l’espace vide de la mise en page.
Le même produit, une page qui respire. Ici, les légendes sont à côté de leurs cibles et ne cachent rien, la figure est donc autonome.

La règle qui en découle : si l’interface n’a pas d’espace blanc, la légende sort de l’image. Un badge numéroté sur la capture et une liste numérotée dans le texte, ou un recadrage qui crée l’espace. Ce n’est pas une préférence, c’est lisible sur la capture avant même de commencer le dessin.

La loupe est la seule primitive qui s’est avérée indispensable plutôt que décorative.

Une liste de tâches où un petit jeton de statut a été recadré, agrandi environ deux fois et demi, et placé dans l’espace vide en dessous, avec une carte de légende à côté.
Un jeton de statut mesure 22px de haut. La documentation rend cette image à environ 700px de large, et à ce stade, 22px est illisible. Une fois agrandi, le détail devient le sujet tandis que l’écran complet reste visible pour le contexte.

La découverte qui n’était pas le sujet

L’annotation de deux captures de produits réels a révélé des éléments qui ne devraient pas sortir de l’entreprise. Une capture d’écran d’un éditeur de workflow montrait une clé API en texte clair dans une condition de branchement. Une autre montrait une barre latérale listant les titres de conversations privées.

Cela n’avait été remarqué ni l’un ni l’autre lors de la capture. Les deux sont devenus évidents dès qu’un agent a analysé l’image élément par élément pour identifier chaque chose.

Ce que j’en retire

Dessiner le cadre est mécanique. Placer la légende est le vrai travail. Chaque fois qu’une figure était ratée, c’était parce qu’une légende recouvrait l’élément désigné, et c’était toujours parce que l’interface n’avait pas d’espace pour l’accueillir. C’est un jugement de mise en page sur la capture, et c’est la seule partie qui n’est pas devenue une commande.

Un fichier de spec bat un fichier de design, pour cet usage. Les figures sont du code, donc une capture reprise le mois prochain est ré-annotée via une commande au lieu d’être rouverte et redessinée. Le coût est que la première version de toute figure est moins bonne qu’une version dessinée à la main, et nécessite un ou deux passages pour être stabilisée.

Un passage d’annotation est une revue de confidentialité accidentelle. Personne n’avait prévu d’auditer ces captures. C’est le fait d’examiner chaque région assez précisément pour la décrire qui a fait remonter la clé et les titres de conversations, ce qui justifie d’effectuer ce passage avant la publication plutôt qu’après.

Un flou n’est pas une occultation. Le moteur de rendu floute avec un filtre d’arrière-plan, et un flou de 14px sur un texte de 13px est illisible mais pas forcément irrécupérable. Pour tout ce qui est réellement secret, la solution est un bloc opaque, c’est pourquoi les deux captures contenant un tel bloc sont décrites ici plutôt que montrées.