Workflow de génération d’images n8n : modèles Nano Banana et Gemini

Un workflow de génération d’images n8n fonctionnel demande plus qu’un seul nœud. Cet article détaille les modèles Nano Banana et Gemini, la configuration de HTTP Request, les variables de prompt, le traitement par lots, les nouvelles tentatives et l’enregistrement des images finales dans un stockage, avec une étape PicassoIA pour tester d’abord vos prompts.

Workflow de génération d’images n8n : modèles Nano Banana et Gemini
Cristian Da Conceicao
Fondateur de Picasso IA

La plupart des automatisations d’images dans n8n échouent de la même façon. Quelqu’un relie un champ de prompt à un nœud, obtient une très belle image au premier essai, puis un lot de quarante lignes atteint une limite de débit, un blocage de sécurité, ou une chaîne base64 qui ne devient jamais un vrai fichier. Cet article construit un workflow de génération d’images n8n qui résiste au deuxième lancement, avec la famille Nano Banana de Google et le point d’accès d’image Gemini qui se trouve derrière.

Vous obtiendrez l’ordre des nœuds, le corps de requête exact, trois modèles de workflow réutilisables, les réglages de nouvelle tentative, une estimation des coûts et une façon de tester vos prompts sur PicassoIA avant de dépenser le moindre appel API. Nano Banana est le surnom de Gemini 2.5 Flash Image, donc tout ce qui suit s’applique quel que soit le nom que vous utilisez.

Pourquoi les workflows d’images cassent dans n8n

Les workflows de texte pardonnent les conceptions bâclées. Si un nœud LLM renvoie une phrase légèrement bizarre, le nœud suivant reçoit quand même une chaîne de caractères. Les images sont différentes : la sortie est une donnée binaire enveloppée dans du JSON, l’appel prend de dix à trente secondes, et un seul refus peut renvoyer un HTTP 200 parfaitement valide sans aucune image à l’intérieur. C’est ce décalage qui explique pourquoi tant de modèles copiés semblent parfaits sur une capture d’écran et tombent à la troisième ligne.

Cinq défaillances à anticiper

Presque tous les workflows d’images défaillants échouent à l’un de ces cinq endroits :

  1. Le base64 ne devient jamais un fichier. L’API renvoie les octets de l’image sous forme d’une longue chaîne de texte. Sans étape de conversion, vous importez une chaîne dans le stockage et vous vous demandez pourquoi l’aperçu est vide.
  2. Des réponses vides qui paraissent saines. Un prompt bloqué peut renvoyer un statut 200 sans aucun élément image. Le nœud suivant s’exécute alors sur du vide.
  3. Trafic en rafale. Quarante éléments envoyés en même temps dépassent la limite par minute, et la moitié d’entre eux échouent avec une erreur 429.
  4. Saisie de prompt désordonnée. Les cellules de tableur contenant des guillemets, des sauts de ligne ou des espaces en fin de texte cassent les corps JSON construits à la main.
  5. Aucune étape de stockage. n8n supprime par défaut les anciennes données d’exécution, donc une image qui n’existe que dans une exécution finit par disparaître.

Un créateur frustré devant un canevas de workflow avec une étape en échec entourée

Ce qu’une configuration fiable exige

La solution est banale, et c’est justement le propos. Un workflow fiable comporte une étape de validation après l’appel API, une étape de conversion qui produit un vrai fichier, une étape de stockage qui renvoie une URL permanente, et un rythme entre les appels. Tout le reste de cet article est une variation autour de ces quatre éléments.

💡 Commencez par un seul élément. Lancez toute la chaîne sur une seule ligne avec le Manual Trigger. Ajoutez la boucle et la planification seulement une fois qu’une image est arrivée dans le stockage avec le bon nom de fichier.

Choisir un modèle d’image Google

Y voir clair dans les noms

