Aller au contenu

Le master ne va pas partout

Trente-sept secondes et demie, cinq segments, un avatar qui présente une fonction du logiciel : c'est la bonne pièce pour YouTube et TikTok, où l'on vient regarder. Sur les trois autres réseaux, la même vidéo recadrée ne marche pas — alors chacun reçoit une pièce à part.

Instagram

La story, sans démonstration

9:16 · 1080 × 1920 · 10 s

Le clip Higgsfield, le hook à 0,6 s, la punchline à 5,6 s. Pas d'avatar, pas de capture d'écran, pas de logiciel.

Une story se regarde le pouce posé sur l'écran, prêt à passer à la suivante. Une démonstration y meurt en deux secondes ; la blague tient, et c'est elle qui donne envie d'aller voir le reste.

189 montées

LinkedIn

Le carrousel, en quatre planches

4:5 · 1080 × 1350 · PDF

La scène, le coût, la réponse, la suite. Le site convertit les quatre images en PDF dans le navigateur.

LinkedIn ne publie un carrousel qu'en PDF — quatre images ne se publient pas. Et l'ordre est une démonstration : on doit sentir le problème avant d'entendre la réponse.

988 planches à générer

Facebook

Le visuel qui se comprend seul

4:5 · 1080 × 1350

Une image. Le hook en bande haute, la punchline en bandeau bas, le chef au milieu. Ce n'est pas une vignette.

On le regarde dans un fil, sans son, la légende repliée. Un texte laissé en légende est un texte que personne ne lit.

247 visuels à générer

À envoyer à Lovable

Un tour, sept cent cinquante images

Un tour Lovable coûte la même chose qu'il traite un épisode ou cent cinquante. Ce prompt est écrit pour un envoi unique — il renvoie aux prompts déjà présents dans les données du projet plutôt que de les recopier, ce qui les garde justes quand un épisode change, et il dit explicitement de réutiliser les aperçus de réseau existants plutôt que d'en écrire de nouveaux. Joindre la photo du chef aux deux.

Tout, en un tour

Les 750 images à partir de la photo du chef, puis leur branchement dans les aperçus de réseau qui existent déjà — et les textes à publier, un bouton de copie par post.

750 imagespublic/carrousels/ et public/facebook/

Lire le prompt

