Contenido de la documentación

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

Vista general
   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:

Reclamar el siguiente 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 worker mira la cola entera, sin filtrar por dueño: es la granja de render de todo el sitio. Quién ve qué lo decide la web, que filtra cada consulta por el dueño de la fila.

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

El MCP corre en una máquina personal, así que no hay sesión de la que deducir el dueño: se le dice con 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

CarpetaQué 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