Savoir-faire
Comment écrire vos prompts quand rien ne les réécrit
Quand aucune couche ne réécrit votre prompt, ce que vous tapez est exactement ce qui sera rendu : la formulation devient la seule variable entre vos mains, et la seule chose à déboguer. Écrire un prompt relève alors d’une discipline plutôt que d’un sac d’astuces : décrivez le cadre et la lumière au lieu d’aligner des adjectifs, ne déplacez qu’un élément à la fois pour savoir à quoi attribuer l’écart, et considérez le prompt négatif comme un champ propre à chaque modèle, pas comme un réflexe — quelques modèles en déclarent un, la plupart non.
Ce que contient réellement une requête
Une requête de génération transporte un identifiant de modèle, un prompt et les options que ce modèle accepte : une taille pour l’image ; pour la vidéo, une résolution, une durée et, sur certains modèles, un format d’image ; enfin les adresses des éventuelles images de référence. C’est toute la surface, décrite endpoint par endpoint dans la référence de l’API. Rien ne s’intercale entre votre texte et le rendu : ni étape de réécriture, ni molette de guidance, ni nombre d’étapes. La seed et le prompt négatif sont ouverts sur quelques modèles et fermés sur la plupart ; l’endpoint du catalogue et chaque page de modèle disent lesquels. Quand un modèle livre un enrichisseur de prompt parmi les réglages de son fournisseur, il part désactivé.
C’est l’absence de cette couche intermédiaire qui explique pourquoi tant d’astuces de prompt existent ailleurs. La documentation de génération d’images d’OpenAI annonce que le modèle « will automatically revise your prompt for improved performance », renvoie le texte réécrit dans un champ revised_prompt et ne documente aucun moyen de couper ce comportement. Le « prompt hacking », c’est à cela que ressemble une négociation avec une réécriture automatique ; ici, il n’y a personne avec qui négocier. Un générateur d’image qui ne réécrit pas les prompts démonte cette couche pièce par pièce.
Les clés que l’endpoint ne définit pas ne sont tout simplement pas lues. Ajoutez au JSON une valeur cfg ou un nombre d’étapes : il ne se passe rien, et aucune erreur ne remonte. seed et negative_prompt font exception : ils sont lus sur les modèles qui les déclarent, et un modèle qui ne les déclare pas renvoie 400 plutôt que d’avaler le champ en silence. Mieux vaut le savoir avant de passer un après-midi à régler un champ qui n’a jamais été transmis.
Un seul changement à la fois, et mesurez votre bruit de fond
Une comparaison n’est lisible que si un seul élément a bougé. Changez la formulation et la taille dans le même essai : vous voilà avec deux explications pour un seul écart, sans moyen de les départager, et l’essai ne vous a rien appris, sinon qu’il s’est passé quelque chose.
Une seconde source de variation existe, et elle ne vient pas de vous. Sans seed dans la requête, l’adaptateur en tire une nouvelle à chaque appel, et les modèles qui n’en déclarent aucune n’offrent même pas de champ à figer : un prompt soumis deux fois ne revient donc pas sous la forme d’une image unique. Choisir résolution et durée détaille ce mécanisme, et pourquoi relancer plus grand donne un nouveau tirage plutôt qu’un agrandissement. Mesurez cette variation avant de tirer une conclusion d’une retouche. Lancez votre version de base deux fois, observez l’écart entre les deux résultats, et retenez cette distance comme le plus petit écart qu’une nouvelle formulation doit franchir pour compter. Faites-le sur l’option la moins chère du modèle : chaque tentative consomme des crédits, et la page des tarifs indique ce que coûte chacune.
Inutile de tenir un carnet. Le prompt est stocké mot pour mot à côté de la génération et figure dans chaque enregistrement que renvoie l’endpoint des générations : votre historique tient déjà lieu de journal d’expériences. Recopiez-y la phrase qui fonctionne au lieu de la retaper, car retaper revient à faire une retouche que vous n’aviez pas décidée.
Décrivez le cadre, pas l’ambiance
Accumuler des adjectifs abandonne la composition au modèle. Sombre, éthéré, hyperdétaillé : aucun de ces mots ne nomme un sujet, une position ou une direction de lumière ; ils expriment un souhait sur le résultat, pas la description d’une image. Le guide de prompting de Hugging Face Diffusers pose la règle sans détour : il énumère sujet, style et contexte, puis recommande de « use these elements as a structured narrative, not a keyword list », parce que les modèles actuels lisent une langue au lieu d’apparier des mots-clés.
Les longues listes échouent en outre d’une façon documentée. Dans Attend-and-Excite (Chefer et al., SIGGRAPH 2023), les auteurs étudient la « catastrophic neglect, where the model fails to generate one or more of the subjects from the input prompt » et signalent que le modèle « fails to correctly bind attributes (e.g., colors) to their corresponding subjects ». Le défaut apparaît dès deux sujets et deux couleurs, pas à partir de dix.
Écrivez donc des décisions. Ce qui occupe le cadre et à quel endroit, d’où vient la lumière et avec quelle dureté, ce que l’objectif fait de l’arrière-plan. Chacune se vérifie sur le rendu : vous pouvez constater que la lumière arrive par la gauche. Vous ne pouvez pas constater qu’une image est éthérée, si bien que ce mot ne vous dira jamais si votre retouche a porté.
Le prompt négatif n’existe pas sur chaque modèle
Recourir au prompt négatif est un réflexe hérité des pipelines locaux, et cela n’a jamais été une manière d’écrire. Il s’agit d’un argument à part, transmis à la boucle d’échantillonnage. La référence de Diffusers définit negative_prompt comme « the prompt or prompts not to guide the image generation » et précise qu’il est « ignored when not using guidance » : le champ existe parce qu’il y a une étape de guidance, avec une branche inconditionnelle dont on cherche à s’écarter.
Ici, un prompt négatif n’existe que sur les modèles qui en déclarent un ; partout ailleurs, tout ce que vous tapez devient de la description. « Pas de filigrane, pas de texte » est une phrase qui nomme un filigrane et du texte. Énoncez plutôt le positif : au lieu de « sans chapeau », dites ce que la personne porte sur la tête ; au lieu de « pas flou », dites ce qui est net et à quelle vitesse l’arrière-plan se perd.
Quand un élément indésirable résiste à plusieurs essais, cessez de relancer. Confiez l’image obtenue à un modèle d’édition en guise de référence et décrivez la modification par rapport à elle : c’est un argument plus court, et une requête d’une autre nature. Le catalogue signale quels modèles lisent des références, et garder un personnage cohérent montre ce qu’une pièce jointe transporte et qu’aucune phrase ne peut porter.
Ce qu’aucune formulation ne vous achète
La vidéo exige davantage du même champ. Un clip est rendu en une seule prise : votre phrase doit porter le mouvement et la caméra en plus du cadre, et c’est la caméra que l’on oublie le plus souvent — la passer sous silence, c’est la laisser choisir à votre place. Transformer une image en vidéo traite ce passage de relais, et appeler l’API depuis votre code la même boucle pilotée par un script.
Ce qu’aucune tournure n’achète, c’est un passage au-delà des règles. Le contrôle automatique inspecte le prompt en quête d’une liste fixe de catégories interdites, dont les mineurs au premier rang ; une requête interceptée est refusée avant le lancement et ne vous coûte donc rien. Il repère des catégories, il ne juge pas votre ton, et reformuler ne fait sortir aucune demande de ces catégories. Les conditions interdisent de représenter une personne réelle sans son consentement ; le contrôle rejette un nom connu, mais une personne ordinaire relève des conditions et non de la détection, et changer les mots n’y change rien non plus. Ce qui est permis et ce qui est bloqué trace la frontière.
Questions fréquentes
Quelque chose modifie-t-il mon prompt avant que le modèle ne le lise ?
Non. Aucune étape de réécriture n’existe, et quand un modèle livre un enrichisseur de prompt parmi les réglages de son fournisseur, il part désactivé. Le texte conservé avec votre génération est celui qui a été rendu : une phrase reprise dans votre historique se comporte comme la première fois.
Où placer un prompt négatif ?
Dans le champ negative_prompt, sur les modèles qui en déclarent un ; chaque page de modèle et l’endpoint du catalogue les signalent. Envoyé à un modèle qui ne le déclare pas, il fait échouer la requête en 400 au lieu d’être ignoré. À défaut de champ, écrivez l’énoncé positif, ou soumettez l’image à un modèle d’édition et décrivez la correction par rapport à elle.
Pourquoi un même prompt donne-t-il deux images différentes ?
Sans seed, l’adaptateur en tire une nouvelle à chaque requête, et les modèles qui n’en déclarent pas ne laissent rien à figer. Plutôt que de combattre cette variation, mesurez-la : lancez votre version de base deux fois et prenez l’écart obtenu comme seuil qu’un changement de formulation doit dépasser.
