← Volver al método
Para quien construye

El contenido: de las tablas a la tarjeta y al vídeo

Cada tarjeta, cada gráfico y cada vídeo del laboratorio sale de una orden de terminal. Nadie los edita a mano. Esto es cómo está montado.

1 · Una familia de herramientas de terminal

El laboratorio no tiene interfaz: tiene herramientas de terminal, cada una con ayuda en todos los niveles (--help). Eso permite repetir cualquier pieza, escribir una jornada entera como una secuencia de órdenes y revisar qué cambió.

HerramientaPara qué sirveEjemplo
postgame.shGenerar a mano cualquier tarjeta o gráfico (carta de jugador, rueda de percentiles, mapa de tiro, comparativas…), buscar identificadores reales por nombre y ver lo ya generadopostgame.sh find "leveque" · postgame.sh generate wheel <jugador> <competición>
postgame.sh videoVídeos verticales de 1080×1920: quinteto ideal, marcadores, un partido en 21 segundos, mapa de tiro, duelo entre jugadores, resumen de jornadapostgame.sh video mejor 2
export_snapshotsCalcular y escribir los ficheros que lee la web: jornadas, perfiles, evolución, quintetos, partidos, tiros, asistencias, similitud y familiasexport_snapshots jornada 2 · export_snapshots similares todas
sync-data.shCopiar lo exportado a la web, regenerar el índice de temporadas y las cifras de la página de métodosync-data.sh
La rutina de una jornada, en un solo flujo
Lo que después de una jornada eran varias órdenes seguidas es ahora un flujo de Prefect que las encadena en su orden de dependencia: exportar la jornada, la temporada y los ficheros de toda la liga, y generar los vídeos. Por debajo llama a las mismas funciones que las órdenes de arriba, así que el resultado es idéntico y cualquier pieza se puede seguir lanzando por separado. El hilo con IA queda fuera a propósito: gasta cuota del asistente y se pide aparte. Cada flujo declara en su contrato qué lee de los datos Gold y qué produce, y por eso aparece en el mapa de los datos; la organización completa está en Contratos de datos y dominios independientes.
Funciona sin ningún modelo de lenguaje
Las herramientas de generación, búsqueda y vídeo no llaman a ningún modelo: cero coste y resultados reproducibles. La IA es un ayudante opcional (más abajo), no una pieza de la que dependa el laboratorio.
PrincipioIdempotentes y reanudables

El cálculo de minutos derivados «reanuda donde lo dejó» y guarda cada 20 partidos: se puede cortar y relanzar.

PrincipioUna sola fuente de la verdad

El vídeo de un partido y la página del partido en la web leen los mismos datos exportados: cuentan exactamente lo mismo, porque no hay dos cálculos.

PrincipioBúsqueda de identificadores integrada

Nadie teclea números: se busca «leveque» y se obtiene el identificador real.

Una jornada tipo

  1. 1Se juegan los partidos
  2. 2Se ingiere (Bronze → Silver)Bajo demanda al terminar los partidos, además de la pasada nocturna por si alguno se escapa.
  3. 3Se exporta la jornadaEl cierre, los quintetos, las clasificaciones… export_snapshots jornada N
  4. 4Se generan las piezasTarjetas y vídeos. postgame.sh video …
  5. 5Se redactan los hilos con ayuda de la IAQue los deja como borrador.
  6. 6Una persona revisa, edita y publica
  7. 7Se sincroniza la webSe prueba, se construye, se audita y se sube; tras el despliegue se comprueba que producción sirve lo esperado. sync-data.sh

2 · El motor gráfico: un sistema de diseño en código

Las tarjetas y gráficos se dibujan con Matplotlib y Pillow. El estilo neobrutalista (bordes gruesos, sombras sólidas desplazadas, colores planos y saturados) no es una plantilla: es un conjunto de funciones y constantes que todas las piezas reutilizan.

Un solo estilo

Hubo dos (uno oscuro con neones). Se eliminó: mantener dos significaba que cada cambio se hacía dos veces y uno siempre se quedaba atrás.

Los colores salen del club, por nombre

Una tabla de colores por club (no por identificador, porque el identificador de equipo cambia cada temporada). Para cada color se calcula el color de texto legible por contraste.

El formato condicional cuenta con la rareza

En la rueda de percentiles, una cifra donde más de la mitad de la liga está a cero (los tapones: el 84 % de las actuaciones no tiene ninguno) lleva un asterisco: un P95 con 0,7 por partido es verdad aritmética y mentira narrativa.

Las posiciones y los espaciados son parámetros

No números sueltos: todas las tarjetas hermanas comparten rejilla.

3 · Vídeo vertical, fotograma a fotograma

Cada vídeo es una secuencia de escenas, y una escena es solo un par: una duración y una función que sabe dibujarse sobre un lienzo en cualquier instante t. El motor las recorre fotograma a fotograma con Pillow, las entrega a imageio, que codifica el MP4 de 1080×1920 (9:16, el formato de los vídeos cortos verticales), y FFmpeg mezcla después la música si la hay, con un fundido final, sin recodificar la imagen.

DatosLos exportadosLos mismos que lee la web
EscenasDuración + dibujoUna función por escena
FotogramasPillowUno por instante
MP4imageio1080×1920, 9:16
AudioFFmpegOpcional, sin tocar la imagen
Los datos del vídeo son los de la web

Un vídeo no calcula nada propio: lee los ficheros exportados.

Sin parpadeos

