Nano Banana 2.1 : le prompting avancé en JSON
34 / 47

Module 5 · Automatiser avec n8nEnviron 1 min

Du base64 au fichier

L’API ne renvoie pas un fichier, mais du texte : l’image encodée en base64, un alphabet de 64 caractères qui transporte des données binaires dans du JSON, au prix d’un poids supérieur d’environ un tiers. Elle se trouve dans les steps de la réponse, dans un bloc de type image d’une étape model_output. Un second nœud Code, « Extraire image », va la chercher :

javascript
// Nœud Code « Extraire image », mode Run Once for Each Item
const sorties = ($json.steps ?? [])
  .filter((etape) => etape.type === "model_output")
  .flatMap((etape) => etape.content ?? []);
const image = sorties.filter((bloc) => bloc.type === "image").pop();
const message = sorties.filter((bloc) => bloc.type === "text").map((bloc) => bloc.text).join(" ");

return {
  json: {
    id: $("Compiler").item.json.id,
    image_b64: image ? image.data : "",
    message,
  },
};

Puis quatre nœuds terminent le trajet :

  1. If, « Image reçue ? » : la condition {{ $json.image_b64 }} is not empty.
  2. Branche vraie, Convert to File : opération Move Base64 String to File, champ image_b64, nom de fichier {{ $json.id }}.jpg, type MIME image/jpeg.
  3. Google Drive, opération Upload, vers le dossier « À valider ».
  4. Google Sheets, opération Update Row : correspondance sur id, avec {{ $('Extraire image').item.json.id }}, statut « à valider », lien https://drive.google.com/file/d/{{ $json.id }}/view.

La branche fausse met la ligne au statut « à revoir », avec le message du modèle, qui explique souvent pourquoi aucune image n’est sortie.