Annexe — Scénario 5 : « Du jazz dans l'herbe », trois cartes pour les réseaux
Scénario complet et documenté pour Broc (bible : annexes/broc/bible.md). Il illustre la règle
de Récit « écrire une fois, raconter partout » : une seule source Markdown, trois cartes
animées, rendues en stories (9:16, tap), en vidéo verticale motion (MP4) et en PNG pour les
réseaux, sans réécrire une ligne.
Statut. Proposition du 25/10/2026, faite sur délégation de l'utilisateur (« je te laisse tout
décider »). Tout ce qui touche la personnalité, la voix, les décors et les personnages secondaires
reste inferred (bible, en-tête). Le jumeau JSON, les attributs de scène communs et le bloc
sprite sont des formes de travail, en brouillon jusqu'à P16 (plan 14 D3, D4, D12 ; plan 11
D9). Rien ici n'est du code ; les prompts sont des données. Lieux, artiste et événement sont
fictifs.
1. Fiche
| Champ | Valeur |
|---|---|
| Titre | Du jazz dans l'herbe |
| Identifiant | jeudi-kiosque (nom de base des fichiers, plan 09 §1) |
| Objectif | annoncer un concert de plein air fictif en trois cartes, et montrer qu'une source unique donne la story, la vidéo et les images, avec les infos tirées des données |
| Public | abonnés de lebrocoli.fr sur les réseaux (stories, reels, shorts) : sortants de 20 à 40 ans, habitués comme débutants ; second public : auteurs qui découvrent Récit |
| Format source | stories (une scène = une carte plein écran 9:16) |
| Formats dérivés | motion par le pont stories ⇄ motion (P11) ; PNG 1080×1920 par recit export --to images (ST3) ; toon par le pont stories → toon (plus tard) ; docs par <StoryEmbed> |
| Gabarit de beats | hook-tension-payoff (livré en P16, plan 14 D2) |
| Personnages | Broc (cast=broc) ; le Public (id=public) en silhouettes floues, carte 3 seulement |
| Décors | set-kiosque-tiges (cartes 1 et 3), set-bureau-broc (carte 2) : décors du §7 de la bible |
| Poses | waving, review, jumping (planche codex-pet-v1 existante) ; idle image 0 pour prefers-reduced-motion |
| Durée | 5 s + 6 s + 5 s = 16 s |
| Langues | fr (source), en (traduction de même structure, §6.1) |
Pourquoi stories comme source, et pas motion ? La carte est l'unité naturelle d'une
publication réseau : on la lit au tap, on l'exporte en PNG un par un, et le pont stories ⇄ motion
existe déjà dans le plan 08 (§0, P11). Écrire en motion aurait donné la vidéo, mais pas les cartes
tapables ni les PNG sans conversion. Une source stories donne les trois sorties : c'est la
démonstration de la règle.
Pourquoi trois cartes ? C'est le minimum d'un récit de la bible (§10, règle 1 : 3 à 7 scènes) et le maximum qu'on regarde jusqu'au bout sur un réseau. Chaque carte doit aussi tenir seule, car elle sera publiée en PNG isolé (une annonce, une fiche pratique, un appel).
2. Pitch
Broc a repéré un trio de jazz qui joue en plein air, au Kiosque des Tiges. Il te salue depuis le kiosque (carte 1), vérifie dans son carnet la date, l'heure et le lieu (carte 2), puis saute de joie en annonçant le tarif et t'invite à venir tôt (carte 3). Toutes les infos pratiques viennent du fichier de données de l'agenda : si une valeur change, les trois sorties changent ensemble.
3. Découpage scène par scène
| Carte | id | Beat | Décor (set=) | Pose | Texte à l'écran | Voix off (réplique de Broc, :::notes) | Durée | Transition vers la suivante |
|---|---|---|---|---|---|---|---|---|
| 1 | c1-salut | hook | set-kiosque-tiges | waving | titre « Du jazz dans l'herbe » ; ligne « | « Salut ! Cette semaine, le jazz sort du sous-sol. Je t'ai gardé une place. » (75 car.) | 5 s | stories : avance au tap ou à la fin ; motion : coupe franche |
| 2 | c2-carnet | tension | set-bureau-broc | review | carte de chiffres (textcard variant=stat) : date, heure, lieu, tous en :value | « Je vérifie mon carnet… Date, heure, lieu : tout est bien planté. » (66 car.) | 6 s | stories : avance ; motion : coupe franche |
| 3 | c3-viens | payoff | set-kiosque-tiges | jumping | grand chiffre : tarif en :value ; ligne « Viens tôt » ; bouton « Voir l'agenda » | « C'est confirmé ! Viens à la fraîche, l'herbe se remplit vite. » (63 car.) | 5 s | fin : la story se ferme, la vidéo tient la dernière image 0,5 s |
Détail de chaque carte :
c1-salut(hook). Plan moyen sur le kiosque au crépuscule, guirlandes allumées, scène ronde vide. Broc entre déjà en place, en bas à gauche du cadre (zone sûre), et jouewavingune fois (4 images, 700 ms) puis tient l'image finale. Le titre apparaît en Unbounded 700 dans le tiers haut, la ligne d'artiste en Lexend dessous. Émotion : accueil chaleureux. Pas de jeu de mots.c2-carnet(tension). Gros plan sur le coin de bureau : agenda ouvert, billets sans texte lisible, Tempo le métronome en arrière-plan (accessoire de décor, muet). Broc en bas à droite jouereviewen boucle (6 images, 1 180 ms). La tension est douce : « est-ce que tout est confirmé ? ». La cartestatrévèle les trois lignes l'une après l'autre (temps d'apparition du bloc). Jeu de mots : « bien planté ».c3-viens(payoff). Plan large sur le kiosque, le Public en silhouettes floues assis dans l'herbe, le trio suggéré sur scène (instruments dans le décor, jamais tenus par Broc). Broc au centre bas jouejumpingune fois (5 images, 840 ms) puis tient. Le tarif s'affiche en grand, « Viens tôt » dessous, bouton en bas. Jeu de mots : « à la fraîche ». Un seuljumpingdans le récit, aucunfailed(bible §9, règle 7).
Contrôles de la bible : Broc ouvre (waving) et ferme (bible §10, règle 1) ; une réplique ≤ 140
caractères ; au plus un point d'exclamation par réplique ; un jeu de mots au plus par scène, aucun
répété ; aucune date, heure, aucun lieu ni prix dans la voix off (règle 2 : ils restent à l'écran,
tirés des données) ; aucun texte dans les images générées.
4. Fichiers proposés
Emplacement proposé dans le gabarit (plan 14 §4.3, examples/scenario-lebrocoli, après accord
de l'utilisateur). Ce document ne crée aucun de ces fichiers.
Code
5. Source Markdown Récit (complète, prête à copier)
Rappel : les sources de récit ne passent jamais par oxfmt (bible §10, règle 11 ; CLAUDE.md).
5.1 Les deux décors (cast/sets.md, extrait)
Les décors existent dans la bible (§7) sous forme de tableau ; ils deviennent ici des entrées typées (plan 14 D2). Les autres décors du §7 suivent le même modèle.
Markdown
Les couleurs de palette des décors sont des propositions (inferred au niveau du décor) : elles ne
touchent jamais les verts de Broc (bible §7, règles de décor).
5.2 Les données (data/agenda.csv)
Toutes les valeurs sont fictives. Une seule ligne sert ce récit.
Code
5.3 Le récit (stories/jeudi-kiosque.md)
Markdown
Ce que fait chaque élément :
| Élément | Rôle ici | Source |
|---|---|---|
format: stories, duration, aspect | format source, durée par défaut d'une carte, cadre 9:16 | plan 08 §6 |
cast: (liste) | bibles chargées : personnage, décors, prompts. Active le plugin des attributs communs | plan 14 D4 |
data: agenda | source nommée de @recit/data, validée au build | plan 08 §1 |
beat= | temps narratif du gabarit hook-tension-payoff ; métadonnée sans effet de rendu | plan 14 D4 |
cast=broc pose=… | Broc et sa ligne de planche ; rendu par le bloc sprite (animé) ou SpriteImage (fixe) | plan 14 D12, plan 11 D9 |
set=, shot= | décor et cadrage, vérifiés contre cast/sets.md | plan 14 D4 |
prompt= | image de fond de la carte : l'asset enregistré pour ce prompt, sinon une image de remplacement | plan 14 D4, D7 |
alt= | texte alternatif de la carte (fond et personnage), traduisible | plan 08 §6 (règle alt), §2 |
duration=6s | la carte 2 dure plus longtemps (trois lignes à lire) | plan 08 §6 |
:value{… where … agg=last} | une valeur de la ligne evt-lorem-01, jamais écrite en dur | plan 08 §1, plan 12 (where) |
:::textcard{variant=stat} | carte de chiffres, lignes révélées l'une après l'autre | plan 11 D4 |
::cta[…]{href} | bouton d'action en bas de la carte | plan 08 §6 |
:::notes | voix off de Broc : sous-titre en stories, voiceover en motion | plan 02 §4, plan 05 V5 |
6. Déclinaison dans les formats
6.1 Autre langue (stories/jeudi-kiosque.en.md)
Même structure, mêmes id de scène et mêmes attributs structurels (recit i18n check). Seuls le
texte, alt et la voix off changent ; images, prompts et sprite sont partagés (plan 09 §1, plan 14
D5). Le jeu de mots est adapté, pas traduit mot à mot (bible §4 : répliques dans la langue du
récit).
Markdown
Les valeurs texte de agenda.csv (« Entrée libre », lieu) sont en français : la version anglaise
demande soit une colonne localisée (tarif_en), soit un compagnon agenda.en.csv. Point ouvert,
§10.
6.2 stories (format source)
- Lecteur
StoryPlayer: trois barres de progression, tap à droite pour avancer, à gauche pour revenir, appui long pour mettre en pause. Lecture auto (autoplay: true). - Chaque carte superpose trois couches : le fond (
prompt=, image du décor sans personnage), le sprite de Broc (cast=broc pose=…) dans la zone sûre, puis le texte (titre en Unbounded, corps en Lexend, bible §12). La voix off s'affiche en sous-titre si le son est coupé (MuteToggle). recit export --to images stories/jeudi-kiosque.md: trois PNG1080×1920, un par carte, avec le sprite en image fixe (SpriteImage, dernière image tenue de la pose) et le dernier état révélé de latextcard. Ce sont les trois publications réseau autonomes.
6.3 motion (vidéo verticale, pont stories ⇄ motion)
recit render stories/jeudi-kiosque.md --as motion donne un MP4 vertical de 16 s. Correspondance
(plan 08 §0, pont P11 ; plan 11 D6) :
| Stories | Motion |
|---|---|
| carte | plan 9:16, longueur = duration de la carte (5 s, 6 s, 5 s) |
prompt= (fond) | image de fond du plan, légère poussée de caméra si le thème le prévoit |
cast=broc pose=… | bloc sprite : waving et jumping une fois puis tenus, review en boucle (plan 14 D12) |
# titre + paragraphe | bloc title (H1 → text, paragraphe → kicker) |
:::textcard{variant=stat} | bloc textcard, lignes révélées en temps d'apparition |
:::notes | voiceover du plan (sous-titres brûlés ou piste, selon le rendu) |
::cta | à trancher en ST2 : libellé fixe « lebrocoli.fr » en fin de plan, ou erreur explicite (pas de clic dans une vidéo) |
Transitions : aucun attribut transition= n'existe dans le registre (plan 02 §3, règle B4). Le
scénario demande des coupes franches entre les plans, ce qui est le défaut ; si un fondu devient
nécessaire, il passe par le thème motion, pas par un nouvel attribut de scène.
6.4 toon (plus tard, pont stories → toon)
Pont prévu par le plan 14 D6 : une carte = une case, image → src, titre → :::caption,
:::dialogue → bulle empilée. Pour ce récit, les cases utilisent les images fixes avec Broc
(prompts p-still-*, §8.3), car un webtoon n'anime pas le sprite. Sortie attendue du pont :
Markdown
Le pont lit :::dialogue, pas :::notes : tant que :::dialogue n'est pas livré (plan 14 D6, «
plus tard »), la conversion de ce récit en toon reste manuelle.
6.5 docs, deck, book
docs(a du sens) : la pagedocs.recit.dev/scenario/…qui explique « écrire une fois, raconter partout » intègre la story par<StoryEmbed>, avec la source dépliable à côté et la vidéo issue du même fichier. C'est l'usage pédagogique principal de ce scénario.deck(peu de sens) : il n'existe pas de pont stories → deck et trois cartes réseau ne font pas une présentation. Usage acceptable : une slidelayout=coverd'un deck sur Récit qui intègre la story en composant MDX, sans conversion.book(pas de sens) : rien à raconter en chapitre. Broc peut figurer dans l'annexe « Dramatis personae » d'un livre via le pont bible → book, indépendamment de ce récit.
7. Jumeau JSON typé (stories/jeudi-kiosque.json)
Forme de travail, brouillon jusqu'à P16. Elle suit StorySource (plan 09 §2.2), les champs
typés de stories (plan 09 §2.3 : duration, cta) et les attributs communs du plan 14 D4 rangés
dans attrs. Les directives de bloc (:::textcard, :value) restent dans body (règle B2). Les
deux langues sont regroupées dans un seul fichier par valeurs Localized, ce qui remplace
jeudi-kiosque.en.md si l'on choisit le JSON comme source.
Points non fixés par les plans, à trancher en P16 : l'emplacement de cast (champ de premier niveau
ici, ni settings ni meta) et le notes des stories (affiché en sous-titre ; en motion il
devient voiceover).
JSON
Remarques sur la forme :
attrsest typéRecord<string, string | number | boolean>dans le plan 09 §2.2 : unaltlocalisé (objet) n'y entre pas. Deux sorties possibles en P16 : un champ typéaltdes scènesstories(commetoon), ou un compagnonjeudi-kiosque.en.jsonqui remplaceattrs.altparid. La première est recommandée (même règle quetoon, plan 09 §2.3).- Le
::ctadu Markdown devient le champ typécta: l'équivalencecompile(md) == compile(toJson(md))doit le prévoir (plan 09 §2.4).
8. Prompts d'images (données, sans fournisseur imposé)
Aucune nouvelle pose : les trois poses viennent de la planche codex-pet-v1 déjà décrite (bible §9,
§11.5). Les images nouvelles sont les plaques de décor (fond des cartes, sans personnage) et,
pour le toon, trois images fixes avec Broc. Toutes se génèrent hors de Récit, avec
reference.png joint pour celles qui montrent Broc. Prompts en anglais (promptLang: en).
8.1 Entrées entry=prompt (cast/prompts-jeudi-kiosque.md)
Markdown
subject= vise ici un décor pour les plaques : le plan 14 D3 rend subject obligatoire et pense à
un personnage. Une plaque sans personnage demande soit subject facultatif, soit qu'un décor soit
un sujet valide. Point ouvert, §10.
8.2 Texte dérivé des plaques (gabarit generic)
Le texte suit le gabarit déterministe du plan 14 D7 : identité du style, décor, cadrage, action,
avoid. Pas d'identité de Broc dans les plaques (il est ajouté par le sprite).
Code
Code
Code
La plaque doit laisser libre la zone où le sprite se pose (« kept clear ») : c'est ce qui permet d'animer Broc par-dessus sans retoucher l'image.
8.3 Texte dérivé des images fixes avec Broc (toon, gabarit de la bible §11.3)
{identity} est recopié mot pour mot depuis la bible §11.1 ; {avoid} est la liste du §11.4.
Référence jointe : cast/broc/reference.png (obligatoire).
Code
Code
Code
Après génération : recit assets register <image> --prompt <id> écrit la provenance (kind: asset,
origin: ai, aiGenerated: true, references: ["cast/broc/reference.png"] pour les images avec
Broc, plan 14 D7). Relecture humaine obligatoire : aucun vêtement, aucun accessoire, aucun texte,
verts inchangés (bible §2.5).
9. Points d'attention
9.1 Accessibilité
- Textes alternatifs. Chaque carte porte un
altqui décrit le fond et Broc (fournis en fr et en en, §5.3, §6.1). Ils ne répètent pas le texte à l'écran, qui est déjà du texte HTML. En--strict, une carte sansaltest une erreur (plan 08 §6). - Texte réel, jamais dans l'image. Titres, chiffres et bouton sont du texte rendu par le format (lisible par les lecteurs d'écran, traduisible) ; les images ne contiennent aucune lettre.
- Mouvement réduit. Avec
prefers-reduced-motion, le sprite affiche une image fixe (image 0 d'idle, plan 11 D9) et latextcardmontre ses trois lignes d'un coup ; la lecture auto s'arrête, l'avance se fait au tap ou au clavier. - Temps de lecture. 5 s pour un titre et une ligne, 6 s pour trois lignes : à vérifier avec la
règle de densité de
@recit/core; l'utilisateur peut mettre en pause (appui long, espace). - Contraste. Texte clair sur la partie haute sombre des plaques ;
overlay(dégradé) si une plaque est trop claire. Le lint de contraste detextcard(WCAG AA) est prévu plus tard (plan 11). - Vidéo. La voix off (
:::notes) donne les sous-titres du MP4 ; la vidéo ne dépend jamais du son pour transmettre une info pratique, puisque date, heure, lieu et tarif sont à l'écran.
9.2 Mention IA et provenance
- Les plaques, les images fixes et la planche de sprite sont générées par IA : chacune a son fichier
de provenance
kind: assetavecaiGenerated: true(plan 14 D7, D12). - Mention visible « Généré par IA » dans tous les formats publics (plan 14 §5.1, décision du 24/10)
: en
stories, petite mention en bas de chaque carte (scenario.aiLabel: inline) car chaque carte part seule en PNG ; enmotion, la même mention en surimpression discrète sur toute la durée et dans les métadonnées du MP4. La mention apparaît aussi dans la légende de publication sur les réseaux. - Les manifestes C2PA éventuels des images d'entrée ne sont pas retirés.
- Publication bloquée tant que l'auteur et la licence de
reference.pngmanquent (bible §1, §14) : sans eux, ni la planche ni les images avec Broc ne sortent d'un build local.
9.3 Fidélité à la bible
- Broc n'a ni smoking, ni nœud papillon, ni casquette, ni aucun vêtement ou accessoire, dans aucune image (bible §2.5). Les instruments restent dans le décor, jamais dans ses mains.
- La mascotte plate de lebrocoli.fr n'apparaît pas dans ces cartes (bible §1).
- Pas d'alcool comme argument de sortie, pas de blague sur le fait d'être mangé (bible §6).
- Le seul nom réel est « lebrocoli.fr » (lien du bouton) ; artiste et lieu sont fictifs.
10. Points ouverts
| Point | Proposition | Propriétaire |
|---|---|---|
:value est défini pour des nombres (plan 08 §1) ; ici il lit du texte, une date et une heure (format=date, time) | étendre :value aux champs texte avec agg=last, et ajouter format=date / time (via Intl) | plan 08, @recit/data |
where= n'est proposé que par le plan 12 (DI5) | le réutiliser tel quel pour :value dans tous les formats | plan 12 |
| valeur absente dans les données | erreur au build (champ inconnu) ; valeur vide : afficher « Info à venir », jamais une invention | plan 08 |
subject obligatoire dans entry=prompt (plan 14 D3) alors qu'une plaque n'a pas de personnage | accepter un décor comme subject, ou rendre subject facultatif | plan 14 (P16) |
alt localisé hors de attrs en JSON | champ typé alt des scènes stories, comme toon | plan 09 (P16) |
place de cast dans le JSON | champ de premier niveau cast | plan 14 (P16) |
::cta en motion | libellé fixe en fin de plan, ou erreur explicite | plan 08 (ST2) |
données texte en anglais (Entrée libre) | compagnon agenda.en.csv résolu comme un asset localisé (plan 09 §1) | plan 09 |
syntaxe de réplique : la bible écrit :::dialogue{who=broc}, le plan 14 D4 :::dialogue{cast=broc} | garder cast= (plan 14) et corriger le squelette de la bible §10 | bible, plan 14 |
| réécrits d'après la bible §2 et §11 ; plan 14 D13 enregistre la décision | fait |