Annexes : Broc

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

ChampValeur
TitreDu jazz dans l'herbe
Identifiantjeudi-kiosque (nom de base des fichiers, plan 09 §1)
Objectifannoncer 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
Publicabonné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 sourcestories (une scène = une carte plein écran 9:16)
Formats dérivésmotion 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 beatshook-tension-payoff (livré en P16, plan 14 D2)
PersonnagesBroc (cast=broc) ; le Public (id=public) en silhouettes floues, carte 3 seulement
Décorsset-kiosque-tiges (cartes 1 et 3), set-bureau-broc (carte 2) : décors du §7 de la bible
Poseswaving, review, jumping (planche codex-pet-v1 existante) ; idle image 0 pour prefers-reduced-motion
Durée5 s + 6 s + 5 s = 16 s
Languesfr (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

CarteidBeatDécor (set=)PoseTexte à l'écranVoix off (réplique de Broc, :::notes)DuréeTransition vers la suivante
1c1-saluthookset-kiosque-tigeswavingtitre « Du jazz dans l'herbe » ; ligne « artiste, en plein air »« Salut ! Cette semaine, le jazz sort du sous-sol. Je t'ai gardé une place. » (75 car.)5 sstories : avance au tap ou à la fin ; motion : coupe franche
2c2-carnettensionset-bureau-brocreviewcarte 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 sstories : avance ; motion : coupe franche
3c3-vienspayoffset-kiosque-tigesjumpinggrand 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 sfin : la story se ferme, la vidéo tient la dernière image 0,5 s

Détail de chaque carte :

  1. 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 joue waving une 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.
  2. 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 joue review en boucle (6 images, 1 180 ms). La tension est douce : « est-ce que tout est confirmé ? ». La carte stat révèle les trois lignes l'une après l'autre (temps d'apparition du bloc). Jeu de mots : « bien planté ».
  3. 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 joue jumping une 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 seul jumping dans le récit, aucun failed (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
examples/scenario-lebrocoli/ cast/broc/character.md # bible de Broc (plan 14 D12, réécrite d'après la bible annexe) cast/sets.md # décors du §7 de la bible (entrées entry=set), §5.1 ci-dessous cast/prompts-jeudi-kiosque.md # prompts de ce scénario (entrées entry=prompt), §8 data/agenda.csv # agenda fictif, §5.2 stories/jeudi-kiosque.md # source du récit, §5.3 stories/jeudi-kiosque.json # jumeau JSON typé, §7 stories/jeudi-kiosque.en.md # traduction anglaise, même structure, §6.1 assets/plates/*.webp (+ .json) # images générées hors de Récit et leur provenance (kind: asset)

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.

MarkdownMarkdown
--- title: Décors de lebrocoli.fr kind: bible lang: fr bible: promptLang: en beats: hook-tension-payoff --- --- id=set-kiosque-tiges entry=set ## Le Kiosque des Tiges Un kiosque à musique rond dans un parc fictif, où l'on écoute assis dans l'herbe. {inferred} :::identity Round wooden and wrought-iron music bandstand in a quiet fictional park, small circular stage under a domed roof, strings of warm bulbs hanging from the roof edge, soft lawn around it, a few trees, no recognizable landmark, no signage, no text. ::: :::traits - time: dusk, then early night {inferred} - light: warm amber bulbs, indigo sky {inferred} - ambience: distant double bass, crickets, low chatter {inferred} - palette: sky=#2b2f5c, bulbs=#f2b85b, lawn=#3f5a3a - props: string lights, music stands, a double bass on its side, picnic blankets ::: ::shot[Medium, bandstand in the upper half, empty lawn in front]{id=medium} ::shot[Wide, bandstand far, blurred seated crowd in the foreground]{id=wide} --- id=set-bureau-broc entry=set ## Le Carnet de Broc Le coin de bureau où Broc prépare l'agenda des sorties. {inferred} :::identity Cozy corner of a wooden desk at night, a large open planner with blank pages, a few concert tickets with no readable text, a small warm desk lamp, a wooden metronome in the background, no text, no logo. ::: :::traits - time: night {inferred} - light: warm desk lamp, soft falloff {inferred} - palette: wood=#8a5a3b, lamp=#f6d08a, paper=#f2eee5 - props: open planner, tickets, desk lamp, metronome (Tempo, scenery only) ::: ::shot[Close, planner open in the lower half, lamp on the left]{id=close}

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
id,artiste,date,heure,lieu,tarif,acces evt-lorem-01,Trio Lorem Ipsum,2026-11-12,20:30,Kiosque des Tiges,Entrée libre,Accès de plain-pied

5.3 Le récit (stories/jeudi-kiosque.md)

MarkdownMarkdown
--- title: Du jazz dans l'herbe description: Trois cartes pour annoncer un concert de plein air, avec Broc format: stories lang: fr cast: - ../cast/broc/character.md - ../cast/sets.md - ../cast/prompts-jeudi-kiosque.md data: agenda: ../data/agenda.csv duration: 5s autoplay: true aspect: 9:16 --- --- id=c1-salut beat=hook cast=broc set=set-kiosque-tiges shot=medium pose=waving prompt=p-plate-kiosque-medium alt="Un kiosque à musique rond au crépuscule, guirlandes allumées, pelouse vide. Broc, un brocoli souriant, fait signe de la main." # Du jazz dans l'herbe :value{data=agenda field=artiste where="id=evt-lorem-01" agg=last}, en plein air :::notes Salut ! Cette semaine, le jazz sort du sous-sol. Je t'ai gardé une place. ::: --- id=c2-carnet beat=tension cast=broc set=set-bureau-broc shot=close pose=review prompt=p-plate-bureau-close duration=6s alt="Un agenda ouvert sur un bureau en bois, sous une lampe chaude. Broc, un brocoli souriant, relit les informations." :::textcard{variant=stat} - :value{data=agenda field=date where="id=evt-lorem-01" agg=last format=date} - :value{data=agenda field=heure where="id=evt-lorem-01" agg=last format=time} - :value{data=agenda field=lieu where="id=evt-lorem-01" agg=last} ::: :::notes Je vérifie mon carnet… Date, heure, lieu : tout est bien planté. ::: --- id=c3-viens beat=payoff cast=broc set=set-kiosque-tiges shot=wide pose=jumping prompt=p-plate-kiosque-wide alt="Le kiosque de nuit vu de loin, un public flou assis dans l'herbe. Broc, un brocoli souriant, saute de joie." # :value{data=agenda field=tarif where="id=evt-lorem-01" agg=last} Viens tôt. ::cta[Voir l'agenda]{href=https://lebrocoli.fr} :::notes C'est confirmé ! Viens à la fraîche, l'herbe se remplit vite. :::

Ce que fait chaque élément :

ÉlémentRôle iciSource
format: stories, duration, aspectformat source, durée par défaut d'une carte, cadre 9:16plan 08 §6
cast: (liste)bibles chargées : personnage, décors, prompts. Active le plugin des attributs communsplan 14 D4
data: agendasource nommée de @recit/data, validée au buildplan 08 §1
beat=temps narratif du gabarit hook-tension-payoff ; métadonnée sans effet de renduplan 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.mdplan 14 D4
prompt=image de fond de la carte : l'asset enregistré pour ce prompt, sinon une image de remplacementplan 14 D4, D7
alt=texte alternatif de la carte (fond et personnage), traduisibleplan 08 §6 (règle alt), §2
duration=6sla 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 durplan 08 §1, plan 12 (where)
:::textcard{variant=stat}carte de chiffres, lignes révélées l'une après l'autreplan 11 D4
::cta[…]{href}bouton d'action en bas de la carteplan 08 §6
:::notesvoix off de Broc : sous-titre en stories, voiceover en motionplan 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).

MarkdownMarkdown
--- title: Jazz on the grass description: Three cards to announce an open-air concert, with Broc format: stories lang: en cast: - ../cast/broc/character.md - ../cast/sets.md - ../cast/prompts-jeudi-kiosque.md data: agenda: ../data/agenda.csv duration: 5s autoplay: true aspect: 9:16 --- --- id=c1-salut beat=hook cast=broc set=set-kiosque-tiges shot=medium pose=waving prompt=p-plate-kiosque-medium alt="A round bandstand at dusk, string lights on, an empty lawn. Broc, a smiling broccoli, waves hello." # Jazz on the grass :value{data=agenda field=artiste where="id=evt-lorem-01" agg=last}, outdoors :::notes Hi! This week, jazz leaves the basement. I saved you a seat. ::: --- id=c2-carnet beat=tension cast=broc set=set-bureau-broc shot=close pose=review prompt=p-plate-bureau-close duration=6s alt="An open planner on a wooden desk under a warm lamp. Broc, a smiling broccoli, reads the details." :::textcard{variant=stat} - :value{data=agenda field=date where="id=evt-lorem-01" agg=last format=date} - :value{data=agenda field=heure where="id=evt-lorem-01" agg=last format=time} - :value{data=agenda field=lieu where="id=evt-lorem-01" agg=last} ::: :::notes Let me check my planner… Date, time, place: all firmly rooted. ::: --- id=c3-viens beat=payoff cast=broc set=set-kiosque-tiges shot=wide pose=jumping prompt=p-plate-kiosque-wide alt="The bandstand at night seen from afar, a blurred crowd sitting on the grass. Broc, a smiling broccoli, jumps for joy." # :value{data=agenda field=tarif where="id=evt-lorem-01" agg=last} Come early. ::cta[See the events]{href=https://lebrocoli.fr} :::notes It's on! Come while it's fresh, the lawn fills up fast. :::

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 PNG 1080×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 la textcard. 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) :

StoriesMotion
carteplan 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 + paragraphebloc title (H1 → text, paragraphe → kicker)
:::textcard{variant=stat}bloc textcard, lignes révélées en temps d'apparition
:::notesvoiceover 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 :

MarkdownMarkdown
--- id=c1-salut src=../assets/stills/c1-salut.webp alt="Un kiosque à musique rond au crépuscule, guirlandes allumées. Broc, un brocoli souriant, fait signe de la main." :::caption Du jazz dans l'herbe. ::: :::bubble{x=60% y=14% tail=bottom-left} Salut ! Cette semaine, le jazz sort du sous-sol. :::

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 page docs.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 slide layout=cover d'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).

JSONJSON
{ "$schema": "https://recit.dev/schema/v1/stories.json", "kind": "story", "version": 1, "format": "stories", "meta": { "title": { "fr": "Du jazz dans l'herbe", "en": "Jazz on the grass" }, "description": { "fr": "Trois cartes pour annoncer un concert de plein air, avec Broc", "en": "Three cards to announce an open-air concert, with Broc" }, "lang": "fr" }, "settings": { "duration": "5s", "autoplay": true, "aspect": "9:16" }, "cast": [ "../cast/broc/character.md", "../cast/sets.md", "../cast/prompts-jeudi-kiosque.md" ], "data": { "agenda": "../data/agenda.csv" }, "scenes": [ { "id": "c1-salut", "attrs": { "beat": "hook", "cast": "broc", "set": "set-kiosque-tiges", "shot": "medium", "pose": "waving", "prompt": "p-plate-kiosque-medium", "alt": { "fr": "Un kiosque à musique rond au crépuscule, guirlandes allumées, pelouse vide. Broc, un brocoli souriant, fait signe de la main.", "en": "A round bandstand at dusk, string lights on, an empty lawn. Broc, a smiling broccoli, waves hello." } }, "body": { "fr": "# Du jazz dans l'herbe\n\n:value{data=agenda field=artiste where=\"id=evt-lorem-01\" agg=last}, en plein air", "en": "# Jazz on the grass\n\n:value{data=agenda field=artiste where=\"id=evt-lorem-01\" agg=last}, outdoors" }, "notes": { "fr": "Salut ! Cette semaine, le jazz sort du sous-sol. Je t'ai gardé une place.", "en": "Hi! This week, jazz leaves the basement. I saved you a seat." } }, { "id": "c2-carnet", "duration": "6s", "attrs": { "beat": "tension", "cast": "broc", "set": "set-bureau-broc", "shot": "close", "pose": "review", "prompt": "p-plate-bureau-close", "alt": { "fr": "Un agenda ouvert sur un bureau en bois, sous une lampe chaude. Broc, un brocoli souriant, relit les informations.", "en": "An open planner on a wooden desk under a warm lamp. Broc, a smiling broccoli, reads the details." } }, "body": ":::textcard{variant=stat}\n- :value{data=agenda field=date where=\"id=evt-lorem-01\" agg=last format=date}\n- :value{data=agenda field=heure where=\"id=evt-lorem-01\" agg=last format=time}\n- :value{data=agenda field=lieu where=\"id=evt-lorem-01\" agg=last}\n:::", "notes": { "fr": "Je vérifie mon carnet… Date, heure, lieu : tout est bien planté.", "en": "Let me check my planner… Date, time, place: all firmly rooted." } }, { "id": "c3-viens", "attrs": { "beat": "payoff", "cast": "broc", "set": "set-kiosque-tiges", "shot": "wide", "pose": "jumping", "prompt": "p-plate-kiosque-wide", "alt": { "fr": "Le kiosque de nuit vu de loin, un public flou assis dans l'herbe. Broc, un brocoli souriant, saute de joie.", "en": "The bandstand at night seen from afar, a blurred crowd sitting on the grass. Broc, a smiling broccoli, jumps for joy." } }, "body": { "fr": "# :value{data=agenda field=tarif where=\"id=evt-lorem-01\" agg=last}\n\nViens tôt.", "en": "# :value{data=agenda field=tarif where=\"id=evt-lorem-01\" agg=last}\n\nCome early." }, "cta": { "label": { "fr": "Voir l'agenda", "en": "See the events" }, "href": "https://lebrocoli.fr" }, "notes": { "fr": "C'est confirmé ! Viens à la fraîche, l'herbe se remplit vite.", "en": "It's on! Come while it's fresh, the lawn fills up fast." } } ] }

Remarques sur la forme :

  • attrs est typé Record<string, string | number | boolean> dans le plan 09 §2.2 : un alt localisé (objet) n'y entre pas. Deux sorties possibles en P16 : un champ typé alt des scènes stories (comme toon), ou un compagnon jeudi-kiosque.en.json qui remplace attrs.alt par id. La première est recommandée (même règle que toon, plan 09 §2.3).
  • Le ::cta du Markdown devient le champ typé cta : l'équivalence compile(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)

MarkdownMarkdown
--- title: Prompts — Du jazz dans l'herbe kind: bible lang: fr bible: promptLang: en --- --- id=p-plate-kiosque-medium entry=prompt subject=set-kiosque-tiges set=set-kiosque-tiges shot=medium aspect=9:16 Empty bandstand at dusk, string lights just turned on, music stands on the stage, empty lawn in front, lower left third kept clear for a character overlay. --- id=p-plate-bureau-close entry=prompt subject=set-bureau-broc set=set-bureau-broc shot=close aspect=9:16 Open planner with blank pages under a warm desk lamp, concert tickets with no readable text, wooden metronome in soft focus behind, lower right third kept clear for a character overlay, upper half calm and dark enough for overlaid text. --- id=p-plate-kiosque-wide entry=prompt subject=set-kiosque-tiges set=set-kiosque-tiges shot=wide aspect=9:16 Bandstand at night seen from afar, three blurred musicians suggested on stage, a blurred seated crowd on the grass in the foreground seen from behind, lower centre kept clear for a character overlay. --- id=p-still-c1-salut entry=prompt subject=broc set=set-kiosque-tiges shot=medium pose=waving aspect=9:16 Broc stands on the lawn in front of the empty bandstand and waves hello to the viewer. --- id=p-still-c2-carnet entry=prompt subject=broc set=set-bureau-broc shot=close pose=review aspect=9:16 Broc leans over the open planner and reads it carefully, then looks satisfied. --- id=p-still-c3-viens entry=prompt subject=broc set=set-kiosque-tiges shot=wide pose=jumping aspect=9:16 Broc jumps for joy on the lawn, the blurred seated crowd and the bandstand behind him.

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
[p-plate-kiosque-medium] Soft 3D render in the style of a family animated film, soft diffuse lighting, no outlines. Setting: Round wooden and wrought-iron music bandstand in a quiet fictional park, small circular stage under a domed roof, strings of warm bulbs hanging from the roof edge, soft lawn around it, a few trees, no recognizable landmark, no signage, no text. Shot: Medium, bandstand in the upper half, empty lawn in front. Vertical 9:16. Action: Empty bandstand at dusk, string lights just turned on, music stands on the stage, empty lawn in front, lower left third kept clear for a character overlay. Light: warm amber bulbs, indigo sky. Avoid: characters, people in focus, vegetables, text, letters, numbers, logo, watermark, signature, real landmarks.
Code
[p-plate-bureau-close] Soft 3D render in the style of a family animated film, soft diffuse lighting, no outlines. Setting: Cozy corner of a wooden desk at night, a large open planner with blank pages, a few concert tickets with no readable text, a small warm desk lamp, a wooden metronome in the background, no text, no logo. Shot: Close, planner open in the lower half, lamp on the left. Vertical 9:16. Action: Open planner with blank pages under a warm desk lamp, concert tickets with no readable text, wooden metronome in soft focus behind, lower right third kept clear for a character overlay, upper half calm and dark enough for overlaid text. Avoid: characters, hands, handwriting, text, letters, numbers, logo, watermark, signature.
Code
[p-plate-kiosque-wide] Soft 3D render in the style of a family animated film, soft diffuse lighting, no outlines. Setting: Round wooden and wrought-iron music bandstand in a quiet fictional park, small circular stage under a domed roof, strings of warm bulbs hanging from the roof edge, soft lawn around it, a few trees, no recognizable landmark, no signage, no text. Shot: Wide, bandstand far, blurred seated crowd in the foreground. Vertical 9:16. Action: Bandstand at night seen from afar, three blurred musicians suggested on stage, a blurred seated crowd on the grass in the foreground seen from behind, lower centre kept clear for a character overlay. Avoid: identifiable faces, vegetables, text, letters, numbers, logo, watermark, signature, real landmarks.

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
[p-still-c1-salut] {identity} Pose: waving hello with one mitten hand raised, the other arm relaxed, warm smile, looking at the viewer. Setting: round bandstand in a quiet fictional park at dusk, warm string lights, empty lawn. Shot: medium, vertical 9:16, character in the lower left third. Warm evening lighting that keeps the character's greens unchanged. Character is the clear focal point, other figures simpler and less detailed. Negative: {avoid}
Code
[p-still-c2-carnet] {identity} Pose: leaning slightly forward over an open planner on a desk, reading attentively, eyebrows lightly raised, satisfied closed-mouth smile; the planner lies on the desk, not held. Setting: cozy wooden desk corner at night, warm desk lamp, tickets with no readable text, wooden metronome in the background. Shot: close, vertical 9:16, character in the lower right third. Warm evening lighting that keeps the character's greens unchanged. Negative: {avoid}
Code
[p-still-c3-viens] {identity} Pose: joyful jump, both feet off the ground, both arms up, big closed-mouth smile. Setting: lawn in front of a round bandstand at night, warm string lights, blurred seated crowd seen from behind, three blurred musicians suggested on stage. Shot: wide, vertical 9:16, character in the lower centre. Warm evening lighting that keeps the character's greens unchanged. Character is the clear focal point, other figures simpler and less detailed. Negative: {avoid}

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 alt qui 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 sans alt est 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 la textcard montre 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 de textcard (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: asset avec aiGenerated: 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 ; en motion, 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.png manquent (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

PointPropositionProprié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 formatsplan 12
valeur absente dans les donnéeserreur au build (champ inconnu) ; valeur vide : afficher « Info à venir », jamais une inventionplan 08
subject obligatoire dans entry=prompt (plan 14 D3) alors qu'une plaque n'a pas de personnageaccepter un décor comme subject, ou rendre subject facultatifplan 14 (P16)
alt localisé hors de attrs en JSONchamp typé alt des scènes stories, comme toonplan 09 (P16)
place de cast dans le JSONchamp de premier niveau castplan 14 (P16)
::cta en motionlibellé fixe en fin de plan, ou erreur expliciteplan 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 §10bible, plan 14
plan 14 D12 et plan 11 §2.4 décrivent encore smoking et casquette — corrigés le 25/10réécrits d'après la bible §2 et §11 ; plan 14 D13 enregistre la décisionfait