Annexe — Scénario 1 : « Broc t'emmène ce soir »
Premier scénario complet du gabarit lebrocoli.fr. C'est une story de présentation : elle présente
Broc et le site en sept cartes verticales. Ce document est un plan de travail : la source
Markdown et son jumeau JSON ci-dessous sont prêts à copier dans examples/scenario-lebrocoli/ quand
la phase P16 (plan 14, IA5) sera ouverte, après accord de l'utilisateur. Rien n'est créé hors de
sites/plans/pages/ pour l'instant.
Références : bible de Broc (sites/plans/pages/annexes/broc/bible.md, notée « bible » ci-dessous),
plan 02 §3 (syntaxe commune), plan 08 §6 (stories), plan 09 §2 (JSON typé), plan 11 D4, D6 et D9
(textcard, sprite), plan 14 D2 à D7 et D12 (bible, attributs de scène, prompts, kit).
Statut. Tout ce qui n'est pas visible sur l'image de référence (personnalité, voix, décors,
personnages secondaires) reste inferred (bible §3 à §8). L'utilisateur a délégué ces choix le
25/10. Ils sont proposés ici et attendent sa validation.
1. Fiche
| Champ | Valeur |
|---|---|
| Titre | Broc t'emmène ce soir (4 mots, règle de la bible §12) |
id du récit | broc-presentation (nom de base du fichier : broc-presentation.md) |
| Objectif | présenter Broc (qui il est, ce qu'il fait) et lebrocoli.fr (un agenda de sorties fiable), puis envoyer vers le site |
| Public | personnes qui découvrent lebrocoli.fr sur un réseau social, sur mobile : sorties, concerts, jazz. Débutants comme habitués (bible §3, « chaleureux et inclusif ») |
| Format principal | stories en 9:16, 7 cartes, environ 36 s |
| Formats dérivés | motion (vidéo verticale, pont stories ⇄ motion), toon (pont stories → toon), deck (version courte en 16:9), docs (fiche de personnage). book : annexe seulement (§8.5) |
| Langues | fr (langue par défaut), en en traduction (broc-presentation.en.md) ; prompts en anglais (promptLang: en) |
| Gabarit de beats | presentation : hook → context → tension → payoff → call (entrée entry=beats proposée au §6.3) |
| Statut des traits | inferred pour la voix, les répliques et les décors ; observed pour l'apparence (bible §2) |
Pourquoi stories d'abord. Le public de lebrocoli.fr arrive par Instagram (plan 14 §2.1) : une
carte plein écran 9:16 est sa forme native. Une carte porte une seule idée, comme le veut la règle
« une réplique, une idée » de la bible (§4). Le pont stories ⇄ motion (P11) donne la vidéo verticale
depuis la même source, et le pont stories → toon (plan 14 D6) donne un webtoon court. Il n'y a donc
qu'une seule source à écrire.
2. Pitch
Broc, un brocoli souriant au rendu 3D doux, salue le spectateur depuis une petite scène de jardin. Il se présente : c'est lui qui repère les bonnes sorties de la semaine et remplit l'agenda de lebrocoli.fr. Il montre combien de sorties il a vérifiées. Puis le seul défaut de Broc apparaît : sur un toit-terrasse, sa grande couronne cache la scène au rang de derrière. Oups. Il trouve aussitôt la solution : au kiosque du parc, tout le monde s'assoit dans l'herbe et tout le monde voit. Il part en courant vers le prochain concert et donne rendez-vous sur lebrocoli.fr.
L'arc tient en une phrase : l'ami qui connaît les bons plans (bible §3) montre qu'il est fiable, rit de lui-même et laisse la place à tout le monde.
3. Découpage scène par scène
Durée totale : 5 + 6 + 6 + 5 + 5 + 3 + 6 = 36 s. Chaque carte a un titre court (Unbounded) et
une réplique de Broc (Lexend, au plus 140 caractères, bible §10 règle 3). La voix off (:::notes)
est la voix de Broc. Elle sert de piste audio en motion et de sous-titres. En stories, elle
n'est pas affichée.
| # | id | Beat | Décor (set=) | Pose (ligne) | Durée | Texte à l'écran (titre) | Réplique de Broc (bulle) | Transition vers la suivante |
|---|---|---|---|---|---|---|---|---|
| 1 | s1 | hook | set-potager-scene | waving (3) | 5 s | Salut, moi c'est Broc | « Salut ! Moi, c'est Broc. Je repère les bonnes sorties pour toi. » | coupe franche, Broc reste au même endroit |
| 2 | s2 | context | set-bureau-broc | running (7) | 6 s | Ton agenda de sorties | « Concerts, jazz, soirées : chaque semaine, je remplis l'agenda de lebrocoli.fr. » | fondu court du décor |
| 3 | s3 | context | set-cave-bouquet | review (8) | 6 s | (chiffre : carte stat) | « Heure, lieu, prix : je vérifie tout avant de te le dire. » | coupe franche |
| 4 | s4 | tension | set-toit-rosee | failed (5) | 5 s | Petit souci… | « Oups. Ma couronne cache la scène au rang de derrière. Je ne peux pas enlever ma tête. » | coupe franche, la solution arrive aussitôt |
| 5 | s5 | payoff | set-kiosque-tiges | jumping (4) | 5 s | Une place pour tous | « Au kiosque, on s'assoit dans l'herbe et tout le monde voit. Moi, je suis bien planté ! » | Broc sort par la droite |
| 6 | s6 | call | set-rue-serre | running-right (1) | 3 s | On y va ? | « Le prochain concert commence bientôt. Suis-moi. » | Broc entre par la gauche de la carte 7 |
| 7 | s7 | call | set-potager-scene | waving (3) | 6 s | Rendez-vous sur lebrocoli.fr | « Toutes les dates sont sur lebrocoli.fr. Bonne soirée, et garde la tête verte ! » | fin ; bouton d'action |
Contrôle des règles de la bible :
- Broc ouvre (
hook,waving) et ferme (waving) : §10 règle 1. - 7 scènes, la limite haute de §10 règle 1.
failedetjumpingune seule fois chacun : §10 règle 7. failed(s4) est suivi dejumping(s5) : Broc rebondit tout de suite (§9, règle de cohérence).- Jeux de mots végétaux : « bien planté » (s5) et « garde la tête verte » (s7), un seul par scène, aucun répété (§4). Le titre de s7 n'en contient pas (§12).
- Un seul point d'exclamation par réplique au plus. Pas d'émoji (§4).
- Aucune date, heure, aucun lieu ni prix écrit en dur : le seul chiffre (s3) vient des données
(
:value), §10 règle 2. - Le comique de s4 porte sur Broc lui-même, pas sur le public (§3, « un peu maladroit »). Il ne pleure pas, sa déception reste légère (§6).
- Seul nom réel : « lebrocoli.fr » (§10 règle 5). Les lieux sont ceux du §7 de la bible, tous fictifs.
3.1 Détail par scène
s1 — Accueil (hook). Le Potager-Scène au crépuscule : guirlandes d'ampoules allumées, bancs en
bois vides, petite scène en bois au fond. Broc est au premier plan, au centre du tiers bas, et fait
un salut (waving, une fois, puis il tient la pose). Le titre apparaît en haut. Intention : un
visage ami dès la première seconde, pour arrêter le défilement.
s2 — Ce qu'il fait (context). Le Carnet de Broc : un coin de bureau, un grand agenda ouvert,
des billets sans texte lisible. Tempo, le métronome de bois, balance à côté de l'agenda (muet, moins
détaillé que Broc, bible §8). Broc est en running (concentration, travail en cours, et non une
course). Intention : lebrocoli.fr est un travail suivi, chaque semaine.
s3 — La preuve (context). La Cave du Bouquet : voûte de briques, lampes basses, piano droit.
Mila, la régisseuse, est floue au fond, près de la console (bible §8). La carte est une textcard
variant=stat : le nombre de sorties de l'agenda, compté depuis les données. Broc est en review
(il examine, puis il est satisfait). Intention : la fiabilité (bible §5, « Honnêteté »).
s4 — Le contretemps (tension). Le Toit de la Rosée, ciel indigo, toits fictifs. Une petite
scène au loin, des silhouettes floues de public (public). Broc, debout devant les chaises, joue
failed (un « oups » bref). Intention : rendre Broc attachant par sa maladresse (bible §3).
s5 — La solution (payoff). Le Kiosque des Tiges : kiosque rond dans un parc, public assis dans
l'herbe, vue dégagée. Broc saute de joie (jumping, une fois). Intention : la valeur d'inclusion
(bible §5) devient une solution concrète.
s6 — Le départ (call). La Rue de la Serre : rue piétonne de nuit, pavés, affiches sans texte
lisible. Broc court vers la droite (running-right, en boucle). Carte courte, de rythme.
s7 — Le rendez-vous (call). Retour au Potager-Scène, qui ferme la boucle avec s1. Broc salue
(waving). Le bouton d'action « Voir l'agenda » mène à https://lebrocoli.fr.
4. Source Markdown Récit complète
Fichier prévu : examples/scenario-lebrocoli/stories/broc-presentation.md. Comme toute source de
story, il est exclu d'oxfmt (CLAUDE.md, « Story sources ») : re-formater la prose casse les
directives :::notes … :::.
Choix de syntaxe, tous pris dans les plans :
- frontmatter à plat (plan 08) :
format,lang,duration,aspect,autoplay,data:(plan 08 §1) etcast:(plan 14 D4) ; - séparateurs
--- id=… beat=… cast=broc set=… pose=… prompt=…(plan 14 D4, D12) ;pose=etset=sont desidde la bible ;prompt=désigne l'image de fond de la carte (décor seul, §6.2) ; alt=sur le séparateur décrit le fond. Les stories exigent unalten mode strict (plan 08 §6). Le fond vient ici deprompt=et non debackground=: c'est un ajout à valider (§9.2) ;:::dialogue{cast=broc}suit la forme du plan 14 D4. L'exemple de la bible §10 écritwho=: la formecast=du plan 14 fait foi, et la bible est à aligner ;:::textcard{variant=stat}et:value(plan 11 D4, plan 08 §1) ;::cta[…]{href}(plan 08 §6) ;:::notes= voix off (plan 05, plan 02 §4).
Markdown
4.1 Données (agenda.csv, fictives)
Le chiffre de s3 se calcule à partir de ce fichier. Les noms sont en Lorem Ipsum et les lieux sont les décors fictifs de la bible (§10 règle 5). Aucune vraie date ni aucun vrai artiste.
Code
Avec ces données, s3 affiche « 3 sorties repérées cette semaine ». Le filtre « cette semaine »
n'existe pas dans :value (plan 08 §1 : agg seulement). Le CSV ne contient donc que la semaine
publiée. Un filtre par période est une question pour @recit/data, pas pour ce scénario.
5. Jumeau JSON typé
Brouillon jusqu'à P16. Le schéma
StoriesSource(plan 09 §2.1) et les champs du scénario (cast, attributs de scène,:::dialogue) ne seront figés qu'en IA1 et IA2 (plan 14 §6). Cette forme de travail suit plan 09 §2.2 et §2.3 et plan 11 D5. Les attributs du séparateur vont dansattrs. Les champs typés destories(duration,cta) sont sortis des attributs. Les blocs transverses restent des directives dansbody(règle B2). Point ouvert :castn'a pas encore de champ dansStorySource. Il est placé danssettings(réglages à plat du frontmatter) en attendant IA1.
Fichier prévu : examples/scenario-lebrocoli/stories/broc-presentation.json en kind: "story",
pour le test compile(md) == compile(toJson(md)) (plan 09 §2.4). En pratique,
recit convert --to json le produit à partir du .md : on n'en garde pas deux à la main.
JSON
Remarques sur le jumeau :
body,notes,altetcta.labelsont localisables (plan 09 §2.3). La version anglaise passe parbroc-presentation.en.mdou par un compagnonbroc-presentation.en.json(kind: "sidecar") qui ne contient que ces champs, paridde scène.beat,cast,set,pose,prompt,durationethrefne se traduisent jamais. Les images sont partagées entre les langues (plan 14 D5).altreste dansattrsfaute d'un champ typé. S'il est retenu (§9.2), il deviendra un champaltlocalisable de la scènestories, comme pourtoon.
6. Données d'images : décors, beats, prompts
6.1 Principe de composition
Aucune pose nouvelle n'est à générer. Les six poses utilisées (waving, running, review,
failed, jumping, running-right) sont des lignes de la planche codex-pet-v1 déjà prévue par
D12. Broc est rendu par-dessus le fond, par le bloc sprite en animation ou par SpriteImage
en image fixe (plan 11 D9). Il ne reste donc à générer que les six décors, vides de Broc. Ce
choix garantit que Broc a exactement la même apparence sur toutes les cartes, sans dérive d'un
modèle d'image à l'autre.
Chaque fond laisse le tiers bas central libre (Broc s'y place) et le tiers haut calme (titre et bulle). Lumière de soirée chaude, mais sans dominante verte, pour que le vert de Broc reste intact (bible §7).
Les deux visuels composés du §6.5 (couverture et cases de toon) sont les seuls à inclure Broc. Ils
passent toujours reference.png comme image de référence.
6.2 Entrées de décor (cast/decors.md, extrait)
Une bible à plusieurs entrées entry=set (plan 14 D2). Les textes sont en français (localisables),
le :::identity d'un décor est en anglais (langue des prompts). Tout est inferred.
Markdown
6.3 Gabarit de beats presentation
Les deux gabarits livrés en P16 (three-act, hook-tension-payoff) n'ont ni context ni call.
Ce gabarit reprend le squelette de la bible §10. C'est une donnée, à placer dans cast/decors.md ou
dans une bible cast/beats.md :
Markdown
6.4 Prompts des décors (entry=prompt)
Ce sont des prompts décrits en données (plan 14 D2, D7). Le texte final est dérivé par Récit
(gabarit generic), sans fournisseur imposé. Chacun se génère en 1080×1920 ou plus, au format
9:16.
Point de schéma à trancher en IA1. Dans D3, subject est obligatoire pour entry=prompt. Une «
plaque » de décor n'a pas de sujet. Proposition : rendre subject facultatif quand
output.background vaut scene, ce qui est noté ci-dessous par l'absence de subject=. L'autre
solution serait subject=set-…, mais elle mélange deux types d'entrées.
Markdown
Bloc de style commun, ajouté en tête de chaque prompt de décor (entrée entry=style, proposée sous
l'id soft-3d-evening) :
Code
Négatif commun des décors (avoid), dérivé de la bible §2.5 et §7 :
Code
« broccoli » est exclu des décors pour qu'aucun second brocoli n'apparaisse avant que Broc ne soit posé par-dessus. Pour la même raison, la mascotte plate du site est absente (bible §2.5).
6.5 Visuels composés avec Broc (couverture et toon)
Ces images incluent Broc. Elles suivent le gabarit de scène de la bible §11.3 et le négatif §11.4
(sans smoking, sans casquette, sans nœud papillon, sans accessoire), avec reference.png toujours
jointe.
Markdown
Texte complet dérivé pour p-cover-potager (donné pour la relecture ; Récit le produit à l'octet
près par recit prompts build) :
Code
6.6 Enregistrement et provenance
Pour chaque image générée hors de Récit :
recit assets register stories/img/<fichier> --prompt <id> écrit <fichier>.json (kind: "asset",
origin: "ai", tool et model tels que l'auteur les déclare, references :
["cast/broc/reference.png"] pour les visuels composés, aiGenerated: true). Tant qu'une image
manque, Récit affiche une image de remplacement (plan 14 D7) : le scénario se lit de bout en
bout sans aucune image générée, et un build --strict le refuse.
7. Rendu de Broc sur les cartes
| Carte | Pose | Lecture (D12) | En image fixe (export PNG, prefers-reduced-motion) |
|---|---|---|---|
| s1 | waving | une fois, tenue | dernière image de la ligne 3 (main levée) |
| s2 | running | boucle | image 0 de la ligne 7 |
| s3 | review | boucle | image 0 de la ligne 8 |
| s4 | failed | une fois, tenue | dernière image de la ligne 5 |
| s5 | jumping | une fois, tenue | image du sommet du saut (à choisir sur la planche) |
| s6 | running-right | boucle | image 0 de la ligne 1 |
| s7 | waving | une fois, tenue | dernière image de la ligne 3 |
Le plan 11 D9 prévoit l'image 0 d'idle par défaut pour l'image fixe. Pour waving, failed et
jumping, l'image 0 ne montre pas l'émotion. Ce scénario demande donc un attribut still= (indice
d'image) sur SpriteImage, à valider avec IM4. Sans lui, la carte fixe montre l'image 0.
8. Déclinaisons dans les autres formats
8.1 motion (vidéo verticale) : oui, sans réécriture
recit render stories/broc-presentation.md --as motion --aspect 9:16 (pont stories ⇄ motion, P11).
:::notesdevient la voix off (voiceover, plan 05) et les sous-titres. La voix de Broc est enregistrée par une personne, ou synthétisée hors de Récit avec sa provenance. Une voix de synthèse prend la mention IA, comme les images.- Le sprite est animé selon les durées de D12. s1 et s7 jouent
wavingune fois puis tiennent ; s6 bouclerunning-rightpendant 3 s. - s3 : la
textcardstatdevient le blocstatd'emaki, avec son compteur animé de 0 au résultat de:value(plan 11 D4). - Les titres deviennent des blocs
title. Les bulles:::dialoguedeviennent un blocstatementou un sous-titre (plan 14 D6). - Transitions : celles du tableau du §3, prises dans les transitions existantes du moteur motion. Aucune nouvelle transition n'est demandée. La sortie de s5 par la droite et l'entrée de s7 par la gauche se font par un déplacement du sprite, pas par un effet de montage.
8.2 toon (webtoon court) : oui, 4 cases
Pont stories → toon (plan 14 D6, plus tard) : une carte = une case. Pour un webtoon, on garde
seulement les quatre cartes qui racontent quelque chose (s1, s4, s5, s7). Les cases utilisent des
visuels composés (§6.5), car toon affiche une image par case et n'a pas de calque de sprite.
Markdown
prompt= remplace ici src= : l'asset enregistré pour ce prompt devient l'image de la case (plan
14 D4). En attendant, src= peut pointer vers le fichier généré.
8.3 deck (version courte, 16:9) : oui, pour une présentation en public
Utile pour présenter lebrocoli.fr en réunion ou à un partenaire. La même histoire tient en quatre
slides, et :::notes devient les notes de l'orateur. Broc y apparaît en image fixe (SpriteImage,
plus tard hors v1 dans le deck selon plan 11 D6) ou par le visuel composé p-cover-potager.
Markdown
Le frontmatter du deck doit aussi déclarer data: agenda: ../data/agenda.csv pour d3.
8.4 docs : la fiche de Broc
Ce n'est pas une déclinaison du récit, mais son complément naturel : la page « bible » de
examples/scenario-lebrocoli montre CharacterSheet (Broc), SetCard pour les six décors et
PromptCard pour les prompts du §6, et intègre la story par <StoryEmbed> (plan 14 D6).
8.5 book : non, sauf l'annexe
Une story de 36 s n'a pas la matière d'un chapitre. Le seul usage utile est l'annexe back: [cast]
(« Dramatis personae ») d'un futur livre de lebrocoli.fr, tirée de la bible et non de ce récit.
Aucune source book n'est donc proposée.
9. Points d'attention
9.1 Accessibilité
- Textes alternatifs : un
altpar fond (dans la source, §4), unaltpar case de toon (§8.2), unaltpour la couverture du deck. Le sprite de Broc reçoit unaltdérivé de la bible : « Broc, un brocoli souriant » suivi du texte de la::pose(par exemple « Broc, un brocoli souriant, salue de la main »). Un fond purement décoratif garde quand même sonalt: le mode strict des stories l'exige. - Le texte reste du texte : titres, bulles et chiffres sont rendus en HTML par le format, jamais dans l'image (bible §10 règle 8). Ils sont lisibles par un lecteur d'écran, traduisibles et indexés par la recherche.
- Lecture :
autoplay: trueavec pause au tap et au clavier (TapZones, plan 08 §6). Enprefers-reduced-motion, les sprites restent fixes (§7) et la lecture automatique se met en pause sur chaque carte. - Contraste : les fonds sont sombres en haut (consigne des prompts) pour un titre clair. Le lint
de contraste de
textcard(plan 11 D8, plus tard) vérifiera le seuil WCAG AA. D'ici là, on ajouteoverlay(plan 08 §6) sur une carte si la relecture le demande. - Sous-titres : en
motion, la voix off est toujours sous-titrée (texte de:::notes). - Durées : 5 à 6 s par carte, environ 80 caractères de réplique, soit une lecture confortable. s6 (3 s) n'a que 46 caractères.
9.2 Ajouts à la syntaxe que ce scénario suppose
À trancher en IA1 et IA2. Aucun n'est utilisé en silence : sans décision, recit validate doit
lever une erreur explicite.
alt=sur le séparateur d'une scènestoriesqui tire son fond deprompt=(le plan 08 ne prévoitaltque pourbackground=image).castdans le JSON : champ desettingsou champ de haut niveau deStorySource.subjectfacultatif pour une plaque de décor (entry=promptsans personnage).still=surSpriteImagepour choisir l'image d'une pose en image fixe.:::dialogue{cast=…}est marqué « plus tard » dans le plan 14 D6. Tant qu'il n'existe pas, une variante livrable en P16 remplace chaque bulle par:::textcard{variant=quote}suivi de la ligne— Broc(plan 11 D4). La bible §10 écrit{who=broc}: à aligner surcast=.
9.3 Mention IA et provenance
- Chaque fond et chaque visuel composé est
aiGenerated: trueavec son fichier de provenance (§6.6). La planche de Broc l'est aussi (D12). - La mention « généré par IA » apparaît dans les métadonnées publiées et dans l'attribution
visible (plan 14 §5.1). Pour les stories, réglage proposé :
scenario.aiLabel: inline, une petite mention en bas de chaque carte dont l'image est générée. Le modecredits(mention sur la seule dernière carte) ne suffit pas pour une story qu'on partage carte par carte. - Une voix de synthèse éventuelle en
motionsuit la même règle. - La conformité à l'article 50 de l'AI Act reste à faire relire (plan 14 §5.1).
9.4 Fidélité au personnage
- Ni smoking, ni nœud papillon, ni casquette, ni aucun accessoire, ni objet tenu, sur aucune image (bible §1 et §2.5). Le négatif du §6.5 les exclut explicitement.
- Broc n'est jamais un aliment : pas de blague de cuisine (bible §6). Le seul ressort comique est sa couronne (s4).
- La mascotte plate de lebrocoli.fr n'apparaît dans aucune image avec Broc (bible §2.5).
- La lumière des décors ne doit pas teinter le vert de Broc. Comme Broc est posé en sprite, ses
couleurs sont celles de la planche. Si la relecture le juge trop « collé », on ajoute une ombre de
contact sous ses pieds (
#e6e2ccadoucie, bible §2.3), et non une recoloration.
9.5 Risques et dépendances
- Netteté du sprite : une case de
192×208affichée sur une carte1080×1920sera floue au-delà d'environ deux fois sa taille (plan 11 D9). La taille réelle se mesurera sur les goldens. Si elle ne suffit pas, les cartes passent aux visuels composés (§6.5), avec un prompt par carte. - Bloqué par la licence :
reference.pnget la planche n'entrent dans l'exemple public qu'une fois leur auteur et leur licence donnés par l'utilisateur (bible §14). D'ici là : images de remplacement. - Polices : Unbounded (titres) et Lexend (texte), OFL, servies localement avec leur
OFL.txtet une ligne NOTICE (bible §12). Monument Extended n'entre jamais dans le dépôt. - Phase :
storiesarrive en P11, le scénario (cast:,pose=,prompt=) en P16. Avant P16, ce document se lit comme une spécification, pas comme un exemple compilable.
10. Checklist de mise en œuvre (P16, après accord)
- Copier la source (§4) dans
examples/scenario-lebrocoli/stories/broc-presentation.md, les données (§4.1) dansdata/agenda.csv, et les décors et les beats (§6.2, §6.3) danscast/decors.md. recit convert stories/broc-presentation.md --to jsonet comparer avec le §5.recit prompts build stories/broc-presentation.md: relire les six prompts de décor et les trois visuels composés.- Générer hors de Récit, puis
recit assets registerpour chaque image. recit validate --strict: aucune référence inconnue, aucunaltmanquant, aucune image sans provenance, aucun traitinferredrestant (à valider par l'utilisateur d'abord).- Traduire en
broc-presentation.en.md(mêmesid, mêmes images) et lancerrecit i18n check. recit export --to images(7 PNG1080×1920) etrecit render --as motion: relecture par l'utilisateur.