Les clips automatiques sont enfin de vraies vidéos courtes
Chaque partie terminée devenait déjà un clip vertical. Sauf qu’ils se ressemblaient tous. Chacun s’ouvre désormais sur une accroche, met en avant l’argent et se termine sur une carte.

En clair
opolyx transforme les parties terminées en clips verticaux et les publie tout seul. Cette partie fonctionne depuis un moment. Le problème, c’est qu’en regarder trois revenait à en regarder un.
- environ 40 % de l’image n’était que du fond vide autour d’un plateau centré ;
- ils démarraient en pleine partie sur un lancer quelconque — qui sert aussi de miniature ;
- le dénouement était illisible : un loyer de 12 000 se réduisait à une ligne grise dans un petit fil ;
- chaque événement occupait le même temps d’écran, si bien que la montée durait autant que le moment ;
- ils étaient muets, sans fin, et la légende comme les hashtags ne changeaient jamais.
Chaque clip est désormais mis en scène plutôt que déversé : il s’ouvre sur une accroche qui annonce ce que vous allez voir, le plateau remplit l’image, l’argent et les gros événements sont signalés au moment où ils tombent, et il se referme sur une carte indiquant où jouer. Le rythme survole la comptabilité et ralentit sur le moment qui compte — avec un bref arrêt avant un dénouement que l’on devine déjà.
Les légendes, les titres et les hashtags proviennent maintenant de répertoires plutôt que d’une seule ligne, et lorsqu’une partie donne plusieurs clips, ils sont choisis pour parler de choses différentes plutôt que de montrer trois fois la même faillite.
Pour les curieux techniques
Le moteur de rendu est un worker sur un petit VPS qui charge le site en production dans un Chromium sans interface et enregistre la route de replay. C’est là le levier : toute l’apparence d’un clip est du code web, elle part donc avec un déploiement normal et n’exige rien du worker.
La pièce maîtresse est la récupération du moment pivot. La route de replay ne reçoit qu’une plage, pas « le moment » : la page réexécute donc le scoring des temps forts du moteur sur l’intégralité du journal d’événements et retient le point le mieux noté dans cette fenêtre. Cela retrouve de façon démontrable le moment choisi par le worker, ce qui a permis de livrer tout le visuel sans y toucher.
// lib/clip/pacing.ts — screen time is a function of what the event is
const BOOKKEEPING = 110; // turn_ended, dice_rolled: skim
const NORMAL = 320;
const ANCHOR_MIN = 1400; // the moment the clip exists for
const PREDICT_FREEZE = 600; // "what happens next?" before a guessable payoff
export function paceFor(event: DomainEvent, isAnchor: boolean): number {
if (isAnchor) return Math.max(ANCHOR_MIN, NORMAL);
return isBookkeeping(event) ? BOOKKEEPING : NORMAL;
}| Avant | Maintenant | |
|---|---|---|
| Structure | un replay continu | accroche, action, carte finale |
| Rythme | 700 ms × 65 événements | 110–1400 ms selon le poids de l’événement |
| Durée | ~45 s, toujours | 14–27 s, ajustée |
| Texte de publication | une légende, quatre hashtags fixes | répertoires à graine par clip |
| Audio | désactivé en dur | sons du jeu, fond musical optionnel |
La sélection a changé elle aussi : quand une partie fournit plusieurs moments candidats, le sélecteur garde le meilleur de chaque type distinct, de sorte qu’une même rencontre cesse de produire trois clips quasi identiques de la même faillite.