# Prompt Lovable — les 750 images, et les textes qui vont avec À envoyer **en un seul tour**. Joindre en pièce jointe la photo du chef : `public/brand/chef-foodeatup.jpg`. --- ## Ce que je te demande, en une phrase Générer les 750 images qui manquent à partir des prompts déjà présents dans le projet, les déposer aux emplacements que le code attend, et les brancher dans le système d'aperçu qui existe déjà — sans le réécrire. Trois choses, dans cet ordre. La troisième est la plus importante et c'est celle qu'on rate d'habitude. --- ## 1. Les images ### Ce qu'il y a à générer | Quoi | Combien | Où le déposer | |---|---|---| | Planches de carrousel LinkedIn | 600 — 4 par épisode | `public/carrousels/EP001-1.jpg` … `EP150-4.jpg` | | Visuels Facebook | 150 — 1 par épisode | `public/facebook/EP001.jpg` … `EP150.jpg` | Le nom de fichier est un contrat : `src/components/PieceReseau.tsx` va chercher exactement ces chemins et affiche un emplacement vide tant que le fichier n'existe pas. Ne renomme rien, n'ajoute pas de suffixe de taille, ne crée pas de sous-dossier. **JPEG obligatoire**, 1080 × 1350, qualité 85. Pas de PNG, pas de WebP : le convertisseur PDF du site embarque le flux JPEG tel quel (`/DCTDecode`), et un PNG produirait un carrousel de pages blanches. ### Les prompts sont déjà écrits N'en invente aucun, n'en « améliore » aucun. Ils sont dans les données : ```ts import { contenuDe } from "@/data/contenu"; const c = contenuDe("EP001"); c.carrousel.planches; // 4 objets { n, role, titre, texte, prompt } c.imageFacebook.prompt; // 1 chaîne ``` Prends `prompt` tel quel et envoie-le à ton générateur d'images **avec la photo du chef en image de référence**, à chaque appel, sans exception. ### Les quatre interdits Ils viennent de trois cents vignettes déjà produites, dont une bonne partie a dû être refaite. Ce ne sont pas des préférences de style. 1. **Le chef ne se redessine pas.** Même visage, même barbe, même toque, même veste, même tablier au logo FoodEatUp bleu, sur les 750 images. La photo jointe est la source, pas une inspiration. Un générateur laissé libre invente un autre cuisinier à chaque appel, et la série se dissout : c'est la même personne sur cent cinquante épisodes, c'est ce qui en fait une série. 2. **Pas de noir et blanc, pas de désaturation.** Les rendus précédents sortaient en niveaux de gris « pour faire cinéma ». La charte est en couleur : crème `#FCF9E6`, marine `#0F1A23`, bleu `#007BFF`, orange `#FFA500`. 3. **Aucun logo dessiné par le générateur.** Il en invente un deuxième, approchant mais faux, et deux logos sur la même image se voient au premier coup d'œil. Le seul logo autorisé est celui du tablier, qui vient de la photo de référence. 4. **Une scène par épisode.** Les 150 épisodes ne se passent pas dans la même cuisine. Le décor est décrit dans chaque prompt : suis-le. ### Le texte est DANS l'image C'est la différence avec une vignette, et c'est ce qui compte le plus ici. Une vignette est une miniature : on la voit avant de cliquer, la vidéo dira le reste. Ces images-ci **sont** la publication. Personne ne clique dessus pour voir autre chose. On les regarde dans un fil, sans son, la légende repliée. Chaque prompt donne le texte exact, sa couleur et sa place — bande haute crème, bandeau bas marine. Écris **ces mots-là**, sans en ajouter, sans en retrancher, sans faute, sans lettre déformée. Si ton générateur rend mal le français — accents avalés, lettres fondues — génère l'image **sans texte** et compose les deux bandes en HTML/canvas avant d'enregistrer le JPEG. Un texte net vaut mieux qu'un texte « intégré » illisible. ### L'ordre des quatre planches est une démonstration | Planche | Rôle | Ce qu'elle montre | |---|---|---| | 1 | La scène | le hook, le chef dans la situation comique | | 2 | Le coût | ce que le problème coûte, resserré sur le détail qui coince | | 3 | La réponse | le chef calme, tablette en main, la salle en ordre | | 4 | La suite | le chef de face, l'invitation, sobre | On doit sentir le problème avant d'entendre la réponse. Inverser 2 et 3 donne une publicité. Ne réordonne pas. --- ## 2. Les textes à publier Ils sont **déjà écrits** eux aussi — cinq par épisode, un par réseau : ```ts import { contenuDe, texteAColler } from "@/data/contenu"; const c = contenuDe("EP001"); c.publications.facebook; // { legende, hashtags, motsCles, cta, titre? } c.publications.instagram; c.publications.tiktok; c.publications.linkedin; c.publications.youtube; texteAColler(c.publications.facebook); // légende + ligne de mots-dièse ``` Ne les réécris pas, ne les résume pas, ne les traduis pas. Ils sortent d'un générateur qui tient la voix de la série sur les cent cinquante épisodes. **Un seul bouton de copie par post, discret**, qui prend le texte entier — `texteAColler()`, légende et mots-dièse compris. Pas un bouton par champ, pas un bouton par bloc. Le composant existe : ```ts import { BoutonCopier } from "@/components/PublicationBloc"; <BoutonCopier texte={texteAColler(t)} libelle="Copier" variante="fantome" /> ``` --- ## 3. Le branchement — la partie qu'on rate **Le système d'aperçu existe déjà. Ne le réécris pas, ne le remplace pas, ne le duplique pas.** ``` src/components/ApercuReseau.tsx 819 lignes — les 5 maquettes de réseau src/components/PublicationBloc.tsx les onglets + le bouton de copie src/components/CeQuilFautPublier.tsx la section « Ce qu'il faut publier » ``` `ApercuReseau` rend un post dans l'habillage de son réseau : la barre Facebook, le carré Instagram, le fil LinkedIn. C'est ce qui permet de voir ce que verra le client. Ce qui lui manque, c'est **la bonne image** : il montre encore la vignette de la vidéo là où le post partira en image ou en carrousel. Ce que tu changes, précisément : - **`ApercuFacebook`** — afficher `/facebook/{episode.id}.jpg` à la place de la vignette. Si le fichier manque, garder le comportement actuel. - **`ApercuLinkedIn`** — afficher les quatre planches `/carrousels/{episode.id}-{1..4}.jpg` dans un carrousel qu'on fait défiler, avec le compteur « 1 / 4 » que LinkedIn affiche. Sous l'aperçu, le bouton « Télécharger le PDF » : la fonction existe, `carrouselEnPdf()` dans `src/lib/pdf.ts`. - **`ApercuInstagram`** — afficher la story `contenuDe(id).story.url` quand elle existe, en 9:16, muette et en lecture automatique comme le fait Instagram. - **TikTok et YouTube** — ne touche à rien. Ils reçoivent le master, et le master n'a pas changé. ### Trois règles de cette maquette, déjà en vigueur Elles sont dans le `CLAUDE.md` du projet. Les enfreindre, c'est refaire un travail déjà fait. 1. **Aucun compteur de réactions inventé.** Pas de « 47 j'aime ». Les compteurs restent vides tant que le post n'est pas parti — un chiffre inventé dans une maquette finit toujours par être lu comme un vrai. 2. **Un seul bouton de copie, discret**, qui prend le texte entier. 3. **Tous les posts s'affichent, publiés ou non.** Le statut réseau est une information, pas un verrou : ne grise rien, ne masque rien. Ce qui reste grisé, ce sont les vignettes d'épisodes **non produits** — là, il n'y a réellement rien à montrer. --- ## Ce qu'il ne faut surtout pas faire - Ne touche pas à `public/thumbnails/` : ce sont les vignettes, un autre format, déjà en place. - Ne régénère pas `src/data/series.ts` ni `src/data/contenu.ts`. Ils sont produits par l'usine à vidéos et portent 240 épisodes ; une régénération côté site effacerait les saisons 7 et 8. - Ne crée pas un second composant d'aperçu « plus simple ». Il y en a déjà eu un, il a fallu le supprimer. - Ne relance pas un tour par épisode. Un tour traite les 150 : quinze tours au lieu de deux, c'est le budget de la saison. --- ## Vérification avant de me rendre la main - [ ] 600 fichiers dans `public/carrousels/`, nommés `EPxxx-n.jpg` - [ ] 150 fichiers dans `public/facebook/`, nommés `EPxxx.jpg` - [ ] tous en JPEG, 1080 × 1350 - [ ] le même chef sur les 750 — ouvre-en dix au hasard et compare - [ ] aucune image en niveaux de gris, aucun deuxième logo - [ ] le texte de chaque image est celui du prompt, sans faute - [ ] `public/thumbnails/` n'a pas bougé - [ ] l'aperçu Facebook montre le visuel, l'aperçu LinkedIn le carrousel, l'aperçu Instagram la story - [ ] aucun compteur de réactions inventé nulle part - [ ] un seul bouton de copie par post, et il copie le texte entier - [ ] `npm run build` passe

