Annexes : Broc

Annexe — Scénario 4 : « Premières notes », Broc présente un atelier (deck)

Scénario complet d'un deck de 9 slides où Broc présente un atelier fictif organisé par lebrocoli.fr. Il applique strictement la bible (annexes/broc/bible.md) : Broc n'a ni smoking, ni casquette, ni aucun vêtement ou accessoire, les lieux et les personnes sont fictifs, et les infos pratiques viennent des données. Ce document est une source de travail : rien n'est encore dans examples/. Le schéma de la bible et les attributs de scène (cast=, pose=…) arrivent en P16 (plan 14, IA2) ; d'ici là, tout ce qui en dépend est marqué brouillon jusqu'à P16.

Statut. Le scénario, le texte et l'atelier sont des propositions inferred (l'utilisateur a délégué ces choix le 25/10). Seul « lebrocoli.fr » est un nom réel ; « Premières notes », le Trio Lorem, Mila, Tempo et les décors sont fictifs (bible §5 à §8).

1. Fiche

ChampValeur
TitrePremières notes (≤ 5 mots, bible §12)
Événementatelier d'écoute jazz pour débutants, organisé par lebrocoli.fr, suivi d'un mini-concert du Trio Lorem. Au Kiosque des Tiges, repli à la Cave du Bouquet en cas de pluie
Objectifdonner envie de venir à quelqu'un qui n'ose pas « le jazz », lui donner toutes les infos pratiques, obtenir une inscription
Publicadultes curieux de musique live, débutants ; présenté en salle (projection) ou partagé en ligne ; lecteurs de lebrocoli.fr
Format principaldeck (16:9) : c'est le seul format livré aujourd'hui (P1), il a des notes de présentation (:::notes = voix de Broc), un jumeau JSON déjà typé (DeckSourceSchema) et un export PDF. Il sert aussi d'annonce projetée avant un concert
Formats dérivésstories (6 cartes 9:16 pour les réseaux), motion (film court avec la voix off), toon (4 cases, la séquence de la pluie). calendar porte l'événement lui-même. book : pas de déclinaison utile (§8)
Beatshook → context → tension → payoff → call (gabarit hook-tension-payoff étendu de la bible §10)
Poses8 des 9 lignes de codex-pet-v1 : waving, waiting, running, idle, review, failed, jumping, running-right. running-left n'est pas utilisée
Duréeenviron 6 minutes en présentation orale ; environ 75 s en film (§8.2)

2. Pitch

Le jazz intimide : on ne sait pas quoi écouter ni quand applaudir. Broc, le guide de sortie de lebrocoli.fr, propose une réponse simple : un samedi après-midi au Kiosque des Tiges, on écoute trois morceaux courts, on apprend à reconnaître la contrebasse, la batterie et le piano, puis le Trio Lorem joue pour de vrai. Un seul suspense : la pluie. Broc a un plan B, la Cave du Bouquet, et l'atelier est maintenu quoi qu'il arrive. Il finit par donner les infos pratiques (y compris celle qu'il n'a pas encore) et donne rendez-vous.

3. Découpage scène par scène

Une slide = une scène. Les répliques de Broc sont dans :::notes (voix off en motion, sous-titre en stories). Durées en présentation orale ; transition fade par défaut (réglage du deck), slide seulement pour l'élan de la slide 8. Les jeux de mots végétaux (au plus un par scène, jamais deux fois le même, bible §4) sont soulignés dans la colonne « Réplique ».

#idBeatTexte à l'écranRéplique de Broc (:::notes)PoseDécor (set=)LayoutDuréeTransition
1ouverturehook« Premières notes » / « Un atelier d'écoute jazz, ouvert à tous »Salut ! Samedi, on apprend à écouter le jazz ensemble. Je t'ai gardé une place.wavingset-kiosque-tigesimage (plein cadre)30 sfade
2questionhook« Le jazz t'intimide ? » + une phraseToi aussi, tu as déjà applaudi au mauvais moment ? Moi oui. Personne ne m'en a voulu.waitingset-toit-roseeimage-right45 sfade
3programmecontext« Le programme » + 3 puces (écouter, reconnaître, vivre)Je prépare le programme depuis des semaines, ça pousse bien. Tempo garde le rythme.runningset-bureau-brocimage-left60 sfade
4equipecontext« Avec qui ? » + 3 puces (Broc, Mila, Trio Lorem)Mila s'occupe du son, le Trio Lorem joue. Moi, je t'explique tout, sans jargon.idleset-cave-bouquetimage-right45 sfade
5placescontextchiffre : nombre de places (donnée), « places, inscription gratuite », sourceLes places sont comptées. Inscris-toi tôt, c'est gratuit.reviewset-bureau-broccenter + type=stat30 sfade
6pluietension« Et s'il pleut ? » + une phraseOups. Ma couronne adore la pluie, les contrebasses beaucoup moins.failedset-kiosque-tigesimage-left30 sfade
7plan-bpayoff« Plan B : à l'abri » + lieu de repli (donnée) + « même heure, même programme »On passe à l'abri et l'atelier est maintenu ! On reste bien planté sur la date.jumpingset-cave-bouquetimage-right30 sfade
8infoscall« Infos pratiques » + 5 puces, toutes en données (quand, où, prix, accès, retour)Tout est là. Pour le dernier métro, je n'ai pas encore l'info : je te la donne dès que je l'ai.running-rightset-rue-serreimage-left60 sslide
9rendez-vouscall« On s'y retrouve ? » / « Inscription gratuite sur lebrocoli.fr » + mention IAÀ samedi. Et garde la tête verte !wavingset-kiosque-tigesimage (plein cadre)30 sfade