La nomenclature de Google évolue vite. Nano Banana a débuté comme surnom de Gemini 2.5 Flash Image, puis des variantes Pro, 2 et Lite sont arrivées. Côté API, chaque surnom correspond à un identifiant de modèle, et ces identifiants changent plus souvent que les surnoms. Stockez l’identifiant dans un seul champ de votre premier nœud Edit Fields et référencez-le partout. Quand un meilleur modèle sortira, vous modifierez une seule valeur au lieu de retoucher cinq nœuds.

PicassoIA répertorie toute la famille, ce qui en fait un endroit pratique pour comparer les rendus avant de tout relier : Nano Banana, Nano Banana 2, Nano Banana 2 Lite, Nano Banana Pro et Gemini 2.5 Flash Image.

Trois photographies imprimées et une banane mûre disposées sur une table en béton

Choisir le bon niveau

ModèleMeilleur usage dans n8nCe qu’il faut savoir
Nano BananaBrouillons rapides et retouches photo avec images de référenceAccepte plusieurs images de référence, produit du JPG ou du PNG
Gemini 2.5 Flash ImageL’identifiant de modèle que la plupart des configurations HTTP Request appellent en premierMême famille que Nano Banana, délai de réponse rapide
Nano Banana 2Retouches itératives et personnages cohérents d’une scène à l’autreJusqu’à 14 images de référence, sortie de 1K à 4K, 15 formats
Nano Banana 2 LiteGros lots où la vitesse compte avant toutVariante de la deuxième génération privilégiant la vitesse
Nano Banana ProVisuels finaux pour l’impression ou les emplacements pharesConçu pour une sortie en 4K

Une règle pratique : faites vos brouillons avec le niveau économique et ne régénérez que les gagnants validés avec le niveau Pro. Une seconde branche du même workflow peut gérer cette mise à niveau automatiquement dès qu’une ligne est marquée comme approuvée.

Le workflow de base, nœud par nœud

Le workflow de base compte sept nœuds. Construisez-les dans cet ordre et testez après chacun :

  1. Manual Trigger pendant la construction, remplacé plus tard par un déclencheur Schedule ou Webhook
  2. Edit Fields, renommé Prompt Fields
  3. HTTP Request, renommé Gemini Image
  4. Code, renommé Extract Image
  5. Convert to File
  6. Import S3-compatible (Cloudflare R2, AWS S3 ou tout bucket similaire)
  7. Edit Fields ou Google Sheets pour enregistrer l’URL finale

Déclencheur et champs de prompt

Commencez par le Manual Trigger et un nœud Edit Fields qui crée quatre champs : prompt, aspect_ratio, slug et model. Utilisez 16:9 pour les en-têtes d’articles de blog et 1:1 pour les photos produit. Gardez le slug en minuscules avec des tirets, car il deviendra le nom du fichier.

Nettoyez le prompt à cette étape avec une expression telle que {{ $json.prompt.trim() }}. Les espaces en fin de texte et les sauts de ligne parasites venant d’un tableur sont une cause étonnamment fréquente de résultats bizarres.

L’appel HTTP Request vers Gemini

Ajoutez un nœud HTTP Request, réglez la méthode sur POST, et utilisez cette URL, en lisant l’identifiant du modèle dans votre champ model :

https://generativelanguage.googleapis.com/v1beta/models/{{ $json.model }}:generateContent

Pour l’authentification, choisissez l’identifiant Google Gemini(PaLM) Api si votre version de n8n le propose pour le nœud HTTP Request. Sinon, utilisez Header Auth avec le nom d’en-tête indiqué dans la documentation API de Google. Activez ensuite Send Body, choisissez JSON, et construisez le corps sous forme d’expression afin que les guillemets dans un prompt ne puissent jamais le casser :

{{ JSON.stringify({
  contents: [{ parts: [{ text: $json.prompt }] }],
  generationConfig: {
    responseModalities: ["TEXT", "IMAGE"],
    imageConfig: { aspectRatio: $json.aspect_ratio }
  }
}) }}

Dans Options, portez le délai d’expiration à 120000 ms. Les appels d’image sont plus lents que les appels de texte, et la valeur par défaut interrompt une requête pourtant saine.

