Carlos Narro 2c08d47a0f fix: bugs y mejoras de la revisión de código
- guión conductor: al crear capítulo con virtud sugerida se generaba con GPT-4o pero se descartaba;
  ahora se persiste con saveGuionConductor (antes se pagaba y se perdía).
- escaleta GET: la condición de migración nunca se apagaba (planos sin personajes → []), reescribiendo
  toda la BD en cada carga; ahora migra solo si hay personajesEnPlano legacy y devuelve lo migrado.
- ficheros huérfanos: al borrar un personaje se elimina su carpeta de imágenes; savePromptsPlanos y
  saveFondos borran las imágenes de IDs que desaparecen (los reutilizados no se tocan).
- race en "generar todos": imágenes de plano y variaciones de personaje se persisten por fila
  (updatePromptPlano / nuevo updateCharacterAsset) en vez de reescribir todo el set por iteración.
- path traversal: path.basename en los segmentos de URL que forman rutas de fichero (image-service +
  serving routes de vídeo/fondo).
- hardcodes de localhost (Remotion chapter-data + CORS) ahora configurables por env con default local.
- IDs de personaje: backfill/dedup de id en generatePersonajes/improvePersonajes (evita 500 y sobrescritura).
- render: cola en memoria con TTL/purga (evita fuga y jobs zombie tras reinicio).
- selectVideoVariation valida pertenencia al plano/capítulo; createProject rechaza slug vacío;
  las migraciones loguean el error en vez de tragarlo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-12 18:15:22 +02:00

This is a Next.js project bootstrapped with create-next-app.

Getting Started

First, run the development server:

npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev

Open http://localhost:3000 with your browser to see the result.

You can start editing the page by modifying app/page.tsx. The page auto-updates as you edit the file.

This project uses next/font to automatically optimize and load Geist, a new font family for Vercel.

Learn More

To learn more about Next.js, take a look at the following resources:

You can check out the Next.js GitHub repository - your feedback and contributions are welcome!

Deploy

Producción: https://story-studio.carlosnarro.com — desplegada en Dokploy (instancia personal "Forja", panel.carlosnarro.com) con autodeploy desde Gitea.

  • Push a master en git.carlosnarro.com/carlos/story-studio → Dokploy reconstruye la imagen (Dockerfile) y redespliega automáticamente.
  • Build: Dockerfile (npm run build con webpack + next start). El build script usa --webpack a propósito (la config de @remotion es incompatible con el Turbopack por defecto de Next 16).
  • Datos persistentes (bind mounts, no van en la imagen):
    • /app/data → SQLite (story-studio.db)
    • /app/projects → imágenes y vídeos generados
  • Env vars en Dokploy: GEMINI_API_KEY (imagen), OPENAI_API_KEY (texto), y opcionalmente ARK_API_KEY (vídeo).
Description
No description provided
Readme 1.1 GiB
Languages
TypeScript 94.1%
JavaScript 5.4%
CSS 0.4%
Dockerfile 0.1%