La rotación de una carta, el brillo y el cambio de tamaño se calculan por fotograma con precisión de píxel, y hubo que eliminar saltos de tamaño, un cruce de fundidos que bajaba la opacidad a mitad y bordes que aparecían de golpe.

Transiciones con intención

Cortes y barridos entre escenas, y puntos de progreso que cuentan una pieza por punto.

Se puede sincronizar con el tempo

De una pista, analizando su pulso con NumPy. Y todo funciona igualmente sin música.

4 · Datos que cuentan una historia

Un partido tiene cientos de eventos y una persona cuenta tres cosas de él. La capa de datos detecta candidatos con reglas explícitas, no a ojo:

El parcial más contundente

Racha de puntos consecutivos de un equipo sin respuesta del rival, calculada sobre los aciertos ordenados cronológicamente. Para que merezca su propio mensaje se exigen 6 puntos o más: un 2-0 no sostiene una frase.

Jugadas clave (clutch)

El pipeline marca como clutch los momentos con diferencia de 5 puntos o menos en los últimos 2 minutos del 4.º cuarto o la prórroga, y la capa de datos cruza esa ventana con los eventos reales para saber qué pasó (quién anotó, quién robó). Hacen falta 2 jugadas concretas: una aislada no basta.

El MVP y los extremos

El mejor jugador de una jornada se decide con un desempate explícito y único para toda la web: valoración, y a igualdad +/-, victoria del equipo, menos minutos y, en último lugar, identificador.

5 · El asistente de IA: ayudante, no autor ni editor

Los hilos de análisis (de un partido, de una jornada, comparativas) los redacta como borrador un modelo de lenguaje que trabaja como asistente. El diseño parte de una idea: no confiar en que el modelo se porte bien, sino hacer imposible que se porte mal.

1 · HerramientasSolo deterministas63 consultas a los datos reales
2 · BorradorSu única acciónSin herramienta de publicar
3 · ValidadorCódigo, no otro modeloCada cifra, comprobada
Puerta humanaUna personaRevisa, edita y publica
Solo ve herramientas deterministas

Dos servidores de herramientas (63 en total) que consultan los datos reales de Silver: ficha de partido, acta, clasificación, rachas, comparativas. Para escribir una cifra, el modelo tiene que haberla pedido a una herramienta.

Su única acción final es dejar un borrador

No tiene ninguna herramienta de publicar: la puerta de aprobación humana es una ausencia, no una norma. La publicación real ni siquiera está implementada.

Una comprobación determinista, no otro modelo

Antes de aceptar un borrador, un validador comprueba que cada cifra de dos o más dígitos aparece en lo que devolvieron las herramientas (reconstruyendo porcentajes de tiro a partir de aciertos e intentos, para no dar falsos positivos).

Error realCuatro números que no existían
En una ejecución real, un hilo citó para los cuatro factores de un partido «49,3 % frente a 44,1 %, 12 pérdidas frente a 18, 18,3 % frente a 14,1 %». El dato correcto estaba delante del modelo, en la respuesta de una herramienta de esa misma conversación: «42,3 % frente a 51,6 %…». Ninguna cifra coincidía. No era un problema de redacción del prompt que más instrucciones fueran a arreglar, así que se resolvió con código, no con otro modelo: de ahí nació el validador.
Varias «personas»

Instrucciones por tipo de hilo (post-partido, comparativas, recapitulación, cierre de jornada) fijan tono y reglas, como «nunca inventes un dato».

Una sola vía

Hubo antes dos rutas (un modelo en local y otro en la nube) con registros de herramientas paralelos. Se retiraron: cada cambio había que aplicarlo dos veces y una de las copias siempre se quedaba atrás. Hoy el motor es la herramienta de terminal de Gemini (Antigravity), contra los dos servidores de herramientas.

6 · Publicar: ficheros, un commit y un despliegue

La web no consulta nada: lee ficheros. Las herramientas escriben JSON estático, sync-data los copia al proyecto web y regenera el índice de temporadas y las cifras de la página de método. Se prueba, se construye, se audita y se sube con un commit; la plataforma despliega sola, y después se comprueba que producción sirve exactamente lo esperado (páginas, datos y redirecciones).

ExportarJSON estáticoCalculado desde Silver
Sincronizarsync-dataCopia, índice y cifras
SubirUn commitPruebas, build y auditoría antes
DesplegarVercelAutomático
ComprobarProducciónPáginas, datos y redirecciones

Es una arquitectura de solo lectura: sin base de datos, sin servidor propio que mantener, rápida y barata. Hay una excepción honesta: las miniaturas para compartir en redes se generan con una función de la plataforma.

Cada subida la aprueba una persona
El laboratorio no publica solo. Calcular, generar y comprobar es automático; subir es una decisión.

7 · Pruebas

Las pruebas automáticas corren contra datos reales, sin simular la lógica de negocio: más de 550 entre los dos repositorios, más las de la lógica de la web. Cada error de los de estos artículos tiene su prueba de regresión con el caso que lo provocó.

← Los datos: de la FEB a Delta Lake
Fuentes. Actas oficiales y minuto a minuto de la FEB. Datos actualizados por última vez el 4 de octubre de 2026 (último partido incluido).
Contacto. ¿Algo no cuadra, falta algo o hay una idea? Los avisos son bienvenidos por cualquiera de estos canales.
Molokai Lab es un proyecto independiente y no está afiliado a la Federación Española de Baloncesto.