Les deux nouvelles séries

« Une journée » filme dix métiers, sans jamais montrer un écran. « L'IA dans FoodEatUp » garde le chef mais passe en charte RapidoCMS, sans aucun schéma.

372 imagesthumbnails/ · carrousels/ · facebook/

Lire le prompt

# Prompt Lovable — les images des séries « Une journée » et « L'IA dans FoodEatUp » À envoyer **en un seul tour**. Joindre en pièce jointe : `public/brand/chef-foodeatup.jpg`. --- ## Ce qui est nouveau, et pourquoi ça change les images Le projet contenait une série — *Le Coup de Feu*, 240 épisodes. Il en contient trois. Les deux nouvelles n'ont **ni le même sujet, ni le même personnage, ni la même charte**, et c'est délibéré : les traiter comme la première produirait des images fausses. | Série | Personnage | Charte | Ce qu'on filme | |---|---|---|---| | Le Coup de Feu | le chef FoodEatUp | crème + marine | une scène comique | | **Une journée** | **dix métiers différents** | marine + crème | **un poste de travail, sans logiciel** | | **L'IA dans FoodEatUp** | le chef FoodEatUp | **RapidoCMS — bleu #03A9F5, gris #383838, blanc** | un objet réel qui change d'état | ## Ce qu'il y a à générer | Quoi | Combien | Où | |---|---|---| | Vignettes — Une journée | 31 | `public/thumbnails/EP301.jpg` … `EP331.jpg` | | Vignettes — L'IA dans FoodEatUp | 31 | `public/thumbnails/EP401.jpg` … `EP431.jpg` | | Planches de carrousel LinkedIn | 248 — 4 par épisode | `public/carrousels/EPxxx-n.jpg` | | Visuels Facebook | 62 | `public/facebook/EPxxx.jpg` | **372 images.** JPEG uniquement — le convertisseur PDF du site embarque le flux JPEG tel quel (`/DCTDecode`), un PNG produirait un carrousel de pages blanches. Vignettes en **1080 × 1920** (9:16), carrousels et visuels en **1080 × 1350** (4:5), qualité 85. ## Les prompts existent déjà — ne les réécris pas ```ts import { contenuDe } from "@/data/contenu"; import { series } from "@/data/series"; const ep = series.find(s => s.slug === "une-journee")! .saisons.flatMap(sa => sa.episodes).find(e => e.id === "EP301")!; ep.promptVignette; // la vignette contenuDe("EP301")?.carrousel; // 4 planches, si présent contenuDe("EP301")?.imageFacebook; // le visuel ``` Prends `prompt` tel quel. N'invente rien, n'améliore rien. ## Série « Une journée » — la règle qui compte **Ce n'est pas le chef FoodEatUp.** Ce sont dix métiers différents : chef de cuisine, second, chef de partie, cuisinier, plongeur, patron, chef de rang, serveur, responsable de la communication, client. Chacun doit être **une personne distincte et reconnaissable**, la même d'un épisode à l'autre de son métier — trois épisodes par métier, donc trois images du même visage. La photo du chef jointe sert de **référence de style** — lumière, grain, réalisme, cadrage — et non de référence de visage. Le chef FoodEatUp n'apparaît dans aucune de ces 31 vignettes. **Aucun écran allumé, aucune tablette, aucune interface visible.** La série montre le geste, pas l'outil. Un écran dans le cadre bascule l'épisode du côté de la démonstration, ce qui est exactement ce qu'elle évite. Le champ `phase` donne l'heure et la lumière : | Phase | Heure | Lumière | |---|---|---| | Avant le service | 07h00 | froide, avant l'aube, une seule source | | Pendant le service | 20h15 | chaude, saturée, vapeur, mouvement | | Après le service | 23h30 | crue, néons, surfaces vides | ## Série « L'IA dans FoodEatUp » — l'autre charte Ici **c'est bien le chef FoodEatUp**, et la photo jointe est la référence de visage : même visage, même barbe, même toque, même veste, même tablier. Mais la charte est **RapidoCMS** : bleu `#03A9F5`, gris `#383838`, blanc, tons clairs. **Pas de crème, pas d'orange** — ce sont les couleurs de l'autre série et les mélanger brouille les deux. Le bleu est **dans le décor** — un écran éteint qui reflète, une lumière, un objet — et ne forme **jamais un logo**. Et une interdiction propre à cette série : **aucun schéma, aucun diagramme, aucune infographie**. Une série sur l'IA filme d'habitude des flèches et des boîtes. Celle-ci filme ce que la phrase déclenche — le bac de saumon, le téléphone, la chambre froide. L'abstraction est dans le commentaire, pas dans l'image. ## Les quatre interdits, valables partout Appris sur trois cents vignettes déjà produites, dont beaucoup à refaire. 1. **Le personnage ne se redessine pas.** Sur *L'IA*, c'est le chef de la photo de référence. Sur *Une journée*, c'est le même visage sur les trois épisodes d'un même métier. Un générateur laissé libre invente quelqu'un d'autre à chaque appel. 2. **Pas de noir et blanc, pas de désaturation.** Aucune des deux chartes n'est grise. 3. **Aucun logo dessiné par le générateur.** Il en invente un deuxième, approchant mais faux. Le seul logo autorisé sur *L'IA* est celui du tablier, qui vient de la photo. 4. **Une scène par épisode.** Le décor est dans chaque prompt : suis-le. ## Le texte est dans l'image Les carrousels et les visuels Facebook **sont** la publication : on les regarde dans un fil, sans son, la légende repliée. Chaque prompt donne le texte exact, sa couleur et sa place. Écris ces mots-là, sans faute, sans lettre déformée. Si ton générateur rend mal le français, génère l'image **sans texte** et compose les bandes en HTML/canvas avant d'enregistrer le JPEG. ## Ce qu'il ne faut surtout pas faire - **Ne touche pas aux 240 épisodes du Coup de Feu** ni à leurs images existantes dans `public/thumbnails/`, `public/carrousels/`, `public/facebook/`. - **Ne régénère pas** `src/data/series.ts` ni `src/data/contenu.ts`. Ils sont produits par l'usine à vidéos et portent maintenant 302 épisodes. - **Ne réécris pas** `ApercuReseau.tsx`, `PublicationBloc.tsx`, `CeQuilFautPublier.tsx` ni `BlocBoucle.tsx`. Ils gèrent déjà les trois séries. - **Ne relance pas un tour par épisode.** Un tour traite les 372 images. ## Vérification avant de me rendre la main - [ ] 62 vignettes `EP301`–`EP331` et `EP401`–`EP431` en 1080 × 1920 - [ ] 248 planches `EPxxx-1..4.jpg` et 62 visuels, en 1080 × 1350 - [ ] tout en JPEG - [ ] sur *Une journée* : dix personnes distinctes, chacune identique sur ses trois épisodes, et **aucun écran allumé** dans le cadre - [ ] sur *L'IA* : le chef de la photo, charte RapidoCMS, **aucun schéma** - [ ] les images du *Coup de Feu* n'ont pas bougé - [ ] aucune image en niveaux de gris, aucun deuxième logo - [ ] `npm run build` passe