Contrôles de la bible appliqués :

  • Broc ouvre et ferme en waving (§10.1) ; failed (slide 6) est suivi de jumping (slide 7) : Broc rebondit (§9) ; jumping et failed une seule fois chacun (§10.7).
  • Chaque réplique fait moins de 140 caractères (la plus longue, slide 8, en fait 95) et contient au plus un point d'exclamation (§4). Aucun émoji.
  • Aucune date, heure, adresse ni prix dans le texte libre : tout passe par :value (§10.2). La donnée manquante (dernier métro) est dite comme manquante, pas inventée (§5, « Honnêteté »).
  • Le lieu de repli n'est jamais nommé par Broc : il dit « à l'abri », le nom vient de la donnée lieuRepli.
  • Pas d'alcool comme argument, aucun artiste réel, aucune blague sur le fait d'être mangé (§6).
  • Écart assumé avec §10.1 (« 3 à 7 scènes ») : la règle vise les récits narratifs (stories, toon, motion). Un deck d'annonce a besoin de 9 slides ; ses déclinaisons narratives restent dans la règle (6 cartes en stories, 4 cases en toon). À trancher dans la bible si l'on veut une règle propre au deck.
  • Slide 5 sans Broc à l'image en deck : layout=center type=stat n'a pas d'image (c'est ce qui permet le pont deck → motion, plan 02 §4). La pose review sert en motion et en stories, où Broc est un sprite. Un sprite dans une slide (SpriteImage en deck) est « plus tard » (plan 11 D6).

4. Arborescence proposée

Dans le dossier unique examples/scenario-lebrocoli (plan 14 §4.3), après accord de l'utilisateur et licence de reference.png :

Code
examples/scenario-lebrocoli/ recit.config.ts # thème lebrocoli (§5.3), partagé par les récits cast/broc/… # kit de Broc (plan 14 D12) cast/univers.md # bible : décors, Mila, Tempo, prompts (§7), kind: bible recits/premieres-notes/ deck.md # source Markdown (§5.1) deck.json # jumeau JSON typé (§6) stories.md motion.md toon.md # déclinaisons (§8) data/atelier.json # données pratiques (§5.2) img/*.webp # images de scènes, générées hors de Récit img/*.webp.json # provenance kind: asset (§7.5)

Les déclinaisons sont dans des fichiers séparés et non en deck.stories.md : un suffixe après le nom est lu comme une langue (deck.fr.md, plan 09 §1).

5. Source Markdown Récit complète

5.1 recits/premieres-notes/deck.md

À copier tel quel. Ne jamais passer oxfmt sur ce fichier (directives :::notes, règle du dépôt). Les attributs beat=, cast=, set=, shot=, pose= et prompt= sont réservés par le cœur (plan 02 §3) mais ne sont vérifiés qu'en P16 par le plugin de @recit/scenario ; avant P16, le deck se compile et ils restent des attributs libres (attrs). image= porte le fichier de l'image, prompt= dit de quel prompt elle vient (plan 14 D4) ; recit validate vérifiera en P16 que les deux correspondent à la provenance enregistrée.