💡 n8n propose aussi un nœud Google Gemini natif, dont les opérations sur les images évoluent d’une version à l’autre. Vérifiez la liste des opérations dans votre propre installation. L’approche HTTP Request présentée ici fonctionne dans toutes les versions et expose la réponse complète, ce qui rend l’étape de validation possible.

Des mains tapant sur un clavier devant un écran flou affichant de courtes lignes de code

Transformer le base64 en fichier

La réponse imbrique l’image dans candidates[0].content.parts, à côté de tout texte que le modèle a choisi d’ajouter. La partie image contient un objet inlineData avec un mimeType et une chaîne data en base64. Ne supposez pas que l’image est la première partie. Recherchez-la.

Ajoutez un nœud Code en mode Run Once for Each Item :

const parts = $json.candidates?.[0]?.content?.parts ?? [];
const img = parts.find(p => p.inlineData);
if (!img) {
  const reason = $json.promptFeedback ?? $json.candidates?.[0]?.finishReason ?? 'unknown';
  throw new Error('No image returned: ' + JSON.stringify(reason));
}
return {
  json: {
    image_b64: img.inlineData.data,
    mimeType: img.inlineData.mimeType,
    slug: $('Prompt Fields').item.json.slug
  }
};

Lever une erreur lorsqu’une image est absente est volontaire. Cela transforme un échec silencieux en échec visible, et permet aux réglages de nouvelle tentative et de sortie d’erreur de la section suivante de jouer leur rôle.

Vient ensuite Convert to File avec l’opération Move Base64 String to File. Réglez le champ d’entrée base64 sur image_b64 et nommez le fichier {{ $json.slug }}.png. La sortie d’image de Gemini arrive en général au format PNG, et vous pouvez lire mimeType si vous voulez être strict sur l’extension. Enfin, envoyez le fichier dans votre bucket avec le nœud S3 et réécrivez l’URL publique à l’endroit où vivent vos contenus.

Une main faisant glisser hors d’une imprimante de bureau une photographie fraîchement imprimée d’un lac de montagne

Trois modèles qui valent la peine d’être copiés

La bibliothèque de modèles de n8n contient de nombreux workflows communautaires construits autour des images Nano Banana et Gemini, et en parcourir quelques-uns est un moyen rapide de voir différentes structures. La qualité varie, donc vérifiez chacun d’eux au regard des cinq défaillances ci-dessus. Les trois squelettes ci-dessous sont ceux qui reviennent le plus souvent.

Modèle un : lot d’images d’en-tête

Utilisez-le lorsqu’une équipe éditoriale a besoin d’une image d’en-tête pour chaque article d’un tableur.

Flux : Schedule Trigger → Google Sheets (lignes où status est vide) → Loop Over Items (taille de lot 2) → Prompt Fields → Gemini Image → Extract Image → Convert to File → import S3 → Google Sheets (écrire image_url et status = done) → Wait (6 secondes) → retour à la boucle.

Construisez le prompt à partir du titre de l’article et d’un suffixe de style fixe pour que chaque en-tête partage une même identité : {{ $json.title }}, wide editorial photograph, natural window light, 35mm lens, shallow depth of field, no text. Gardez le suffixe à un seul endroit, et quarante images paraîtront appartenir au même site.

La colonne de statut compte plus qu’il n’y paraît. Les lignes marquées done sont ignorées au prochain lancement, de sorte qu’une exécution interrompue reprend là où elle s’est arrêtée au lieu de payer deux fois les mêmes images.

Deux collègues examinant un mur de seize photographies d’en-tête d’articles imprimées

Modèle deux : variantes de photo produit

Celui-ci retouche une photo existante et modifie le décor autour d’elle. La requête est la même qu’auparavant, avec une partie supplémentaire : la photo source en base64. Téléchargez la photo avec un nœud HTTP Request, passez-la par Extract From File en utilisant Move File to Base64 String, et ajoutez-la à côté de la partie texte :

parts: [
  { text: $json.prompt },
  { inlineData: { mimeType: 'image/jpeg', data: $json.photo_b64 } }
]

