régie

Prompts

Context Builder et compilateur : comment un plan devient un prompt.

Le prompt d'un plan n'est jamais écrit à la main : il est compilé depuis la bible. Le texte final reste visible et modifiable — une réécriture manuelle est enregistrée sur le plan, par cible, et l'emporte sur la compilation.

1. La bible

Tout ce qui part dans un prompt vit dans des champs dédiés :

ÉlémentChamps utilisés par le compilateur
Style actif (LOOK)block (ou short), never
Personnagecode, name, block (description gelée), short (une phrase), costume, silhouette, never, référence
Lieublock, short, never, sound, plaque de référence
Objet / costumeblock, short, never, référence
Lumièreblock, short, never ; un état par défaut
Règles du projetblocks injectés partout, maxCharactersPerShot, neverTogether, planches communes (lineupKey, propsSheetKey)
MouvementclipSeconds, allowedMoves, short, never (négatifs vidéo)

Les champs visuels s'écrivent en anglais : les modèles d'image les comprennent mieux. Le reste de l'interface est en français.

2. Le Context Builder

resolveShot(bible, shot, scene) (packages/core/src/context.ts) produit un ShotSpec :

  • personnages et objets résolus (erreur explicite si un id n'existe pas) ;
  • lieu et lumière du plan, sinon ceux de la scène, sinon la lumière par défaut ;
  • références à charger, dans l'ordre où un moteur à références multiples les pondère : feuilles des personnages, échelle des tailles s'il y en a plusieurs, planche d'objets, objets, plaque du lieu, style ;
  • deux listes de négatifs : image (style + personnages + objets + lieu + lumière) et vidéo (la même + les interdits de mouvement) ;
  • caméra, composition, transition, durée, format, émotion de la scène, réécritures manuelles.

Pour une demande libre (« Marie marche dans la rue sous la pluie. »), detectEntities repère dans le texte les personnages, lieux et objets par nom ou par code et injecte leurs blocs gelés — gratuit et déterministe. La tâche IA enrich va plus loin et décompose en sujet, action, environnement, lumière, caméra, objectif, composition, ambiance, style et continuité.

3. Les cibles

Chaque moteur a sa grammaire (packages/core/src/targets/) :

CiblePourForme
stillimage fixe du plancahier des charges complet : style, format, cadre, décor, lumière, chaque personnage (bloc + costume), objets, règles, ambiance, action
veoVeo, Luma, Sora — variante cinématiqueprose d'un seul tenant ; dialogue explicite ou lèvres fermées
klingKling, Hailuo — variante concise≤ 70 mots, personnages par marqueur de silhouette, 12 négatifs max
wanWan, LTX, ComfyUI — variante techniquechamps structurés camera: … subject: …, négatif séparé
runwayRunway Gen-4ce qui bouge seulement (l'image de départ porte le reste), ≤ 1000 caractères
sheetplanche storyboard multi-casestous les plans d'une planche en une seule image : chaque personnage décrit une fois, une ligne par case

targetForAdapter(adapter, kind) choisit la grammaire naturelle d'un adapter ; l'utilisateur peut toujours en choisir une autre.

Pourquoi une planche en une passe : dans une seule génération, le modèle dessine toutes les cases avec le même personnage. Vingt générations isolées donnent vingt personnages différents.

4. Les prompts de référence

Ce sont les seuls prompts générés sans référence en entrée, puisqu'ils fabriquent les références (packages/core/src/references.ts) :

  • personnage : feuille (face, trois-quarts, dos), portrait, expressions, poses, tête sous plusieurs angles, costume seul ;
  • lieu : plaque d'ensemble, intérieur, extérieur, nuit, pluie ;
  • planche d'objets à échelle commune, échelle des tailles des personnages.

Générer la feuille d'un personnage avec setAsRefOf en fait sa référence : elle est ensuite chargée automatiquement dans chaque plan où il apparaît. C'est le moteur de cohérence.

5. Le contrôle

lint(bible, scenes, shots) (packages/core/src/lint.ts) tourne à chaque affichage, gratuitement :

  • bloquant : un personnage ou un lieu du plan sans référence ;
  • erreur : mouvement interdit, plan trop long, trop de personnages, duo déclaré trop ressemblant hors plan de groupe, vocabulaire caméra inconnu, numéros de scène en double, personnage gelé sans référence ;
  • avertissement : lumière qui contredit l'heure de la scène, lieu du plan différent de la scène, plan de groupe sans stratégie de repli, pas de style, durée totale loin de la cible ;
  • info : personnage absent de la distribution de la scène, scène sans plan, personnage jamais utilisé.

Ce qui demande de lire le texte (une blessure qui disparaît, un costume décrit autrement) relève de l'analyse IA de continuité, lancée à la demande.

6. Les tâches d'écriture

packages/studio/src/ai.ts. Chacune reçoit projectDigest — le projet résumé : concept, monde, style, personnages (avec objectif, arc, et s'ils ont une feuille), lieux, objets, structure, scènes et plans, contrôle — et demande une réponse JSON validée. Les réponses sont des propositions : rien n'est écrit en base sans que l'auteur applique.

TâcheProduit
conceptlogline, tagline, synopsis court et long, pitch, genre, thèmes, conflits, enjeux, univers, personnages potentiels
character, locationfiche complète, blocs visuels en anglais
beatscontenu des temps forts de la structure choisie
scriptcontinuer, réécrire, raccourcir, développer, dialogues, tension, humour, ton — en Fountain
coherenceincohérences du scénario avec la bible
breakdowndépouillement d'une scène
directionmise en scène et découpage proposé
shotsdécoupage technique respectant les règles du linter
continuityproblèmes de continuité au-delà du contrôle déterministe
enrichprompt libre décomposé et assemblé

L'assistant de production reçoit le même résumé et peut proposer des actions applicables d'un clic (ajouter des plans à une scène, ouvrir une page), dans un bloc regie-actions que l'interface interprète.

Templates

Réglages → Templates de prompts : bibliothèque par catégorie (SCREENWRITING, CHARACTER, LOCATION, IMAGE, VIDEO, CAMERA, LIGHTING, DIALOGUE, STORYBOARD, SOUND) avec variables {{nom}}. Ils servent de point de départ ; le compilateur, lui, ne dépend d'aucun template.

Modifier sur GitHub

Sur cette page