Relancer un seul format

Un tour Lovable coûte la même chose qu'il traite dix images ou sept cent cinquante. Ces deux prompts-là ne servent qu'à corriger un format sans refaire l'autre.

Les carrousels LinkedIn seuls

Quatre planches par épisode : la scène, le coût, la réponse, la suite.

600 imagespublic/carrousels/EPxxx-n.jpg

Lire le prompt

# Prompt Lovable — les 600 planches de carrousel LinkedIn À envoyer **en un seul tour**. Joindre la photo du chef en pièce jointe : `public/brand/chef-foodeatup.jpg`. --- ## Le contexte, en trois phrases FoodEatUp Social est la vitrine d'une série de 150 vidéos promotionnelles. Chaque épisode part sur cinq réseaux. LinkedIn ne reçoit pas la vidéo : il reçoit un **carrousel de quatre planches**, publié en PDF. Le site sait déjà convertir quatre JPEG en PDF — `src/lib/pdf.ts`, aucune dépendance. Il ne manque que les images. ## Ce que je te demande Génère **600 images** : quatre planches pour chacun des 150 épisodes. Le prompt de chaque planche est **déjà écrit** et se trouve dans les données du projet : ```ts import { contenuDe } from "@/data/contenu"; const c = contenuDe("EP001"); c.carrousel.planches; // 4 objets { n, role, titre, texte, prompt } ``` N'invente pas de prompt. N'améliore pas les prompts. Prends `planche.prompt` et envoie-le tel quel à ton générateur d'images, **avec la photo du chef en image de référence**. ## Où déposer les rendus ``` public/carrousels/EP001-1.jpg public/carrousels/EP001-2.jpg public/carrousels/EP001-3.jpg public/carrousels/EP001-4.jpg … public/carrousels/EP150-4.jpg ``` Le nom du fichier est un contrat : `src/components/PieceReseau.tsx` va chercher `/carrousels/{id}-{n}.jpg` et affiche un emplacement vide tant que le fichier n'existe pas. Ne renomme rien, n'ajoute pas de suffixe de taille. **JPEG obligatoire**, pas de PNG, pas de WebP. Le convertisseur PDF embarque le flux JPEG tel quel (`/DCTDecode`) : un PNG produirait un PDF de pages blanches. Format **1080 × 1350** exactement, qualité 85. ## Les quatre interdits Ils viennent de trois cents vignettes déjà produites, dont une bonne partie a dû être refaite. Ce ne sont pas des préférences. 1. **Le chef ne se redessine pas.** Même visage, même barbe, même toque, même veste, même tablier au logo FoodEatUp bleu, sur les 600 images. La photo de référence est jointe : elle est la source, pas une inspiration. Un générateur laissé libre invente un autre cuisinier à chaque appel et la série se dissout. 2. **Pas de noir et blanc, pas de désaturation.** Les rendus précédents sortaient en niveaux de gris « pour faire cinéma ». La charte est en couleur : crème `#FCF9E6`, marine `#0F1A23`, bleu `#007BFF`, orange `#FFA500`. 3. **Aucun logo dessiné par le générateur.** Il en invente un deuxième, approchant mais faux, et deux logos sur la même image se voient. Le seul logo autorisé est celui du tablier, qui vient de la photo de référence. 4. **Une scène par épisode.** Les 150 épisodes ne se passent pas dans la même cuisine. Le décor de chaque planche est décrit dans son prompt : suis-le. Quatre planches identiques à quatre autres, c'est un carrousel qu'on ne lit pas. ## Le texte est dans l'image C'est la différence avec une vignette, et c'est le point qui compte le plus. Personne ne clique sur une planche de carrousel pour voir autre chose : ce qu'il y a à comprendre doit être écrit dedans, en entier, lisible sans son et sans légende. Chaque prompt précise le texte exact, sa couleur, et où il se pose — bande haute crème, bandeau bas marine. Écris **ces mots-là**, sans en ajouter et sans en retrancher, sans faute, sans lettre déformée. Si ton générateur rend mal le texte, génère l'image **sans texte** et compose les bandes en HTML/canvas par-dessus avant d'enregistrer le JPEG. Un texte net compte davantage qu'un texte « intégré ». ## L'ordre des planches raconte quelque chose | Planche | Rôle | Ce qu'elle montre | |---|---|---| | 1 | La scène | le hook, le chef dans la situation comique | | 2 | Le coût | ce que le problème coûte, resserré sur le détail qui coince | | 3 | La réponse | le chef calme, tablette en main, la salle en ordre | | 4 | La suite | le chef de face, l'invitation, sobre | Ce n'est pas décoratif : c'est une démonstration. On sent le problème avant d'entendre la réponse. Ne réordonne pas. ## Vérification avant de me rendre la main - [ ] 600 fichiers dans `public/carrousels/`, nommés `EPxxx-n.jpg` - [ ] tous en 1080 × 1350, tous en JPEG - [ ] le même chef sur les 600 - [ ] aucune image en niveaux de gris - [ ] aucun deuxième logo - [ ] le texte de chaque planche est celui du prompt, sans faute Ne relance pas un tour par épisode : un tour traite les 150.

