Los clips automáticos ya son vídeo corto de verdad
Cada partida terminada ya se convertía en un clip vertical. El problema es que todos parecían el mismo. Ahora cada uno abre con un gancho, destaca el dinero y cierra con una tarjeta.

En palabras sencillas
opolyx convierte las partidas terminadas en clips verticales y los publica solo. Esa parte lleva tiempo funcionando. El problema era que ver tres de ellos se parecía mucho a ver uno.
- cerca del 40% del cuadro era fondo vacío alrededor de un tablero centrado;
- empezaban a mitad de partida en una tirada cualquiera, que además es la miniatura;
- el desenlace era ilegible: un alquiler de 12.000 era una línea gris en un panel pequeño;
- todos los eventos duraban lo mismo, así que el preámbulo pesaba tanto como el momento;
- eran mudos, no tenían final y el texto y los hashtags nunca cambiaban.
Ahora cada clip está dirigido en vez de volcado: abre con un gancho que anuncia lo que vas a ver, el tablero llena el cuadro, el dinero y los grandes momentos se destacan justo cuando ocurren, y cierra con una tarjeta que indica dónde jugar. El ritmo pasa por encima de la contabilidad y frena en el momento que importa, con una breve pausa antes de un desenlace que ya se adivina.
Los textos, títulos y hashtags salen ahora de repertorios en lugar de una sola línea, y cuando una partida da varios clips se eligen para que traten cosas distintas, no tres vistas de la misma bancarrota.
Para los más técnicos
El renderizador es un worker en un VPS pequeño que carga el sitio en vivo en Chromium sin interfaz y graba la ruta de repetición. Ahí está la palanca: todo el aspecto de un clip es código web, así que viaja en un despliegue normal y no exige tocar el worker.
La pieza clave es recuperar el momento ancla. La ruta de repetición solo recibe un rango, no "el momento", así que la página vuelve a ejecutar la puntuación de momentos destacados del propio motor sobre todo el registro de eventos y se queda con el punto de mayor puntuación dentro de esa ventana. Eso recupera de forma demostrable el momento que eligió el worker, y es lo que permitió publicar los cambios visuales sin tocarlo.
// 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;
}| Antes | Ahora | |
|---|---|---|
| Estructura | una repetición continua | gancho, juego, tarjeta final |
| Ritmo | 700 ms × 65 eventos | 110–1400 ms según el peso del evento |
| Duración | ~45 s, siempre | 14–27 s, ajustada |
| Texto de la publicación | una frase y cuatro hashtags fijos | repertorios con semilla por clip |
| Audio | desactivado en el código | sonidos del juego y música opcional |
La selección también cambió: cuando una partida ofrece varios momentos candidatos, el selector se queda con el mejor de cada tipo distinto, de modo que un solo encuentro deja de producir tres clips casi idénticos de la misma bancarrota.