MarkdownMarkdown
--- title: Premières notes description: "Broc présente l'atelier d'écoute jazz de lebrocoli.fr." author: lebrocoli.fr format: deck lang: fr aspectRatio: 16:9 transition: fade cast: - ../../cast/broc/character.md - ../../cast/univers.md data: atelier: ./data/atelier.json --- --- id=ouverture layout=image image=./img/ouverture.webp alt="Broc, un brocoli souriant au rendu 3D doux, salue de la main devant un kiosque à musique dans un parc, en fin d'après-midi." overlay=0.35 beat=hook cast=broc set=set-kiosque-tiges shot=wide pose=waving prompt=p-pn-ouverture # Premières notes ### Un atelier d'écoute jazz, ouvert à tous :::notes Salut ! Samedi, on apprend à écouter le jazz ensemble. Je t'ai gardé une place. ::: --- id=question layout=image-right image=./img/question.webp alt="Broc attend, curieux, sur un toit-terrasse au crépuscule, sous un ciel indigo." beat=hook cast=broc set=set-toit-rosee shot=medium pose=waiting prompt=p-pn-question # Le jazz t'intimide ? Tu ne sais pas quoi écouter, ni quand applaudir. Cet atelier est fait pour toi. :::notes Toi aussi, tu as déjà applaudi au mauvais moment ? Moi oui. Personne ne m'en a voulu. ::: --- id=programme layout=image-left image=./img/programme.webp alt="Broc, concentré, prépare un grand agenda ouvert sur un bureau ; un petit métronome en bois balance à côté de lui." beat=context cast=broc set=set-bureau-broc shot=medium pose=running prompt=p-pn-programme # Le programme - **Écouter** : trois morceaux courts, expliqués - **Reconnaître** : la contrebasse, la batterie, le piano - **Vivre** : un mini-concert du :value{data=atelier field=artistes} :::notes Je prépare le programme depuis des semaines, ça pousse bien. Tempo garde le rythme. ::: --- id=equipe layout=image-right image=./img/equipe.webp alt="Dans une cave voûtée en briques, Broc se tient calmement à côté d'une régisseuse en tenue gris anthracite, un piano droit au fond." beat=context cast=broc set=set-cave-bouquet shot=medium pose=idle prompt=p-pn-equipe # Avec qui ? - **Broc**, ton guide de sortie - **Mila**, régisseuse de la Cave du Bouquet - **:value{data=atelier field=artistes}**, contrebasse, batterie et piano :::notes Mila s'occupe du son, le Trio Lorem joue. Moi, je t'explique tout, sans jargon. ::: --- id=places layout=center type=stat beat=context cast=broc set=set-bureau-broc pose=review # :value{data=atelier field=places agg=last} places, inscription gratuite _Source : données de l'atelier, lebrocoli.fr_ :::notes Les places sont comptées. Inscris-toi tôt, c'est gratuit. ::: --- id=pluie layout=image-left image=./img/pluie.webp alt="Une pluie fine tombe sur le kiosque vide ; Broc lève les yeux, légèrement déçu." beat=tension cast=broc set=set-kiosque-tiges shot=medium pose=failed prompt=p-pn-pluie # Et s'il pleut ? Le kiosque est en plein air, et la météo peut changer d'avis. :::notes Oups. Ma couronne adore la pluie, les contrebasses beaucoup moins. ::: --- id=plan-b layout=image-right image=./img/plan-b.webp alt="Broc saute de joie dans une cave de jazz chaleureuse, lampes basses et piano droit derrière lui." beat=payoff cast=broc set=set-cave-bouquet shot=wide pose=jumping prompt=p-pn-plan-b # Plan B : à l'abri En cas de pluie, l'atelier descend à :value{data=atelier field=lieuRepli}. Même heure, même programme. :::notes On passe à l'abri et l'atelier est maintenu ! On reste bien planté sur la date. ::: --- id=infos layout=image-left image=./img/infos.webp alt="Broc court vers la droite dans une rue piétonne pavée, le soir, entre des affiches de concerts sans texte." transition=slide beat=call cast=broc set=set-rue-serre shot=wide pose=running-right prompt=p-pn-infos # Infos pratiques - **Quand** : :value{data=atelier field=date format=date}, :value{data=atelier field=debut format=time} - **Où** : :value{data=atelier field=lieu} - **Prix** : :value{data=atelier field=prix} - **Accès** : :value{data=atelier field=acces} - **Retour** : :value{data=atelier field=dernierMetro} :::notes Tout est là. Pour le dernier métro, je n'ai pas encore l'info : je te la donne dès que je l'ai. ::: --- id=rendez-vous layout=image image=./img/rendez-vous.webp alt="Broc salue de la main devant le kiosque à musique, public assis dans l'herbe en silhouettes floues, lumière dorée." overlay=0.35 beat=call cast=broc set=set-kiosque-tiges shot=wide pose=waving prompt=p-pn-rendez-vous # On s'y retrouve ? ### Inscription gratuite sur [lebrocoli.fr](https://lebrocoli.fr) _Illustrations générées par IA d'après l'image de référence de Broc._ :::notes À samedi. Et garde la tête verte ! :::

Points à vérifier au moment de l'implémentation (et non des inventions de syntaxe à figer ici) :

  • :value est défini pour des nombres (08 §1). Les champs texte (lieu, prix, artistes), format=date et format=time, et le rendu d'une valeur null (dernierMetro) par un libellé « pas encore l'info » sont à demander à @recit/data (P6). Sans cet ajout, ces cinq valeurs passent par des chaînes du compagnon (strings, :t[key], plan 09 §2.2), jamais en dur.
  • :value dans :::notes : aucune réplique ci-dessus n'en a besoin, exprès. Broc ne lit pas de chiffre à voix haute ; les chiffres restent à l'écran.
  • cast: en liste, beat=… : plan 14 D4, P16.

5.2 recits/premieres-notes/data/atelier.json

Valeurs fictives de l'exemple. Ce sont les seules sources des infos pratiques.

JSONJSON
{ "id": "premieres-notes", "titre": "Premières notes", "date": "2026-11-14", "debut": "15:00", "duree": "PT1H30M", "lieu": "Le Kiosque des Tiges", "lieuRepli": "La Cave du Bouquet", "prix": "entrée libre, sur inscription", "places": 40, "acces": "de plain-pied, accessible en fauteuil (kiosque et cave)", "artistes": "Trio Lorem", "dernierMetro": null }

5.3 Thème et pied de page (examples/scenario-lebrocoli/recit.config.ts)

Thème de la thématique lebrocoli : un seul vert dominant, pris dans la palette mesurée de Broc (bible §2.3, encore à valider), sur le crème de la référence. Contrastes WCAG calculés : #447340 sur #f2eee5 = 4,81 (AA texte normal) ; #1f2a14 sur #f2eee5 = 12,96 ; en sombre, #f2eee5 sur #16200f = 14,54 et #9fd067 sur #16200f = 9,37. Le vert peau #7aac3d (2,33 sur crème) ne sert jamais au texte. À aligner avec les planches de couleurs de brand/boards/colors/ (une teinte par thématique, le site racine en noir et blanc) par le propriétaire de la marque.