Bouclez ensuite sur quatre prompts pour chaque produit : un plan de travail en marbre sous une lumière matinale, une table en chêne pâle, du lin plié, et un rebord de pierre en extérieur. Incluez toujours la phrase Keep the product exactly unchanged and change only the surroundings. Sans elle, les modèles d’image adorent redessiner l’étiquette.

Une tasse en céramique blanche et un portefeuille en cuir sur une planche en chêne dans un petit studio

Modèle trois : du webhook au post social

Un déclencheur Webhook reçoit un sujet et une plateforme. Une Basic LLM Chain avec un modèle de chat Google Gemini rédige un prompt photographique, l’appel d’image suit, et l’URL finale est renvoyée à celui qui a fait la demande.

Les appels d’image peuvent durer de dix à trente secondes. Si un proxy placé devant n8n coupe les requêtes au bout de 30 ou 60 secondes, répondez immédiatement au webhook avec un identifiant de tâche, puis envoyez l’URL finale vers une adresse de rappel une fois le travail terminé. Sinon, l’appelant voit un délai d’attente dépassé pendant que n8n termine tranquillement la tâche et vous la facture.

Nouvelles tentatives, limites de débit et coûts

Réglages de nouvelle tentative et de rythme

Les nouvelles tentatives et le rythme déterminent si une exécution de 200 lignes se termine pendant la nuit ou s’arrête à la ligne 12. Réglez-les directement sur les nœuds :

RéglageValeurPourquoi
Retry On Fail (Gemini Image)Activé, Max Tries 3Les erreurs 429 et 5xx passagères se résolvent généralement d’elles-mêmes
Wait Between Tries5000 ms ou plusLaisse à la limite par minute le temps de se réinitialiser
Timeout (option HTTP Request)120000 msLes appels d’image sont plus lents que les appels de texte
On ErrorContinue (using error output)Les lignes en échec partent dans une branche séparée au lieu d’arrêter l’exécution
Loop Over Items batch size2 à 5Maintient les rafales sous la limite
Wait node entre les lots5 à 10 secondesRépartit les appels sur la minute

Dirigez la sortie d’erreur vers une mise à jour de Sheets qui écrit failed ainsi que le message d’erreur. Relancer les lignes échouées devient alors un filtre à un clic, et des schémas apparaissent vite, comme une formulation de prompt qui déclenche le filtre de sécurité à chaque fois.

Une calculatrice, une feuille de calcul imprimée, un crayon et une minuterie de cuisine vus d’en haut

Estimer la facture

Google annonçait Gemini 2.5 Flash Image à environ 0,039 $ par image à son lancement. Vérifiez la page de tarification actuelle avant de budgétiser, mais le calcul est simple : 500 images d’en-tête à ce tarif représentent environ 19,50 $, et chaque nouvelle tentative qui produit une image est comptée à nouveau. Les niveaux supérieurs coûtent davantage par image. Trois habitudes permettent de maîtriser les dépenses :

  • Testez vos prompts d’abord sur PicassoIA. Nano Banana 2 y est proposé avec des générations illimitées, donc reformuler un prompt douze fois ne coûte rien.
  • Ne relancez que les échecs, jamais des lots entiers.
  • Brouillonnez à bas coût, finalisez à prix fort. Utilisez le niveau le plus léger pour les brouillons et ne régénérez que les lignes approuvées sur le niveau Pro.

Des modèles de prompts qui tiennent la route

Laisser un LLM rédiger les prompts

Une ligne de tableur qui dit Remote work setup n’est pas un prompt. Ajoutez une Basic LLM Chain avant l’appel d’image, reliez-la à un modèle de chat Google Gemini, et donnez-lui une consigne fixe : transformer le sujet en un seul prompt photographique de 50 à 70 mots, avec les détails du sujet, du décor, de la direction de la lumière, de l’objectif et de la texture, et ne renvoyer que le prompt. Gemini 3.5 Flash et Gemini 3 Flash conviennent tous deux à cette tâche, car elle est courte et la vitesse compte plus que la profondeur.

