MIR5,96 € −2,1 %OIN2,68 € −1,5 %KAK4,65 € −2,5 %BET3,24 € −1,5 %ECH4,92 € −1,6 %TRO18,64 € −2,3 %CHA3,15 € +0,6 %CRG2,76 € +0,4 %GIR28,22 € +1,9 %SAR5,92 € +2,4 %BRO3,22 € +2,2 %PON3,95 € −0,3 %MOR57,24 € −2,2 %CRV25,74 € −1,4 %PAA3,51 € 0,0 %CES9,00 € −2,4 %COU3,18 € −0,6 %POA2,94 € −1,0 %CAD3,21 € +2,2 %ABR6,32 € −3,5 %TOT5,97 € +0,7 %POR2,99 € +1,0 %CAR3,06 € +1,3 %POM2,25 € −0,9 %COE24,81 € −1,7 %PEH5,19 € +0,2 %POT3,16 € −0,3 %PEE5,33 € −2,7 %
🛠️ Console de la place

Admin HallesX

v2.0.0 · build 82ec2c5 · 2026-07-26

Pack images HallesX — Nano Banana (gemini-2.5-flash-image)

Générer

GEMINI_API_KEY=xxx node scripts/generate-images.mjs          # tout (~100 img, ~3,90 $)
GEMINI_API_KEY=xxx node scripts/generate-images.mjs --only=cat/   # une famille

Relance = ne régénère que les manquantes. Les images tombent dans public/img/** et le site les affiche automatiquement (fallback élégant si absentes : illustrations SVG / dégradés).

Les bonnes pratiques appliquées

  1. Un STYLE unique verrouillé (bloc de texte identique en tête de chaque prompt) : illustration éditoriale minimale française, palette limitée à la charte (crème/vert jardin/terracotta/miel), lumière du matin à gauche, ombres 45°, grain papier. C'est LA technique de cohérence recommandée : même vocabulaire, même éclairage, même système sur toutes les images.
  2. Jamais de texte dans les images (no text, no letters) : la typo reste Fraunces/DM Sans dans le HTML — netteté parfaite, i18n possible, zéro faute générée.
  3. Le bon format par emplacement (ratios natifs du modèle) :
  • héros pleine largeur → 21:9 (1536 px)
  • héros de landing → 16:9
  • cartes filières / halles → 4:3
  • scènes métier → 3:2
  1. La déclinaison, pas la variation : une seule « cagette » déclinée sur les 10 filières (même cadrage, même angle) — la série se lit comme une collection.

L'inventaire (100 images)

  • 4 héros (home 21:9, cote 4:3, halles 21:9, pro 16:9)
  • 10 cagettes de filière (4:3) — légumes, fruits, herbes, champignons, baies, agrumes, salades, tubercules, marée, viandes
  • 8 scènes métier (3:2) — acheteur au marché, tire-palette, camion frigo, vélo-cargo, carreau à l'aube, pesée, criée marée, facture
  • 4 saisons (21:9)
  • 3 tailles de culture (4:3) — balcon, micro-ferme, grande exploitation
  • 52 héros de landing (16:9) — un par profil/produit/territoire/feature
  • 7 features complémentaires + 12 halles (16:9)

Câblage déjà en place

  • lib/img.tssiteImg(rel) : le composant affiche l'image si le fichier existe, sinon le fallback (SVG MarketHeroArt, dégradés de filière…).
  • Branché sur : héros de la cote, héros des 52 landings, cartes des places phares (/marches).

Coûts : ce qui reste, ce qui se rend, ce qui s'anime

Règle d'or : on ne paie jamais deux fois la même image.

Famille Génération Persistance Coût récurrent
Pack illustratif (101 images Nano Banana)une seule fois, en localcommitté dans public/img/**, copié dans l'image Docker, cache 30 j0 € après les ~3,94 $ initiaux
Vignettes OG (149, avec données : prix, séances…)au build, par next/og (satori, local)fichiers statiques du build, cache 24 h0 € — aucun appel d'API, jamais
Vidéos données (Remotion, à venir)offline (cron nightly ou manuel), rendu local/CIMP4 committés dans public/video/**0 € — le rendu est du CPU CI, pas une API

Le générateur scripts/generate-images.mjs est idempotent : il saute toute image déjà présente. Relancer le script ne régénère que les manquantes — on ne peut pas payer deux fois par accident. Pour refaire UNE image : supprimer le fichier puis relancer avec --only=<chemin>.

Remotion (vidéos avec données réelles) — plan

Même philosophie que les OG : composition React qui lit data/rnmdb, rendue hors requête (cron hebdo), sortie MP4 committée et servie statiquement. Premiers candidats : « la semaine du marché » 15 s (top hausses/baisses animées, bandeau saison) pour la home et les réseaux, et une déclinaison par halle. À scaffolder sur demande — lourd en dépendances, on l'ajoute quand on veut la première vidéo, pas avant.

Documentation — Admin HallesX