Les visuels Facebook seuls

Une image par épisode, texte compris, qui se lit sans légende et sans son.

150 imagespublic/facebook/EPxxx.jpg

Lire le prompt

# Prompt Lovable — les 150 visuels Facebook À envoyer **en un seul tour**. Joindre la photo du chef en pièce jointe : `public/brand/chef-foodeatup.jpg`. --- ## Ce que c'est, et surtout ce que ce n'est pas Ce ne sont **pas des vignettes**. Une vignette est une miniature : on la voit avant de cliquer, elle donne envie d'ouvrir la vidéo, son texte tient en trois mots, et si on ne la lit pas ce n'est pas grave — la vidéo dira le reste. Un visuel Facebook **est la publication**. Personne ne clique dessus pour voir autre chose. Il se regarde dans un fil, sans son, souvent sans que la légende soit dépliée. Tout ce qu'il y a à comprendre doit donc être **dans l'image** : la scène, la phrase qui accroche, et la chute. Le projet contient déjà 150 vignettes dans `public/thumbnails/`. **Ne les touche pas.** Celles-ci sont un format différent, dans un dossier différent. ## Ce que je te demande Génère **150 images**, une par épisode. Le prompt est **déjà écrit** dans les données du projet : ```ts import { contenuDe } from "@/data/contenu"; contenuDe("EP001").imageFacebook.prompt; ``` Prends-le tel quel, envoie-le à ton générateur **avec la photo du chef en image de référence**. N'invente pas, ne reformule pas. ## Où déposer les rendus ``` public/facebook/EP001.jpg public/facebook/EP002.jpg … public/facebook/EP150.jpg ``` `src/components/PieceReseau.tsx` va chercher `/facebook/{id}.jpg` et affiche un emplacement vide tant que le fichier manque. **JPEG, 1080 × 1350 exactement, qualité 85.** Le 4:5 est le format que Facebook affiche le plus grand dans un fil mobile ; un 1:1 perd un quart de la surface, un 16:9 en perd la moitié. ## La composition, identique sur les 150 C'est ce qui fait qu'on reconnaît la série en descendant son fil. ``` ┌─────────────────────────────┐ │ bande crème #FCF9E6 │ ← le hook, marine #0F1A23 │ (un cinquième de hauteur) │ typographie arrondie très grasse ├─────────────────────────────┤ │ │ │ la scène : le chef à │ ← il occupe les deux tiers droits │ droite, l'élément comique │ l'élément comique est à gauche │ à gauche │ │ │ ├─────────────────────────────┤ │ bandeau marine #0F1A23 │ ← la punchline, crème #FCF9E6 │ (un sixième de hauteur) │ corps plus petit que le hook └─────────────────────────────┘ ``` ## Les quatre interdits Les mêmes que pour les carrousels, pour les mêmes raisons — trois cents vignettes déjà produites, dont beaucoup à refaire. 1. **Le chef ne se redessine pas.** Même visage, même barbe, même toque, même veste, même tablier au logo FoodEatUp bleu, sur les 150. La photo jointe est la source, pas une inspiration. 2. **Pas de noir et blanc, pas de désaturation.** La charte est en couleur. 3. **Aucun logo dessiné par le générateur.** Le seul logo autorisé est celui du tablier, qui vient de la photo de référence. Un deuxième logo inventé se voit immédiatement. 4. **Une scène par épisode.** Le décor de chacun est décrit dans son prompt. Cent cinquante variations de la même cuisine, c'est un fil qu'on arrête de regarder au troisième. ## Le texte doit être net Chaque prompt donne le texte exact des deux bandes, sa couleur et sa place. Écris **ces mots-là**, sans en ajouter, sans faute, sans lettre déformée. Si ton générateur rend mal le texte français — accents avalés, lettres fondues — génère l'image **sans texte** et compose les deux bandes en HTML/canvas avant d'enregistrer le JPEG. Un texte net vaut mieux qu'un texte « intégré » qu'on ne peut pas lire. ## Vérification avant de me rendre la main - [ ] 150 fichiers dans `public/facebook/`, nommés `EPxxx.jpg` - [ ] tous en 1080 × 1350, tous en JPEG - [ ] `public/thumbnails/` n'a pas bougé - [ ] le même chef sur les 150 - [ ] aucune image en niveaux de gris, aucun deuxième logo - [ ] les deux bandes portent le texte du prompt, sans faute Un seul tour pour les 150 : ne relance pas épisode par épisode.

À quoi ressemble un carrousel

Les quatre planches de EP001Le chien qui te regarde. Chaque planche porte son texte dans l'image ; c'est ce texte-là que le générateur doit écrire.

  1. 1. La scène

    « Lui aussi attend ta commande »

  2. 2. Le coût

    « Sauf que lui, il est patient. Tes clients, non »

  3. 3. La réponse

    « COMMANDES MULTI-CANAUX »

    « Ici, toutes tes commandes arrivent au même endroit »

  4. 4. La suite

    « ON VOUS MONTRE ? »

    « Une seule file, dans l'ordre d'arrivée »

Voir les trois formats de cet épisode

Le PDF se fabrique ici, pas ailleurs

Sur chaque page d'épisode, un bouton assemble les quatre planches en un PDF prêt à publier. La conversion se fait dans le navigateur, sans bibliothèque et sans appel réseau : un PDF qui n'affiche que des JPEG pleine page tient en cent lignes, et ne justifiait pas trois cents kilo-octets de dépendance sur une page qu'on ouvre surtout pour lire. Le code est dans src/lib/pdf.ts.