💡 Enregistrez le prompt généré à côté de l’URL de l’image dans votre tableur. Quand une image déçoit, vous voyez exactement ce qui a été demandé au modèle.

Les termes photographiques que le modèle respecte

Les modèles d’image réagissent en général bien au vocabulaire du photographe. Utilisez cet ordre : sujet et action, décor, direction de la lumière, appareil et objectif, texture de surface, ambiance.

ÉlémentFormulation faibleFormulation plus forte
Lumièrelumineuxlumière douce venant de la fenêtre à gauche, fin de matinée
Objectifbel appareil85 mm à f/1.8, faible profondeur de champ
Anglebon anglecontre-plongée légère, regard vers le haut
Texturedétaillégrain du bois visible, tissage du tissu, fibres du papier
Texteécrire un titreaucun texte dans le cadre

Par défaut, précisez qu’il ne doit y avoir aucun texte. Les lettres générées sont la raison la plus fréquente pour laquelle une image d’en-tête par ailleurs réussie est rejetée, et il est bien plus simple d’ajouter ensuite un vrai titre dans votre outil de design.

L’établi d’un photographe avec un appareil argentique vintage, un posemètre et un carnet de croquis

Utiliser Nano Banana sur PicassoIA

Les prompts coûtent moins cher à corriger avant de vivre dans un workflow. Nano Banana sur PicassoIA appartient à la même famille que celle appelée par votre nœud HTTP, donc un prompt qui fonctionne là-bas est un bon candidat pour l’automatisation.

  1. Ouvrez la page Nano Banana sur PicassoIA.
  2. Collez le prompt exactement tel que votre nœud Edit Fields le produirait, suffixe de style inclus.
  3. Ajoutez des photos de référence dans le champ Image Input si votre workflow retouche des images existantes. Le modèle en accepte plusieurs à la fois.
  4. Choisissez JPG ou PNG comme format de sortie.
  5. Générez trois versions en changeant une seule formulation à la fois : la lumière, l’objectif ou le décor.
  6. Recopiez la formulation gagnante dans n8n.

Passez à Nano Banana 2 lorsque vous avez besoin de plus de contrôle. Il ajoute 15 options de format, dont 16:9, 9:16 et 4:5, les résolutions 1K, 2K et 4K, jusqu’à 14 images de référence, et l’ancrage facultatif sur Google Search. Le réglage du format correspond directement au champ aspectRatio de votre corps de requête. Pour les lots où la vitesse prime, il y a Nano Banana 2 Lite, et Nano Banana Pro gère les rendus finaux en 4K.

Peaufiner les résultats avant publication

Même les sorties solides bénéficient d’une passe de finition. Real-ESRGAN et Crystal Upscaler agrandissent les images pour les emplacements phares, et Bria Remove Background détoure les photos produit pour les pages de catalogue. Si un style ne convient pas aux modèles de Google, comparez Seedream 4.5, Flux 2 Pro et Imagen 4 avec le même prompt avant de modifier votre workflow. Une comparaison de dix minutes vaut mieux qu’une semaine de retouches de prompt.

Une femme souriante à une table près de la fenêtre d’un café, avec un ordinateur portable affichant un paysage de forêt généré

Lancez votre premier lot sur Picasso IA

Vous avez maintenant toute la chaîne : une requête validée, de vrais fichiers, du stockage, du rythme, des nouvelles tentatives et des prompts qui valent la peine d’être automatisés. Construisez-la avec une ligne, puis dix, puis la feuille complète.

Avant de le faire, consacrez quinze minutes sur Picasso IA à vos cinq prompts les plus importants. Essayez-les sur Nano Banana 2, comparez les résultats avec Nano Banana Pro, et conservez la formulation qui l’emporte. Collez ensuite ces prompts dans votre nœud Edit Fields et laissez n8n gérer le volume. Parcourez tous les modèles sur picassoia.com/en/all-models et commencez par une image d’en-tête pour votre prochain article.

Partager cet article

Choisissez votre langue