Arquitectura
El sistema vive partido en dos, y la división no es un capricho: renderizar video necesita un navegador con WebCodecs, ffmpeg y disco, y nada de eso cabe en una función efímera.
Las dos mitades
MÁQUINA PROPIA NUBE
────────────── ────
worker ──produce──► MP4 webapp (Vercel)
│ │ autoreel.kgstudio.top
│ └──sube──► almacenamiento ◄──sirve con URL firmada
│ (privado, 60 s)
└──lee la cola──► PostgreSQL ◄──escribe───────────────┘La aplicación web se despliega en Vercel y atiende cuentas, ideas, biblioteca y cuotas. El worker corre donde haya un navegador y disco, y es el único que produce.
Se tocan en dos sitios, y solo dos: la cola, donde la web encola y el worker toma, y el almacenamiento, donde el worker deja el archivo terminado y la web lo sirve.
La cola
Es una tabla de PostgreSQL, no un servicio aparte. El worker reclama el trabajo de forma atómica, así que añadir un segundo worker no duplica ningún video:
UPDATE videos SET status = 'GENERATING'
WHERE id = (
SELECT id FROM videos WHERE status = 'READY_TO_GENERATE'
ORDER BY created_at LIMIT 1
FOR UPDATE SKIP LOCKED
)
RETURNING *Al arrancar, el worker devuelve a la cola todo lo que encuentre en GENERATING: como procesa en serie, cualquier fila en ese estado es de una ejecución que murió a mitad.
Una sola granja
El almacenamiento
El MP4 y la miniatura viven en un bucket privado. La web no los sirve directamente: comprueba de quién es el video y devuelve una URL firmada que caduca en 60 segundos.
Ese paso de subida es el único punto donde las dos mitades se tocan de verdad. Sin él, el video queda perfecto en el disco del worker y la web lo muestra como no disponible, porque busca un archivo en un sistema de archivos que no es el suyo.
Identidad y dueño
La identidad es la de la zona kgstudio.top: quien tiene cuenta en uno de sus productos entra en los demás con la misma clave. Cada fila cuelga de su dueño y la web filtra por él.
El servidor MCP no tiene sesión
AUTOREEL_OWNER_ID. Sin esa variable, lo que cree se guarda sin dueño y la web no lo enseña a nadie. Es el fallo más silencioso de toda la instalación.Las piezas del repositorio
| Carpeta | Qué hay |
|---|---|
src/app/ | La web: portada, precios, documentación, panel, biblioteca, ideas, cuenta y el puente de render |
worker/ | El bucle de la cola, la producción y la subida |
mcp/ | El servidor MCP, la voz, los subtítulos, el render y los lineamientos de diseño |
templates/ | Las plantillas de diseño y el validador del contrato |
db/ | Migraciones, conexión a PostgreSQL y carga del entorno |
scripts/ | Diagnóstico, migraciones, respaldos y verificadores |
recursos/ | La música y los efectos que llevan todos los videos |