TypeScriptTypeScript
import { defineConfig } from "@recit/core"; export default defineConfig({ metadata: { author: "lebrocoli.fr", lang: "fr" }, slides: { aspectRatio: "16:9", transition: "fade" }, theme: { defaultMode: "light", colors: { primary: "#447340", primaryForeground: "#f2eee5", accent: "#2a4a18", background: "#f2eee5", foreground: "#1f2a14", card: "#fbf9f4", muted: "#e6e2cc", }, dark: { primary: "#9fd067", primaryForeground: "#16200f", background: "#16200f", foreground: "#f2eee5", card: "#1f2a14", }, // Unbounded and Lexend are SIL OFL 1.1, served locally with their OFL.txt (bible §12) fonts: { heading: "Unbounded, sans-serif", sans: "Lexend, sans-serif" }, radius: "16px", }, footer: { left: "lebrocoli.fr", right: "{slide} / {total}", hideOn: ["image"], }, });

6. Jumeau JSON typé (deck.json) — brouillon jusqu'à P16

Forme de travail. La partie deck suit le schéma réel DeckSourceSchema (packages/core/src/schema/source.ts) : champs typés layout, image {src, alt}, transition, puis attrs, body, notes, dans l'ordre canonique du convertisseur. Ce qui reste brouillon :

  • les attributs de scénario (beat, cast, set, shot, pose, prompt) restent dans attrs jusqu'à P16 ; le plan 14 ne prévoit pas de les typer en champs propres, à confirmer en IA1 ;
  • data est au niveau du récit (plan 09 §2.2). Le convertisseur actuel range toute clé de frontmatter hors meta dans settings : avec lui, data et cast iraient dans settings. L'équivalence compile(md) == compile(toJson(md)) (plan 09 §2.4) tranchera la place de data en P6 ; cast reste dans settings (réglage du récit lu par le plugin de scénario) ;
  • overlay et type sont des attributs libres du deck (pas de champ typé), donc dans attrs.
JSONJSON
{ "$schema": "https://recit.dev/schema/v1/deck.json", "kind": "story", "version": 1, "format": "deck", "meta": { "title": "Premières notes", "description": "Broc présente l'atelier d'écoute jazz de lebrocoli.fr.", "author": "lebrocoli.fr", "lang": "fr" }, "settings": { "aspectRatio": "16:9", "transition": "fade", "cast": ["../../cast/broc/character.md", "../../cast/univers.md"] }, "data": { "atelier": "./data/atelier.json" }, "scenes": [ { "id": "ouverture", "layout": "image", "image": { "src": "./img/ouverture.webp", "alt": "Broc, un brocoli souriant au rendu 3D doux, salue de la main devant un kiosque à musique dans un parc, en fin d'après-midi." }, "attrs": { "overlay": 0.35, "beat": "hook", "cast": "broc", "set": "set-kiosque-tiges", "shot": "wide", "pose": "waving", "prompt": "p-pn-ouverture" }, "body": "# Premières notes\n\n### Un atelier d'écoute jazz, ouvert à tous", "notes": "Salut ! Samedi, on apprend à écouter le jazz ensemble. Je t'ai gardé une place." }, { "id": "question", "layout": "image-right", "image": { "src": "./img/question.webp", "alt": "Broc attend, curieux, sur un toit-terrasse au crépuscule, sous un ciel indigo." }, "attrs": { "beat": "hook", "cast": "broc", "set": "set-toit-rosee", "shot": "medium", "pose": "waiting", "prompt": "p-pn-question" }, "body": "# Le jazz t'intimide ?\n\nTu ne sais pas quoi écouter, ni quand applaudir. Cet atelier est fait pour toi.", "notes": "Toi aussi, tu as déjà applaudi au mauvais moment ? Moi oui. Personne ne m'en a voulu." }, { "id": "programme", "layout": "image-left", "image": { "src": "./img/programme.webp", "alt": "Broc, concentré, prépare un grand agenda ouvert sur un bureau ; un petit métronome en bois balance à côté de lui." }, "attrs": { "beat": "context", "cast": "broc", "set": "set-bureau-broc", "shot": "medium", "pose": "running", "prompt": "p-pn-programme" }, "body": "# Le programme\n\n- **Écouter** : trois morceaux courts, expliqués\n- **Reconnaître** : la contrebasse, la batterie, le piano\n- **Vivre** : un mini-concert du :value{data=atelier field=artistes}", "notes": "Je prépare le programme depuis des semaines, ça pousse bien. Tempo garde le rythme." }, { "id": "equipe", "layout": "image-right", "image": { "src": "./img/equipe.webp", "alt": "Dans une cave voûtée en briques, Broc se tient calmement à côté d'une régisseuse en tenue gris anthracite, un piano droit au fond." }, "attrs": { "beat": "context", "cast": "broc", "set": "set-cave-bouquet", "shot": "medium", "pose": "idle", "prompt": "p-pn-equipe" }, "body": "# Avec qui ?\n\n- **Broc**, ton guide de sortie\n- **Mila**, régisseuse de la Cave du Bouquet\n- **:value{data=atelier field=artistes}**, contrebasse, batterie et piano", "notes": "Mila s'occupe du son, le Trio Lorem joue. Moi, je t'explique tout, sans jargon." }, { "id": "places", "layout": "center", "attrs": { "type": "stat", "beat": "context", "cast": "broc", "set": "set-bureau-broc", "pose": "review" }, "body": "# :value{data=atelier field=places agg=last}\n\nplaces, inscription gratuite\n\n_Source : données de l'atelier, lebrocoli.fr_", "notes": "Les places sont comptées. Inscris-toi tôt, c'est gratuit." }, { "id": "pluie", "layout": "image-left", "image": { "src": "./img/pluie.webp", "alt": "Une pluie fine tombe sur le kiosque vide ; Broc lève les yeux, légèrement déçu." }, "attrs": { "beat": "tension", "cast": "broc", "set": "set-kiosque-tiges", "shot": "medium", "pose": "failed", "prompt": "p-pn-pluie" }, "body": "# Et s'il pleut ?\n\nLe kiosque est en plein air, et la météo peut changer d'avis.", "notes": "Oups. Ma couronne adore la pluie, les contrebasses beaucoup moins." }, { "id": "plan-b", "layout": "image-right", "image": { "src": "./img/plan-b.webp", "alt": "Broc saute de joie dans une cave de jazz chaleureuse, lampes basses et piano droit derrière lui." }, "attrs": { "beat": "payoff", "cast": "broc", "set": "set-cave-bouquet", "shot": "wide", "pose": "jumping", "prompt": "p-pn-plan-b" }, "body": "# Plan B : à l'abri\n\nEn cas de pluie, l'atelier descend à :value{data=atelier field=lieuRepli}.\n\nMême heure, même programme.", "notes": "On passe à l'abri et l'atelier est maintenu ! On reste bien planté sur la date." }, { "id": "infos", "layout": "image-left", "image": { "src": "./img/infos.webp", "alt": "Broc court vers la droite dans une rue piétonne pavée, le soir, entre des affiches de concerts sans texte." }, "transition": "slide", "attrs": { "beat": "call", "cast": "broc", "set": "set-rue-serre", "shot": "wide", "pose": "running-right", "prompt": "p-pn-infos" }, "body": "# Infos pratiques\n\n- **Quand** : :value{data=atelier field=date format=date}, :value{data=atelier field=debut format=time}\n- **Où** : :value{data=atelier field=lieu}\n- **Prix** : :value{data=atelier field=prix}\n- **Accès** : :value{data=atelier field=acces}\n- **Retour** : :value{data=atelier field=dernierMetro}", "notes": "Tout est là. Pour le dernier métro, je n'ai pas encore l'info : je te la donne dès que je l'ai." }, { "id": "rendez-vous", "layout": "image", "image": { "src": "./img/rendez-vous.webp", "alt": "Broc salue de la main devant le kiosque à musique, public assis dans l'herbe en silhouettes floues, lumière dorée." }, "attrs": { "overlay": 0.35, "beat": "call", "cast": "broc", "set": "set-kiosque-tiges", "shot": "wide", "pose": "waving", "prompt": "p-pn-rendez-vous" }, "body": "# On s'y retrouve ?\n\n### Inscription gratuite sur [lebrocoli.fr](https://lebrocoli.fr)\n\n_Illustrations générées par IA d'après l'image de référence de Broc._", "notes": "À samedi. Et garde la tête verte !" } ] }

Traduction (deck.en.md ou compagnon deck.en.json, plan 09 §1) : seuls meta, body, notes et image.alt changent ; id, attributs, données et images sont partagés. Les répliques se traduisent dans la même voix (tutoiement → « you », un jeu de mots équivalent ou aucun, jamais un jeu de mots forcé).

7. Images : prompts comme données

Récit ne génère rien (plan 14 D7). Les prompts ci-dessous sont des données à ajouter à la bible cast/univers.md (kind: bible, promptLang: en) ; le texte final de chaque prompt est dérivé par le gabarit de la bible §11.3 : identité (§11.1, mot pour mot) + décor + cadrage + pose + action

  • négatif (§11.4). Aucun fournisseur n'est imposé ; hatch-pet, imagegen ou tout autre outil se lance hors de Récit, avec cast/broc/reference.png toujours joint comme image de référence.

7.1 Décors utilisés (nouvelles entrées entry=set)

Les cinq décors existent dans la bible §7 mais n'ont pas encore d'identité de prompt. Proposition (inferred) :

MarkdownMarkdown
--- id=set-kiosque-tiges entry=set ## Le Kiosque des Tiges Un kiosque à musique rond dans un parc, le public assis dans l'herbe. :::identity Round open-air wooden bandstand with a domed roof in a small leafy park, string of warm bulbs along the roof edge, lawn in front with a few blurred seated silhouettes, no recognizable landmark, no readable sign. ::: :::traits - time: late afternoon to golden hour - light: warm low sun, soft amber {inferred} - palette: wood=#8a5a3b, lawn=#6f8f4a, sky=#f3d9a4 ::: ::shot[Wide, bandstand centered, character in the foreground left]{id=wide} ::shot[Medium, character under the bandstand roof edge]{id=medium} --- id=set-toit-rosee entry=set ## Le Toit de la Rosée Un toit-terrasse au crépuscule, au-dessus de toits fictifs. :::identity Flat rooftop terrace at dusk above fictional zinc rooftops, deep indigo sky with the first stars, a few potted plants and a low wooden bench, no recognizable landmark, no readable sign. ::: :::traits - time: dusk - palette: sky=#2b2f5c, glow=#f1b765 ::: ::shot[Medium, character at the railing, rooftops behind]{id=medium} --- id=set-bureau-broc entry=set ## Le Carnet de Broc Un coin de bureau avec un grand agenda ouvert et des billets. :::identity Cozy wooden desk corner, a large open paper planner with blank pages, a few blank tickets and paper slips, a warm desk lamp, no readable text anywhere. ::: ::shot[Medium, character behind the desk, planner in front]{id=medium} --- id=set-cave-bouquet entry=set ## La Cave du Bouquet Un club de jazz en sous-sol voûté. :::identity Vaulted underground brick jazz club, low warm lamps on small round tables, an upright piano against the wall, a double bass resting on its stand on a small stage, no readable sign. ::: ::shot[Wide, whole vaulted room, stage at the back]{id=wide} ::shot[Medium, character in front of the upright piano]{id=medium} --- id=set-rue-serre entry=set ## La Rue de la Serre Une rue piétonne de nuit, des affiches de concerts sans texte lisible. :::identity Narrow pedestrian street at night, wet cobblestones reflecting warm shop lights, concert posters on the walls showing only abstract shapes and colors with no readable text, no recognizable landmark. ::: ::shot[Wide, street receding to the right, character mid-left]{id=wide}

7.2 Personnage secondaire visible : Mila

Mila apparaît sur une seule image (slide 4). Entrée proposée (inferred, bible §8), toujours moins détaillée que Broc :

MarkdownMarkdown
--- id=mila entry=character ## Mila La régisseuse de la Cave du Bouquet, calme et précise. :::identity Stylized adult human stage manager, same soft 3D family-film render as the main character but simpler and less detailed, plain charcoal grey clothes, a sound engineer headset resting around the neck, calm neutral expression. ::: :::avoid - vegetable or plant features - logos, text, brand names on clothes :::

Tempo (le métronome, slide 3) reste un accessoire du décor dans l'action du prompt : il est muet et n'a pas besoin d'entrée tant qu'il n'a pas de pose propre.

7.3 Descriptions de poses pour {pose_description}

Anglais, dérivées de la bible §9 ; à reporter dans les ::pose[…] de character.md (qui n'en déclare aujourd'hui que trois). L'image générée est une scène, pas une case de la planche : elle montre la pose, elle ne la remplace pas.

Posepose_description
idlestanding relaxed, arms loose at the sides, calm attentive look
wavingstanding, one mitten hand raised and waving, warm welcoming smile
waitingstanding, head slightly tilted, hands joined in front, curious expectant look
runningfocused, leaning over the work in front of him, both hands busy, concentrated brows
reviewlooking closely at something, one hand near the chin, then a satisfied small smile
failedshoulders slightly dropped, looking up, mild disappointed "oops" face, no tears
jumpingsmall joyful jump, both arms up, feet off the ground, big closed-mouth smile
running-rightrunning toward the right of the frame, light energetic stride, body leaning forward

7.4 Prompts de scènes (entry=prompt)

Huit images (la slide 5 n'en a pas). Aspect : 16:9 pour les slides plein cadre, 4:5 pour les moitiés d'image. Le corps est l'action, en anglais, sans texte dans l'image.

MarkdownMarkdown
--- id=p-pn-ouverture entry=prompt subject=broc set=set-kiosque-tiges shot=wide pose=waving aspect=16:9 Broc greets the viewer in front of the empty bandstand before the workshop, late afternoon, generous empty space on the right for the title. --- id=p-pn-question entry=prompt subject=broc set=set-toit-rosee shot=medium pose=waiting aspect=4:5 Broc waits at the railing at dusk, looking at the viewer as if asking a gentle question. --- id=p-pn-programme entry=prompt subject=broc set=set-bureau-broc shot=medium pose=running aspect=4:5 Broc prepares the workshop on the open planner; a small wooden metronome with a swinging arm and no face stands on the desk next to him. --- id=p-pn-equipe entry=prompt subject=broc set=set-cave-bouquet shot=medium pose=idle aspect=4:5 Broc stands calmly next to Mila the stage manager in front of the upright piano; Mila is simpler and less detailed than Broc. --- id=p-pn-pluie entry=prompt subject=broc set=set-kiosque-tiges shot=medium pose=failed aspect=4:5 Light rain starts falling on the empty bandstand; Broc stands under the roof edge looking up at the grey sky, mildly disappointed. --- id=p-pn-plan-b entry=prompt subject=broc set=set-cave-bouquet shot=wide pose=jumping aspect=4:5 Broc jumps for joy in the warm vaulted jazz club, ready for the workshop indoors. --- id=p-pn-infos entry=prompt subject=broc set=set-rue-serre shot=wide pose=running-right aspect=4:5 Broc runs to the right along the cobbled street toward the venue, posters on the walls show no readable text. --- id=p-pn-rendez-vous entry=prompt subject=broc set=set-kiosque-tiges shot=wide pose=waving aspect=16:9 Broc waves goodbye in front of the bandstand at golden hour, a few blurred seated silhouettes on the lawn, generous empty space on the right for the title.

Exemple de prompt dérivé (ce que recit prompts build écrira en P16 pour p-pn-pluie) :

Code
{identité de la bible §11.1, mot pour mot} Pose: shoulders slightly dropped, looking up, mild disappointed "oops" face, no tears. Setting: Round open-air wooden bandstand with a domed roof in a small leafy park, string of warm bulbs along the roof edge, lawn in front with a few blurred seated silhouettes, no recognizable landmark, no readable sign. Shot: medium, character under the bandstand roof edge. Action: Light rain starts falling on the empty bandstand; Broc stands under the roof edge looking up at the grey sky, mildly disappointed. Warm evening lighting that keeps the character's greens unchanged. Character is the clear focal point, other figures simpler and less detailed. Aspect 4:5. Negative: {liste de la bible §11.4}

La pluie et la lumière grise ne doivent pas désaturer les verts de Broc (bible §7) : à vérifier à la relecture de l'image.

7.5 Provenance (une par image)

recit assets register img/pluie.webp --prompt p-pn-pluie (P16) écrit :

JSONJSON
{ "$schema": "https://recit.dev/schema/v1/asset.json", "kind": "asset", "version": 1, "asset": "pluie.webp", "prompt": "p-pn-pluie", "origin": "ai", "tool": "à remplir par l'auteur", "model": "à remplir par l'auteur", "date": "AAAA-MM-JJ", "references": ["../../../cast/broc/reference.png"], "author": "à confirmer", "license": "à confirmer", "aiGenerated": true }

Tant que la licence de reference.png manque (bible §14), aucune de ces huit images n'entre dans le dépôt : les img/*.webp sont des images de remplacement neutres (aplat crème, nom du prompt), et recit validate --strict doit refuser le build de publication.

8. Déclinaisons dans les autres formats

8.1 stories (6 cartes, 9:16) — brouillon jusqu'à P11 (lecteur) et P16 (attributs)

Pas de nouvelle image : Broc est un sprite de la planche (::sprite, plan 11 D9) posé sur le fond du thème, et le texte est une textcard. Six cartes, donc dans la règle des 3 à 7 scènes. La case de 192×208 est petite : la taille d'affichage maximale se mesure sur les goldens (plan 11 D9).

MarkdownMarkdown
--- title: Premières notes format: stories lang: fr duration: 5s aspect: 9:16 cast: - ../../cast/broc/character.md - ../../cast/univers.md data: atelier: ./data/atelier.json --- --- id=ouverture beat=hook cast=broc set=set-kiosque-tiges pose=waving background=theme :::textcard{variant=title background=theme} # Premières notes Un atelier d'écoute jazz, ouvert à tous ::: ::sprite{character=broc pose=waving} --- id=question beat=hook cast=broc pose=waiting background=theme :::textcard{variant=quote background=theme} Toi aussi, tu as déjà applaudi au mauvais moment ? Moi oui. — Broc ::: ::sprite{character=broc pose=waiting} --- id=places beat=context cast=broc pose=review background=theme duration=6s :::textcard{variant=stat} :value{data=atelier field=places agg=last} places, inscription gratuite ::: ::sprite{character=broc pose=review} --- id=pluie beat=tension cast=broc pose=failed background=theme :::textcard{variant=caption background=theme} Et s'il pleut ? Oups. ::: ::sprite{character=broc pose=failed} --- id=plan-b beat=payoff cast=broc pose=jumping background=theme :::textcard{variant=caption background=theme} Plan B : on passe à l'abri. L'atelier est maintenu ! ::: ::sprite{character=broc pose=jumping} --- id=rendez-vous beat=call cast=broc pose=waving background=theme duration=7s :::textcard{variant=list background=theme} - :value{data=atelier field=date format=date}, :value{data=atelier field=debut format=time} - :value{data=atelier field=lieu} - :value{data=atelier field=prix} ::: ::sprite{character=broc pose=waving} ::cta[Je m'inscris]{href=https://lebrocoli.fr}

Mention IA : la planche de Broc est générée ; la mention « généré par IA » apparaît dans l'attribution visible du lecteur (réglage scenario.aiLabel, credits par défaut, plan 14 §5.1), pas dans le texte de Broc. Export : recit export --to images donne six PNG 1080×1920.

8.2 motion (film 16:9 ou 9:16)

Le pont deck → motion (plan 02 §4) refuse les layouts image, image-left et image-right en v1 : recit render deck.md échouerait dès la slide 1, avec un numéro de ligne. Le film a donc sa propre source, courte, avec les blocs que le pont connaît et la voix off reprise des :::notes du deck (≈ 75 s à la vitesse de lecture par défaut ; la voix allonge la scène si besoin). Broc y entre en P16 par le bloc sprite (plan 11 D9, lot IM4) ; avant, le film se rend sans lui.

MarkdownMarkdown
--- title: Premières notes, le film format: motion lang: fr aspectRatio: 9:16 cast: - ../../cast/broc/character.md data: atelier: ./data/atelier.json --- --- id=ouverture cast=broc pose=waving beat=hook Atelier d'écoute jazz # Premières notes ::sprite{character=broc pose=waving} :::notes Salut ! Samedi, on apprend à écouter le jazz ensemble. Je t'ai gardé une place. ::: --- id=question cast=broc pose=waiting beat=hook Le jazz **t'intimide** ? ::sprite{character=broc pose=waiting} :::notes Toi aussi, tu as déjà applaudi au mauvais moment ? Moi oui. Personne ne m'en a voulu. ::: --- id=programme cast=broc pose=running beat=context ## Le programme - Écouter trois morceaux - Reconnaître les instruments - Vivre un mini-concert :::notes Je prépare le programme depuis des semaines, ça pousse bien. Tempo garde le rythme. ::: --- type=stat id=places hold=1 cast=broc pose=review beat=context # :value{data=atelier field=places agg=last} places, inscription gratuite :::notes Les places sont comptées. Inscris-toi tôt, c'est gratuit. ::: --- id=plan-b cast=broc pose=jumping beat=payoff S'il pleut, l'atelier est **maintenu** à l'abri. ::sprite{character=broc pose=jumping} :::notes On passe à l'abri et l'atelier est maintenu ! On reste bien planté sur la date. ::: --- id=rendez-vous cast=broc pose=waving beat=call ## On s'y retrouve ? :::notes À samedi. Et garde la tête verte ! :::

Le film saute la slide « pluie » seule (failed) pour rester court : la tension tient dans la phrase de plan-b, et Broc ne passe jamais par failed sans rebond. prefers-reduced-motion : image 0 de chaque pose, sans boucle (plan 14 D12). Où placer le sprite dans un bloc statement ou list est une question de mise en page du lot IM4, non tranchée ici.

8.3 toon (4 cases, la séquence de la pluie) — brouillon jusqu'à P7 et P16

Réutilise quatre des images du deck, recadrées en 4:5 (mêmes prompts, mêmes fichiers : aucune nouvelle génération). Les bulles portent le texte, traduisible ; :::dialogue est « plus tard » (plan 14 D6), donc les bulles sont écrites directement.

MarkdownMarkdown
--- title: Premières notes — la pluie format: toon lang: fr width: 800 gutter: 120 cast: - ../../cast/broc/character.md - ../../cast/univers.md --- --- id=c1 src=./img/question.webp alt="Broc attend, curieux, sur un toit-terrasse au crépuscule." cast=broc set=set-toit-rosee pose=waiting prompt=p-pn-question beat=hook :::bubble{x=60% y=12% tail=bottom-left} Samedi, atelier jazz au kiosque. Tu viens ? ::: --- id=c2 src=./img/pluie.webp alt="Une pluie fine tombe sur le kiosque vide ; Broc lève les yeux, déçu." cast=broc set=set-kiosque-tiges pose=failed prompt=p-pn-pluie beat=tension :::bubble{x=55% y=10% tail=bottom-left} Oups. Ma couronne adore la pluie, les contrebasses beaucoup moins. ::: --- id=c3 src=./img/plan-b.webp alt="Broc saute de joie dans une cave de jazz chaleureuse." cast=broc set=set-cave-bouquet pose=jumping prompt=p-pn-plan-b beat=payoff :::bubble{x=50% y=10% shape=shout tail=bottom-right} On passe à l'abri ! ::: :::caption L'atelier est maintenu. Même heure, même programme. ::: --- id=c4 src=./img/rendez-vous.webp alt="Broc salue devant le kiosque à musique, lumière dorée." cast=broc set=set-kiosque-tiges pose=waving prompt=p-pn-rendez-vous beat=call :::bubble{x=60% y=12% tail=bottom-left} À samedi. Et garde la tête verte ! ::: :::caption Illustrations générées par IA d'après l'image de référence de Broc. :::

8.4 calendar, book, docs

  • calendar : l'événement lui-même (date, lieu, location, url vers lebrocoli.fr) est une scène de calendrier, lue depuis la même data/atelier.json quand @recit/time le permettra ; le pont calendar → stories (P11) pourra alors générer la carte « rendez-vous ».
  • book : pas de déclinaison utile pour une annonce. Broc n'y entre que par l'annexe « Dramatis personae » (plan 14 D6) d'un futur recueil de récits.
  • docs : le deck s'intègre dans une page par <StoryEmbed format="deck"> ; la page « bible » (fiches CharacterSheet, SetCard, PromptCard) est en P16.

9. Points d'attention

Accessibilité

  • Textes alternatifs : chaque image a un alt en français, qui décrit Broc, sa pose et le décor, jamais le texte de la slide (déjà lisible). Ils se traduisent avec le récit. En toon, alt est obligatoire (PDF balisé, plan 15).
  • L'image ne porte aucune information : date, lieu, prix et accès sont toujours en texte. Un lecteur d'écran a tout sans les images.
  • Contraste : texte en #1f2a14 ou #447340 sur crème (≥ 4,5:1) ; jamais de texte en vert peau #7aac3d. Sur les slides plein cadre, overlay=0.35 assure la lisibilité du titre : à mesurer sur l'image finale (lint de contraste prévu plus tard, plan 11 D8).
  • Notes = transcription : les :::notes donnent le texte complet de ce que dit Broc, réutilisé comme sous-titres en motion et comme voiceover.
  • Mouvement : prefers-reduced-motion fige les sprites sur l'image 0 et remplace la transition slide par fade.
  • Langue : lang: fr ; les espaces insécables françaises avant ?, ! et : sont gérées par la typographie du format, pas tapées à la main.
  • Accès PMR affiché (valeur acces), comme le veut la bible §5.

Mention IA et droits

  • Toute image générée a sa provenance kind: asset, origin: ai, aiGenerated: true, references: [reference.png] (§7.5) et la mention visible « Illustrations générées par IA » (slide 9, dernière case du toon, attribution des stories). La conformité à l'article 50 de l'AI Act reste à relire (plan 14 §5.1).
  • Bloquant : auteur et licence de reference.png (bible §14). Sans eux, ni la planche ni les images de scènes n'entrent dans le dépôt ; le scénario se joue avec des images de remplacement.
  • Polices : Unbounded et Lexend (OFL, servies localement, OFL.txt et ligne NOTICE) ; jamais Monument Extended.

Cohérence avec la bible

  • Relecture de chaque image avant enregistrement : ni vêtement, ni accessoire, ni instrument tenu (la contrebasse reste sur son support), ni texte lisible, verts non teintés par la lumière, pas la mascotte plate du site dans la même image (bible §2.5).
  • Mila reste moins détaillée que Broc et n'apparaît qu'une fois ; pas plus de deux personnages à l'image (bible §8).
  • Plans à corriger par leur propriétaire : plan 14 D12 et plan 11 §2.4 décrivent encore le smoking et la casquette. Corrigés le 25/10 d'après l'image de référence : les deux plans décrivent maintenant un brocoli vert sans vêtement ni accessoire (plan 14 D13).

Dépendances et ce qui reste ouvert

ÉlémentDépend deEn attendant
beat=, cast=, set=, pose=, prompt=@recit/scenario, P16 (IA2)attributs libres, non vérifiés
:value sur texte, format=date/time, null@recit/data, P6 (à demander)chaînes du compagnon (:t[key])
Sprite de Broc (::sprite)planche hatch-pet importée, IM4 (P16)stories et film sans Broc, ou remplaçant neutre
Images de scèneslicence de reference.png, génération hors Récitimages de remplacement
Lecteur stories, toonP11, P7deck seul
Règle « 3 à 7 scènes » pour un deckdécision dans la bibleécart documenté au §3