diff --git a/CONTEXT.md b/CONTEXT.md new file mode 100644 index 0000000..71deb22 --- /dev/null +++ b/CONTEXT.md @@ -0,0 +1,201 @@ +# Story Studio — Contexto para Claude Code + +## Qué es este proyecto + +**Story Studio** es una aplicación Next.js (v16, App Router, Turbopack) para crear series animadas infantiles de forma asistida por IA. El flujo de trabajo es un wizard de 3 pasos: + +1. **Idea Motriz** — Concepto, estructura narrativa, valores, protagonistas +2. **Personajes** — Fichas completas (especie, apariencia física, personalidad, utilería visual…) +3. **Capítulos** — Guión conductor → Escaleta (desglose de planos) → Prompts de imagen → Assets de personaje + +Los datos se persisten como archivos markdown + JSON en `projects/{slug}/`. + +--- + +## Stack técnico + +| Capa | Tecnología | +|------|------------| +| Framework | Next.js 16.1.6 (App Router, `use()` para params) | +| React | 19.2.3 | +| Estilos | TailwindCSS 4 + PostCSS | +| Iconos | Lucide React | +| LLM (texto) | OpenAI GPT-4o (`openai` SDK) | +| LLM (imágenes) | Google Gemini / Nano Banana Pro (`@google/genai` SDK) | +| Datos | Archivos en disco (`projects/` dir), sin base de datos | + +### Variables de entorno (`.env.local`) + +``` +OPENAI_API_KEY=sk-... +GEMINI_API_KEY=AI... +``` + +> **IMPORTANTE**: El `.env.local` DEBE estar en UTF-8 sin BOM. Si se guarda como UTF-16 LE (bytes iniciales `255,254`), Next.js no puede parsear las variables. + +--- + +## Estructura de archivos + +``` +story-studio/ +├── src/ +│ ├── app/ +│ │ ├── page.tsx # Home — lista de proyectos +│ │ ├── project/[slug]/ +│ │ │ ├── page.tsx # Wizard principal (3 pasos) +│ │ │ └── capitulo/[numero]/page.tsx # Editor de capítulo +│ │ └── api/projects/[slug]/ +│ │ ├── route.ts # CRUD proyecto +│ │ ├── idea-motriz/route.ts # Generar/refinar idea +│ │ ├── personajes/ +│ │ │ ├── route.ts # CRUD personajes +│ │ │ └── [id]/ +│ │ │ ├── assets/route.ts # ★ Character assets API +│ │ │ └── images/[assetId]/route.ts # Servir imágenes desde disco +│ │ └── capitulos/ +│ │ ├── route.ts +│ │ └── [numero]/ +│ │ ├── guion/route.ts +│ │ ├── escaleta/route.ts +│ │ └── prompts/route.ts +│ ├── components/ +│ │ ├── project/ +│ │ │ ├── CharacterAssetsPanel.tsx # ★ Panel de assets con workflow +│ │ │ ├── PersonajesView.tsx +│ │ │ ├── PersonajeEditor.tsx +│ │ │ ├── IdeaMotrizView.tsx +│ │ │ └── IdeaMotrizEditor.tsx +│ │ ├── ui/ (Button, Card, Input, Select, Toast) +│ │ └── wizard/ (WizardStepper, GenerationPanel) +│ ├── hooks/ +│ │ └── useProjectData.ts # Hook principal del wizard +│ ├── lib/ +│ │ ├── file-service.ts # Lectura/escritura de archivos de proyecto +│ │ ├── llm-service.ts # OpenAI: generación de texto (ideas, personajes, guiones, prompts) +│ │ ├── image-service.ts # ★ Gemini: generación de imágenes (text2img + img2img) +│ │ └── prompts.ts # Todos los system prompts para el LLM +│ └── types/ +│ └── project.ts # Todos los tipos TypeScript +├── projects/ # Datos persistidos en disco +│ └── {slug}/ +│ ├── project.md +│ ├── idea-motriz.md +│ ├── personajes.md +│ ├── personajes/{id}/ +│ │ ├── assets.json # CharacterAssetsData +│ │ └── images/{assetId}.png # Imágenes generadas +│ └── capitulos/{numero}/ +│ ├── capitulo.md +│ ├── guion-conductor.md +│ ├── escaleta.md +│ ├── escaleta-planos.json # Planos estructurados +│ └── prompts.md +└── package.json +``` + +--- + +## Sistema de Character Assets (última feature implementada) + +### Flujo de trabajo (4 pasos en UI) + +1. **Generar prompts** → OpenAI GPT-4o genera 9 prompts (3 T-poses + 6 emociones) basándose en la ficha del personaje +2. **Generar imagen base** → Gemini text-to-image genera la imagen canónica (T-pose frontal). El prompt es editable antes de generar. +3. **Fijar como referencia** → El usuario revisa y "bloquea" la imagen base como referencia canónica +4. **Generar variaciones** → Gemini image-to-image genera el resto de poses/emociones usando la imagen base como referencia + +### API: `/api/projects/[slug]/personajes/[id]/assets` + +**GET** → Devuelve `CharacterAssetsData { assets: CharacterAsset[], baseLocked: boolean }` + +**POST** con `action`: +| Acción | Descripción | +|--------|-------------| +| `generate-prompts` | LLM genera prompts de texto para 9 assets | +| `generate-base-image` | Text-to-image con Gemini (acepta `prompt` override) | +| `lock-base` | Fija la imagen base como referencia | +| `generate-variation` | Img-to-img de un asset individual (requiere `assetId`) | +| `generate-all-variations` | Genera todas las variaciones pendientes secuencialmente | + +### Servicio de imágenes (`image-service.ts`) + +```typescript +// Text-to-image (para imagen base) +generateImage(prompt: string, options?: { aspectRatio?: string }): Promise + +// Image-to-image (para variaciones desde referencia) +generateVariation(referenceImageBuffer: Buffer, prompt: string, options?): Promise + +// Storage +saveImage(slug, personajeId, assetId, buffer): Promise // returns URL +loadImage(slug, personajeId, assetId): Promise +``` + +Usa modelo `gemini-2.5-flash-preview-image-generation` con `responseModalities: ['TEXT', 'IMAGE']`. + +### Tipos clave (`types/project.ts`) + +```typescript +interface CharacterAsset { + id: string; // "{personajeId}-{type}-{variant}" + type: 'tpose' | 'emotion' | 'pose'; + variant: string; // 'front'|'side'|'back' o 'alegria'|'tristeza'|etc. + label: string; + prompt: string; + imageUrl?: string; // "/api/projects/{slug}/personajes/{id}/images/{assetId}" + isBase?: boolean; // true for canonical reference + status: 'pending' | 'prompt_ready' | 'generating' | 'generated'; +} + +interface CharacterAssetsData { + assets: CharacterAsset[]; + baseLocked: boolean; +} +``` + +### UI (`CharacterAssetsPanel.tsx`) + +- Modal a pantalla completa con stepper visual (4 pasos) +- Sección de imagen base con preview, editor de prompt, botones generar/regenerar/fijar +- Grid de variaciones (T-poses y emociones) con generación individual o masiva +- Se abre desde `PersonajesView.tsx` → botón "Assets" por personaje + +--- + +## Convenciones del proyecto + +- **Next.js App Router**: Todos los params son `Promise<>` y se resuelven con `await params` +- **API Routes**: `NextRequest` / `NextResponse`, patrón RESTful con acciones via `action` en body POST +- **Archivos de datos**: Markdown con frontmatter YAML (via `gray-matter`) + JSON auxiliar +- **Estilo UI**: TailwindCSS 4, diseño minimalista con paleta `stone`, acentos `indigo` y `emerald` +- **Componentes UI**: `Button` (variantes: primary/secondary/outline/ghost/danger), `Card`, `Input`/`Textarea`, `Select`, `Toast` +- **Sin base de datos**: Todo se lee/escribe en `projects/` con `fs/promises` + +--- + +## Estado actual + +- ✅ Wizard completo: idea motriz → personajes → capítulos +- ✅ Generación de guión conductor y escaleta +- ✅ Prompts de imagen por plano (lee planos desde JSON server-side) +- ✅ Character assets: prompts generados por LLM +- ✅ Character assets: generación de imagen base con Gemini (text-to-image) +- ✅ Character assets: flujo lock-base + variaciones con referencia (img-to-image) +- ⏳ **Pendiente**: Probar flujo completo de generación de imágenes (requiere `GEMINI_API_KEY` configurada) +- ⏳ **Pendiente**: Las imágenes de los prompts de planos (escaleta) aún no se generan con Gemini +- ⏳ **Pendiente**: Integrar assets de personaje con la composición final en Remotion + +--- + +## Proyecto hermano: Remotion (`../vibecoding/`) + +Existe un proyecto Remotion en `../vibecoding/` que es donde se componen los videos finales. Usa las imágenes generadas aquí. Su `package.json` incluye `remotion 4.0.409`, `openai`, `dotenv`, y `tailwindcss 4.0.0`. + +--- + +## Bugs resueltos recientemente + +1. **0 prompts generados**: Los `planos` no se guardaban como JSON separado → ahora se guardan en `escaleta-planos.json` +2. **OPENAI_API_KEY no leída**: El `.env.local` estaba en UTF-16 LE con BOM → convertido a UTF-8 sin BOM +3. **Import dinámico rompía env vars con Turbopack**: Cambiado a import estático en API routes diff --git a/package-lock.json b/package-lock.json index b385e85..0cbe48e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,16 @@ "name": "story-studio", "version": "0.1.0", "dependencies": { + "@google/genai": "^1.40.0", + "@tailwindcss/typography": "^0.5.19", + "gray-matter": "^4.0.3", + "lucide-react": "^0.563.0", "next": "16.1.6", + "openai": "^6.17.0", "react": "19.2.3", - "react-dom": "19.2.3" + "react-dom": "19.2.3", + "react-markdown": "^10.1.0", + "remark-gfm": "^4.0.1" }, "devDependencies": { "@tailwindcss/postcss": "^4", @@ -453,6 +460,28 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@google/genai": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.40.0.tgz", + "integrity": "sha512-fhIww8smT0QYRX78qWOiz/nIQhHMF5wXOrlXvj33HBrz3vKDBb+wibLcEmTA+L9dmPD4KmfNr7UF3LDQVTXNjA==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^10.3.0", + "protobufjs": "^7.5.4", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.25.2" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -971,6 +1000,23 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -1226,6 +1272,80 @@ "node": ">=12.4.0" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1513,6 +1633,18 @@ "tailwindcss": "4.1.18" } }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -1524,13 +1656,39 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, "license": "MIT" }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1545,11 +1703,25 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.19.30", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz", "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -1559,7 +1731,6 @@ "version": "19.2.10", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.10.tgz", "integrity": "sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==", - "dev": true, "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -1575,6 +1746,12 @@ "@types/react": "^19.2.0" } }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.54.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz", @@ -1844,6 +2021,12 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", @@ -2136,6 +2319,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -2153,11 +2345,22 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -2399,11 +2602,40 @@ "node": ">= 0.4" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, "node_modules/baseline-browser-mapping": { @@ -2415,6 +2647,15 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -2473,6 +2714,12 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2553,6 +2800,16 @@ ], "license": "CC-BY-4.0" }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2570,6 +2827,46 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -2580,7 +2877,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -2593,9 +2889,18 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2614,7 +2919,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2625,11 +2929,22 @@ "node": ">= 8" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -2639,6 +2954,15 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", @@ -2697,7 +3021,6 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -2711,6 +3034,19 @@ } } }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2754,6 +3090,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -2764,6 +3109,19 @@ "node": ">=8" } }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2792,6 +3150,21 @@ "node": ">= 0.4" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.283", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", @@ -2803,7 +3176,6 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/enhanced-resolve": { @@ -3398,6 +3770,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -3434,6 +3819,16 @@ "node": ">=4.0" } }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3444,6 +3839,24 @@ "node": ">=0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3505,6 +3918,29 @@ "reusify": "^1.0.4" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -3585,6 +4021,34 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3626,6 +4090,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gaxios": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", + "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/generator-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", @@ -3716,6 +4209,27 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -3729,6 +4243,30 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", @@ -3759,6 +4297,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/google-auth-library": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", + "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^8.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -3779,6 +4344,56 @@ "dev": true, "license": "ISC" }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "license": "MIT", + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -3873,6 +4488,46 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hermes-estree": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", @@ -3890,6 +4545,29 @@ "hermes-estree": "0.25.1" } }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3927,6 +4605,12 @@ "node": ">=0.8.19" } }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -3942,6 +4626,30 @@ "node": ">= 0.4" } }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -4100,6 +4808,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4126,6 +4853,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-generator-function": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", @@ -4159,6 +4895,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -4212,6 +4958,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -4368,7 +5126,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/iterator.prototype": { @@ -4389,6 +5146,21 @@ "node": ">= 0.4" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jiti": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", @@ -4432,6 +5204,15 @@ "node": ">=6" } }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -4482,6 +5263,27 @@ "node": ">=4.0" } }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -4492,6 +5294,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -4810,6 +5621,22 @@ "dev": true, "license": "MIT" }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -4833,6 +5660,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "0.563.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz", + "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -4843,6 +5679,16 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -4853,6 +5699,288 @@ "node": ">= 0.4" } }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4863,6 +5991,569 @@ "node": ">= 8" } }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -4900,11 +6591,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { @@ -5029,6 +6728,44 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -5159,6 +6896,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/openai": { + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.17.0.tgz", + "integrity": "sha512-NHRpPEUPzAvFOAFs9+9pC6+HCw/iWsYsKCMPXH5Kw7BpMxqd8g/A07/1o7Gx2TWtCnzevVRyKMRFqyiHyAlqcA==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -5227,6 +6985,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5240,6 +7004,31 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5254,7 +7043,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5267,6 +7055,28 @@ "dev": true, "license": "MIT" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5325,6 +7135,19 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5347,6 +7170,40 @@ "react-is": "^16.13.1" } }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -5406,6 +7263,33 @@ "dev": true, "license": "MIT" }, + "node_modules/react-markdown": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", + "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -5450,6 +7334,72 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -5502,6 +7452,21 @@ "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5546,6 +7511,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", @@ -5587,6 +7572,19 @@ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -5708,7 +7706,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -5721,7 +7718,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5803,6 +7799,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -5812,6 +7820,22 @@ "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, "node_modules/stable-hash": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", @@ -5833,6 +7857,65 @@ "node": ">= 0.4" } }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -5946,6 +8029,57 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -5956,6 +8090,15 @@ "node": ">=4" } }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5969,6 +8112,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, "node_modules/styled-jsx": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", @@ -6022,7 +8183,6 @@ "version": "4.1.18", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", - "dev": true, "license": "MIT" }, "node_modules/tapable": { @@ -6100,6 +8260,26 @@ "node": ">=8.0" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-api-utils": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", @@ -6297,9 +8477,95 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, "license": "MIT" }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unrs-resolver": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", @@ -6376,11 +8642,53 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -6491,6 +8799,115 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -6515,7 +8932,7 @@ "version": "4.3.6", "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", - "dev": true, + "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -6533,6 +8950,16 @@ "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index 5cd77d1..4601cfc 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,16 @@ "lint": "eslint" }, "dependencies": { + "@google/genai": "^1.40.0", + "@tailwindcss/typography": "^0.5.19", + "gray-matter": "^4.0.3", + "lucide-react": "^0.563.0", "next": "16.1.6", + "openai": "^6.17.0", "react": "19.2.3", - "react-dom": "19.2.3" + "react-dom": "19.2.3", + "react-markdown": "^10.1.0", + "remark-gfm": "^4.0.1" }, "devDependencies": { "@tailwindcss/postcss": "^4", diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01-teaser/capitulo.md b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01-teaser/capitulo.md new file mode 100644 index 0000000..d7ffae1 --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01-teaser/capitulo.md @@ -0,0 +1,9 @@ +--- +id: c0287063-e2c0-495e-8d10-cfd4311eea74 +numero: 1 +titulo: Teaser +virtudGanada: '' +status: draft +currentStep: guion_conductor +--- + diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/capitulo.md b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/capitulo.md new file mode 100644 index 0000000..de21129 --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/capitulo.md @@ -0,0 +1,44 @@ +--- +id: "cap-01" +numero: 1 +titulo: "El Reloj de Arena del Río Seco" +virtudGanada: "Paciencia" +estado: "completo" +createdAt: "2026-02-01T14:30:00.000Z" +updatedAt: "2026-02-01T14:30:00.000Z" +--- + +# Capítulo 1: El Reloj de Arena del Río Seco + +## Información General + +| Campo | Valor | +|-------|-------| +| **Número** | 1 | +| **Título** | El Reloj de Arena del Río Seco | +| **Virtud Ganada** | Paciencia | +| **Duración** | 20:00 | +| **Estado** | Completo (Guión + Escaleta) | + +## Archivos + +- [Guión Conductor](./guion-conductor.md) +- [Escaleta](./escaleta.md) + +## Resumen del Episodio + +Coco y Miko descubren que una bomba de agua vital ha sido corroída por el Polvo Marrón Oxidado del Gran Desorden, dejando sin agua a los animales del bosque. Con la ayuda del Búho Sabio, aprenden que la virtud de la **Paciencia** es clave para resolver el problema. A través de la cooperación y la espera estratégica, logran reparar la bomba y obtienen la Gema de la Paciencia. + +## Personajes del Episodio + +- **Coco** - Protagonista (debe aprender paciencia) +- **Miko** - Protagonista (estrategia y planificación) +- **Búho Sabio** - Aliado (relojero/mecánico) +- **Animales del bosque** - Conejos, pájaros (afectados por el problema) + +## Elementos Clave + +- **Nudo del Mundo:** Bomba de agua corroída +- **Objeto del Aliado:** Reloj de arena +- **Gema:** Azul suave (Paciencia) +- **Lección:** La paciencia es necesaria para resolver problemas complejos diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/escaleta-planos.json b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/escaleta-planos.json new file mode 100644 index 0000000..5dd142e --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/escaleta-planos.json @@ -0,0 +1,2060 @@ +[ + { + "id": "plano-001", + "numeroPlano": "1.1.1", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE/ESTABLISHING SHOT. Coco corretea alegremente por un vasto campo verde lleno de flores silvestres, con sus gafas de piloto sobre la frente.", + "indicacionesSonido": "Sonidos de pájaros cantando y viento suave.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-002", + "numeroPlano": "1.1.2", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "TRACKING SHOT. La cámara sigue a Coco desde detrás mientras avanza ágilmente, su cola ondeando.", + "indicacionesSonido": "Sonidos de hierba crujiente bajo las patas de Coco.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-003", + "numeroPlano": "1.1.3", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Coco se detiene abruptamente, sus orejas se alzan y su cuerpo se tensa.", + "indicacionesSonido": "El sonido del viento se intensifica, introduciendo un zumbido ominoso.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-004", + "numeroPlano": "1.1.4", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Los ojos de Coco se abren ampliamente, reflejando la sorpresa y el asombro.", + "indicacionesSonido": "Zumbido ominoso aumenta en intensidad.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-005", + "numeroPlano": "1.1.5", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "POV SHOT. La vista de Coco se centra en la neblina marrón oxidado que comienza a cubrir el campo.", + "indicacionesSonido": "Zumbido ominoso continúa, mezclado con un susurro de hojas agitadas.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-006", + "numeroPlano": "1.1.6", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE SHOT. La neblina marrón se extiende lentamente, oscureciendo el horizonte y la vitalidad del campo.", + "indicacionesSonido": "El zumbido ominoso se mezcla con un sonido de oxidación creciente.", + "personajesDetalle": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "El Gran Desorden" + ] + }, + { + "id": "plano-007", + "numeroPlano": "1.1.7", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "LOW ANGLE. Coco mira hacia arriba, observando la neblina con una mezcla de curiosidad y miedo.", + "indicacionesSonido": "Zumbido ominoso, con sonidos de hojas secas cayendo.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-008", + "numeroPlano": "1.1.8", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "EXTREME CLOSE-UP. Las patas de Coco se clavan en el suelo, preparándose para moverse rápidamente.", + "indicacionesSonido": "Sonido de tierra siendo desplazada, zumbido ominoso en el fondo.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-009", + "numeroPlano": "1.1.9", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "OVER-THE-SHOULDER. Coco observa la neblina mientras se empieza a replegar lentamente.", + "indicacionesSonido": "Zumbido ominoso disminuye levemente.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-010", + "numeroPlano": "1.1.10", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "HIGH ANGLE. La neblina cubre el campo desde arriba, mostrando la vulnerabilidad de Coco ante esta fuerza.", + "indicacionesSonido": "Sonido de oxidación y viento, zumbido ominoso más tenue.", + "personajesDetalle": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "El Gran Desorden" + ] + }, + { + "id": "plano-011", + "numeroPlano": "1.1.11", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Coco se voltea rápidamente, mirando hacia el horizonte en busca de una salida.", + "indicacionesSonido": "Sonido de hojas agitadas y zumbido ominoso en el fondo.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-012", + "numeroPlano": "1.1.12", + "segmentoGuion": "I.1 El Primer Vislumbre", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE SHOT. Coco comienza a correr de nuevo, alejándose de la neblina y buscando refugio.", + "indicacionesSonido": "Zumbido ominoso se mezcla con el sonido de patas apresuradas sobre la hierba.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-013", + "numeroPlano": "1.2.1", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Wide/establishing shot. Se muestra la aldea al amanecer, envuelta en una neblina marrón oxidada que comienza a extenderse.", + "indicacionesSonido": "Sonido ambiental de la aldea, música tensa de fondo.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-014", + "numeroPlano": "1.2.2", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Coco, de pie en una colina, observa la neblina con las gafas de piloto sobre los ojos.", + "indicacionesSonido": "Meow de preocupación de Coco.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-015", + "numeroPlano": "1.2.3", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Detalle de los ojos de Coco a través de las gafas, reflejando la neblina.", + "indicacionesSonido": "Silencio dramático, seguido de un suave meow.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-016", + "numeroPlano": "1.2.4", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "POV. Vista desde los ojos de Coco, la neblina avanza hacia la aldea.", + "indicacionesSonido": "Sonido de ovejas balando a lo lejos.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-017", + "numeroPlano": "1.2.5", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "High angle. Vista de la aldea desde arriba, mostrando la propagación de la neblina y los animales desorientados.", + "indicacionesSonido": "Ladridos de perros y balidos de ovejas, música de tensión creciente.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-018", + "numeroPlano": "1.2.6", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Low angle. Miko aparece junto a Coco, mirando la neblina con preocupación.", + "indicacionesSonido": "Meow de alerta de Miko.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "miedo" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo" + } + ], + "personajesEnPlano": [ + "Miko", + "Coco" + ] + }, + { + "id": "plano-019", + "numeroPlano": "1.2.7", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Over-the-shoulder. Perspectiva desde Coco y Miko mirando hacia la aldea, la neblina cubriendo más terreno.", + "indicacionesSonido": "Música de misterio, meows preocupados.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "miedo" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-020", + "numeroPlano": "1.2.8", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Miko abre su mochila y saca un pequeño dispositivo.", + "indicacionesSonido": "Sonido de cierre de cremallera, música que insinúa preparación.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-021", + "numeroPlano": "1.2.9", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Detalle del dispositivo en las patas de Miko, mostrando un botón rojo.", + "indicacionesSonido": "Sonido de clic cuando Miko presiona el botón.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-022", + "numeroPlano": "1.2.10", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Tracking shot. La cámara sigue un destello de luz que sale del dispositivo y se eleva hacia el cielo.", + "indicacionesSonido": "Zumbido electrónico, música que sugiere esperanza.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-023", + "numeroPlano": "1.2.11", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "High angle. Vista de la aldea desde arriba, el destello de luz dispersa parte de la neblina.", + "indicacionesSonido": "Sonido de viento, música triunfal.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-024", + "numeroPlano": "1.2.12", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Coco y Miko se miran, intercambiando un gesto de complicidad.", + "indicacionesSonido": "Meows de alivio.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-025", + "numeroPlano": "1.2.13", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up. Detalle de las patas de Coco y Miko chocando suavemente, simbolizando cooperación.", + "indicacionesSonido": "Sonido suave de contacto.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-026", + "numeroPlano": "1.2.14", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. El Búho Sabio aparece volando sobre la aldea, observando los eventos.", + "indicacionesSonido": "Aleteo de búho, música de sabiduría.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-027", + "numeroPlano": "1.2.15", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Low angle. El Búho Sabio aterriza suavemente cerca de Coco y Miko.", + "indicacionesSonido": "Aleteo y pequeño golpe al aterrizar.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-028", + "numeroPlano": "1.2.16", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Búho Sabio saca su libro de pergamino, gesticulando hacia Coco y Miko.", + "indicacionesSonido": "Suave música de misterio, sonido de pergamino deslizándose.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-029", + "numeroPlano": "1.2.17", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Coco y Miko asienten, mostrando comprensión y determinación.", + "indicacionesSonido": "Meows firmes de asentimiento.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-030", + "numeroPlano": "1.2.18", + "segmentoGuion": "I.2 Alarma en la Aldea", + "tiempoSegundos": 5, + "accionDescripcion": "Wide/establishing shot. La aldea se ve más clara, con los animales calmándose. Coco, Miko y el Búho Sabio se ven juntos, listos para la siguiente etapa.", + "indicacionesSonido": "Música esperanzadora y sonidos de naturaleza retornando a la calma.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko", + "Búho Sabio" + ] + }, + { + "id": "plano-031", + "numeroPlano": "2.1.1", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. Un hermoso bosque al amanecer. Los árboles altos y frondosos son visibles con una suave luz dorada. Coco y Miko, de pie juntos, miran hacia un árbol grande.", + "indicacionesSonido": "Ulular suave del Búho Sabio, música tranquila y sabia.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-032", + "numeroPlano": "2.1.2", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Low angle shot. Desde la base del árbol, se ve al Búho Sabio descendiendo elegantemente desde una rama alta, desplegando sus alas.", + "indicacionesSonido": "Ulular suave del Búho Sabio, leve sonido de alas batiendo.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-033", + "numeroPlano": "2.1.3", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Búho Sabio ajustándose las gafas redondas mientras aterriza suavemente en el suelo cerca de Coco y Miko.", + "indicacionesSonido": "Música tranquila y sabia, sonido leve del aterrizaje.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-034", + "numeroPlano": "2.1.4", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Rostro de Coco, con las gafas de piloto sobre su frente, mostrando curiosidad y sorpresa al ver al Búho Sabio.", + "indicacionesSonido": "Música tranquila, pequeños meows de curiosidad de Coco.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-035", + "numeroPlano": "2.1.5", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Rostro de Miko, con expresión de asombro y admiración hacia el Búho Sabio.", + "indicacionesSonido": "Música tranquila, sonido de la mochila de Miko ajustándose.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-036", + "numeroPlano": "2.1.6", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Over-the-shoulder. Desde la perspectiva del Búho Sabio, se ve a Coco y Miko observando con atención.", + "indicacionesSonido": "Ulular suave del Búho Sabio, música tranquila.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Búho Sabio", + "Coco", + "Miko" + ] + }, + { + "id": "plano-037", + "numeroPlano": "2.1.7", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Búho Sabio abre su libro de pergamino, revelando un mapa antiguo.", + "indicacionesSonido": "Sonido del pergamino al abrirse, música tranquila.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-038", + "numeroPlano": "2.1.8", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Detalle del mapa antiguo en el libro de pergamino, mostrando rutas y símbolos misteriosos.", + "indicacionesSonido": "Música tranquila, sonido leve del pergamino.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-039", + "numeroPlano": "2.1.9", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up. Ojos del Búho Sabio, brillando con sabiduría mientras observa el mapa.", + "indicacionesSonido": "Ulular suave del Búho Sabio, música tranquila.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-040", + "numeroPlano": "2.1.10", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Over-the-shoulder. Desde la perspectiva de Coco, viendo al Búho Sabio señalando un punto en el mapa.", + "indicacionesSonido": "Música tranquila, sonido del pergamino al señalar.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Búho Sabio", + "Coco" + ] + }, + { + "id": "plano-041", + "numeroPlano": "2.1.11", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Coco y Miko miran el mapa con atención, mostrando un reconocimiento y comprensión en sus rostros.", + "indicacionesSonido": "Música tranquila, pequeños meows de comprensión.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-042", + "numeroPlano": "2.1.12", + "segmentoGuion": "II.1 Búho Sabio Aparece", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. Búho Sabio, Coco y Miko juntos bajo el árbol, con el bosque extendiéndose detrás, simbolizando el comienzo de una nueva aventura.", + "indicacionesSonido": "Música tranquila y esperanzadora, ulular del Búho Sabio.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio", + "Coco", + "Miko" + ] + }, + { + "id": "plano-043", + "numeroPlano": "2.2.1", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE/ESTABLISHING SHOT. El Búho Sabio está en el centro de un claro del bosque, rodeado de árboles, Coco y Miko están sentados frente a él.", + "indicacionesSonido": "sonido de hojas moviéndose, música suave y esperanzadora", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio", + "Coco", + "Miko" + ] + }, + { + "id": "plano-044", + "numeroPlano": "2.2.2", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. El libro de pergamino en la bandolera del Búho Sabio, mostrando un dibujo de animales trabajando juntos.", + "indicacionesSonido": "suave sonido de páginas volteando", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-045", + "numeroPlano": "2.2.3", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. El Búho Sabio abre sus alas y señala el dibujo en el libro con una de ellas.", + "indicacionesSonido": "suave música, sonido de alas moviéndose", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-046", + "numeroPlano": "2.2.4", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "OVER-THE-SHOULDER. Desde la perspectiva del Búho Sabio, mirando a Coco y Miko mientras observan el libro.", + "indicacionesSonido": "leves 'meows' de Coco y Miko, música de aprendizaje", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-047", + "numeroPlano": "2.2.5", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. El rostro de Coco, sus ojos brillan con entendimiento, las gafas de piloto están sobre su frente.", + "indicacionesSonido": "suave sonido de viento", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-048", + "numeroPlano": "2.2.6", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. El rostro de Miko, su expresión cambia a una sonrisa de comprensión.", + "indicacionesSonido": "sonido de hojas, música ascendente", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-049", + "numeroPlano": "2.2.7", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "EXTREME CLOSE-UP. Las patas de Coco y Miko tocan la página del libro, señalando el dibujo.", + "indicacionesSonido": "ligero 'meow' de Miko", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-050", + "numeroPlano": "2.2.8", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. El Búho Sabio asiente lentamente, satisfecho con la reacción de los gatos.", + "indicacionesSonido": "suave música de cuerda", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-051", + "numeroPlano": "2.2.9", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "LOW ANGLE. Desde el suelo, mostrando a Coco y Miko levantándose con determinación.", + "indicacionesSonido": "sonido de hojas al ser pisadas", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-052", + "numeroPlano": "2.2.10", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "HIGH ANGLE. Desde arriba, el Búho Sabio cierra el libro y lo guarda en su bandolera.", + "indicacionesSonido": "sonido de libro cerrándose", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-053", + "numeroPlano": "2.2.11", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "PAN. Cámara sigue a Coco y Miko caminando juntos, decididos, hacia el bosque.", + "indicacionesSonido": "música optimista, sonido de pasos", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-054", + "numeroPlano": "2.2.12", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "OVER-THE-SHOULDER. Desde detrás de Miko, muestra su mochila de inventos mientras camina.", + "indicacionesSonido": "suave tintineo de la mochila", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-055", + "numeroPlano": "2.2.13", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. La mochila de Miko, mostrando el compartimento especial para las Virtudes.", + "indicacionesSonido": "sonido de cremallera abriéndose", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-056", + "numeroPlano": "2.2.14", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Coco ajusta sus gafas de piloto sobre sus ojos, lista para la acción.", + "indicacionesSonido": "sonido de ajuste de gafas", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-057", + "numeroPlano": "2.2.15", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE SHOT. Coco y Miko avanzan juntos por el bosque, dejando al Búho Sabio detrás.", + "indicacionesSonido": "música enérgica, sonido de hojas", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-058", + "numeroPlano": "2.2.16", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "LOW ANGLE. Desde el suelo, se ven las pisadas de los gatos, simbolizando su avance decidido.", + "indicacionesSonido": "sonido de hojas siendo pisadas", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-059", + "numeroPlano": "2.2.17", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "TRACKING SHOT. La cámara sigue a Coco y Miko desde atrás mientras se adentran en el bosque.", + "indicacionesSonido": "música esperanzadora", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-060", + "numeroPlano": "2.2.18", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "HIGH ANGLE. Desde arriba, vemos a Coco y Miko desapareciendo entre los árboles del bosque.", + "indicacionesSonido": "sonido de hojas, música concluyente", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-061", + "numeroPlano": "3.1.1", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "Wide/establishing shot. Se muestra el escenario completo del bosque donde Coco y Miko se encuentran, con árboles altos y el sol filtrándose a través del follaje.", + "indicacionesSonido": "música de acción y colaboración comienza suavemente, sonidos de la naturaleza de fondo.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-062", + "numeroPlano": "3.1.2", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot de Coco mirando a Miko con determinación, con sus gafas de piloto sobre la frente.", + "indicacionesSonido": "meow de coordinación de Coco, música de acción se intensifica.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-063", + "numeroPlano": "3.1.3", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up de los ojos de Miko mientras sonríe, mostrando su disposición a colaborar.", + "indicacionesSonido": "meow de aliento de Miko, herramientas metálicas tintineando dentro de la mochila.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-064", + "numeroPlano": "3.1.4", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "Over-the-shoulder shot desde la perspectiva de Coco mirando cómo Miko saca herramientas de su mochila.", + "indicacionesSonido": "efecto de herramientas metálicas tintineando, música de acción continúa.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-065", + "numeroPlano": "3.1.5", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up de la pata de Miko sacando una herramienta especial de la mochila.", + "indicacionesSonido": "efecto de herramienta metálica siendo sacada.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-066", + "numeroPlano": "3.1.6", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "High angle shot de Coco llamando a otros animales desde una pequeña colina, con gestos amplios de sus patas.", + "indicacionesSonido": "meows de aliento de Coco, música de acción más intensa.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-067", + "numeroPlano": "3.1.7", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "Tracking shot de varios animales respondiendo al llamado de Coco, acercándose desde diferentes partes del bosque.", + "indicacionesSonido": "sonidos de pasos y meows de coordinación, música de colaboración.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-068", + "numeroPlano": "3.1.8", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up del Búho Sabio ajustándose las gafas y abriendo su libro de pergamino.", + "indicacionesSonido": "sonido suave de páginas de pergamino, música de colaboración.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-069", + "numeroPlano": "3.1.9", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "Low angle shot de Coco y Miko juntos, de pie, mirando hacia el horizonte con determinación.", + "indicacionesSonido": "meows de aliento y coordinación, música de acción se intensifica.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-070", + "numeroPlano": "3.1.10", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "Pan shot desde el grupo de animales hacia el horizonte, mostrando la fuerza del equipo unido.", + "indicacionesSonido": "música de colaboración alcanza un clímax, sonidos de meows y otros animales.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko", + "Búho Sabio" + ] + }, + { + "id": "plano-071", + "numeroPlano": "3.1.11", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up de las gafas de piloto de Coco, ahora sobre sus ojos, reflejando el equipo trabajando.", + "indicacionesSonido": "música de acción continúa, sonido suave de viento.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-072", + "numeroPlano": "3.1.12", + "segmentoGuion": "III.1 Planificación del Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "POV desde Coco, observando el esfuerzo colectivo del grupo enfrentando al Gran Desorden, con la neblina marrón oxidado en la distancia.", + "indicacionesSonido": "meows de coordinación, música de acción y colaboración se mantiene.", + "personajesDetalle": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "El Gran Desorden" + ] + }, + { + "id": "plano-073", + "numeroPlano": "3.2.1", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. Vista panorámica del paisaje cubierto por la neblina marrón oxidado que simboliza el Gran Desorden.", + "indicacionesSonido": "Música épica suave comienza, viento silbante.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-074", + "numeroPlano": "3.2.2", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Coco ajustándose las gafas de piloto sobre los ojos con determinación.", + "indicacionesSonido": "Sonido de las gafas al colocarse, música aumenta en intensidad.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-075", + "numeroPlano": "3.2.3", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up. Reflejo del paisaje en las gafas de Coco, mostrando el cambio que imagina.", + "indicacionesSonido": "Sonido de enfoque nítido, música continúa creciendo.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-076", + "numeroPlano": "3.2.4", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Over-the-shoulder. Perspectiva de Coco mirando hacia Miko, quien revisa su mochila de inventos.", + "indicacionesSonido": "Música épica, sonidos de objetos dentro de la mochila.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-077", + "numeroPlano": "3.2.5", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Miko saca un artefacto brillante de su mochila.", + "indicacionesSonido": "Sonido metálico suave, música sigue creciendo.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-078", + "numeroPlano": "3.2.6", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Búho Sabio asiente lentamente mientras observa la acción.", + "indicacionesSonido": "Suave sonido de hojas moviéndose, música épica.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-079", + "numeroPlano": "3.2.7", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "High angle. Vista desde arriba de los animales moviendo elementos para disipar la neblina.", + "indicacionesSonido": "Sonidos de movimiento de ramas, música comienza a intensificarse.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-080", + "numeroPlano": "3.2.8", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Tracking shot. Siguendo a Miko mientras corre hacia un nuevo punto de acción.", + "indicacionesSonido": "Sonido de pisadas rápidas, música épica.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-081", + "numeroPlano": "3.2.9", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Low angle. Coco liderando a un grupo de animales hacia la luz emergente.", + "indicacionesSonido": "Sonido de animales moviéndose, música alcanza un crescendo.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-082", + "numeroPlano": "3.2.10", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "POV. Vista desde los ojos de Coco, la neblina comienza a dispersarse.", + "indicacionesSonido": "Sonido de viento fresco, música épica continúa.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-083", + "numeroPlano": "3.2.11", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up. Hoja verde surgiendo entre la neblina disipada.", + "indicacionesSonido": "Sonido de hojas crujientes, música suaviza momentáneamente.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-084", + "numeroPlano": "3.2.12", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Miko señalando con emoción el cambio del entorno.", + "indicacionesSonido": "Sonido de pájaros cantando, música retoma intensidad.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-085", + "numeroPlano": "3.2.13", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. Campo verde se revela completamente, animales celebrando.", + "indicacionesSonido": "Sonido de naturaleza, música épica triunfal.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-086", + "numeroPlano": "3.2.14", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Coco sonríe con satisfacción al ver los resultados.", + "indicacionesSonido": "Suave sonido de satisfacción, música suave.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-087", + "numeroPlano": "3.2.15", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Búho Sabio cierra su libro con serenidad y orgullo.", + "indicacionesSonido": "Sonido de libro cerrándose, música sigue suave.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-088", + "numeroPlano": "3.2.16", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "POV. Vista de Miko observando felices a los animales disfrutando del campo.", + "indicacionesSonido": "Sonido de risas y juegos, música armoniosa.", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-089", + "numeroPlano": "3.2.17", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Low angle. Coco y Miko mirando al cielo despejado.", + "indicacionesSonido": "Sonido de viento suave, música melódica.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-090", + "numeroPlano": "3.2.18", + "segmentoGuion": "III.2 Estrategia en Acción", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. Todos juntos, disfrutando del nuevo y verde paisaje, simbolizando la victoria sobre el Gran Desorden.", + "indicacionesSonido": "Sonido de naturaleza en paz, música culmina con un acorde majestuoso.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko", + "Búho Sabio" + ] + }, + { + "id": "plano-091", + "numeroPlano": "4.1.1", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE ESTABLISHING SHOT. La neblina marrón oxidado del Gran Desorden se disipa lentamente sobre la aldea, revelando los campos que comienzan a recuperar su color vibrante.", + "indicacionesSonido": "música jubilosa comienza suavemente, sonidos de viento disipándose", + "personajesDetalle": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "El Gran Desorden" + ] + }, + { + "id": "plano-092", + "numeroPlano": "4.1.2", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Los ojos de Coco brillan con determinación mientras observa la transformación del entorno.", + "indicacionesSonido": "música aumenta en intensidad, suave maullido de Coco", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-093", + "numeroPlano": "4.1.3", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "LOW ANGLE. Miko se levanta con su mochila de inventos, su figura parece imponente mientras observa el entorno.", + "indicacionesSonido": "sonidos de celebración animal comienzan, ladridos alegres", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-094", + "numeroPlano": "4.1.4", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "HIGH ANGLE. La aldea vista desde arriba, los colores del campo ahora vibrantes y llenos de vida, pequeños animales comienzan a salir y celebrar.", + "indicacionesSonido": "sonidos de gorjeos y relinchos", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-095", + "numeroPlano": "4.1.5", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Coco y Miko se miran y sonríen, ambos conscientes del cambio positivo que han logrado.", + "indicacionesSonido": "música culminante, intercambio de maullidos contentos", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-096", + "numeroPlano": "4.1.6", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "OVER-THE-SHOULDER. Desde el hombro de Coco, vemos cómo los animales corren y saltan felices por los campos.", + "indicacionesSonido": "celebración animal continua, ladridos y relinchos", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-097", + "numeroPlano": "4.1.7", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "EXTREME CLOSE-UP. Detalle de las gafas de piloto de Coco, reflejando la vibrante paleta de colores del entorno recuperado.", + "indicacionesSonido": "música suave, sonido de viento ligero", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ] + }, + { + "id": "plano-098", + "numeroPlano": "4.1.8", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "TRACKING SHOT. Seguimos a un grupo de animales corriendo por el campo, sus movimientos llenos de energía y libertad.", + "indicacionesSonido": "sonidos de celebración animal, gorjeos y relinchos", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-099", + "numeroPlano": "4.1.9", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Búho Sabio observa la escena desde una rama, sus gafas brillando bajo el sol, satisfecho con el resultado.", + "indicacionesSonido": "música suave, suave ulular del búho", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ] + }, + { + "id": "plano-100", + "numeroPlano": "4.1.10", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "PAN. Barrido horizontal del campo, mostrando la extensión completa del entorno recuperado y la actividad de los animales.", + "indicacionesSonido": "música culminante, sonidos de naturaleza viva", + "personajesDetalle": [], + "personajesEnPlano": [] + }, + { + "id": "plano-101", + "numeroPlano": "4.1.11", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "POV. Desde la perspectiva de Miko, vemos a Coco corriendo hacia él, con el fondo lleno de colores vibrantes.", + "indicacionesSonido": "música alegre, sonido de pisadas suaves", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-102", + "numeroPlano": "4.1.12", + "segmentoGuion": "IV.1 Recuperación del Entorno", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Coco y Miko se juntan en un abrazo, sus expresiones llenas de felicidad, mientras el entorno brilla a su alrededor.", + "indicacionesSonido": "música culminante, susurro de maullidos felices", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-103", + "numeroPlano": "4.2.1", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "Wide/establishing shot. Muestra el entorno luminoso donde Miko y Coco se encuentran. La Gema de la Cooperación brilla intensamente en el centro del plano sobre un pedestal natural.", + "indicacionesSonido": "Sonido brillante y resonante al aparecer la Gema.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Miko", + "Coco" + ] + }, + { + "id": "plano-104", + "numeroPlano": "4.2.2", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Muestra la expresión de asombro y alegría en el rostro de Miko mientras observa la Gema.", + "indicacionesSonido": "Música de logro comienza a sonar suavemente.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-105", + "numeroPlano": "4.2.3", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up. Detalle de la pata de Miko extendiéndose lentamente para recoger la Gema de la Cooperación.", + "indicacionesSonido": "El sonido brillante se intensifica al tocar la Gema.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-106", + "numeroPlano": "4.2.4", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "Over-the-shoulder. Desde la perspectiva de Miko, vemos cómo recoge la Gema y la sostiene, admirando su brillo.", + "indicacionesSonido": "Música de logro continúa con un crescendo.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ] + }, + { + "id": "plano-107", + "numeroPlano": "4.2.5", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Coco y Miko se miran mutuamente, compartiendo una expresión de logro y complicidad.", + "indicacionesSonido": "Música de cierre con un sentido de logro y continuidad.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + }, + { + "id": "plano-108", + "numeroPlano": "4.2.6", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "High angle. Desde arriba, se observa cómo Coco y Miko, con la Gema en manos de Miko, se alejan del lugar, simbolizando el fin de su misión.", + "indicacionesSonido": "La música de cierre se desvanece lentamente.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ] + } +] \ No newline at end of file diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/escaleta.md b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/escaleta.md new file mode 100644 index 0000000..108977e --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/escaleta.md @@ -0,0 +1,119 @@ +--- +capitulo: 'El Primer Nudo: La Cooperación' +virtudGanada: Cooperación +duracionTotalSegundos: 540 +--- +# Escaleta: El Primer Nudo: La Cooperación + +**Virtud: Cooperación** | Duración total: 540s + +| # | Plano | Segmento | Tiempo | Personajes | Acción | Sonido | +|---|-------|----------|--------|------------|--------|--------| +| 1 | 1.1.1 | I.1 El Primer Vislumbre | 5s | Coco(alegria) | WIDE/ESTABLISHING SHOT. Coco corretea alegremente por un vasto campo verde lleno de flores silvestres, con sus gafas de piloto sobre la frente. | Sonidos de pájaros cantando y viento suave. | +| 2 | 1.1.2 | I.1 El Primer Vislumbre | 5s | Coco(alegria) | TRACKING SHOT. La cámara sigue a Coco desde detrás mientras avanza ágilmente, su cola ondeando. | Sonidos de hierba crujiente bajo las patas de Coco. | +| 3 | 1.1.3 | I.1 El Primer Vislumbre | 5s | Coco(sorpresa) | MEDIUM SHOT. Coco se detiene abruptamente, sus orejas se alzan y su cuerpo se tensa. | El sonido del viento se intensifica, introduciendo un zumbido ominoso. | +| 4 | 1.1.4 | I.1 El Primer Vislumbre | 5s | Coco(sorpresa) | CLOSE-UP. Los ojos de Coco se abren ampliamente, reflejando la sorpresa y el asombro. | Zumbido ominoso aumenta en intensidad. | +| 5 | 1.1.5 | I.1 El Primer Vislumbre | 5s | - | POV SHOT. La vista de Coco se centra en la neblina marrón oxidado que comienza a cubrir el campo. | Zumbido ominoso continúa, mezclado con un susurro de hojas agitadas. | +| 6 | 1.1.6 | I.1 El Primer Vislumbre | 5s | El Gran Desorden(neutral) | WIDE SHOT. La neblina marrón se extiende lentamente, oscureciendo el horizonte y la vitalidad del campo. | El zumbido ominoso se mezcla con un sonido de oxidación creciente. | +| 7 | 1.1.7 | I.1 El Primer Vislumbre | 5s | Coco(miedo) | LOW ANGLE. Coco mira hacia arriba, observando la neblina con una mezcla de curiosidad y miedo. | Zumbido ominoso, con sonidos de hojas secas cayendo. | +| 8 | 1.1.8 | I.1 El Primer Vislumbre | 5s | Coco(miedo) | EXTREME CLOSE-UP. Las patas de Coco se clavan en el suelo, preparándose para moverse rápidamente. | Sonido de tierra siendo desplazada, zumbido ominoso en el fondo. | +| 9 | 1.1.9 | I.1 El Primer Vislumbre | 5s | Coco(miedo) | OVER-THE-SHOULDER. Coco observa la neblina mientras se empieza a replegar lentamente. | Zumbido ominoso disminuye levemente. | +| 10 | 1.1.10 | I.1 El Primer Vislumbre | 5s | El Gran Desorden(neutral) | HIGH ANGLE. La neblina cubre el campo desde arriba, mostrando la vulnerabilidad de Coco ante esta fuerza. | Sonido de oxidación y viento, zumbido ominoso más tenue. | +| 11 | 1.1.11 | I.1 El Primer Vislumbre | 5s | Coco(miedo) | MEDIUM SHOT. Coco se voltea rápidamente, mirando hacia el horizonte en busca de una salida. | Sonido de hojas agitadas y zumbido ominoso en el fondo. | +| 12 | 1.1.12 | I.1 El Primer Vislumbre | 5s | Coco(miedo) | WIDE SHOT. Coco comienza a correr de nuevo, alejándose de la neblina y buscando refugio. | Zumbido ominoso se mezcla con el sonido de patas apresuradas sobre la hierba. | +| 13 | 1.2.1 | I.2 Alarma en la Aldea | 5s | - | Wide/establishing shot. Se muestra la aldea al amanecer, envuelta en una neblina marrón oxidada que comienza a extenderse. | Sonido ambiental de la aldea, música tensa de fondo. | +| 14 | 1.2.2 | I.2 Alarma en la Aldea | 5s | Coco(sorpresa) | Medium shot. Coco, de pie en una colina, observa la neblina con las gafas de piloto sobre los ojos. | Meow de preocupación de Coco. | +| 15 | 1.2.3 | I.2 Alarma en la Aldea | 5s | Coco(miedo) | Close-up. Detalle de los ojos de Coco a través de las gafas, reflejando la neblina. | Silencio dramático, seguido de un suave meow. | +| 16 | 1.2.4 | I.2 Alarma en la Aldea | 5s | - | POV. Vista desde los ojos de Coco, la neblina avanza hacia la aldea. | Sonido de ovejas balando a lo lejos. | +| 17 | 1.2.5 | I.2 Alarma en la Aldea | 5s | - | High angle. Vista de la aldea desde arriba, mostrando la propagación de la neblina y los animales desorientados. | Ladridos de perros y balidos de ovejas, música de tensión creciente. | +| 18 | 1.2.6 | I.2 Alarma en la Aldea | 5s | Miko(miedo), Coco(miedo) | Low angle. Miko aparece junto a Coco, mirando la neblina con preocupación. | Meow de alerta de Miko. | +| 19 | 1.2.7 | I.2 Alarma en la Aldea | 5s | Coco(miedo), Miko(miedo) | Over-the-shoulder. Perspectiva desde Coco y Miko mirando hacia la aldea, la neblina cubriendo más terreno. | Música de misterio, meows preocupados. | +| 20 | 1.2.8 | I.2 Alarma en la Aldea | 5s | Miko(neutral) | Medium shot. Miko abre su mochila y saca un pequeño dispositivo. | Sonido de cierre de cremallera, música que insinúa preparación. | +| 21 | 1.2.9 | I.2 Alarma en la Aldea | 5s | Miko(neutral) | Close-up. Detalle del dispositivo en las patas de Miko, mostrando un botón rojo. | Sonido de clic cuando Miko presiona el botón. | +| 22 | 1.2.10 | I.2 Alarma en la Aldea | 5s | - | Tracking shot. La cámara sigue un destello de luz que sale del dispositivo y se eleva hacia el cielo. | Zumbido electrónico, música que sugiere esperanza. | +| 23 | 1.2.11 | I.2 Alarma en la Aldea | 5s | - | High angle. Vista de la aldea desde arriba, el destello de luz dispersa parte de la neblina. | Sonido de viento, música triunfal. | +| 24 | 1.2.12 | I.2 Alarma en la Aldea | 5s | Coco(alegria), Miko(alegria) | Medium shot. Coco y Miko se miran, intercambiando un gesto de complicidad. | Meows de alivio. | +| 25 | 1.2.13 | I.2 Alarma en la Aldea | 5s | Coco(alegria), Miko(alegria) | Extreme close-up. Detalle de las patas de Coco y Miko chocando suavemente, simbolizando cooperación. | Sonido suave de contacto. | +| 26 | 1.2.14 | I.2 Alarma en la Aldea | 5s | Búho Sabio(neutral) | Wide shot. El Búho Sabio aparece volando sobre la aldea, observando los eventos. | Aleteo de búho, música de sabiduría. | +| 27 | 1.2.15 | I.2 Alarma en la Aldea | 5s | Búho Sabio(neutral) | Low angle. El Búho Sabio aterriza suavemente cerca de Coco y Miko. | Aleteo y pequeño golpe al aterrizar. | +| 28 | 1.2.16 | I.2 Alarma en la Aldea | 5s | Búho Sabio(neutral) | Medium shot. Búho Sabio saca su libro de pergamino, gesticulando hacia Coco y Miko. | Suave música de misterio, sonido de pergamino deslizándose. | +| 29 | 1.2.17 | I.2 Alarma en la Aldea | 5s | Coco(neutral), Miko(neutral) | Close-up. Coco y Miko asienten, mostrando comprensión y determinación. | Meows firmes de asentimiento. | +| 30 | 1.2.18 | I.2 Alarma en la Aldea | 5s | Coco(alegria), Miko(alegria), Búho Sabio(neutral) | Wide/establishing shot. La aldea se ve más clara, con los animales calmándose. Coco, Miko y el Búho Sabio se ven juntos, listos para la siguiente etapa. | Música esperanzadora y sonidos de naturaleza retornando a la calma. | +| 31 | 2.1.1 | II.1 Búho Sabio Aparece | 5s | Coco(neutral), Miko(neutral) | Wide shot. Un hermoso bosque al amanecer. Los árboles altos y frondosos son visibles con una suave luz dorada. Coco y Miko, de pie juntos, miran hacia un árbol grande. | Ulular suave del Búho Sabio, música tranquila y sabia. | +| 32 | 2.1.2 | II.1 Búho Sabio Aparece | 5s | Búho Sabio(alegria) | Low angle shot. Desde la base del árbol, se ve al Búho Sabio descendiendo elegantemente desde una rama alta, desplegando sus alas. | Ulular suave del Búho Sabio, leve sonido de alas batiendo. | +| 33 | 2.1.3 | II.1 Búho Sabio Aparece | 5s | Búho Sabio(alegria) | Medium shot. Búho Sabio ajustándose las gafas redondas mientras aterriza suavemente en el suelo cerca de Coco y Miko. | Música tranquila y sabia, sonido leve del aterrizaje. | +| 34 | 2.1.4 | II.1 Búho Sabio Aparece | 5s | Coco(sorpresa) | Close-up. Rostro de Coco, con las gafas de piloto sobre su frente, mostrando curiosidad y sorpresa al ver al Búho Sabio. | Música tranquila, pequeños meows de curiosidad de Coco. | +| 35 | 2.1.5 | II.1 Búho Sabio Aparece | 5s | Miko(sorpresa) | Close-up. Rostro de Miko, con expresión de asombro y admiración hacia el Búho Sabio. | Música tranquila, sonido de la mochila de Miko ajustándose. | +| 36 | 2.1.6 | II.1 Búho Sabio Aparece | 5s | Búho Sabio(neutral), Coco(sorpresa), Miko(sorpresa) | Over-the-shoulder. Desde la perspectiva del Búho Sabio, se ve a Coco y Miko observando con atención. | Ulular suave del Búho Sabio, música tranquila. | +| 37 | 2.1.7 | II.1 Búho Sabio Aparece | 5s | Búho Sabio(alegria) | Medium shot. Búho Sabio abre su libro de pergamino, revelando un mapa antiguo. | Sonido del pergamino al abrirse, música tranquila. | +| 38 | 2.1.8 | II.1 Búho Sabio Aparece | 5s | - | Close-up. Detalle del mapa antiguo en el libro de pergamino, mostrando rutas y símbolos misteriosos. | Música tranquila, sonido leve del pergamino. | +| 39 | 2.1.9 | II.1 Búho Sabio Aparece | 5s | Búho Sabio(neutral) | Extreme close-up. Ojos del Búho Sabio, brillando con sabiduría mientras observa el mapa. | Ulular suave del Búho Sabio, música tranquila. | +| 40 | 2.1.10 | II.1 Búho Sabio Aparece | 5s | Búho Sabio(neutral), Coco(sorpresa) | Over-the-shoulder. Desde la perspectiva de Coco, viendo al Búho Sabio señalando un punto en el mapa. | Música tranquila, sonido del pergamino al señalar. | +| 41 | 2.1.11 | II.1 Búho Sabio Aparece | 5s | Coco(alegria), Miko(alegria) | Medium shot. Coco y Miko miran el mapa con atención, mostrando un reconocimiento y comprensión en sus rostros. | Música tranquila, pequeños meows de comprensión. | +| 42 | 2.1.12 | II.1 Búho Sabio Aparece | 5s | Búho Sabio(alegria), Coco(alegria), Miko(alegria) | Wide shot. Búho Sabio, Coco y Miko juntos bajo el árbol, con el bosque extendiéndose detrás, simbolizando el comienzo de una nueva aventura. | Música tranquila y esperanzadora, ulular del Búho Sabio. | +| 43 | 2.2.1 | II.2 Entendiendo la Cooperación | 5s | Búho Sabio(neutral), Coco(neutral), Miko(neutral) | WIDE/ESTABLISHING SHOT. El Búho Sabio está en el centro de un claro del bosque, rodeado de árboles, Coco y Miko están sentados frente a él. | sonido de hojas moviéndose, música suave y esperanzadora | +| 44 | 2.2.2 | II.2 Entendiendo la Cooperación | 5s | Búho Sabio(neutral) | CLOSE-UP. El libro de pergamino en la bandolera del Búho Sabio, mostrando un dibujo de animales trabajando juntos. | suave sonido de páginas volteando | +| 45 | 2.2.3 | II.2 Entendiendo la Cooperación | 5s | Búho Sabio(alegria) | MEDIUM SHOT. El Búho Sabio abre sus alas y señala el dibujo en el libro con una de ellas. | suave música, sonido de alas moviéndose | +| 46 | 2.2.4 | II.2 Entendiendo la Cooperación | 5s | Coco(sorpresa), Miko(sorpresa) | OVER-THE-SHOULDER. Desde la perspectiva del Búho Sabio, mirando a Coco y Miko mientras observan el libro. | leves 'meows' de Coco y Miko, música de aprendizaje | +| 47 | 2.2.5 | II.2 Entendiendo la Cooperación | 5s | Coco(alegria) | CLOSE-UP. El rostro de Coco, sus ojos brillan con entendimiento, las gafas de piloto están sobre su frente. | suave sonido de viento | +| 48 | 2.2.6 | II.2 Entendiendo la Cooperación | 5s | Miko(alegria) | CLOSE-UP. El rostro de Miko, su expresión cambia a una sonrisa de comprensión. | sonido de hojas, música ascendente | +| 49 | 2.2.7 | II.2 Entendiendo la Cooperación | 5s | Coco(neutral), Miko(neutral) | EXTREME CLOSE-UP. Las patas de Coco y Miko tocan la página del libro, señalando el dibujo. | ligero 'meow' de Miko | +| 50 | 2.2.8 | II.2 Entendiendo la Cooperación | 5s | Búho Sabio(alegria) | MEDIUM SHOT. El Búho Sabio asiente lentamente, satisfecho con la reacción de los gatos. | suave música de cuerda | +| 51 | 2.2.9 | II.2 Entendiendo la Cooperación | 5s | Coco(alegria), Miko(alegria) | LOW ANGLE. Desde el suelo, mostrando a Coco y Miko levantándose con determinación. | sonido de hojas al ser pisadas | +| 52 | 2.2.10 | II.2 Entendiendo la Cooperación | 5s | Búho Sabio(neutral) | HIGH ANGLE. Desde arriba, el Búho Sabio cierra el libro y lo guarda en su bandolera. | sonido de libro cerrándose | +| 53 | 2.2.11 | II.2 Entendiendo la Cooperación | 5s | Coco(alegria), Miko(alegria) | PAN. Cámara sigue a Coco y Miko caminando juntos, decididos, hacia el bosque. | música optimista, sonido de pasos | +| 54 | 2.2.12 | II.2 Entendiendo la Cooperación | 5s | Miko(neutral) | OVER-THE-SHOULDER. Desde detrás de Miko, muestra su mochila de inventos mientras camina. | suave tintineo de la mochila | +| 55 | 2.2.13 | II.2 Entendiendo la Cooperación | 5s | Miko(neutral) | CLOSE-UP. La mochila de Miko, mostrando el compartimento especial para las Virtudes. | sonido de cremallera abriéndose | +| 56 | 2.2.14 | II.2 Entendiendo la Cooperación | 5s | Coco(alegria) | MEDIUM SHOT. Coco ajusta sus gafas de piloto sobre sus ojos, lista para la acción. | sonido de ajuste de gafas | +| 57 | 2.2.15 | II.2 Entendiendo la Cooperación | 5s | Coco(neutral), Miko(neutral) | WIDE SHOT. Coco y Miko avanzan juntos por el bosque, dejando al Búho Sabio detrás. | música enérgica, sonido de hojas | +| 58 | 2.2.16 | II.2 Entendiendo la Cooperación | 5s | Coco(neutral), Miko(neutral) | LOW ANGLE. Desde el suelo, se ven las pisadas de los gatos, simbolizando su avance decidido. | sonido de hojas siendo pisadas | +| 59 | 2.2.17 | II.2 Entendiendo la Cooperación | 5s | Coco(alegria), Miko(alegria) | TRACKING SHOT. La cámara sigue a Coco y Miko desde atrás mientras se adentran en el bosque. | música esperanzadora | +| 60 | 2.2.18 | II.2 Entendiendo la Cooperación | 5s | Coco(alegria), Miko(alegria) | HIGH ANGLE. Desde arriba, vemos a Coco y Miko desapareciendo entre los árboles del bosque. | sonido de hojas, música concluyente | +| 61 | 3.1.1 | III.1 Planificación del Equipo | 5s | Coco(neutral), Miko(neutral) | Wide/establishing shot. Se muestra el escenario completo del bosque donde Coco y Miko se encuentran, con árboles altos y el sol filtrándose a través del follaje. | música de acción y colaboración comienza suavemente, sonidos de la naturaleza de fondo. | +| 62 | 3.1.2 | III.1 Planificación del Equipo | 5s | Coco(alegria) | Medium shot de Coco mirando a Miko con determinación, con sus gafas de piloto sobre la frente. | meow de coordinación de Coco, música de acción se intensifica. | +| 63 | 3.1.3 | III.1 Planificación del Equipo | 5s | Miko(alegria) | Close-up de los ojos de Miko mientras sonríe, mostrando su disposición a colaborar. | meow de aliento de Miko, herramientas metálicas tintineando dentro de la mochila. | +| 64 | 3.1.4 | III.1 Planificación del Equipo | 5s | Coco(alegria), Miko(alegria) | Over-the-shoulder shot desde la perspectiva de Coco mirando cómo Miko saca herramientas de su mochila. | efecto de herramientas metálicas tintineando, música de acción continúa. | +| 65 | 3.1.5 | III.1 Planificación del Equipo | 5s | Miko(neutral) | Extreme close-up de la pata de Miko sacando una herramienta especial de la mochila. | efecto de herramienta metálica siendo sacada. | +| 66 | 3.1.6 | III.1 Planificación del Equipo | 5s | Coco(alegria) | High angle shot de Coco llamando a otros animales desde una pequeña colina, con gestos amplios de sus patas. | meows de aliento de Coco, música de acción más intensa. | +| 67 | 3.1.7 | III.1 Planificación del Equipo | 5s | Búho Sabio(alegria) | Tracking shot de varios animales respondiendo al llamado de Coco, acercándose desde diferentes partes del bosque. | sonidos de pasos y meows de coordinación, música de colaboración. | +| 68 | 3.1.8 | III.1 Planificación del Equipo | 5s | Búho Sabio(alegria) | Close-up del Búho Sabio ajustándose las gafas y abriendo su libro de pergamino. | sonido suave de páginas de pergamino, música de colaboración. | +| 69 | 3.1.9 | III.1 Planificación del Equipo | 5s | Coco(alegria), Miko(alegria) | Low angle shot de Coco y Miko juntos, de pie, mirando hacia el horizonte con determinación. | meows de aliento y coordinación, música de acción se intensifica. | +| 70 | 3.1.10 | III.1 Planificación del Equipo | 5s | Coco(alegria), Miko(alegria), Búho Sabio(alegria) | Pan shot desde el grupo de animales hacia el horizonte, mostrando la fuerza del equipo unido. | música de colaboración alcanza un clímax, sonidos de meows y otros animales. | +| 71 | 3.1.11 | III.1 Planificación del Equipo | 5s | Coco(alegria) | Extreme close-up de las gafas de piloto de Coco, ahora sobre sus ojos, reflejando el equipo trabajando. | música de acción continúa, sonido suave de viento. | +| 72 | 3.1.12 | III.1 Planificación del Equipo | 5s | El Gran Desorden(neutral) | POV desde Coco, observando el esfuerzo colectivo del grupo enfrentando al Gran Desorden, con la neblina marrón oxidado en la distancia. | meows de coordinación, música de acción y colaboración se mantiene. | +| 73 | 3.2.1 | III.2 Estrategia en Acción | 5s | - | Wide shot. Vista panorámica del paisaje cubierto por la neblina marrón oxidado que simboliza el Gran Desorden. | Música épica suave comienza, viento silbante. | +| 74 | 3.2.2 | III.2 Estrategia en Acción | 5s | Coco(neutral) | Medium shot. Coco ajustándose las gafas de piloto sobre los ojos con determinación. | Sonido de las gafas al colocarse, música aumenta en intensidad. | +| 75 | 3.2.3 | III.2 Estrategia en Acción | 5s | Coco(neutral) | Extreme close-up. Reflejo del paisaje en las gafas de Coco, mostrando el cambio que imagina. | Sonido de enfoque nítido, música continúa creciendo. | +| 76 | 3.2.4 | III.2 Estrategia en Acción | 5s | Coco(neutral), Miko(neutral) | Over-the-shoulder. Perspectiva de Coco mirando hacia Miko, quien revisa su mochila de inventos. | Música épica, sonidos de objetos dentro de la mochila. | +| 77 | 3.2.5 | III.2 Estrategia en Acción | 5s | Miko(sorpresa) | Close-up. Miko saca un artefacto brillante de su mochila. | Sonido metálico suave, música sigue creciendo. | +| 78 | 3.2.6 | III.2 Estrategia en Acción | 5s | Búho Sabio(neutral) | Medium shot. Búho Sabio asiente lentamente mientras observa la acción. | Suave sonido de hojas moviéndose, música épica. | +| 79 | 3.2.7 | III.2 Estrategia en Acción | 5s | Coco(neutral), Miko(neutral) | High angle. Vista desde arriba de los animales moviendo elementos para disipar la neblina. | Sonidos de movimiento de ramas, música comienza a intensificarse. | +| 80 | 3.2.8 | III.2 Estrategia en Acción | 5s | Miko(neutral) | Tracking shot. Siguendo a Miko mientras corre hacia un nuevo punto de acción. | Sonido de pisadas rápidas, música épica. | +| 81 | 3.2.9 | III.2 Estrategia en Acción | 5s | Coco(neutral) | Low angle. Coco liderando a un grupo de animales hacia la luz emergente. | Sonido de animales moviéndose, música alcanza un crescendo. | +| 82 | 3.2.10 | III.2 Estrategia en Acción | 5s | - | POV. Vista desde los ojos de Coco, la neblina comienza a dispersarse. | Sonido de viento fresco, música épica continúa. | +| 83 | 3.2.11 | III.2 Estrategia en Acción | 5s | - | Extreme close-up. Hoja verde surgiendo entre la neblina disipada. | Sonido de hojas crujientes, música suaviza momentáneamente. | +| 84 | 3.2.12 | III.2 Estrategia en Acción | 5s | Miko(sorpresa) | Medium shot. Miko señalando con emoción el cambio del entorno. | Sonido de pájaros cantando, música retoma intensidad. | +| 85 | 3.2.13 | III.2 Estrategia en Acción | 5s | - | Wide shot. Campo verde se revela completamente, animales celebrando. | Sonido de naturaleza, música épica triunfal. | +| 86 | 3.2.14 | III.2 Estrategia en Acción | 5s | Coco(alegria) | Close-up. Coco sonríe con satisfacción al ver los resultados. | Suave sonido de satisfacción, música suave. | +| 87 | 3.2.15 | III.2 Estrategia en Acción | 5s | Búho Sabio(alegria) | Medium shot. Búho Sabio cierra su libro con serenidad y orgullo. | Sonido de libro cerrándose, música sigue suave. | +| 88 | 3.2.16 | III.2 Estrategia en Acción | 5s | - | POV. Vista de Miko observando felices a los animales disfrutando del campo. | Sonido de risas y juegos, música armoniosa. | +| 89 | 3.2.17 | III.2 Estrategia en Acción | 5s | Coco(neutral), Miko(neutral) | Low angle. Coco y Miko mirando al cielo despejado. | Sonido de viento suave, música melódica. | +| 90 | 3.2.18 | III.2 Estrategia en Acción | 5s | Coco(alegria), Miko(alegria), Búho Sabio(alegria) | Wide shot. Todos juntos, disfrutando del nuevo y verde paisaje, simbolizando la victoria sobre el Gran Desorden. | Sonido de naturaleza en paz, música culmina con un acorde majestuoso. | +| 91 | 4.1.1 | IV.1 Recuperación del Entorno | 5s | El Gran Desorden(neutral) | WIDE ESTABLISHING SHOT. La neblina marrón oxidado del Gran Desorden se disipa lentamente sobre la aldea, revelando los campos que comienzan a recuperar su color vibrante. | música jubilosa comienza suavemente, sonidos de viento disipándose | +| 92 | 4.1.2 | IV.1 Recuperación del Entorno | 5s | Coco(alegria) | CLOSE-UP. Los ojos de Coco brillan con determinación mientras observa la transformación del entorno. | música aumenta en intensidad, suave maullido de Coco | +| 93 | 4.1.3 | IV.1 Recuperación del Entorno | 5s | Miko(alegria) | LOW ANGLE. Miko se levanta con su mochila de inventos, su figura parece imponente mientras observa el entorno. | sonidos de celebración animal comienzan, ladridos alegres | +| 94 | 4.1.4 | IV.1 Recuperación del Entorno | 5s | - | HIGH ANGLE. La aldea vista desde arriba, los colores del campo ahora vibrantes y llenos de vida, pequeños animales comienzan a salir y celebrar. | sonidos de gorjeos y relinchos | +| 95 | 4.1.5 | IV.1 Recuperación del Entorno | 5s | Coco(alegria), Miko(alegria) | MEDIUM SHOT. Coco y Miko se miran y sonríen, ambos conscientes del cambio positivo que han logrado. | música culminante, intercambio de maullidos contentos | +| 96 | 4.1.6 | IV.1 Recuperación del Entorno | 5s | Coco(alegria) | OVER-THE-SHOULDER. Desde el hombro de Coco, vemos cómo los animales corren y saltan felices por los campos. | celebración animal continua, ladridos y relinchos | +| 97 | 4.1.7 | IV.1 Recuperación del Entorno | 5s | Coco(alegria) | EXTREME CLOSE-UP. Detalle de las gafas de piloto de Coco, reflejando la vibrante paleta de colores del entorno recuperado. | música suave, sonido de viento ligero | +| 98 | 4.1.8 | IV.1 Recuperación del Entorno | 5s | - | TRACKING SHOT. Seguimos a un grupo de animales corriendo por el campo, sus movimientos llenos de energía y libertad. | sonidos de celebración animal, gorjeos y relinchos | +| 99 | 4.1.9 | IV.1 Recuperación del Entorno | 5s | Búho Sabio(alegria) | MEDIUM SHOT. Búho Sabio observa la escena desde una rama, sus gafas brillando bajo el sol, satisfecho con el resultado. | música suave, suave ulular del búho | +| 100 | 4.1.10 | IV.1 Recuperación del Entorno | 5s | - | PAN. Barrido horizontal del campo, mostrando la extensión completa del entorno recuperado y la actividad de los animales. | música culminante, sonidos de naturaleza viva | +| 101 | 4.1.11 | IV.1 Recuperación del Entorno | 5s | Miko(alegria) | POV. Desde la perspectiva de Miko, vemos a Coco corriendo hacia él, con el fondo lleno de colores vibrantes. | música alegre, sonido de pisadas suaves | +| 102 | 4.1.12 | IV.1 Recuperación del Entorno | 5s | Coco(alegria), Miko(alegria) | CLOSE-UP. Coco y Miko se juntan en un abrazo, sus expresiones llenas de felicidad, mientras el entorno brilla a su alrededor. | música culminante, susurro de maullidos felices | +| 103 | 4.2.1 | IV.2 La Gema de la Cooperación | 5s | Miko(sorpresa), Coco(sorpresa) | Wide/establishing shot. Muestra el entorno luminoso donde Miko y Coco se encuentran. La Gema de la Cooperación brilla intensamente en el centro del plano sobre un pedestal natural. | Sonido brillante y resonante al aparecer la Gema. | +| 104 | 4.2.2 | IV.2 La Gema de la Cooperación | 5s | Miko(alegria) | Close-up. Muestra la expresión de asombro y alegría en el rostro de Miko mientras observa la Gema. | Música de logro comienza a sonar suavemente. | +| 105 | 4.2.3 | IV.2 La Gema de la Cooperación | 5s | Miko(alegria) | Extreme close-up. Detalle de la pata de Miko extendiéndose lentamente para recoger la Gema de la Cooperación. | El sonido brillante se intensifica al tocar la Gema. | +| 106 | 4.2.4 | IV.2 La Gema de la Cooperación | 5s | Miko(alegria) | Over-the-shoulder. Desde la perspectiva de Miko, vemos cómo recoge la Gema y la sostiene, admirando su brillo. | Música de logro continúa con un crescendo. | +| 107 | 4.2.5 | IV.2 La Gema de la Cooperación | 5s | Coco(alegria), Miko(alegria) | Medium shot. Coco y Miko se miran mutuamente, compartiendo una expresión de logro y complicidad. | Música de cierre con un sentido de logro y continuidad. | +| 108 | 4.2.6 | IV.2 La Gema de la Cooperación | 5s | Coco(alegria), Miko(alegria) | High angle. Desde arriba, se observa cómo Coco y Miko, con la Gema en manos de Miko, se alejan del lugar, simbolizando el fin de su misión. | La música de cierre se desvanece lentamente. | diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos.json b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos.json new file mode 100644 index 0000000..30a64f6 --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos.json @@ -0,0 +1,58 @@ +[ + { + "id": "fondo-I.1", + "segmentoId": "I.1", + "nombre": "El Primer Vislumbre", + "descripcion": "Campos abiertos con hierba verde, cielos claros que gradualmente se oscurecen por la neblina. El sol está en lo alto, pero su luz se atenúa.", + "promptGeneracion": "" + }, + { + "id": "fondo-I.2", + "segmentoId": "I.2", + "nombre": "Alarma en la Aldea", + "descripcion": "La aldea está envuelta parcialmente por la neblina, las casas y caminos son apenas visibles. La atmósfera es de creciente inquietud.", + "promptGeneracion": "" + }, + { + "id": "fondo-II.1", + "segmentoId": "II.1", + "nombre": "Búho Sabio Aparece", + "descripcion": "Un viejo roble ofrece sombra contra la neblina, sus ramas son hogar del Búho Sabio. La luz del sol es tenue debido a la neblina.", + "promptGeneracion": "" + }, + { + "id": "fondo-II.2", + "segmentoId": "II.2", + "nombre": "Entendiendo la Cooperación", + "descripcion": "Ilustraciones en el libro del Búho Sabio cobran vida, mostrando escenas de cooperación. La neblina rodea el árbol, creando un contraste visual.", + "promptGeneracion": "" + }, + { + "id": "fondo-III.1", + "segmentoId": "III.1", + "nombre": "Planificación del Equipo", + "descripcion": "La aldea ahora está más clara gracias al esfuerzo conjunto. Los animales se agrupan alrededor de Coco y Miko.", + "promptGeneracion": "" + }, + { + "id": "fondo-III.2", + "segmentoId": "III.2", + "nombre": "Estrategia en Acción", + "descripcion": "Escenarios de animales trabajando juntos en armonía, levantando obstáculos y colaborando para restaurar el entorno.", + "promptGeneracion": "" + }, + { + "id": "fondo-IV.1", + "segmentoId": "IV.1", + "nombre": "Recuperación del Entorno", + "descripcion": "Cielos despejados, sol brillando sobre un paisaje rejuvenecido. La aldea muestra vida y color.", + "promptGeneracion": "" + }, + { + "id": "fondo-IV.2", + "segmentoId": "IV.2", + "nombre": "La Gema de la Cooperación", + "descripcion": "La Gema ilumina sus rostros, reflejando el éxito logrado. Búho Sabio observa satisfecho desde su rama.", + "promptGeneracion": "" + } +] \ No newline at end of file diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-I.1.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-I.1.png new file mode 100644 index 0000000..6b08241 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-I.1.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-I.2.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-I.2.png new file mode 100644 index 0000000..326f727 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-I.2.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-II.1.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-II.1.png new file mode 100644 index 0000000..05b25f6 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-II.1.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-II.2.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-II.2.png new file mode 100644 index 0000000..a308861 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-II.2.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-III.1.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-III.1.png new file mode 100644 index 0000000..305257a Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-III.1.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-III.2.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-III.2.png new file mode 100644 index 0000000..5407b14 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-III.2.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-IV.1.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-IV.1.png new file mode 100644 index 0000000..b66692a Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-IV.1.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-IV.2.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-IV.2.png new file mode 100644 index 0000000..21b24fc Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/fondos/fondo-IV.2.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/guion-actos.json b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/guion-actos.json new file mode 100644 index 0000000..71991c5 --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/guion-actos.json @@ -0,0 +1,98 @@ +[ + { + "numero": 1, + "nombre": "Detección", + "tiempoInicio": "0:00", + "tiempoFin": "2:30", + "segmentos": [ + { + "id": "I.1", + "nombre": "El Primer Vislumbre", + "tiempo": "0:00-1:30", + "accionVisualClave": "Coco corretea por un campo verde, sus gafas de piloto sobre su frente. De repente, se detiene, sus orejas se alzan y sus ojos se abren ampliamente al detectar una neblina marrón oxidado que oscurece el entorno.", + "disenoFondo": "Campos abiertos con hierba verde, cielos claros que gradualmente se oscurecen por la neblina. El sol está en lo alto, pero su luz se atenúa.", + "disenoSonido": "Sonidos de la naturaleza: pájaros cantando, viento suave. Gradualmente, un zumbido ominoso acompaña la aparición de la neblina." + }, + { + "id": "I.2", + "nombre": "Alarma en la Aldea", + "tiempo": "1:30-2:30", + "accionVisualClave": "Coco observa cómo la neblina se extiende hacia la aldea, los animales locales se desorientan. Miko aparece junto a Coco, observando con preocupación.", + "disenoFondo": "La aldea está envuelta parcialmente por la neblina, las casas y caminos son apenas visibles. La atmósfera es de creciente inquietud.", + "disenoSonido": "Meows de Coco y Miko que reflejan alarma. Los sonidos de los animales desorientados: ovejas balando, perros ladrando a lo lejos." + } + ] + }, + { + "numero": 2, + "nombre": "Encuentro y Bloqueo", + "tiempoInicio": "2:30", + "tiempoFin": "5:00", + "segmentos": [ + { + "id": "II.1", + "nombre": "Búho Sabio Aparece", + "tiempo": "2:30-4:00", + "accionVisualClave": "Búho Sabio desciende elegantemente desde un árbol cercano, ajustándose las gafas, y se acerca a Coco y Miko. Les señala un mapa antiguo en su libro de pergamino.", + "disenoFondo": "Un viejo roble ofrece sombra contra la neblina, sus ramas son hogar del Búho Sabio. La luz del sol es tenue debido a la neblina.", + "disenoSonido": "Ulular suave del Búho Sabio, acompañado de un tema musical tranquilo y sabio. El sonido del pergamino al abrirse." + }, + { + "id": "II.2", + "nombre": "Entendiendo la Cooperación", + "tiempo": "4:00-5:00", + "accionVisualClave": "El Búho Sabio señala con su ala la importancia de la cooperación, mostrando dibujos de animales trabajando juntos. Coco y Miko asienten, comprendiendo la lección.", + "disenoFondo": "Ilustraciones en el libro del Búho Sabio cobran vida, mostrando escenas de cooperación. La neblina rodea el árbol, creando un contraste visual.", + "disenoSonido": "Sonidos de las hojas moviéndose. Música que evoca comprensión y aprendizaje, con un tono esperanzador." + } + ] + }, + { + "numero": 3, + "nombre": "Cooperación", + "tiempoInicio": "5:00", + "tiempoFin": "7:00", + "segmentos": [ + { + "id": "III.1", + "nombre": "Planificación del Equipo", + "tiempo": "5:00-6:00", + "accionVisualClave": "Coco y Miko se miran decididos y comienzan a trabajar juntos. Miko saca herramientas de su mochila mientras Coco motiva a otros animales a unirse.", + "disenoFondo": "La aldea ahora está más clara gracias al esfuerzo conjunto. Los animales se agrupan alrededor de Coco y Miko.", + "disenoSonido": "Meows de coordinación y aliento, herramientas metálicas tintineando, música de acción y colaboración." + }, + { + "id": "III.2", + "nombre": "Estrategia en Acción", + "tiempo": "6:00-7:00", + "accionVisualClave": "Coco se pone las gafas, que brillan intensamente. Los animales, guiados por su visión, mueven elementos que disipan la neblina, revelando campos verdes.", + "disenoFondo": "Escenarios de animales trabajando juntos en armonía, levantando obstáculos y colaborando para restaurar el entorno.", + "disenoSonido": "Música épica, creciente en intensidad. Sonidos de la naturaleza retornando, como pájaros y viento fresco." + } + ] + }, + { + "numero": 4, + "nombre": "Victoria y Ganancia", + "tiempoInicio": "7:00", + "tiempoFin": "9:00", + "segmentos": [ + { + "id": "IV.1", + "nombre": "Recuperación del Entorno", + "tiempo": "7:00-8:00", + "accionVisualClave": "La neblina finalmente se disipa completamente. La aldea y sus campos recuperan el color. Los animales celebran alegremente.", + "disenoFondo": "Cielos despejados, sol brillando sobre un paisaje rejuvenecido. La aldea muestra vida y color.", + "disenoSonido": "Música jubilosa, con sonidos de celebración animal: relinchos, gorjeos, ladridos alegres." + }, + { + "id": "IV.2", + "nombre": "La Gema de la Cooperación", + "tiempo": "8:00-9:00", + "accionVisualClave": "Miko recoge la Gema de la Cooperación Radiante que brilla intensamente. Coco y Miko comparten una mirada de logro.", + "disenoFondo": "La Gema ilumina sus rostros, reflejando el éxito logrado. Búho Sabio observa satisfecho desde su rama.", + "disenoSonido": "Sonido brillante y resonante al aparecer la Gema. Música de cierre con un sentido de logro y continuidad." + } + ] + } +] \ No newline at end of file diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/guion-conductor.md b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/guion-conductor.md new file mode 100644 index 0000000..d26d802 --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/guion-conductor.md @@ -0,0 +1,88 @@ +--- +titulo: 'El Primer Nudo: La Cooperación' +duracionTotal: '09:00' +virtudGanada: Cooperación +nudoDelMundo: >- + Una pequeña aldea está siendo envuelta por la Neblina Marrón Oxidado, que está + oscureciendo los campos y haciendo que los animales locales no puedan + encontrar su camino. +aliado: + nombre: Búho Sabio + descripcion: >- + Plumaje gris plateado con motas blancas, ojos grandes y profundos de color + ámbar, de tamaño mediano con alas amplias. Lleva pequeñas gafas redondas que + reposan sobre su pico. Proporciona lecciones vitales y consejos útiles a + Coco y Miko. +gemaGanada: Gema de la Cooperación Radiante +--- +# El Primer Nudo: La Cooperación + +**VIRTUD GANADA: COOPERACIÓN** + +## Introducción + +| Categoría | Detalle | +|-----------|--------| +| **Duración Total** | 09:00 | +| **Nudo del Mundo** | Una pequeña aldea está siendo envuelta por la Neblina Marrón Oxidado, que está oscureciendo los campos y haciendo que los animales locales no puedan encontrar su camino. | +| **Aliado** | Búho Sabio — Plumaje gris plateado con motas blancas, ojos grandes y profundos de color ámbar, de tamaño mediano con alas amplias. Lleva pequeñas gafas redondas que reposan sobre su pico. Proporciona lecciones vitales y consejos útiles a Coco y Miko. | +| **Gema Ganada** | Gema de la Cooperación Radiante | + +--- + +## ACTO 1: DETECCIÓN (0:00 - 2:30) + +### I.1 El Primer Vislumbre (0:00-1:30) +| Tiempo | Acción Visual Clave | Diseño de Fondo | Diseño de Sonido | +|--------|---------------------|-----------------|------------------| +| 0:00-1:30 | Coco corretea por un campo verde, sus gafas de piloto sobre su frente. De repente, se detiene, sus orejas se alzan y sus ojos se abren ampliamente al detectar una neblina marrón oxidado que oscurece el entorno. | Campos abiertos con hierba verde, cielos claros que gradualmente se oscurecen por la neblina. El sol está en lo alto, pero su luz se atenúa. | Sonidos de la naturaleza: pájaros cantando, viento suave. Gradualmente, un zumbido ominoso acompaña la aparición de la neblina. | + +### I.2 Alarma en la Aldea (1:30-2:30) +| Tiempo | Acción Visual Clave | Diseño de Fondo | Diseño de Sonido | +|--------|---------------------|-----------------|------------------| +| 1:30-2:30 | Coco observa cómo la neblina se extiende hacia la aldea, los animales locales se desorientan. Miko aparece junto a Coco, observando con preocupación. | La aldea está envuelta parcialmente por la neblina, las casas y caminos son apenas visibles. La atmósfera es de creciente inquietud. | Meows de Coco y Miko que reflejan alarma. Los sonidos de los animales desorientados: ovejas balando, perros ladrando a lo lejos. | + +--- + +## ACTO 2: ENCUENTRO Y BLOQUEO (2:30 - 5:00) + +### II.1 Búho Sabio Aparece (2:30-4:00) +| Tiempo | Acción Visual Clave | Diseño de Fondo | Diseño de Sonido | +|--------|---------------------|-----------------|------------------| +| 2:30-4:00 | Búho Sabio desciende elegantemente desde un árbol cercano, ajustándose las gafas, y se acerca a Coco y Miko. Les señala un mapa antiguo en su libro de pergamino. | Un viejo roble ofrece sombra contra la neblina, sus ramas son hogar del Búho Sabio. La luz del sol es tenue debido a la neblina. | Ulular suave del Búho Sabio, acompañado de un tema musical tranquilo y sabio. El sonido del pergamino al abrirse. | + +### II.2 Entendiendo la Cooperación (4:00-5:00) +| Tiempo | Acción Visual Clave | Diseño de Fondo | Diseño de Sonido | +|--------|---------------------|-----------------|------------------| +| 4:00-5:00 | El Búho Sabio señala con su ala la importancia de la cooperación, mostrando dibujos de animales trabajando juntos. Coco y Miko asienten, comprendiendo la lección. | Ilustraciones en el libro del Búho Sabio cobran vida, mostrando escenas de cooperación. La neblina rodea el árbol, creando un contraste visual. | Sonidos de las hojas moviéndose. Música que evoca comprensión y aprendizaje, con un tono esperanzador. | + +--- + +## ACTO 3: COOPERACIÓN (5:00 - 7:00) + +### III.1 Planificación del Equipo (5:00-6:00) +| Tiempo | Acción Visual Clave | Diseño de Fondo | Diseño de Sonido | +|--------|---------------------|-----------------|------------------| +| 5:00-6:00 | Coco y Miko se miran decididos y comienzan a trabajar juntos. Miko saca herramientas de su mochila mientras Coco motiva a otros animales a unirse. | La aldea ahora está más clara gracias al esfuerzo conjunto. Los animales se agrupan alrededor de Coco y Miko. | Meows de coordinación y aliento, herramientas metálicas tintineando, música de acción y colaboración. | + +### III.2 Estrategia en Acción (6:00-7:00) +| Tiempo | Acción Visual Clave | Diseño de Fondo | Diseño de Sonido | +|--------|---------------------|-----------------|------------------| +| 6:00-7:00 | Coco se pone las gafas, que brillan intensamente. Los animales, guiados por su visión, mueven elementos que disipan la neblina, revelando campos verdes. | Escenarios de animales trabajando juntos en armonía, levantando obstáculos y colaborando para restaurar el entorno. | Música épica, creciente en intensidad. Sonidos de la naturaleza retornando, como pájaros y viento fresco. | + +--- + +## ACTO 4: VICTORIA Y GANANCIA (7:00 - 9:00) + +### IV.1 Recuperación del Entorno (7:00-8:00) +| Tiempo | Acción Visual Clave | Diseño de Fondo | Diseño de Sonido | +|--------|---------------------|-----------------|------------------| +| 7:00-8:00 | La neblina finalmente se disipa completamente. La aldea y sus campos recuperan el color. Los animales celebran alegremente. | Cielos despejados, sol brillando sobre un paisaje rejuvenecido. La aldea muestra vida y color. | Música jubilosa, con sonidos de celebración animal: relinchos, gorjeos, ladridos alegres. | + +### IV.2 La Gema de la Cooperación (8:00-9:00) +| Tiempo | Acción Visual Clave | Diseño de Fondo | Diseño de Sonido | +|--------|---------------------|-----------------|------------------| +| 8:00-9:00 | Miko recoge la Gema de la Cooperación Radiante que brilla intensamente. Coco y Miko comparten una mirada de logro. | La Gema ilumina sus rostros, reflejando el éxito logrado. Búho Sabio observa satisfecho desde su rama. | Sonido brillante y resonante al aparecer la Gema. Música de cierre con un sentido de logro y continuidad. | + +--- + diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-001.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-001.png new file mode 100644 index 0000000..662c435 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-001.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-002.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-002.png new file mode 100644 index 0000000..4b40402 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-002.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-003.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-003.png new file mode 100644 index 0000000..382f05f Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-003.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-004.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-004.png new file mode 100644 index 0000000..a1dd8f6 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-004.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-005.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-005.png new file mode 100644 index 0000000..cb89a38 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-005.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-006.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-006.png new file mode 100644 index 0000000..2ebc144 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-006.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-034.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-034.png new file mode 100644 index 0000000..cec794f Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-034.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-042.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-042.png new file mode 100644 index 0000000..74c56c2 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-042.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-043.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-043.png new file mode 100644 index 0000000..07c33d5 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-043.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-047.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-047.png new file mode 100644 index 0000000..56f0839 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-047.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-048.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-048.png new file mode 100644 index 0000000..3923739 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-048.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-091.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-091.png new file mode 100644 index 0000000..061a28d Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-091.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-092.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-092.png new file mode 100644 index 0000000..73b7b63 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-092.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/pre-escaleta.json b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/pre-escaleta.json new file mode 100644 index 0000000..725e33f --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/pre-escaleta.json @@ -0,0 +1,851 @@ +{ + "capitulo": "El Primer Nudo: La Cooperación", + "duracionTotalSegundos": 540, + "totalPlanos": 108, + "segmentos": [ + { + "segmentoId": "I.1", + "nombre": "El Primer Vislumbre", + "actoNumero": 1, + "segmentoIndex": 0, + "tiempo": "0:00-1:30", + "duracionSegundos": 90, + "totalPlanos": 18, + "planos": [ + { + "id": "plano-001", + "numeroPlano": "1.1.1", + "nombre": "Plano 1.1.1", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-002", + "numeroPlano": "1.1.2", + "nombre": "Plano 1.1.2", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-003", + "numeroPlano": "1.1.3", + "nombre": "Plano 1.1.3", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-004", + "numeroPlano": "1.1.4", + "nombre": "Plano 1.1.4", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-005", + "numeroPlano": "1.1.5", + "nombre": "Plano 1.1.5", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-006", + "numeroPlano": "1.1.6", + "nombre": "Plano 1.1.6", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-007", + "numeroPlano": "1.1.7", + "nombre": "Plano 1.1.7", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-008", + "numeroPlano": "1.1.8", + "nombre": "Plano 1.1.8", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-009", + "numeroPlano": "1.1.9", + "nombre": "Plano 1.1.9", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-010", + "numeroPlano": "1.1.10", + "nombre": "Plano 1.1.10", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-011", + "numeroPlano": "1.1.11", + "nombre": "Plano 1.1.11", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-012", + "numeroPlano": "1.1.12", + "nombre": "Plano 1.1.12", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-013", + "numeroPlano": "1.1.13", + "nombre": "Plano 1.1.13", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-014", + "numeroPlano": "1.1.14", + "nombre": "Plano 1.1.14", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-015", + "numeroPlano": "1.1.15", + "nombre": "Plano 1.1.15", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-016", + "numeroPlano": "1.1.16", + "nombre": "Plano 1.1.16", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-017", + "numeroPlano": "1.1.17", + "nombre": "Plano 1.1.17", + "segmentoId": "I.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-018", + "numeroPlano": "1.1.18", + "nombre": "Plano 1.1.18", + "segmentoId": "I.1", + "tiempoSegundos": 5 + } + ] + }, + { + "segmentoId": "I.2", + "nombre": "Alarma en la Aldea", + "actoNumero": 1, + "segmentoIndex": 1, + "tiempo": "1:30-2:30", + "duracionSegundos": 60, + "totalPlanos": 12, + "planos": [ + { + "id": "plano-019", + "numeroPlano": "1.2.1", + "nombre": "Plano 1.2.1", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-020", + "numeroPlano": "1.2.2", + "nombre": "Plano 1.2.2", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-021", + "numeroPlano": "1.2.3", + "nombre": "Plano 1.2.3", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-022", + "numeroPlano": "1.2.4", + "nombre": "Plano 1.2.4", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-023", + "numeroPlano": "1.2.5", + "nombre": "Plano 1.2.5", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-024", + "numeroPlano": "1.2.6", + "nombre": "Plano 1.2.6", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-025", + "numeroPlano": "1.2.7", + "nombre": "Plano 1.2.7", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-026", + "numeroPlano": "1.2.8", + "nombre": "Plano 1.2.8", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-027", + "numeroPlano": "1.2.9", + "nombre": "Plano 1.2.9", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-028", + "numeroPlano": "1.2.10", + "nombre": "Plano 1.2.10", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-029", + "numeroPlano": "1.2.11", + "nombre": "Plano 1.2.11", + "segmentoId": "I.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-030", + "numeroPlano": "1.2.12", + "nombre": "Plano 1.2.12", + "segmentoId": "I.2", + "tiempoSegundos": 5 + } + ] + }, + { + "segmentoId": "II.1", + "nombre": "Búho Sabio Aparece", + "actoNumero": 2, + "segmentoIndex": 0, + "tiempo": "2:30-4:00", + "duracionSegundos": 90, + "totalPlanos": 18, + "planos": [ + { + "id": "plano-031", + "numeroPlano": "2.1.1", + "nombre": "Plano 2.1.1", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-032", + "numeroPlano": "2.1.2", + "nombre": "Plano 2.1.2", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-033", + "numeroPlano": "2.1.3", + "nombre": "Plano 2.1.3", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-034", + "numeroPlano": "2.1.4", + "nombre": "Plano 2.1.4", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-035", + "numeroPlano": "2.1.5", + "nombre": "Plano 2.1.5", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-036", + "numeroPlano": "2.1.6", + "nombre": "Plano 2.1.6", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-037", + "numeroPlano": "2.1.7", + "nombre": "Plano 2.1.7", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-038", + "numeroPlano": "2.1.8", + "nombre": "Plano 2.1.8", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-039", + "numeroPlano": "2.1.9", + "nombre": "Plano 2.1.9", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-040", + "numeroPlano": "2.1.10", + "nombre": "Plano 2.1.10", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-041", + "numeroPlano": "2.1.11", + "nombre": "Plano 2.1.11", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-042", + "numeroPlano": "2.1.12", + "nombre": "Plano 2.1.12", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-043", + "numeroPlano": "2.1.13", + "nombre": "Plano 2.1.13", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-044", + "numeroPlano": "2.1.14", + "nombre": "Plano 2.1.14", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-045", + "numeroPlano": "2.1.15", + "nombre": "Plano 2.1.15", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-046", + "numeroPlano": "2.1.16", + "nombre": "Plano 2.1.16", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-047", + "numeroPlano": "2.1.17", + "nombre": "Plano 2.1.17", + "segmentoId": "II.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-048", + "numeroPlano": "2.1.18", + "nombre": "Plano 2.1.18", + "segmentoId": "II.1", + "tiempoSegundos": 5 + } + ] + }, + { + "segmentoId": "II.2", + "nombre": "Entendiendo la Cooperación", + "actoNumero": 2, + "segmentoIndex": 1, + "tiempo": "4:00-5:00", + "duracionSegundos": 60, + "totalPlanos": 12, + "planos": [ + { + "id": "plano-049", + "numeroPlano": "2.2.1", + "nombre": "Plano 2.2.1", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-050", + "numeroPlano": "2.2.2", + "nombre": "Plano 2.2.2", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-051", + "numeroPlano": "2.2.3", + "nombre": "Plano 2.2.3", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-052", + "numeroPlano": "2.2.4", + "nombre": "Plano 2.2.4", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-053", + "numeroPlano": "2.2.5", + "nombre": "Plano 2.2.5", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-054", + "numeroPlano": "2.2.6", + "nombre": "Plano 2.2.6", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-055", + "numeroPlano": "2.2.7", + "nombre": "Plano 2.2.7", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-056", + "numeroPlano": "2.2.8", + "nombre": "Plano 2.2.8", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-057", + "numeroPlano": "2.2.9", + "nombre": "Plano 2.2.9", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-058", + "numeroPlano": "2.2.10", + "nombre": "Plano 2.2.10", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-059", + "numeroPlano": "2.2.11", + "nombre": "Plano 2.2.11", + "segmentoId": "II.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-060", + "numeroPlano": "2.2.12", + "nombre": "Plano 2.2.12", + "segmentoId": "II.2", + "tiempoSegundos": 5 + } + ] + }, + { + "segmentoId": "III.1", + "nombre": "Planificación del Equipo", + "actoNumero": 3, + "segmentoIndex": 0, + "tiempo": "5:00-6:00", + "duracionSegundos": 60, + "totalPlanos": 12, + "planos": [ + { + "id": "plano-061", + "numeroPlano": "3.1.1", + "nombre": "Plano 3.1.1", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-062", + "numeroPlano": "3.1.2", + "nombre": "Plano 3.1.2", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-063", + "numeroPlano": "3.1.3", + "nombre": "Plano 3.1.3", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-064", + "numeroPlano": "3.1.4", + "nombre": "Plano 3.1.4", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-065", + "numeroPlano": "3.1.5", + "nombre": "Plano 3.1.5", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-066", + "numeroPlano": "3.1.6", + "nombre": "Plano 3.1.6", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-067", + "numeroPlano": "3.1.7", + "nombre": "Plano 3.1.7", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-068", + "numeroPlano": "3.1.8", + "nombre": "Plano 3.1.8", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-069", + "numeroPlano": "3.1.9", + "nombre": "Plano 3.1.9", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-070", + "numeroPlano": "3.1.10", + "nombre": "Plano 3.1.10", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-071", + "numeroPlano": "3.1.11", + "nombre": "Plano 3.1.11", + "segmentoId": "III.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-072", + "numeroPlano": "3.1.12", + "nombre": "Plano 3.1.12", + "segmentoId": "III.1", + "tiempoSegundos": 5 + } + ] + }, + { + "segmentoId": "III.2", + "nombre": "Estrategia en Acción", + "actoNumero": 3, + "segmentoIndex": 1, + "tiempo": "6:00-7:00", + "duracionSegundos": 60, + "totalPlanos": 12, + "planos": [ + { + "id": "plano-073", + "numeroPlano": "3.2.1", + "nombre": "Plano 3.2.1", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-074", + "numeroPlano": "3.2.2", + "nombre": "Plano 3.2.2", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-075", + "numeroPlano": "3.2.3", + "nombre": "Plano 3.2.3", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-076", + "numeroPlano": "3.2.4", + "nombre": "Plano 3.2.4", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-077", + "numeroPlano": "3.2.5", + "nombre": "Plano 3.2.5", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-078", + "numeroPlano": "3.2.6", + "nombre": "Plano 3.2.6", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-079", + "numeroPlano": "3.2.7", + "nombre": "Plano 3.2.7", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-080", + "numeroPlano": "3.2.8", + "nombre": "Plano 3.2.8", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-081", + "numeroPlano": "3.2.9", + "nombre": "Plano 3.2.9", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-082", + "numeroPlano": "3.2.10", + "nombre": "Plano 3.2.10", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-083", + "numeroPlano": "3.2.11", + "nombre": "Plano 3.2.11", + "segmentoId": "III.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-084", + "numeroPlano": "3.2.12", + "nombre": "Plano 3.2.12", + "segmentoId": "III.2", + "tiempoSegundos": 5 + } + ] + }, + { + "segmentoId": "IV.1", + "nombre": "Recuperación del Entorno", + "actoNumero": 4, + "segmentoIndex": 0, + "tiempo": "7:00-8:00", + "duracionSegundos": 60, + "totalPlanos": 12, + "planos": [ + { + "id": "plano-085", + "numeroPlano": "4.1.1", + "nombre": "Plano 4.1.1", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-086", + "numeroPlano": "4.1.2", + "nombre": "Plano 4.1.2", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-087", + "numeroPlano": "4.1.3", + "nombre": "Plano 4.1.3", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-088", + "numeroPlano": "4.1.4", + "nombre": "Plano 4.1.4", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-089", + "numeroPlano": "4.1.5", + "nombre": "Plano 4.1.5", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-090", + "numeroPlano": "4.1.6", + "nombre": "Plano 4.1.6", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-091", + "numeroPlano": "4.1.7", + "nombre": "Plano 4.1.7", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-092", + "numeroPlano": "4.1.8", + "nombre": "Plano 4.1.8", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-093", + "numeroPlano": "4.1.9", + "nombre": "Plano 4.1.9", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-094", + "numeroPlano": "4.1.10", + "nombre": "Plano 4.1.10", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-095", + "numeroPlano": "4.1.11", + "nombre": "Plano 4.1.11", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + }, + { + "id": "plano-096", + "numeroPlano": "4.1.12", + "nombre": "Plano 4.1.12", + "segmentoId": "IV.1", + "tiempoSegundos": 5 + } + ] + }, + { + "segmentoId": "IV.2", + "nombre": "La Gema de la Cooperación", + "actoNumero": 4, + "segmentoIndex": 1, + "tiempo": "8:00-9:00", + "duracionSegundos": 60, + "totalPlanos": 12, + "planos": [ + { + "id": "plano-097", + "numeroPlano": "4.2.1", + "nombre": "Plano 4.2.1", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-098", + "numeroPlano": "4.2.2", + "nombre": "Plano 4.2.2", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-099", + "numeroPlano": "4.2.3", + "nombre": "Plano 4.2.3", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-100", + "numeroPlano": "4.2.4", + "nombre": "Plano 4.2.4", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-101", + "numeroPlano": "4.2.5", + "nombre": "Plano 4.2.5", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-102", + "numeroPlano": "4.2.6", + "nombre": "Plano 4.2.6", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-103", + "numeroPlano": "4.2.7", + "nombre": "Plano 4.2.7", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-104", + "numeroPlano": "4.2.8", + "nombre": "Plano 4.2.8", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-105", + "numeroPlano": "4.2.9", + "nombre": "Plano 4.2.9", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-106", + "numeroPlano": "4.2.10", + "nombre": "Plano 4.2.10", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-107", + "numeroPlano": "4.2.11", + "nombre": "Plano 4.2.11", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + }, + { + "id": "plano-108", + "numeroPlano": "4.2.12", + "nombre": "Plano 4.2.12", + "segmentoId": "IV.2", + "tiempoSegundos": 5 + } + ] + } + ] +} \ No newline at end of file diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/prompts-planos.json b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/prompts-planos.json new file mode 100644 index 0000000..8da4c3a --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/prompts-planos.json @@ -0,0 +1,6022 @@ +[ + { + "id": "plano-001", + "numeroPlano": "1.1.1", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE/ESTABLISHING SHOT. Una vista amplia del prado donde Coco y Miko están jugando alegremente, rodeados de flores y árboles. El sol brilla suavemente.", + "indicacionesSonido": "Música suave y alegre, meows juguetones", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": "Coco, alegria, izquierda, jugando y saltando, Gafas de Piloto. Miko, alegria, derecha, jugando y saltando, Mochila de Inventos", + "accion": "Coco y Miko juegan alegremente en el prado, saltando entre las flores.", + "luz": "Iluminación directa, cálida, desde el sol en lo alto, creando un ambiente alegre y vital.", + "camara": "Ángulo frontal", + "optica": "Gran angular, profundidad de campo amplia", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Prado lleno de flores y árboles, cielo azul claro, colores vibrantes de un día soleado.", + "custom": "" + }, + "promptImagen": "Plano general. Ángulo frontal. Gran angular, profundidad de campo amplia. Coco, alegria, izquierda, jugando y saltando, Gafas de Piloto. Miko, alegria, derecha, jugando y saltando, Mochila de Inventos. Coco y Miko juegan alegremente en el prado, saltando entre las flores.. Iluminación directa, cálida, desde el sol en lo alto, creando un ambiente alegre y vital.. Prado lleno de flores y árboles, cielo azul claro, colores vibrantes de un día soleado.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-I.1", + "imagenUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-001" + }, + { + "id": "plano-002", + "numeroPlano": "1.1.2", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Coco y Miko están jugando, saltando entre las flores. Coco empieza a detenerse lentamente.", + "indicacionesSonido": "Música suave, meows juguetones", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": "Coco, alegria, centro, saltando y luego deteniéndose, Gafas de Piloto. Miko, alegria, derecha, saltando entre las flores, Mochila de Inventos", + "accion": "Coco y Miko saltan entre las flores. Coco empieza a detenerse.", + "luz": "Iluminación directa, cálida, resaltando la vivacidad de la escena.", + "camara": "Ángulo frontal", + "optica": "Normal, profundidad de campo media", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "custom": "" + }, + "promptImagen": "Plano medio. Ángulo frontal. Normal, profundidad de campo media. Coco, alegria, centro, saltando y luego deteniéndose, Gafas de Piloto. Miko, alegria, derecha, saltando entre las flores, Mochila de Inventos. Coco y Miko saltan entre las flores. Coco empieza a detenerse.. Iluminación directa, cálida, resaltando la vivacidad de la escena.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-I.1", + "imagenUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-002" + }, + { + "id": "plano-003", + "numeroPlano": "1.1.3", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Rostro de Coco, mostrando sorpresa súbita. Sus gafas comienzan a brillar levemente.", + "indicacionesSonido": "Música se torna inquietante, sonido de alerta de las gafas", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": "Coco, sorpresa, centro, mirada fija hacia el frente, Gafas de Piloto brillando levemente", + "accion": "Coco muestra sorpresa con sus gafas empezando a brillar.", + "luz": "Iluminación directa, con un ligero resplandor azul en las gafas, atmósfera tensa.", + "camara": "Ángulo frontal", + "optica": "Teleobjetivo, profundidad de campo reducida", + "tipoPlano": "Primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "custom": "" + }, + "promptImagen": "Primer plano. Ángulo frontal. Teleobjetivo, profundidad de campo reducida. Coco, sorpresa, centro, mirada fija hacia el frente, Gafas de Piloto brillando levemente. Coco muestra sorpresa con sus gafas empezando a brillar.. Iluminación directa, con un ligero resplandor azul en las gafas, atmósfera tensa.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back" + } + ], + "fondoId": "fondo-I.1", + "imagenUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-003" + }, + { + "id": "plano-004", + "numeroPlano": "1.1.4", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "EXTREME CLOSE-UP. Detalle de las gafas de Coco, mostrando el brillo y la alerta activada.", + "indicacionesSonido": "Sonido de alerta de las gafas", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": "Coco, sorpresa, centro, mirada fija, Gafas de Piloto brillando intensamente", + "accion": "Las gafas de Coco brillan intensamente con la alerta activada.", + "luz": "Iluminación directa sobre las gafas, resaltando el brillo.", + "camara": "Ángulo frontal", + "optica": "Macro, profundidad de campo muy reducida", + "tipoPlano": "Plano detalle", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "custom": "" + }, + "promptImagen": "Plano detalle. Ángulo frontal. Macro, profundidad de campo muy reducida. Coco, sorpresa, centro, mirada fija, Gafas de Piloto brillando intensamente. Las gafas de Coco brillan intensamente con la alerta activada.. Iluminación directa sobre las gafas, resaltando el brillo.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back" + } + ], + "fondoId": "fondo-I.1", + "imagenUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-004" + }, + { + "id": "plano-005", + "numeroPlano": "1.1.5", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "POV. Vista desde Coco: A lo lejos, la Neblina Marrón Oxidado ondulando en el horizonte.", + "indicacionesSonido": "Música inquietante, sonido ambiental de viento", + "personajesDetalle": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "El Gran Desorden" + ], + "promptComposition": { + "personajes": "El Gran Desorden, neutral, centro, ondulante, Neblina Marrón Oxidado", + "accion": "La Neblina Marrón Oxidado ondulando en el horizonte, vista desde la perspectiva de Coco.", + "luz": "Iluminación difusa con sombras alargadas, atmósfera inquietante.", + "camara": "POV desde Coco", + "optica": "Normal, profundidad de campo amplia", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "custom": "" + }, + "promptImagen": "Plano general. POV desde Coco. Normal, profundidad de campo amplia. El Gran Desorden, neutral, centro, ondulante, Neblina Marrón Oxidado. La Neblina Marrón Oxidado ondulando en el horizonte, vista desde la perspectiva de Coco.. Iluminación difusa con sombras alargadas, atmósfera inquietante.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.1", + "imagenUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-005" + }, + { + "id": "plano-006", + "numeroPlano": "1.1.6", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "OVER-THE-SHOULDER. Desde detrás de Coco, mirando a Miko que se da cuenta de la preocupación de Coco.", + "indicacionesSonido": "Meow preocupado de Miko", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocionVisible": "miedo", + "posicion": "frontal", + "poseCorporal": "mirando a Miko", + "accesoriosVisibles": "Gafas de Piloto" + }, + { + "nombre": "Miko", + "emocionVisible": "neutral", + "posicion": "frontal", + "poseCorporal": "de pie, mirando a Coco", + "accesoriosVisibles": "Mochila de Inventos" + } + ], + "accion": "Coco mira preocupada a Miko, quien nota su preocupación.", + "luz": "Iluminación suave desde un lado, creando un ambiente de tensión.", + "camara": "Over-the-shoulder desde Coco", + "optica": "Normal, profundidad de campo media", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Prado con flores, desenfocado levemente.", + "custom": "" + }, + "promptImagen": "Plano medio. Over-the-shoulder desde Coco. Normal, profundidad de campo media. [object Object],[object Object]. Coco mira preocupada a Miko, quien nota su preocupación.. Iluminación suave desde un lado, creando un ambiente de tensión.. Prado con flores, desenfocado levemente.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-miedo" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.1", + "imagenUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-006" + }, + { + "id": "plano-007", + "numeroPlano": "1.1.7", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Miko saca un pequeño mapa de su mochila de inventos, mostrando interés y curiosidad.", + "indicacionesSonido": "Sonidos de papeles crujientes, meow curioso", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emocionVisible": "neutral", + "posicion": "centro", + "poseCorporal": "sacando un mapa de su mochila", + "accesoriosVisibles": "Mochila de Inventos" + } + ], + "accion": "Miko saca un mapa de su mochila, curioso por la situación.", + "luz": "Iluminación suave y cálida, creando un ambiente de descubrimiento.", + "camara": "Ángulo frontal", + "optica": "Normal, profundidad de campo media", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Flores y árboles del prado, ligeramente desenfocado.", + "custom": "" + }, + "promptImagen": "Plano medio. Ángulo frontal. Normal, profundidad de campo media. [object Object]. Miko saca un mapa de su mochila, curioso por la situación.. Iluminación suave y cálida, creando un ambiente de descubrimiento.. Flores y árboles del prado, ligeramente desenfocado.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.1" + }, + { + "id": "plano-008", + "numeroPlano": "1.1.8", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "HIGH ANGLE. Vista desde arriba, mostrando a Coco y Miko mirando el mapa, con un aire de vulnerabilidad.", + "indicacionesSonido": "Música se mantiene inquietante", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocionVisible": "miedo", + "posicion": "izquierda", + "poseCorporal": "mirando el mapa", + "accesoriosVisibles": "Gafas de Piloto" + }, + { + "nombre": "Miko", + "emocionVisible": "neutral", + "posicion": "derecha", + "poseCorporal": "mirando el mapa", + "accesoriosVisibles": "Mochila de Inventos" + } + ], + "accion": "Coco y Miko revisan el mapa, mostrando vulnerabilidad.", + "luz": "Iluminación difusa desde arriba, acentuando la atmósfera vulnerable.", + "camara": "Ángulo cenital", + "optica": "Gran angular, profundidad de campo amplia", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Prado con flores, visto desde arriba.", + "custom": "" + }, + "promptImagen": "Plano general. Ángulo cenital. Gran angular, profundidad de campo amplia. [object Object],[object Object]. Coco y Miko revisan el mapa, mostrando vulnerabilidad.. Iluminación difusa desde arriba, acentuando la atmósfera vulnerable.. Prado con flores, visto desde arriba.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "miedo", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-miedo" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.1" + }, + { + "id": "plano-009", + "numeroPlano": "1.1.9", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "LOW ANGLE. Cámara desde el suelo, mirando hacia arriba a Coco y Miko, sugiriendo su determinación creciente para enfrentar la situación.", + "indicacionesSonido": "Crescendo de música, meows decididos", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocionVisible": "neutral", + "posicion": "izquierda", + "poseCorporal": "de pie, mirando adelante con determinación", + "accesoriosVisibles": "Gafas de Piloto" + }, + { + "nombre": "Miko", + "emocionVisible": "neutral", + "posicion": "derecha", + "poseCorporal": "de pie, mirando adelante con determinación", + "accesoriosVisibles": "Mochila de Inventos" + } + ], + "accion": "Coco y Miko miran con determinación hacia el horizonte.", + "luz": "Iluminación directa desde un ángulo bajo, destacando su figura heroica.", + "camara": "Ángulo contrapicado", + "optica": "Gran angular, profundidad de campo media", + "tipoPlano": "Plano americano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Cielo azul contrastado con el horizonte donde se oculta la Neblina.", + "custom": "" + }, + "promptImagen": "Plano americano. Ángulo contrapicado. Gran angular, profundidad de campo media. [object Object],[object Object]. Coco y Miko miran con determinación hacia el horizonte.. Iluminación directa desde un ángulo bajo, destacando su figura heroica.. Cielo azul contrastado con el horizonte donde se oculta la Neblina.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.1" + }, + { + "id": "plano-010", + "numeroPlano": "1.1.10", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "TRACKING SHOT. Siguiendo a Coco y Miko mientras comienzan a caminar hacia la Neblina, mostrando su unión y cooperación.", + "indicacionesSonido": "Música con un ligero tono heroico, pasos sobre hierba", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocionVisible": "neutral", + "posicion": "izquierda", + "poseCorporal": "caminando hacia adelante", + "accesoriosVisibles": "Gafas de Piloto" + }, + { + "nombre": "Miko", + "emocionVisible": "neutral", + "posicion": "derecha", + "poseCorporal": "caminando junto a Coco", + "accesoriosVisibles": "Mochila de Inventos" + } + ], + "accion": "Coco y Miko caminan juntos hacia la Neblina, mostrando unidad.", + "luz": "Iluminación suave y cálida, creando un ambiente de esperanza.", + "camara": "Seguimiento lateral", + "optica": "Normal, profundidad de campo amplia", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Prado con la Neblina en el horizonte, cielo despejado.", + "custom": "" + }, + "promptImagen": "Plano general. Seguimiento lateral. Normal, profundidad de campo amplia. [object Object],[object Object]. Coco y Miko caminan juntos hacia la Neblina, mostrando unidad.. Iluminación suave y cálida, creando un ambiente de esperanza.. Prado con la Neblina en el horizonte, cielo despejado.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.1" + }, + { + "id": "plano-011", + "numeroPlano": "1.1.11", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Coco y Miko se miran, compartiendo un momento de comprensión y apoyo mutuo.", + "indicacionesSonido": "Meows suaves de comprensión", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocionVisible": "neutral", + "posicion": "izquierda", + "poseCorporal": "mirando a Miko", + "accesoriosVisibles": "Gafas de Piloto" + }, + { + "nombre": "Miko", + "emocionVisible": "neutral", + "posicion": "derecha", + "poseCorporal": "mirando a Coco", + "accesoriosVisibles": "Mochila de Inventos" + } + ], + "accion": "Coco y Miko se miran mutuamente, compartiendo apoyo y comprensión.", + "luz": "Iluminación suave desde el frente, resaltando la conexión emocional.", + "camara": "Ángulo frontal", + "optica": "Teleobjetivo, profundidad de campo reducida", + "tipoPlano": "Primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfocado, resaltando a ambos personajes.", + "custom": "" + }, + "promptImagen": "Primer plano. Ángulo frontal. Teleobjetivo, profundidad de campo reducida. [object Object],[object Object]. Coco y Miko se miran mutuamente, compartiendo apoyo y comprensión.. Iluminación suave desde el frente, resaltando la conexión emocional.. Desenfocado, resaltando a ambos personajes.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.1" + }, + { + "id": "plano-012", + "numeroPlano": "1.1.12", + "segmentoGuion": "I.1 Vislumbre de la Neblina", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE SHOT. Coco y Miko de espaldas, acercándose a la Neblina. El paisaje se ve amenazante pero ellos avanzan con determinación.", + "indicacionesSonido": "Música se vuelve más esperanzadora, el viento sopla suavemente", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocionVisible": "neutral", + "posicion": "izquierda", + "poseCorporal": "caminando hacia la Neblina", + "accesoriosVisibles": "Gafas de Piloto" + }, + { + "nombre": "Miko", + "emocionVisible": "neutral", + "posicion": "derecha", + "poseCorporal": "caminando junto a Coco", + "accesoriosVisibles": "Mochila de Inventos" + } + ], + "accion": "Coco y Miko caminan con determinación hacia la Neblina de espaldas.", + "luz": "Iluminación directa con sombras alargadas, creando un ambiente de desafío.", + "camara": "Ángulo trasero", + "optica": "Gran angular, profundidad de campo amplia", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Prado que se torna en neblina marrón oxidado en el horizonte.", + "custom": "" + }, + "promptImagen": "Plano general. Ángulo trasero. Gran angular, profundidad de campo amplia. [object Object],[object Object]. Coco y Miko caminan con determinación hacia la Neblina de espaldas.. Iluminación directa con sombras alargadas, creando un ambiente de desafío.. Prado que se torna en neblina marrón oxidado en el horizonte.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.1" + }, + { + "id": "plano-013", + "numeroPlano": "1.2.1", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. La aldea cubierta parcialmente por la neblina marrón. Los edificios apenas son visibles.", + "indicacionesSonido": "Melodía melancólica comienza suavemente, sonidos de viento atenuados.", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "La aldea aparece cubierta parcialmente por la neblina marrón.", + "luz": "Iluminación difusa con sombras largas, atmósfera de misterio.", + "camara": "Ángulo frontal", + "optica": "Gran angular, profundidad de campo amplia", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Aldea cubierta de neblina marrón, edificios difusos, cielo grisáceo.", + "custom": "" + }, + "promptImagen": "Plano general. Ángulo frontal. Gran angular, profundidad de campo amplia. . La aldea aparece cubierta parcialmente por la neblina marrón.. Iluminación difusa con sombras largas, atmósfera de misterio.. Aldea cubierta de neblina marrón, edificios difusos, cielo grisáceo.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-014", + "numeroPlano": "1.2.2", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Animales desorientados caminan lentamente, algunos mirando alrededor confundidos.", + "indicacionesSonido": "Meows de preocupación y murmullos animales.", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "Animales caminan desorientados, observando confusos su entorno.", + "luz": "Iluminación difusa que enfatiza la confusión.", + "camara": "Ángulo frontal", + "optica": "Normal, profundidad de campo media", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Aldea parcialmente cubierta por neblina, tonos desaturados.", + "custom": "" + }, + "promptImagen": "Plano medio. Ángulo frontal. Normal, profundidad de campo media. . Animales caminan desorientados, observando confusos su entorno.. Iluminación difusa que enfatiza la confusión.. Aldea parcialmente cubierta por neblina, tonos desaturados.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-015", + "numeroPlano": "1.2.3", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Rostro de Coco mirando hacia la aldea con preocupación.", + "indicacionesSonido": "Melodía melancólica continúa, meow de tristeza de Coco.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "tristeza" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocionVisible": "tristeza", + "posicion": "centro", + "poseCorporal": "mirando fijamente hacia adelante", + "accesoriosVisibles": "Gafas de Piloto" + } + ], + "accion": "Coco observa preocupada la aldea cubierta de neblina.", + "luz": "Iluminación tenue que resalta la tristeza en su rostro.", + "camara": "Ángulo frontal", + "optica": "Teleobjetivo, profundidad de campo reducida", + "tipoPlano": "Primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfocado, sugiriendo la aldea detrás.", + "custom": "" + }, + "promptImagen": "Primer plano. Ángulo frontal. Teleobjetivo, profundidad de campo reducida. [object Object]. Coco observa preocupada la aldea cubierta de neblina.. Iluminación tenue que resalta la tristeza en su rostro.. Desenfocado, sugiriendo la aldea detrás.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "tristeza", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-tristeza" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-016", + "numeroPlano": "1.2.4", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Over-the-shoulder. Coco y Miko observan la aldea desde la colina.", + "indicacionesSonido": "Viento suave, melodía melancólica.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "tristeza" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "tristeza" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocionVisible": "tristeza", + "posicion": "izquierda", + "poseCorporal": "de pie junto a Miko", + "accesoriosVisibles": "Gafas de Piloto" + }, + { + "nombre": "Miko", + "emocionVisible": "tristeza", + "posicion": "derecha", + "poseCorporal": "de pie junto a Coco", + "accesoriosVisibles": "Mochila de Inventos" + } + ], + "accion": "Coco y Miko observan la aldea cubiertos por la neblina desde la colina.", + "luz": "Iluminación difusa, creando un ambiente melancólico.", + "camara": "Over-the-shoulder desde Coco y Miko", + "optica": "Normal, profundidad de campo amplia", + "tipoPlano": "Plano americano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Aldea parcialmente cubierta por neblina, vista desde una colina.", + "custom": "" + }, + "promptImagen": "Plano americano. Over-the-shoulder desde Coco y Miko. Normal, profundidad de campo amplia. [object Object],[object Object]. Coco y Miko observan la aldea cubiertos por la neblina desde la colina.. Iluminación difusa, creando un ambiente melancólico.. Aldea parcialmente cubierta por neblina, vista desde una colina.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "tristeza", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-tristeza" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "tristeza", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-tristeza" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-017", + "numeroPlano": "1.2.5", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "High angle. Vista desde arriba de los animales en la aldea, mostrando su vulnerabilidad.", + "indicacionesSonido": "Meows y sonidos de la naturaleza atenuados.", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "Animales en la aldea se ven vulnerables desde arriba.", + "luz": "Iluminación difusa, resaltando la vulnerabilidad.", + "camara": "Ángulo cenital", + "optica": "Gran angular, profundidad de campo amplia", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Aldea con neblina, animales dispersos, tonos apagados.", + "custom": "" + }, + "promptImagen": "Plano general. Ángulo cenital. Gran angular, profundidad de campo amplia. . Animales en la aldea se ven vulnerables desde arriba.. Iluminación difusa, resaltando la vulnerabilidad.. Aldea con neblina, animales dispersos, tonos apagados.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-018", + "numeroPlano": "1.2.6", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Miko ajustando su mochila de inventos, mostrando determinación.", + "indicacionesSonido": "Zipper de la mochila, meow determinado de Miko.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emocionVisible": "neutral", + "posicion": "centro", + "poseCorporal": "ajustando la mochila", + "accesoriosVisibles": "Mochila de Inventos" + } + ], + "accion": "Miko ajusta su mochila con determinación.", + "luz": "Iluminación directa, resaltando la figura decidida de Miko.", + "camara": "Ángulo frontal", + "optica": "Teleobjetivo, profundidad de campo reducida", + "tipoPlano": "Primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfocado, sugiriendo la aldea detrás.", + "custom": "" + }, + "promptImagen": "Primer plano. Ángulo frontal. Teleobjetivo, profundidad de campo reducida. [object Object]. Miko ajusta su mochila con determinación.. Iluminación directa, resaltando la figura decidida de Miko.. Desenfocado, sugiriendo la aldea detrás.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-019", + "numeroPlano": "1.2.7", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up. Las gafas de piloto de Coco reflejan la imagen borrosa de la aldea.", + "indicacionesSonido": "Melodía melancólica, sonido de respiración de Coco.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "tristeza" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocionVisible": "tristeza", + "posicion": "centro", + "poseCorporal": "mirando hacia adelante", + "accesoriosVisibles": "Gafas de Piloto reflejando la aldea" + } + ], + "accion": "Las gafas de Coco reflejan la aldea borrosa.", + "luz": "Iluminación tenue, enfocando el reflejo en las gafas.", + "camara": "Ángulo frontal", + "optica": "Macro, profundidad de campo muy reducida", + "tipoPlano": "Plano detalle", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Reflejo de la aldea en las gafas, desenfocado.", + "custom": "" + }, + "promptImagen": "Plano detalle. Ángulo frontal. Macro, profundidad de campo muy reducida. [object Object]. Las gafas de Coco reflejan la aldea borrosa.. Iluminación tenue, enfocando el reflejo en las gafas.. Reflejo de la aldea en las gafas, desenfocado.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "tristeza", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-tristeza" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-020", + "numeroPlano": "1.2.8", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Pan shot. Barrido horizontal desde la colina a través de la aldea.", + "indicacionesSonido": "Viento suave, melodía melancólica.", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "Barrido horizontal mostrando la aldea desde la colina, cubierto de neblina.", + "luz": "Iluminación difusa, creando un ambiente melancólico y misterioso.", + "camara": "Panorámica horizontal", + "optica": "Gran angular, profundidad de campo amplia", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Vista panorámica de la aldea cubierta de neblina, tonos apagados.", + "custom": "" + }, + "promptImagen": "Plano general. Panorámica horizontal. Gran angular, profundidad de campo amplia. . Barrido horizontal mostrando la aldea desde la colina, cubierto de neblina.. Iluminación difusa, creando un ambiente melancólico y misterioso.. Vista panorámica de la aldea cubierta de neblina, tonos apagados.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-021", + "numeroPlano": "1.2.9", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "POV. Vista desde los ojos de Coco y Miko hacia la aldea cubierta de neblina.", + "indicacionesSonido": "Sonido de respiración y meows de preocupación.", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "Vista desde los ojos de Coco y Miko hacia la aldea cubierta de neblina, transmitiendo una sensación de misterio y preocupación.", + "luz": "Iluminación difusa con tonos fríos, creando una atmósfera de incertidumbre y misterio.", + "camara": "POV desde la perspectiva de Coco y Miko.", + "optica": "Lente normal con profundidad de campo media para mantener la aldea en foco.", + "tipoPlano": "Plano general desde el punto de vista de los personajes.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "La aldea está cubierta de una densa neblina marrón oxidado, oscureciendo y desaturando los colores del entorno.", + "custom": "" + }, + "promptImagen": "Plano general desde el punto de vista de los personajes.. POV desde la perspectiva de Coco y Miko.. Lente normal con profundidad de campo media para mantener la aldea en foco.. . Vista desde los ojos de Coco y Miko hacia la aldea cubierta de neblina, transmitiendo una sensación de misterio y preocupación.. Iluminación difusa con tonos fríos, creando una atmósfera de incertidumbre y misterio.. La aldea está cubierta de una densa neblina marrón oxidado, oscureciendo y desaturando los colores del entorno.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-022", + "numeroPlano": "1.2.10", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Búho Sabio aparece volando suavemente hacia Coco y Miko.", + "indicacionesSonido": "Aleteo suave, melancolía en la música.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emoción": "neutral", + "posición": "centro", + "pose corporal": "Volando suavemente hacia Coco y Miko.", + "accesorios visibles": "Gafas redondas y su pequeño libro de pergamino." + } + ], + "accion": "El Búho Sabio aparece volando suavemente hacia Coco y Miko, creando una sensación de calma.", + "luz": "Iluminación suave y melancólica, con una temperatura de color cálida.", + "camara": "Ángulo frontal.", + "optica": "Lente normal con poca profundidad de campo para enfocar al Búho Sabio.", + "tipoPlano": "Plano medio.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Un cielo ligeramente nublado, con árboles desaturados por la neblina en el fondo.", + "custom": "" + }, + "promptImagen": "Plano medio.. Ángulo frontal.. Lente normal con poca profundidad de campo para enfocar al Búho Sabio.. [object Object]. El Búho Sabio aparece volando suavemente hacia Coco y Miko, creando una sensación de calma.. Iluminación suave y melancólica, con una temperatura de color cálida.. Un cielo ligeramente nublado, con árboles desaturados por la neblina en el fondo.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-023", + "numeroPlano": "1.2.11", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Rostro de Búho Sabio con expresión de sabiduría y calma.", + "indicacionesSonido": "Suave ulular del búho.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emoción": "neutral", + "posición": "centro", + "pose corporal": "Mirando con sabiduría y calma.", + "accesorios visibles": "Gafas redondas." + } + ], + "accion": "Close-up en el rostro del Búho Sabio, mostrando su expresión de sabiduría y calma.", + "luz": "Iluminación suave con enfoque en el rostro, resaltando los detalles de las plumas y las gafas.", + "camara": "Frontal.", + "optica": "Lente macro para capturar detalles faciales.", + "tipoPlano": "Primer plano.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfoque suave de la neblina marrón oxidado en el fondo.", + "custom": "" + }, + "promptImagen": "Primer plano.. Frontal.. Lente macro para capturar detalles faciales.. [object Object]. Close-up en el rostro del Búho Sabio, mostrando su expresión de sabiduría y calma.. Iluminación suave con enfoque en el rostro, resaltando los detalles de las plumas y las gafas.. Desenfoque suave de la neblina marrón oxidado en el fondo.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-024", + "numeroPlano": "1.2.12", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Low angle. Miko observa a Búho Sabio, buscando orientación.", + "indicacionesSonido": "Meow de pregunta de Miko, viento suave.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emoción": "sorpresa", + "posición": "derecha", + "pose corporal": "Mirando hacia arriba hacia Búho Sabio, con una expresión de búsqueda de orientación.", + "accesorios visibles": "Mochila de Inventos/Utilidad." + } + ], + "accion": "Miko observa a Búho Sabio, buscando orientación.", + "luz": "Contraluz suave para resaltar la expresión de sorpresa.", + "camara": "Low angle.", + "optica": "Lente gran angular para enfatizar la diferencia de altura.", + "tipoPlano": "Plano americano.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Árboles cercanos con hojas moviéndose suavemente por el viento.", + "custom": "" + }, + "promptImagen": "Plano americano.. Low angle.. Lente gran angular para enfatizar la diferencia de altura.. [object Object]. Miko observa a Búho Sabio, buscando orientación.. Contraluz suave para resaltar la expresión de sorpresa.. Árboles cercanos con hojas moviéndose suavemente por el viento.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-025", + "numeroPlano": "1.2.13", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up. El libro de pergamino de Búho Sabio, mostrando símbolos de cooperación.", + "indicacionesSonido": "Sonido de pasar páginas.", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "Detalle extremo del libro de pergamino de Búho Sabio, mostrando símbolos de cooperación.", + "luz": "Iluminación focalizada en la página del libro, resaltando los símbolos.", + "camara": "Cenital.", + "optica": "Lente macro para captar los detalles de los símbolos.", + "tipoPlano": "Plano detalle.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Textura del pergamino antiguo en el fondo.", + "custom": "" + }, + "promptImagen": "Plano detalle.. Cenital.. Lente macro para captar los detalles de los símbolos.. . Detalle extremo del libro de pergamino de Búho Sabio, mostrando símbolos de cooperación.. Iluminación focalizada en la página del libro, resaltando los símbolos.. Textura del pergamino antiguo en el fondo.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-026", + "numeroPlano": "1.2.14", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Coco, Miko y Búho Sabio juntos mirando hacia la aldea.", + "indicacionesSonido": "Sonido de viento, meows de determinación.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko", + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción": "neutral", + "posición": "izquierda", + "pose corporal": "De pie, mirando hacia la aldea.", + "accesorios visibles": "Gafas de Piloto sobre la frente." + }, + { + "nombre": "Miko", + "emoción": "neutral", + "posición": "centro", + "pose corporal": "De pie, mirando hacia la aldea.", + "accesorios visibles": "Mochila de Inventos/Utilidad." + }, + { + "nombre": "Búho Sabio", + "emoción": "neutral", + "posición": "derecha", + "pose corporal": "De pie, mirando hacia la aldea.", + "accesorios visibles": "Gafas redondas." + } + ], + "accion": "Coco, Miko y Búho Sabio juntos mirando hacia la aldea.", + "luz": "Iluminación suave con tonos fríos para reflejar determinación.", + "camara": "Frontal.", + "optica": "Lente normal con profundidad de campo que mantiene a los personajes en foco.", + "tipoPlano": "Plano medio.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Neblina marrón oxidado cubriendo la aldea en la distancia.", + "custom": "" + }, + "promptImagen": "Plano medio.. Frontal.. Lente normal con profundidad de campo que mantiene a los personajes en foco.. [object Object],[object Object],[object Object]. Coco, Miko y Búho Sabio juntos mirando hacia la aldea.. Iluminación suave con tonos fríos para reflejar determinación.. Neblina marrón oxidado cubriendo la aldea en la distancia.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-027", + "numeroPlano": "1.2.15", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Tracking shot. Coco y Miko comienzan a descender la colina hacia la aldea.", + "indicacionesSonido": "Sonido de pasos en el suelo, viento.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción": "neutral", + "posición": "izquierda", + "pose corporal": "Descendiendo la colina con determinación.", + "accesorios visibles": "Gafas de Piloto sobre la frente." + }, + { + "nombre": "Miko", + "emoción": "neutral", + "posición": "derecha", + "pose corporal": "Descendiendo la colina junto a Coco.", + "accesorios visibles": "Mochila de Inventos/Utilidad." + } + ], + "accion": "Coco y Miko comienzan a descender la colina hacia la aldea.", + "luz": "Luz difusa con tonos fríos que crea una atmósfera de avance decidido.", + "camara": "Tracking shot que sigue el movimiento de los personajes.", + "optica": "Lente gran angular para capturar el movimiento y el entorno.", + "tipoPlano": "Plano general.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Entorno natural con colinas y neblina en el fondo.", + "custom": "" + }, + "promptImagen": "Plano general.. Tracking shot que sigue el movimiento de los personajes.. Lente gran angular para capturar el movimiento y el entorno.. [object Object],[object Object]. Coco y Miko comienzan a descender la colina hacia la aldea.. Luz difusa con tonos fríos que crea una atmósfera de avance decidido.. Entorno natural con colinas y neblina en el fondo.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-028", + "numeroPlano": "1.2.16", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "High angle. Vista desde arriba de Coco y Miko descendiendo, la aldea en el fondo.", + "indicacionesSonido": "Meows de determinación, viento.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción": "neutral", + "posición": "izquierda", + "pose corporal": "Descendiendo la colina con determinación.", + "accesorios visibles": "Gafas de Piloto sobre la frente." + }, + { + "nombre": "Miko", + "emoción": "neutral", + "posición": "derecha", + "pose corporal": "Descendiendo la colina junto a Coco.", + "accesorios visibles": "Mochila de Inventos/Utilidad." + } + ], + "accion": "Vista desde arriba de Coco y Miko descendiendo, la aldea en el fondo.", + "luz": "Iluminación suave y difusa, con tonos fríos.", + "camara": "High angle.", + "optica": "Lente gran angular para capturar la escala del entorno.", + "tipoPlano": "Plano general.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Paisaje con colinas y la aldea cubierta de neblina a lo lejos.", + "custom": "" + }, + "promptImagen": "Plano general.. High angle.. Lente gran angular para capturar la escala del entorno.. [object Object],[object Object]. Vista desde arriba de Coco y Miko descendiendo, la aldea en el fondo.. Iluminación suave y difusa, con tonos fríos.. Paisaje con colinas y la aldea cubierta de neblina a lo lejos.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-029", + "numeroPlano": "1.2.17", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Coco bajándose las gafas de piloto, enfocada en la misión.", + "indicacionesSonido": "Sonido metálico suave de las gafas, meow decidido.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción": "neutral", + "posición": "centro", + "pose corporal": "Bajándose las gafas de piloto, enfocada y decidida.", + "accesorios visibles": "Gafas de Piloto." + } + ], + "accion": "Close-up de Coco bajándose las gafas de piloto, enfocada en la misión.", + "luz": "Luz directa sobre el rostro de Coco para resaltar su determinación.", + "camara": "Frontal.", + "optica": "Lente macro para enfatizar la acción y expresión.", + "tipoPlano": "Primer plano.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfoque suave del entorno, centrado en Coco.", + "custom": "" + }, + "promptImagen": "Primer plano.. Frontal.. Lente macro para enfatizar la acción y expresión.. [object Object]. Close-up de Coco bajándose las gafas de piloto, enfocada en la misión.. Luz directa sobre el rostro de Coco para resaltar su determinación.. Desenfoque suave del entorno, centrado en Coco.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-030", + "numeroPlano": "1.2.18", + "segmentoGuion": "I.2 La Aldea Desaparecida", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. Coco y Miko se adentran en la aldea cubierta por la neblina.", + "indicacionesSonido": "Melodía melancólica se intensifica levemente, sonidos de pasos.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción": "neutral", + "posición": "izquierda", + "pose corporal": "Adentrándose en la aldea con determinación.", + "accesorios visibles": "Gafas de Piloto sobre la frente." + }, + { + "nombre": "Miko", + "emoción": "neutral", + "posición": "derecha", + "pose corporal": "Adentrándose en la aldea junto a Coco.", + "accesorios visibles": "Mochila de Inventos/Utilidad." + } + ], + "accion": "Coco y Miko se adentran en la aldea cubierta por la neblina.", + "luz": "Luz difusa que aumenta la melancolía de la escena.", + "camara": "Wide shot.", + "optica": "Lente normal para capturar a los personajes y el entorno.", + "tipoPlano": "Plano general.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Neblina densa cubre la aldea, creando una atmósfera misteriosa.", + "custom": "" + }, + "promptImagen": "Plano general.. Wide shot.. Lente normal para capturar a los personajes y el entorno.. [object Object],[object Object]. Coco y Miko se adentran en la aldea cubierta por la neblina.. Luz difusa que aumenta la melancolía de la escena.. Neblina densa cubre la aldea, creando una atmósfera misteriosa.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-I.2" + }, + { + "id": "plano-031", + "numeroPlano": "2.1.1", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE SHOT. La cámara muestra el claro del bosque bajo la luz de la luna. En el centro, se ve un árbol grande del cual desciende el Búho Sabio.", + "indicacionesSonido": "ulular rítmico, música esperanzadora", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emoción": "neutral", + "posición": "centro", + "pose corporal": "Descendiendo desde un árbol grande.", + "accesorios visibles": "Gafas redondas y su pequeño libro de pergamino." + } + ], + "accion": "La cámara muestra el claro del bosque bajo la luz de la luna, con el Búho Sabio descendiendo del árbol.", + "luz": "Luz de luna que baña el claro del bosque, creando sombras suaves.", + "camara": "Wide shot.", + "optica": "Lente gran angular para capturar la amplitud del claro.", + "tipoPlano": "Plano general.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Un claro del bosque bajo la luz de la luna, con un árbol grande en el centro.", + "custom": "" + }, + "promptImagen": "Plano general.. Wide shot.. Lente gran angular para capturar la amplitud del claro.. [object Object]. La cámara muestra el claro del bosque bajo la luz de la luna, con el Búho Sabio descendiendo del árbol.. Luz de luna que baña el claro del bosque, creando sombras suaves.. Un claro del bosque bajo la luz de la luna, con un árbol grande en el centro.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-032", + "numeroPlano": "2.1.2", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. El Búho Sabio aterriza suavemente en el suelo, sus gafas reflejan la luz de la luna.", + "indicacionesSonido": "crujido de hojas al aterrizar, música suave", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emoción": "neutral", + "posición": "centro", + "pose corporal": "Aterrizando suavemente en el suelo.", + "accesorios visibles": "Gafas redondas reflejando la luz de la luna." + } + ], + "accion": "El Búho Sabio aterriza suavemente en el suelo, sus gafas reflejan la luz de la luna.", + "luz": "Iluminación suave con la luz de la luna reflejándose en las gafas.", + "camara": "Frontal.", + "optica": "Lente normal con poca profundidad de campo para enfocar al Búho Sabio.", + "tipoPlano": "Plano medio.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Hojas secas en el suelo del bosque, iluminadas por la luna.", + "custom": "" + }, + "promptImagen": "Plano medio.. Frontal.. Lente normal con poca profundidad de campo para enfocar al Búho Sabio.. [object Object]. El Búho Sabio aterriza suavemente en el suelo, sus gafas reflejan la luz de la luna.. Iluminación suave con la luz de la luna reflejándose en las gafas.. Hojas secas en el suelo del bosque, iluminadas por la luna.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-033", + "numeroPlano": "2.1.3", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Detalle de las gafas del Búho Sabio, el reflejo de la luna en los cristales.", + "indicacionesSonido": "ulular suave, música continúa", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emoción": "neutral", + "posición": "centro", + "pose corporal": "Gafas reflejando la luna.", + "accesorios visibles": "Gafas redondas." + } + ], + "accion": "Detalle de las gafas del Búho Sabio, el reflejo de la luna en los cristales.", + "luz": "Iluminación suave con reflejo de la luna en los cristales.", + "camara": "Close-up.", + "optica": "Lente macro para capturar el detalle del reflejo.", + "tipoPlano": "Plano detalle.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfoque del entorno del bosque.", + "custom": "" + }, + "promptImagen": "Plano detalle.. Close-up.. Lente macro para capturar el detalle del reflejo.. [object Object]. Detalle de las gafas del Búho Sabio, el reflejo de la luna en los cristales.. Iluminación suave con reflejo de la luna en los cristales.. Desenfoque del entorno del bosque.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-034", + "numeroPlano": "2.1.4", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "OVER-THE-SHOULDER. Desde la perspectiva del Búho Sabio, Coco y Miko miran con admiración y curiosidad.", + "indicacionesSonido": "música esperanzadora, susurros del viento", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción": "sorpresa", + "posición": "izquierda", + "pose corporal": "Mirando con admiración.", + "accesorios visibles": "Gafas de Piloto sobre la frente." + }, + { + "nombre": "Miko", + "emoción": "sorpresa", + "posición": "derecha", + "pose corporal": "Mirando con admiración.", + "accesorios visibles": "Mochila de Inventos/Utilidad." + } + ], + "accion": "Desde la perspectiva del Búho Sabio, Coco y Miko miran con admiración y curiosidad.", + "luz": "Luz de luna que ilumina suavemente a Coco y Miko.", + "camara": "Over-the-shoulder desde el Búho Sabio.", + "optica": "Lente normal para mantener a los personajes en foco.", + "tipoPlano": "Plano medio.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "El bosque iluminado por la luna, creando un ambiente mágico.", + "custom": "" + }, + "promptImagen": "Plano medio.. Over-the-shoulder desde el Búho Sabio.. Lente normal para mantener a los personajes en foco.. [object Object],[object Object]. Desde la perspectiva del Búho Sabio, Coco y Miko miran con admiración y curiosidad.. Luz de luna que ilumina suavemente a Coco y Miko.. El bosque iluminado por la luna, creando un ambiente mágico.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-035", + "numeroPlano": "2.1.5", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Rostro de Coco con las gafas de piloto sobre la frente, reflejando admiración.", + "indicacionesSonido": "sonido de hojas moviéndose, música esperanzadora", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción": "alegria", + "posición": "centro", + "pose corporal": "Rostro reflejando admiración.", + "accesorios visibles": "Gafas de Piloto sobre la frente." + } + ], + "accion": "Rostro de Coco con las gafas de piloto sobre la frente, reflejando admiración.", + "luz": "Iluminación suave con luz de luna, resaltando la expresión de alegría.", + "camara": "Close-up.", + "optica": "Lente macro para capturar la expresión facial.", + "tipoPlano": "Primer plano.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfoque suave del entorno del bosque.", + "custom": "" + }, + "promptImagen": "Primer plano.. Close-up.. Lente macro para capturar la expresión facial.. [object Object]. Rostro de Coco con las gafas de piloto sobre la frente, reflejando admiración.. Iluminación suave con luz de luna, resaltando la expresión de alegría.. Desenfoque suave del entorno del bosque.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-036", + "numeroPlano": "2.1.6", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Rostro de Miko, su mochila visible, mostrando una expresión de sorpresa y admiración.", + "indicacionesSonido": "ulular del búho, música continua", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emoción": "alegria", + "posición": "centro", + "pose corporal": "Rostro mostrando sorpresa y admiración.", + "accesorios visibles": "Mochila de Inventos/Utilidad." + } + ], + "accion": "Rostro de Miko, su mochila visible, mostrando una expresión de sorpresa y admiración.", + "luz": "Luz suave que resalta la expresión de alegría en el rostro de Miko.", + "camara": "Close-up.", + "optica": "Lente macro para capturar detalles faciales.", + "tipoPlano": "Primer plano.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfoque suave del fondo del bosque.", + "custom": "" + }, + "promptImagen": "Primer plano.. Close-up.. Lente macro para capturar detalles faciales.. [object Object]. Rostro de Miko, su mochila visible, mostrando una expresión de sorpresa y admiración.. Luz suave que resalta la expresión de alegría en el rostro de Miko.. Desenfoque suave del fondo del bosque.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-037", + "numeroPlano": "2.1.7", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "LOW ANGLE. El Búho Sabio se erige majestuoso, sus gafas brillan más intensamente.", + "indicacionesSonido": "ulular sabio, música en crescendo", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emoción": "neutral", + "posición": "centro", + "pose corporal": "Erigiéndose majestuoso.", + "accesorios visibles": "Gafas redondas." + } + ], + "accion": "El Búho Sabio se erige majestuoso, sus gafas brillan más intensamente.", + "luz": "Luz de luna que ilumina las gafas, creando un brillo intenso.", + "camara": "Low angle.", + "optica": "Lente normal para resaltar su majestuosidad.", + "tipoPlano": "Plano medio.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "El bosque bajo la luz de la luna, con sombras alargadas.", + "custom": "" + }, + "promptImagen": "Plano medio.. Low angle.. Lente normal para resaltar su majestuosidad.. [object Object]. El Búho Sabio se erige majestuoso, sus gafas brillan más intensamente.. Luz de luna que ilumina las gafas, creando un brillo intenso.. El bosque bajo la luz de la luna, con sombras alargadas.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-038", + "numeroPlano": "2.1.8", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "HIGH ANGLE. Vista desde arriba de Coco y Miko observando al Búho, mostrando su pequeño tamaño en comparación.", + "indicacionesSonido": "música suave, sonido de hojas", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción": "sorpresa", + "posición": "izquierda", + "pose corporal": "Observando al Búho con admiración.", + "accesorios visibles": "Gafas de Piloto sobre la frente." + }, + { + "nombre": "Miko", + "emoción": "sorpresa", + "posición": "derecha", + "pose corporal": "Observando al Búho con admiración.", + "accesorios visibles": "Mochila de Inventos/Utilidad." + } + ], + "accion": "Vista desde arriba de Coco y Miko observando al Búho, mostrando su pequeño tamaño en comparación.", + "luz": "Luz de luna suave que ilumina a los personajes.", + "camara": "High angle.", + "optica": "Lente gran angular para capturar la escala del entorno.", + "tipoPlano": "Plano general.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "El claro del bosque iluminado por la luna, con hojas esparcidas.", + "custom": "" + }, + "promptImagen": "Plano general.. High angle.. Lente gran angular para capturar la escala del entorno.. [object Object],[object Object]. Vista desde arriba de Coco y Miko observando al Búho, mostrando su pequeño tamaño en comparación.. Luz de luna suave que ilumina a los personajes.. El claro del bosque iluminado por la luna, con hojas esparcidas.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-039", + "numeroPlano": "2.1.9", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "TRACKING SHOT. La cámara sigue al Búho Sabio mientras camina hacia Coco y Miko.", + "indicacionesSonido": "pasos suaves sobre hojas, música continua", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emoción": "neutral", + "posición": "centro", + "pose corporal": "Caminando hacia Coco y Miko.", + "accesorios visibles": "Gafas redondas y su pequeño libro de pergamino." + } + ], + "accion": "La cámara sigue al Búho Sabio mientras camina hacia Coco y Miko.", + "luz": "Iluminación suave con luz de luna que sigue al personaje.", + "camara": "Tracking shot.", + "optica": "Lente normal para seguir el movimiento.", + "tipoPlano": "Plano medio.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Hojas en el suelo del bosque, iluminadas por la luna.", + "custom": "" + }, + "promptImagen": "Plano medio.. Tracking shot.. Lente normal para seguir el movimiento.. [object Object]. La cámara sigue al Búho Sabio mientras camina hacia Coco y Miko.. Iluminación suave con luz de luna que sigue al personaje.. Hojas en el suelo del bosque, iluminadas por la luna.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-040", + "numeroPlano": "2.1.10", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "POV. Vista desde los ojos de Coco, el Búho Sabio se acerca con calma, transmitiendo paz.", + "indicacionesSonido": "música suave, ulular", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción": "alegria", + "posición": "centro", + "pose corporal": "Observando al Búho con una expresión de paz.", + "accesorios visibles": "Gafas de Piloto sobre la frente." + } + ], + "accion": "Vista desde los ojos de Coco, el Búho Sabio se acerca con calma, transmitiendo paz.", + "luz": "Luz de luna difusa que ilumina la escena suavemente.", + "camara": "POV desde Coco.", + "optica": "Lente normal con profundidad de campo para mantener al Búho en foco.", + "tipoPlano": "Plano general.", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "El bosque iluminado por la luna, con sombras suaves.", + "custom": "" + }, + "promptImagen": "Plano general.. POV desde Coco.. Lente normal con profundidad de campo para mantener al Búho en foco.. [object Object]. Vista desde los ojos de Coco, el Búho Sabio se acerca con calma, transmitiendo paz.. Luz de luna difusa que ilumina la escena suavemente.. El bosque iluminado por la luna, con sombras suaves.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-041", + "numeroPlano": "2.1.11", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. El Búho Sabio se detiene frente a Coco y Miko, abriendo su pequeño libro de pergamino.", + "indicacionesSonido": "crujido de pergamino, música continua", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio", + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emocion": "neutral", + "posición": "centro", + "pose corporal": "de pie, abriendo el libro de pergamino", + "accesorios visibles": "gafas redondas y libro de pergamino" + }, + { + "nombre": "Coco", + "emocion": "alegria", + "posición": "izquierda", + "pose corporal": "sentada con las gafas de piloto sobre la frente", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emocion": "alegria", + "posición": "derecha", + "pose corporal": "sentado con la mochila visible", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "El Búho Sabio abre su libro frente a Coco y Miko, quienes observan con alegría.", + "luz": "difusa, cálida, creando un ambiente acogedor", + "camara": "frontal", + "optica": "normal, profundidad de campo media", + "tipoPlano": "plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "bosque verde con árboles altos y luz suave filtrándose a través de las hojas", + "custom": "" + }, + "promptImagen": "plano medio. frontal. normal, profundidad de campo media. [object Object],[object Object],[object Object]. El Búho Sabio abre su libro frente a Coco y Miko, quienes observan con alegría.. difusa, cálida, creando un ambiente acogedor. bosque verde con árboles altos y luz suave filtrándose a través de las hojas. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-042", + "numeroPlano": "2.1.12", + "segmentoGuion": "II.1 La Aparición del Aliado", + "tiempoSegundos": 5, + "accionDescripcion": "EXTREME CLOSE-UP. Detalle de las páginas del libro del Búho, mostrando símbolos de cooperación y armonía.", + "indicacionesSonido": "música culminante, ulular final", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emocion": "neutral", + "posición": "primer plano", + "pose corporal": "n/a", + "accesorios visibles": "n/a" + } + ], + "accion": "Detalle de los símbolos en las páginas del libro del Búho.", + "luz": "iluminación directa, cálida, resaltando los símbolos", + "camara": "cenital", + "optica": "macro, profundidad de campo reducida", + "tipoPlano": "primerísimo primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "sólo las páginas del libro, sin detalles adicionales", + "custom": "" + }, + "promptImagen": "primerísimo primer plano. cenital. macro, profundidad de campo reducida. [object Object]. Detalle de los símbolos en las páginas del libro del Búho.. iluminación directa, cálida, resaltando los símbolos. sólo las páginas del libro, sin detalles adicionales. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.1" + }, + { + "id": "plano-043", + "numeroPlano": "2.2.1", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE SHOT. Se muestra a Búho Sabio en un claro del bosque, con Coco y Miko atentos frente a él. La neblina marrón oxidado rodea el espacio.", + "indicacionesSonido": "ulular instructivo, sonido de viento suave", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Búho Sabio", + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emocion": "neutral", + "posición": "centro", + "pose corporal": "de pie, alas extendidas", + "accesorios visibles": "gafas redondas" + }, + { + "nombre": "Coco", + "emocion": "sorpresa", + "posición": "izquierda", + "pose corporal": "erguida, mirando al Búho", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emocion": "sorpresa", + "posición": "derecha", + "pose corporal": "erguido, mirando al Búho", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Búho Sabio está en el centro del claro con Coco y Miko observándolo, la neblina rodea el área.", + "luz": "difusa, fría, con sombras suaves", + "camara": "frontal", + "optica": "gran angular, profundidad de campo amplia", + "tipoPlano": "plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "claro del bosque con árboles circundantes, cubierto en parte por neblina marrón oxidado", + "custom": "" + }, + "promptImagen": "plano general. frontal. gran angular, profundidad de campo amplia. [object Object],[object Object],[object Object]. Búho Sabio está en el centro del claro con Coco y Miko observándolo, la neblina rodea el área.. difusa, fría, con sombras suaves. claro del bosque con árboles circundantes, cubierto en parte por neblina marrón oxidado. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-044", + "numeroPlano": "2.2.2", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Búho Sabio gesticula con sus alas, señalando la neblina.", + "indicacionesSonido": "ulular instructivo, sonido de hojas moviéndose", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emocion": "neutral", + "posición": "centro", + "pose corporal": "alas extendidas señalando hacia la neblina", + "accesorios visibles": "gafas redondas" + } + ], + "accion": "Búho Sabio señala la neblina con sus alas.", + "luz": "difusa, fría, con luz indirecta", + "camara": "tres cuartos", + "optica": "normal, profundidad de campo media", + "tipoPlano": "plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "neblina marrón oxidado cubriendo el suelo del bosque", + "custom": "" + }, + "promptImagen": "plano medio. tres cuartos. normal, profundidad de campo media. [object Object]. Búho Sabio señala la neblina con sus alas.. difusa, fría, con luz indirecta. neblina marrón oxidado cubriendo el suelo del bosque. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-045", + "numeroPlano": "2.2.3", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Rostro de Coco, ajustándose las gafas de piloto sobre los ojos, mostrando concentración.", + "indicacionesSonido": "sonido de ajuste de gafas, melodía didáctica", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocion": "alegria", + "posición": "primer plano", + "pose corporal": "ajustándose las gafas de piloto", + "accesorios visibles": "gafas de piloto" + } + ], + "accion": "Coco se ajusta las gafas de piloto mostrando concentración.", + "luz": "directa, cálida, enfocada en el rostro", + "camara": "frontal", + "optica": "teleobjetivo, profundidad de campo reducida", + "tipoPlano": "primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "desenfocado, sugiriendo el bosque", + "custom": "" + }, + "promptImagen": "primer plano. frontal. teleobjetivo, profundidad de campo reducida. [object Object]. Coco se ajusta las gafas de piloto mostrando concentración.. directa, cálida, enfocada en el rostro. desenfocado, sugiriendo el bosque. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-046", + "numeroPlano": "2.2.4", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "OVER-THE-SHOULDER. Desde la perspectiva de Búho Sabio, mirando a Coco y Miko, quienes asienten con interés.", + "indicacionesSonido": "melodía didáctica continua", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocion": "alegria", + "posición": "centro", + "pose corporal": "asintiendo con la cabeza", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emocion": "alegria", + "posición": "centro", + "pose corporal": "asintiendo con la cabeza", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Desde la perspectiva de Búho Sabio, se observa a Coco y Miko asintiendo.", + "luz": "difusa, cálida, enfocada en Coco y Miko", + "camara": "over-the-shoulder", + "optica": "normal, profundidad de campo media", + "tipoPlano": "plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "bosque difuminado detrás de Coco y Miko", + "custom": "" + }, + "promptImagen": "plano medio. over-the-shoulder. normal, profundidad de campo media. [object Object],[object Object]. Desde la perspectiva de Búho Sabio, se observa a Coco y Miko asintiendo.. difusa, cálida, enfocada en Coco y Miko. bosque difuminado detrás de Coco y Miko. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-047", + "numeroPlano": "2.2.5", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "LOW ANGLE. Búho Sabio abre su libro de pergamino, mostrando su autoridad y sabiduría.", + "indicacionesSonido": "sonido de páginas de libro de pergamino abriéndose", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emocion": "neutral", + "posición": "centro", + "pose corporal": "sujetando y abriendo el libro de pergamino", + "accesorios visibles": "gafas redondas, libro de pergamino" + } + ], + "accion": "Búho Sabio abre su libro desde un ángulo bajo, destacando su figura autoritaria.", + "luz": "directa, cálida, iluminando el rostro y el libro", + "camara": "contrapicado", + "optica": "gran angular, profundidad de campo amplia", + "tipoPlano": "plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "cielo azul visible entre las copas de los árboles", + "custom": "" + }, + "promptImagen": "plano medio. contrapicado. gran angular, profundidad de campo amplia. [object Object]. Búho Sabio abre su libro desde un ángulo bajo, destacando su figura autoritaria.. directa, cálida, iluminando el rostro y el libro. cielo azul visible entre las copas de los árboles. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-048", + "numeroPlano": "2.2.6", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "HIGH ANGLE. Se muestra la neblina marrón oxidado cubriendo el suelo, sugiriendo vulnerabilidad del entorno.", + "indicacionesSonido": "sonido de viento, tonos graves", + "personajesDetalle": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "El Gran Desorden" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "El Gran Desorden", + "emocion": "neutral", + "posición": "fondo", + "pose corporal": "n/a", + "accesorios visibles": "n/a" + } + ], + "accion": "Vista desde arriba de la neblina marrón oxidado cubriendo el suelo del bosque.", + "luz": "difusa, fría, iluminación suave", + "camara": "cenital", + "optica": "gran angular, profundidad de campo amplia", + "tipoPlano": "plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "suelo del bosque completamente cubierto por la neblina", + "custom": "" + }, + "promptImagen": "plano general. cenital. gran angular, profundidad de campo amplia. [object Object]. Vista desde arriba de la neblina marrón oxidado cubriendo el suelo del bosque.. difusa, fría, iluminación suave. suelo del bosque completamente cubierto por la neblina. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-049", + "numeroPlano": "2.2.7", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Coco y Miko se miran entre sí, mostrando determinación.", + "indicacionesSonido": "melodía de expectativa", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocion": "alegria", + "posición": "izquierda", + "pose corporal": "mirando hacia Miko con determinación", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emocion": "alegria", + "posición": "derecha", + "pose corporal": "mirando hacia Coco con determinación", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Coco y Miko se miran fijamente, sus expresiones reflejan determinación.", + "luz": "difusa, cálida, resaltando sus rostros", + "camara": "frontal", + "optica": "normal, profundidad de campo media", + "tipoPlano": "plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "desenfocado, sugiriendo el bosque", + "custom": "" + }, + "promptImagen": "plano medio. frontal. normal, profundidad de campo media. [object Object],[object Object]. Coco y Miko se miran fijamente, sus expresiones reflejan determinación.. difusa, cálida, resaltando sus rostros. desenfocado, sugiriendo el bosque. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-050", + "numeroPlano": "2.2.8", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "EXTREME CLOSE-UP. Detalle del libro de pergamino, mostrando una ilustración de una luz que disipa la neblina.", + "indicacionesSonido": "sonido de páginas de libro de pergamino, melodía de descubrimiento", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emocion": "neutral", + "posición": "primer plano", + "pose corporal": "n/a", + "accesorios visibles": "n/a" + } + ], + "accion": "Detalle de la ilustración en el libro de pergamino mostrando una luz que disipa la neblina.", + "luz": "iluminación directa, cálida, enfocada en la ilustración", + "camara": "cenital", + "optica": "macro, profundidad de campo reducida", + "tipoPlano": "primerísimo primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "sólo las páginas del libro, sin detalles adicionales", + "custom": "" + }, + "promptImagen": "primerísimo primer plano. cenital. macro, profundidad de campo reducida. [object Object]. Detalle de la ilustración en el libro de pergamino mostrando una luz que disipa la neblina.. iluminación directa, cálida, enfocada en la ilustración. sólo las páginas del libro, sin detalles adicionales. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-051", + "numeroPlano": "2.2.9", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "TRACKING SHOT. Sigue a Miko mientras abre su mochila, sacando un pequeño dispositivo de iluminación.", + "indicacionesSonido": "sonido de cremallera, melodía de curiosidad", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emocion": "alegria", + "posición": "centro", + "pose corporal": "agachado, sacando un dispositivo de la mochila", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "La cámara sigue a Miko mientras abre su mochila y saca el dispositivo.", + "luz": "difusa, cálida, resaltando sus movimientos", + "camara": "tracking shot", + "optica": "normal, profundidad de campo media", + "tipoPlano": "plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "suelo del bosque con hojas caídas", + "custom": "" + }, + "promptImagen": "plano medio. tracking shot. normal, profundidad de campo media. [object Object]. La cámara sigue a Miko mientras abre su mochila y saca el dispositivo.. difusa, cálida, resaltando sus movimientos. suelo del bosque con hojas caídas. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-052", + "numeroPlano": "2.2.10", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Cara de Miko, con una expresión de entusiasmo mientras sostiene el dispositivo.", + "indicacionesSonido": "sonido de chispa del dispositivo, melodía optimista", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emocion": "alegria", + "posición": "primer plano", + "pose corporal": "sosteniendo el dispositivo con entusiasmo", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Miko sostiene el dispositivo con una expresión entusiasta.", + "luz": "directa, cálida, enfocada en su rostro", + "camara": "frontal", + "optica": "teleobjetivo, profundidad de campo reducida", + "tipoPlano": "primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "desenfocado, sugiriendo el bosque", + "custom": "" + }, + "promptImagen": "primer plano. frontal. teleobjetivo, profundidad de campo reducida. [object Object]. Miko sostiene el dispositivo con una expresión entusiasta.. directa, cálida, enfocada en su rostro. desenfocado, sugiriendo el bosque. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-053", + "numeroPlano": "2.2.11", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "POV. Desde la perspectiva de Coco, viendo a Miko encender el dispositivo que comienza a brillar intensamente.", + "indicacionesSonido": "sonido de encendido, melodía de iluminación", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emocion": "alegria", + "posición": "centro", + "pose corporal": "encendiendo el dispositivo", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Coco observa cómo Miko enciende el dispositivo que empieza a brillar.", + "luz": "directa, cálida, emanando del dispositivo", + "camara": "POV", + "optica": "normal, profundidad de campo media", + "tipoPlano": "plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "luz brillante que ilumina el entorno", + "custom": "" + }, + "promptImagen": "plano medio. POV. normal, profundidad de campo media. [object Object]. Coco observa cómo Miko enciende el dispositivo que empieza a brillar.. directa, cálida, emanando del dispositivo. luz brillante que ilumina el entorno. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-054", + "numeroPlano": "2.2.12", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "LOW ANGLE. La luz del dispositivo comienza a disipar la neblina marrón oxidado, sugiriendo poder y triunfo.", + "indicacionesSonido": "sonido de dispersión de la neblina, melodía triunfante", + "personajesDetalle": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "El Gran Desorden" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "El Gran Desorden", + "emocion": "neutral", + "posición": "fondo", + "pose corporal": "n/a", + "accesorios visibles": "n/a" + } + ], + "accion": "La luz del dispositivo empieza a disipar la neblina marrón oxidado.", + "luz": "directa, cálida, emanando del dispositivo y disipando la neblina", + "camara": "contrapicado", + "optica": "gran angular, profundidad de campo amplia", + "tipoPlano": "plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "neblina marrón oxidado comenzando a disiparse", + "custom": "" + }, + "promptImagen": "plano general. contrapicado. gran angular, profundidad de campo amplia. [object Object]. La luz del dispositivo empieza a disipar la neblina marrón oxidado.. directa, cálida, emanando del dispositivo y disipando la neblina. neblina marrón oxidado comenzando a disiparse. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-055", + "numeroPlano": "2.2.13", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "HIGH ANGLE. Vista del claro del bosque, ahora en parte despejado de la neblina, mostrando la vulnerabilidad de la oscuridad al poder de la cooperación.", + "indicacionesSonido": "sonido de viento calmado, melodía de alivio", + "personajesDetalle": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "El Gran Desorden" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "El Gran Desorden", + "emocion": "neutral", + "posición": "fondo", + "pose corporal": "n/a", + "accesorios visibles": "n/a" + } + ], + "accion": "Vista aérea del claro del bosque con partes de la neblina dispersándose.", + "luz": "difusa, cálida, iluminando el claro del bosque", + "camara": "cenital", + "optica": "gran angular, profundidad de campo amplia", + "tipoPlano": "plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "claro del bosque parcialmente despejado de la neblina", + "custom": "" + }, + "promptImagen": "plano general. cenital. gran angular, profundidad de campo amplia. [object Object]. Vista aérea del claro del bosque con partes de la neblina dispersándose.. difusa, cálida, iluminando el claro del bosque. claro del bosque parcialmente despejado de la neblina. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-neutral" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-056", + "numeroPlano": "2.2.14", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE SHOT. Coco, Miko y Búho Sabio observan satisfechos el efecto de la luz.", + "indicacionesSonido": "melodía alegre, sonido de hojas susurrando", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko", + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocion": "alegria", + "posición": "izquierda", + "pose corporal": "erguida, observando el efecto de la luz", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emocion": "alegria", + "posición": "centro", + "pose corporal": "erguido, observando el efecto de la luz", + "accesorios visibles": "mochila de inventos" + }, + { + "nombre": "Búho Sabio", + "emocion": "alegria", + "posición": "derecha", + "pose corporal": "erguido, observando el efecto de la luz", + "accesorios visibles": "gafas redondas" + } + ], + "accion": "Coco, Miko y Búho Sabio observan satisfechos el efecto de la luz en el claro.", + "luz": "difusa, cálida, iluminando el área despejada", + "camara": "frontal", + "optica": "gran angular, profundidad de campo amplia", + "tipoPlano": "plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "claro del bosque iluminado, hojas brillantes", + "custom": "" + }, + "promptImagen": "plano general. frontal. gran angular, profundidad de campo amplia. [object Object],[object Object],[object Object]. Coco, Miko y Búho Sabio observan satisfechos el efecto de la luz en el claro.. difusa, cálida, iluminando el área despejada. claro del bosque iluminado, hojas brillantes. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-057", + "numeroPlano": "2.2.15", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Búho Sabio cierra su libro, satisfecho, mientras asiente con aprobación.", + "indicacionesSonido": "sonido de cierre de libro, melodía calmada", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emocion": "alegria", + "posición": "centro", + "pose corporal": "cerrando el libro con aprobación", + "accesorios visibles": "gafas redondas, libro de pergamino" + } + ], + "accion": "Búho Sabio cierra su libro y asiente satisfecho.", + "luz": "difusa, cálida, iluminando al Búho", + "camara": "frontal", + "optica": "normal, profundidad de campo media", + "tipoPlano": "plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "bosque iluminado, hojas brillantes", + "custom": "" + }, + "promptImagen": "plano medio. frontal. normal, profundidad de campo media. [object Object]. Búho Sabio cierra su libro y asiente satisfecho.. difusa, cálida, iluminando al Búho. bosque iluminado, hojas brillantes. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-058", + "numeroPlano": "2.2.16", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "EXTREME CLOSE-UP. Detalle de las gafas de Coco brillando con la luz reflejada, simbolizando claridad y visión.", + "indicacionesSonido": "sonido de destello suave, melodía de claridad", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocion": "alegria", + "posición": "primer plano", + "pose corporal": "n/a", + "accesorios visibles": "gafas de piloto" + } + ], + "accion": "Las gafas de Coco brillan con la luz reflejada, simbolizando claridad.", + "luz": "directa, cálida, reflejándose en las gafas", + "camara": "frontal", + "optica": "macro, profundidad de campo reducida", + "tipoPlano": "primerísimo primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "desenfocado, sugiriendo el bosque", + "custom": "" + }, + "promptImagen": "primerísimo primer plano. frontal. macro, profundidad de campo reducida. [object Object]. Las gafas de Coco brillan con la luz reflejada, simbolizando claridad.. directa, cálida, reflejándose en las gafas. desenfocado, sugiriendo el bosque. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-059", + "numeroPlano": "2.2.17", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Miko guarda el dispositivo en su mochila, satisfecho con el resultado.", + "indicacionesSonido": "sonido de cremallera cerrándose, melodía suave", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emocion": "alegria", + "posición": "primer plano", + "pose corporal": "guardando el dispositivo en la mochila", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Miko guarda el dispositivo en su mochila con satisfacción.", + "luz": "difusa, cálida, enfocada en sus manos", + "camara": "frontal", + "optica": "teleobjetivo, profundidad de campo reducida", + "tipoPlano": "primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "desenfocado, sugiriendo el bosque", + "custom": "" + }, + "promptImagen": "primer plano. frontal. teleobjetivo, profundidad de campo reducida. [object Object]. Miko guarda el dispositivo en su mochila con satisfacción.. difusa, cálida, enfocada en sus manos. desenfocado, sugiriendo el bosque. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-060", + "numeroPlano": "2.2.18", + "segmentoGuion": "II.2 Entendiendo la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE SHOT. Los tres personajes se alejan juntos del claro, dejando atrás el lugar más iluminado y despejado.", + "indicacionesSonido": "melodía de cierre, sonido de pasos sobre hojas", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko", + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocion": "alegria", + "posición": "izquierda", + "pose corporal": "caminando junto a Miko y Búho Sabio", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emocion": "alegria", + "posición": "centro", + "pose corporal": "caminando junto a Coco y Búho Sabio", + "accesorios visibles": "mochila de inventos" + }, + { + "nombre": "Búho Sabio", + "emocion": "alegria", + "posición": "derecha", + "pose corporal": "caminando junto a Coco y Miko", + "accesorios visibles": "gafas redondas" + } + ], + "accion": "Coco, Miko y Búho Sabio se alejan juntos del claro del bosque.", + "luz": "difusa, cálida, iluminando el camino despejado", + "camara": "frontal", + "optica": "gran angular, profundidad de campo amplia", + "tipoPlano": "plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "bosque iluminado, hojas brillantes, camino despejado", + "custom": "" + }, + "promptImagen": "plano general. frontal. gran angular, profundidad de campo amplia. [object Object],[object Object],[object Object]. Coco, Miko y Búho Sabio se alejan juntos del claro del bosque.. difusa, cálida, iluminando el camino despejado. bosque iluminado, hojas brillantes, camino despejado. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria" + } + ], + "fondoId": "fondo-II.2" + }, + { + "id": "plano-061", + "numeroPlano": "3.1.1", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE/ESTABLISHING SHOT. Muestra a Coco y Miko en una mesa de madera en el bosque, con un mapa desplegado delante de ellos. El entorno es tranquilo y soleado.", + "indicacionesSonido": "Sonido ambiente del bosque, música suave de preparación", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "neutral", + "posición en el encuadre": "izquierda", + "pose corporal": "sentada frente al mapa", + "accesorios visibles": "gafas de piloto sobre la frente" + }, + { + "nombre": "Miko", + "emoción visible": "neutral", + "posición en el encuadre": "derecha", + "pose corporal": "sentado frente al mapa", + "accesorios visibles": "mochila de inventos al lado" + } + ], + "accion": "Coco y Miko analizan el mapa con atención en un entorno sereno.", + "luz": "Iluminación natural y suave, filtrada a través de los árboles, creando un ambiente cálido.", + "camara": "Frontal, mostrando a ambos personajes y el entorno del bosque.", + "optica": "Gran angular, profundidad de campo media para capturar detalles del entorno.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Bosque frondoso, mesa de madera, luz del sol filtrándose a través del follaje, colores verdes y marrones dominan el escenario.", + "custom": "" + }, + "promptImagen": "Plano general. Frontal, mostrando a ambos personajes y el entorno del bosque.. Gran angular, profundidad de campo media para capturar detalles del entorno.. [object Object],[object Object]. Coco y Miko analizan el mapa con atención en un entorno sereno.. Iluminación natural y suave, filtrada a través de los árboles, creando un ambiente cálido.. Bosque frondoso, mesa de madera, luz del sol filtrándose a través del follaje, colores verdes y marrones dominan el escenario.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-062", + "numeroPlano": "3.1.2", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Coco se ajusta las gafas de piloto sobre los ojos, mostrando determinación.", + "indicacionesSonido": "Meow determinado de Coco, música de preparación", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "alegria", + "posición en el encuadre": "centro", + "pose corporal": "de pie, ajustando las gafas", + "accesorios visibles": "gafas de piloto sobre los ojos" + } + ], + "accion": "Coco se ajusta sus gafas con determinación y alegría.", + "luz": "Iluminación directa y cálida, destacando su expresión de alegría.", + "camara": "Frontal a nivel de los ojos de Coco.", + "optica": "Normal, con profundidad de campo baja para enfocar a Coco.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Difuminado, sugiriendo el bosque alrededor.", + "custom": "" + }, + "promptImagen": "Plano medio. Frontal a nivel de los ojos de Coco.. Normal, con profundidad de campo baja para enfocar a Coco.. [object Object]. Coco se ajusta sus gafas con determinación y alegría.. Iluminación directa y cálida, destacando su expresión de alegría.. Difuminado, sugiriendo el bosque alrededor.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-063", + "numeroPlano": "3.1.3", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Detalle de las patas de Coco señalando varias direcciones en el mapa.", + "indicacionesSonido": "Sonido de lápiz sobre papel, música de preparación", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "neutral", + "posición en el encuadre": "primer plano", + "pose corporal": "patas sobre el mapa", + "accesorios visibles": "" + } + ], + "accion": "Las patas de Coco señalan diferentes direcciones en el mapa.", + "luz": "Iluminación directa y suave, enfocada en las patas y el mapa.", + "camara": "Frontal, altura de la mesa.", + "optica": "Macro, para resaltar los detalles del mapa y las patas.", + "tipoPlano": "Plano detalle", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Mapas y bosque ligeramente desenfocados.", + "custom": "" + }, + "promptImagen": "Plano detalle. Frontal, altura de la mesa.. Macro, para resaltar los detalles del mapa y las patas.. [object Object]. Las patas de Coco señalan diferentes direcciones en el mapa.. Iluminación directa y suave, enfocada en las patas y el mapa.. Mapas y bosque ligeramente desenfocados.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-064", + "numeroPlano": "3.1.4", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "OVER-THE-SHOULDER SHOT. Desde el hombro de Coco, se observa a Miko tomando notas en un cuaderno.", + "indicacionesSonido": "Sonido de lápiz, música de preparación", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emoción visible": "neutral", + "posición en el encuadre": "fondo", + "pose corporal": "escribiendo en un cuaderno", + "accesorios visibles": "mochila al lado" + } + ], + "accion": "Miko anota información importante mientras observa el mapa.", + "luz": "Iluminación difusa, cálida, creando un ambiente de enfoque.", + "camara": "Over-the-shoulder desde Coco hacia Miko.", + "optica": "Normal, con profundidad de campo media.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Detalles del mapa y el cuaderno visibles detrás de Miko.", + "custom": "" + }, + "promptImagen": "Plano medio. Over-the-shoulder desde Coco hacia Miko.. Normal, con profundidad de campo media.. [object Object]. Miko anota información importante mientras observa el mapa.. Iluminación difusa, cálida, creando un ambiente de enfoque.. Detalles del mapa y el cuaderno visibles detrás de Miko.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-065", + "numeroPlano": "3.1.5", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Miko guarda el cuaderno en su mochila, asegurándose de que esté bien organizado.", + "indicacionesSonido": "Cierre de cremallera, música de preparación", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emoción visible": "alegria", + "posición en el encuadre": "primer plano", + "pose corporal": "manos guardando el cuaderno", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Miko guarda cuidadosamente el cuaderno en su mochila con una expresión de satisfacción.", + "luz": "Iluminación directa y cálida, centrada en las manos y la mochila.", + "camara": "Frontal a nivel de las manos.", + "optica": "Macro, destacando el detalle del cuaderno y la mochila.", + "tipoPlano": "Plano detalle", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Difuso, sugiriendo el entorno natural.", + "custom": "" + }, + "promptImagen": "Plano detalle. Frontal a nivel de las manos.. Macro, destacando el detalle del cuaderno y la mochila.. [object Object]. Miko guarda cuidadosamente el cuaderno en su mochila con una expresión de satisfacción.. Iluminación directa y cálida, centrada en las manos y la mochila.. Difuso, sugiriendo el entorno natural.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-066", + "numeroPlano": "3.1.6", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "EXTREME CLOSE-UP. Detalle de las gafas de Coco reflejando el mapa con las marcas de las rutas.", + "indicacionesSonido": "Música de preparación", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "neutral", + "posición en el encuadre": "primer plano", + "pose corporal": "gafas sobre los ojos", + "accesorios visibles": "gafas de piloto" + } + ], + "accion": "Reflejo del mapa en las gafas de Coco, mostrando rutas y detalles.", + "luz": "Iluminación intensa sobre las gafas, resaltando los reflejos.", + "camara": "Frontal, muy cerca del rostro de Coco.", + "optica": "Macro, enfocando los reflejos en las gafas.", + "tipoPlano": "Plano detalle extremo", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfocado, sugiriendo el entorno del bosque.", + "custom": "" + }, + "promptImagen": "Plano detalle extremo. Frontal, muy cerca del rostro de Coco.. Macro, enfocando los reflejos en las gafas.. [object Object]. Reflejo del mapa en las gafas de Coco, mostrando rutas y detalles.. Iluminación intensa sobre las gafas, resaltando los reflejos.. Desenfocado, sugiriendo el entorno del bosque.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-067", + "numeroPlano": "3.1.7", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "LOW ANGLE SHOT. Coco y Miko miran hacia arriba, mostrando su confianza y determinación para enfrentar la misión.", + "indicacionesSonido": "Meow determinado de ambos, música de preparación", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "alegria", + "posición en el encuadre": "izquierda", + "pose corporal": "mirando hacia arriba con determinación", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emoción visible": "alegria", + "posición en el encuadre": "derecha", + "pose corporal": "mirando hacia arriba con confianza", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Coco y Miko miran hacia arriba con expresiones de confianza y determinación.", + "luz": "Iluminación cálida y directa desde arriba, creando un efecto dramático.", + "camara": "Low angle, desde abajo mirando hacia los personajes.", + "optica": "Normal, con profundidad de campo media.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Luz del sol brillando desde arriba, cielo azul entre las copas de los árboles.", + "custom": "" + }, + "promptImagen": "Plano medio. Low angle, desde abajo mirando hacia los personajes.. Normal, con profundidad de campo media.. [object Object],[object Object]. Coco y Miko miran hacia arriba con expresiones de confianza y determinación.. Iluminación cálida y directa desde arriba, creando un efecto dramático.. Luz del sol brillando desde arriba, cielo azul entre las copas de los árboles.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-068", + "numeroPlano": "3.1.8", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "POV SHOT. La vista desde los ojos de Coco mirando el mapa con las rutas señaladas.", + "indicacionesSonido": "Música de preparación", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "neutral", + "posición en el encuadre": "centro", + "pose corporal": "mirando el mapa", + "accesorios visibles": "" + } + ], + "accion": "Vista detallada del mapa desde los ojos de Coco.", + "luz": "Iluminación difusa, resaltando las marcas en el mapa.", + "camara": "POV desde los ojos de Coco.", + "optica": "Normal, con profundidad de campo baja para destacar el mapa.", + "tipoPlano": "Plano detalle", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Mapa detallado con rutas marcadas, colores cálidos y terrosos.", + "custom": "" + }, + "promptImagen": "Plano detalle. POV desde los ojos de Coco.. Normal, con profundidad de campo baja para destacar el mapa.. [object Object]. Vista detallada del mapa desde los ojos de Coco.. Iluminación difusa, resaltando las marcas en el mapa.. Mapa detallado con rutas marcadas, colores cálidos y terrosos.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-069", + "numeroPlano": "3.1.9", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Miko revisa otros elementos en su mochila, asegurándose de que están preparados para la aventura.", + "indicacionesSonido": "Sonido ligero de objetos siendo movidos, música de preparación", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emoción visible": "alegria", + "posición en el encuadre": "centro", + "pose corporal": "revisando su mochila", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Miko revisa el contenido de su mochila con una expresión de satisfacción.", + "luz": "Iluminación cálida, enfocando en Miko y su mochila.", + "camara": "Frontal, mostrando a Miko mientras se concentra en la mochila.", + "optica": "Normal, con profundidad de campo media.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Entorno del bosque ligeramente desenfocado.", + "custom": "" + }, + "promptImagen": "Plano medio. Frontal, mostrando a Miko mientras se concentra en la mochila.. Normal, con profundidad de campo media.. [object Object]. Miko revisa el contenido de su mochila con una expresión de satisfacción.. Iluminación cálida, enfocando en Miko y su mochila.. Entorno del bosque ligeramente desenfocado.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-070", + "numeroPlano": "3.1.10", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "HIGH ANGLE SHOT. Muestra a Coco y Miko desde arriba, rodeados de la vitalidad del bosque, mostrando su pequeño tamaño en comparación.", + "indicacionesSonido": "Sonido de viento suave, música de preparación", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "neutral", + "posición en el encuadre": "izquierda", + "pose corporal": "mirando hacia arriba", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emoción visible": "neutral", + "posición en el encuadre": "derecha", + "pose corporal": "mirando hacia arriba", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Coco y Miko se ven pequeños en comparación con la majestuosidad del bosque.", + "luz": "Iluminación suave desde arriba, creando sombras suaves en el suelo.", + "camara": "High angle desde arriba.", + "optica": "Gran angular, con profundidad de campo amplia.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Bosque denso, hojas y ramas rodeando a los personajes.", + "custom": "" + }, + "promptImagen": "Plano general. High angle desde arriba.. Gran angular, con profundidad de campo amplia.. [object Object],[object Object]. Coco y Miko se ven pequeños en comparación con la majestuosidad del bosque.. Iluminación suave desde arriba, creando sombras suaves en el suelo.. Bosque denso, hojas y ramas rodeando a los personajes.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-071", + "numeroPlano": "3.1.11", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. Detalle de Miko cerrando su mochila con una sonrisa de satisfacción.", + "indicacionesSonido": "Cierre de mochila, música de preparación", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emoción visible": "alegria", + "posición en el encuadre": "primer plano", + "pose corporal": "cerrando la mochila", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Miko cierra la mochila con una expresión de satisfacción y alegría.", + "luz": "Iluminación cálida y directa sobre Miko.", + "camara": "Frontal, muy cerca del rostro y mochila de Miko.", + "optica": "Macro, enfocando la expresión de Miko y el cierre de la mochila.", + "tipoPlano": "Plano detalle", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Difuminado, sugiriendo el ambiente del bosque.", + "custom": "" + }, + "promptImagen": "Plano detalle. Frontal, muy cerca del rostro y mochila de Miko.. Macro, enfocando la expresión de Miko y el cierre de la mochila.. [object Object]. Miko cierra la mochila con una expresión de satisfacción y alegría.. Iluminación cálida y directa sobre Miko.. Difuminado, sugiriendo el ambiente del bosque.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-072", + "numeroPlano": "3.1.12", + "segmentoGuion": "III.1 Planeación en Equipo", + "tiempoSegundos": 5, + "accionDescripcion": "TRACKING SHOT. Sigue a Coco y Miko mientras se levantan y comienzan a caminar, listos para la misión.", + "indicacionesSonido": "Sonido de pasos sobre hojas, música que se intensifica ligeramente", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "alegria", + "posición en el encuadre": "frente", + "pose corporal": "caminando con determinación", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emoción visible": "alegria", + "posición en el encuadre": "frente", + "pose corporal": "caminando con confianza", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Coco y Miko caminan decididos, listos para comenzar su misión.", + "luz": "Iluminación cálida, resaltando la energía y alegría de los personajes.", + "camara": "Tracking shot desde atrás, siguiendo a los personajes.", + "optica": "Normal, con profundidad de campo media.", + "tipoPlano": "Plano americano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Camino del bosque, hojas y ramas en movimiento.", + "custom": "" + }, + "promptImagen": "Plano americano. Tracking shot desde atrás, siguiendo a los personajes.. Normal, con profundidad de campo media.. [object Object],[object Object]. Coco y Miko caminan decididos, listos para comenzar su misión.. Iluminación cálida, resaltando la energía y alegría de los personajes.. Camino del bosque, hojas y ramas en movimiento.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.1" + }, + { + "id": "plano-073", + "numeroPlano": "3.2.1", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. La aldea está parcialmente cubierta por la neblina marrón oxidada. Coco y Miko están al frente, listos para moverse.", + "indicacionesSonido": "sonidos suaves de animales, música de acción comienza suave", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "neutral", + "posición en el encuadre": "izquierda", + "pose corporal": "mirando hacia adelante", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emoción visible": "neutral", + "posición en el encuadre": "derecha", + "pose corporal": "mirando hacia adelante", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Coco y Miko se preparan para avanzar hacia la aldea.", + "luz": "Iluminación tenue y difusa debido a la neblina, creando un ambiente misterioso.", + "camara": "Frontal, mostrando la aldea y la neblina en el fondo.", + "optica": "Gran angular, con profundidad de campo amplia.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Aldea parcialmente oculta por la neblina marrón oxidada, colores desaturados.", + "custom": "" + }, + "promptImagen": "Plano general. Frontal, mostrando la aldea y la neblina en el fondo.. Gran angular, con profundidad de campo amplia.. [object Object],[object Object]. Coco y Miko se preparan para avanzar hacia la aldea.. Iluminación tenue y difusa debido a la neblina, creando un ambiente misterioso.. Aldea parcialmente oculta por la neblina marrón oxidada, colores desaturados.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-074", + "numeroPlano": "3.2.2", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Coco ajusta sus gafas de piloto sobre sus ojos. Miko revisa su mochila.", + "indicacionesSonido": "meow de enfoque de Coco, sonido de cremallera de la mochila", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "neutral", + "posición en el encuadre": "izquierda", + "pose corporal": "ajustando las gafas de piloto", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emoción visible": "neutral", + "posición en el encuadre": "derecha", + "pose corporal": "revisando la mochila", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Coco y Miko se preparan ajustando sus equipos para la misión.", + "luz": "Iluminación fría y directa, resaltando la concentración de los personajes.", + "camara": "Frontal, capturando las acciones de ambos personajes.", + "optica": "Normal, con profundidad de campo media.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Entorno de la aldea con neblina ligera en el aire.", + "custom": "" + }, + "promptImagen": "Plano medio. Frontal, capturando las acciones de ambos personajes.. Normal, con profundidad de campo media.. [object Object],[object Object]. Coco y Miko se preparan ajustando sus equipos para la misión.. Iluminación fría y directa, resaltando la concentración de los personajes.. Entorno de la aldea con neblina ligera en el aire.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-075", + "numeroPlano": "3.2.3", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Ojos de Coco reflejando determinación mientras observa el camino a seguir.", + "indicacionesSonido": "meow de determinación", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "alegria", + "posición en el encuadre": "primer plano", + "pose corporal": "mirando fijamente", + "accesorios visibles": "gafas de piloto" + } + ], + "accion": "Los ojos de Coco reflejan su determinación y alegría ante el desafío.", + "luz": "Iluminación intensa y cálida, enfocando el brillo en sus ojos.", + "camara": "Frontal, muy cerca del rostro de Coco.", + "optica": "Macro, enfocando los ojos de Coco.", + "tipoPlano": "Plano detalle", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfocado, sugiriendo el entorno de la aldea.", + "custom": "" + }, + "promptImagen": "Plano detalle. Frontal, muy cerca del rostro de Coco.. Macro, enfocando los ojos de Coco.. [object Object]. Los ojos de Coco reflejan su determinación y alegría ante el desafío.. Iluminación intensa y cálida, enfocando el brillo en sus ojos.. Desenfocado, sugiriendo el entorno de la aldea.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-076", + "numeroPlano": "3.2.4", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Over-the-shoulder. Miko observa la aldea y señala una dirección.", + "indicacionesSonido": "meow de dirección, música de acción incrementa", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emoción visible": "alegria", + "posición en el encuadre": "fondo", + "pose corporal": "señalando hacia adelante", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Miko señala con confianza hacia la dirección correcta.", + "luz": "Iluminación difusa, creando un ambiente de decisión.", + "camara": "Over-the-shoulder desde atrás de Miko.", + "optica": "Normal, con profundidad de campo media.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Aldea con neblina marrón oxidada en la distancia.", + "custom": "" + }, + "promptImagen": "Plano medio. Over-the-shoulder desde atrás de Miko.. Normal, con profundidad de campo media.. [object Object]. Miko señala con confianza hacia la dirección correcta.. Iluminación difusa, creando un ambiente de decisión.. Aldea con neblina marrón oxidada en la distancia.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-077", + "numeroPlano": "3.2.5", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Tracking shot. Coco y Miko corren por la aldea, guiando a un grupo de aves.", + "indicacionesSonido": "sonido de patas corriendo, aleteo de aves", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "alegria", + "posición en el encuadre": "izquierda", + "pose corporal": "corriendo con agilidad", + "accesorios visibles": "gafas de piloto" + }, + { + "nombre": "Miko", + "emoción visible": "alegria", + "posición en el encuadre": "derecha", + "pose corporal": "corriendo con determinación", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Coco y Miko corren liderando a un grupo de aves para guiarlas.", + "luz": "Iluminación cálida, resaltando la energía y movimiento.", + "camara": "Tracking shot, siguiendo a los personajes y aves.", + "optica": "Teleobjetivo, con profundidad de campo reducida para enfocar en el movimiento.", + "tipoPlano": "Plano secuencia", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Aldea, con casas y árboles pasando rápidamente.", + "custom": "" + }, + "promptImagen": "Plano secuencia. Tracking shot, siguiendo a los personajes y aves.. Teleobjetivo, con profundidad de campo reducida para enfocar en el movimiento.. [object Object],[object Object]. Coco y Miko corren liderando a un grupo de aves para guiarlas.. Iluminación cálida, resaltando la energía y movimiento.. Aldea, con casas y árboles pasando rápidamente.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-078", + "numeroPlano": "3.2.6", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Low angle. Coco salta sobre un obstáculo, mostrando poder y agilidad.", + "indicacionesSonido": "sonido de salto, meow de alegría", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "alegria", + "posición en el encuadre": "centro", + "pose corporal": "saltando con gracia", + "accesorios visibles": "gafas de piloto ajustadas" + } + ], + "accion": "Coco realiza un salto poderoso y ágil sobre un obstáculo.", + "luz": "Iluminación cálida y directa, destacando su figura en el aire.", + "camara": "Low angle desde el suelo, mirando hacia arriba.", + "optica": "Gran angular, con profundidad de campo amplia.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Cielo azul y parte del obstáculo en el suelo.", + "custom": "" + }, + "promptImagen": "Plano medio. Low angle desde el suelo, mirando hacia arriba.. Gran angular, con profundidad de campo amplia.. [object Object]. Coco realiza un salto poderoso y ágil sobre un obstáculo.. Iluminación cálida y directa, destacando su figura en el aire.. Cielo azul y parte del obstáculo en el suelo.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-079", + "numeroPlano": "3.2.7", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "High angle. Miko guía un grupo de pequeños roedores desde arriba, mostrando vulnerabilidad.", + "indicacionesSonido": "meow de dirección, sonidos de roedores", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emoción visible": "alegria", + "posición en el encuadre": "centro", + "pose corporal": "señalando hacia adelante", + "accesorios visibles": "mochila de inventos" + } + ], + "accion": "Miko dirige con confianza a un grupo de roedores pequeños por el camino.", + "luz": "Iluminación difusa desde arriba, creando sombras suaves.", + "camara": "High angle desde arriba.", + "optica": "Gran angular, con profundidad de campo amplia.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Pequeños roedores en el suelo rodeados por la vegetación.", + "custom": "" + }, + "promptImagen": "Plano general. High angle desde arriba.. Gran angular, con profundidad de campo amplia.. [object Object]. Miko dirige con confianza a un grupo de roedores pequeños por el camino.. Iluminación difusa desde arriba, creando sombras suaves.. Pequeños roedores en el suelo rodeados por la vegetación.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-080", + "numeroPlano": "3.2.8", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up. Detalle de las gafas de Coco brillando mientras observa.", + "indicacionesSonido": "reflejo de luz, música de acción", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emoción visible": "alegria", + "posición en el encuadre": "primer plano", + "pose corporal": "mirando atentamente", + "accesorios visibles": "gafas de piloto" + } + ], + "accion": "Las gafas de Coco reflejan el entorno con un brillo intenso.", + "luz": "Iluminación intensa sobre las gafas, resaltando los reflejos.", + "camara": "Frontal, muy cerca del rostro de Coco.", + "optica": "Macro, enfocando los reflejos en las gafas.", + "tipoPlano": "Plano detalle extremo", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Desenfocado, sugiriendo el entorno de la aldea.", + "custom": "" + }, + "promptImagen": "Plano detalle extremo. Frontal, muy cerca del rostro de Coco.. Macro, enfocando los reflejos en las gafas.. [object Object]. Las gafas de Coco reflejan el entorno con un brillo intenso.. Iluminación intensa sobre las gafas, resaltando los reflejos.. Desenfocado, sugiriendo el entorno de la aldea.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-081", + "numeroPlano": "3.2.9", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "POV. Vista desde los ojos de Miko, mostrando el camino despejado por la neblina.", + "indicacionesSonido": "meow de sorpresa, música de acción", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emociónVisible": "sorpresa", + "posiciónEnElEncadre": "centro", + "poseCorporal": "POV desde sus ojos", + "accesoriosVisibles": "mochila de inventos" + } + ], + "accion": "Vista desde los ojos de Miko mostrando un camino despejado. La neblina marrón oxidado se desvanece, revelando un sendero claro.", + "luz": "Luz difusa, atmósfera de descubrimiento.", + "camara": "POV", + "optica": "Normal, profundidad de campo moderada.", + "tipoPlano": "POV", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Camino despejado, vegetación ligeramente visible en el horizonte.", + "custom": "" + }, + "promptImagen": "POV. POV. Normal, profundidad de campo moderada.. [object Object]. Vista desde los ojos de Miko mostrando un camino despejado. La neblina marrón oxidado se desvanece, revelando un sendero claro.. Luz difusa, atmósfera de descubrimiento.. Camino despejado, vegetación ligeramente visible en el horizonte.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-082", + "numeroPlano": "3.2.10", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Búho Sabio observa desde un árbol, apoyando con un gesto de asentimiento.", + "indicacionesSonido": "suave ulular del búho, música apoya la acción", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "posado en una rama, mirando hacia abajo", + "accesoriosVisibles": "gafas redondas, libro de pergamino en bandolera" + } + ], + "accion": "Búho Sabio observa desde un árbol, asintiendo con aprobación.", + "luz": "Luz directa, cálida, iluminando suavemente al Búho Sabio.", + "camara": "Frontal", + "optica": "Normal, profundidad de campo moderada.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Rama de árbol con hojas verdes, cielo claro.", + "custom": "" + }, + "promptImagen": "Plano medio. Frontal. Normal, profundidad de campo moderada.. [object Object]. Búho Sabio observa desde un árbol, asintiendo con aprobación.. Luz directa, cálida, iluminando suavemente al Búho Sabio.. Rama de árbol con hojas verdes, cielo claro.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-083", + "numeroPlano": "3.2.11", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Miko saca un objeto brillante de su mochila, simbolizando la Virtud.", + "indicacionesSonido": "sonido de objeto brillante, música con tonos mágicos", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emociónVisible": "sorpresa", + "posiciónEnElEncadre": "centro", + "poseCorporal": "sacando un objeto de la mochila", + "accesoriosVisibles": "mochila abierta, objeto brillante en la mano" + } + ], + "accion": "Miko saca un objeto brillante de su mochila.", + "luz": "Luz directa enfocada en el objeto, creando un efecto de brillo mágico.", + "camara": "Frontal", + "optica": "Macro, profundidad de campo reducida para enfocar el objeto.", + "tipoPlano": "Primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Fondo desenfocado, concentrándose en el objeto brillante.", + "custom": "" + }, + "promptImagen": "Primer plano. Frontal. Macro, profundidad de campo reducida para enfocar el objeto.. [object Object]. Miko saca un objeto brillante de su mochila.. Luz directa enfocada en el objeto, creando un efecto de brillo mágico.. Fondo desenfocado, concentrándose en el objeto brillante.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-084", + "numeroPlano": "3.2.12", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. La neblina marrón comienza a disiparse por completo, mostrando un camino claro.", + "indicacionesSonido": "sonido de viento llevándose la neblina, música triunfante", + "personajesDetalle": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "tristeza" + } + ], + "personajesEnPlano": [ + "El Gran Desorden" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "El Gran Desorden", + "emociónVisible": "tristeza", + "posiciónEnElEncadre": "fondo", + "poseCorporal": "disipándose", + "accesoriosVisibles": "neblina marrón oxidado" + } + ], + "accion": "La neblina marrón se disipa, revelando un camino claro.", + "luz": "Luz difusa, atmósfera de claridad y esperanza.", + "camara": "Frontal", + "optica": "Gran angular, profundidad de campo amplia.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Camino claro, vegetación emergente, cielo despejado.", + "custom": "" + }, + "promptImagen": "Plano general. Frontal. Gran angular, profundidad de campo amplia.. [object Object]. La neblina marrón se disipa, revelando un camino claro.. Luz difusa, atmósfera de claridad y esperanza.. Camino claro, vegetación emergente, cielo despejado.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "gran-desorden-001", + "nombre": "El Gran Desorden", + "emocion": "tristeza", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-tristeza" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-085", + "numeroPlano": "3.2.13", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Tracking shot. Coco y Miko avanzan por el camino despejado, seguidos por los animales.", + "indicacionesSonido": "sonido de patas y pezuñas, música de acción aumenta", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "izquierda", + "poseCorporal": "avanzando", + "accesoriosVisibles": "gafas de piloto sobre la frente" + }, + { + "nombre": "Miko", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "derecha", + "poseCorporal": "avanzando", + "accesoriosVisibles": "mochila de inventos" + } + ], + "accion": "Coco y Miko avanzan por el camino despejado, seguidos por animales.", + "luz": "Luz directa, cálida, iluminando el camino.", + "camara": "Tracking shot", + "optica": "Normal, profundidad de campo moderada.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Camino despejado, animales siguiendo, vegetación a los lados.", + "custom": "" + }, + "promptImagen": "Plano general. Tracking shot. Normal, profundidad de campo moderada.. [object Object],[object Object]. Coco y Miko avanzan por el camino despejado, seguidos por animales.. Luz directa, cálida, iluminando el camino.. Camino despejado, animales siguiendo, vegetación a los lados.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-086", + "numeroPlano": "3.2.14", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Low angle. Los animales pasan por debajo de un arco natural de árboles, simbolizando unión.", + "indicacionesSonido": "sonidos de animales en armonía, música de celebración", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "Los animales pasan por debajo de un arco natural de árboles.", + "luz": "Luz cálida filtrándose entre las hojas, creando un efecto de unión.", + "camara": "Low angle", + "optica": "Gran angular, profundidad de campo amplia.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Arco de árboles con hojas verdes y luz filtrante.", + "custom": "" + }, + "promptImagen": "Plano general. Low angle. Gran angular, profundidad de campo amplia.. . Los animales pasan por debajo de un arco natural de árboles.. Luz cálida filtrándose entre las hojas, creando un efecto de unión.. Arco de árboles con hojas verdes y luz filtrante.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-087", + "numeroPlano": "3.2.15", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. Coco y Miko se miran, sonriendo con satisfacción.", + "indicacionesSonido": "meows de alegría en coro", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "izquierda", + "poseCorporal": "mirando a Miko", + "accesoriosVisibles": "gafas de piloto sobre la frente" + }, + { + "nombre": "Miko", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "derecha", + "poseCorporal": "mirando a Coco", + "accesoriosVisibles": "mochila visible" + } + ], + "accion": "Coco y Miko se miran, sonriendo con satisfacción.", + "luz": "Luz cálida, resaltando la expresión de felicidad.", + "camara": "Frontal", + "optica": "Normal, profundidad de campo reducida para enfocar rostros.", + "tipoPlano": "Primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Fondo desenfocado, centrado en los rostros.", + "custom": "" + }, + "promptImagen": "Primer plano. Frontal. Normal, profundidad de campo reducida para enfocar rostros.. [object Object],[object Object]. Coco y Miko se miran, sonriendo con satisfacción.. Luz cálida, resaltando la expresión de felicidad.. Fondo desenfocado, centrado en los rostros.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-088", + "numeroPlano": "3.2.16", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Extreme close-up. Detalle de las patas de Coco y Miko tocándose en señal de camaradería.", + "indicacionesSonido": "suave chasquido, música emocional", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "patas tocándose", + "accesoriosVisibles": "detalle de pelaje naranja" + }, + { + "nombre": "Miko", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "patas tocándose", + "accesoriosVisibles": "detalle de pelaje gris azulado" + } + ], + "accion": "Detalle de las patas de Coco y Miko tocándose.", + "luz": "Luz suave, resaltando la textura del pelaje.", + "camara": "Frontal", + "optica": "Macro, profundidad de campo muy reducida.", + "tipoPlano": "Plano detalle", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Fondo desenfocado, centrado en las patas.", + "custom": "" + }, + "promptImagen": "Plano detalle. Frontal. Macro, profundidad de campo muy reducida.. [object Object],[object Object]. Detalle de las patas de Coco y Miko tocándose.. Luz suave, resaltando la textura del pelaje.. Fondo desenfocado, centrado en las patas.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-089", + "numeroPlano": "3.2.17", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "High angle. Vista desde arriba mostrando a Coco, Miko y los animales avanzando juntos.", + "indicacionesSonido": "armonía de sonidos animales, música culminante", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "Vista desde arriba de Coco, Miko y los animales avanzando juntos.", + "luz": "Luz natural, iluminando el grupo desde arriba.", + "camara": "High angle", + "optica": "Gran angular, profundidad de campo amplia.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Camino claro rodeado de vegetación, cielo despejado.", + "custom": "" + }, + "promptImagen": "Plano general. High angle. Gran angular, profundidad de campo amplia.. . Vista desde arriba de Coco, Miko y los animales avanzando juntos.. Luz natural, iluminando el grupo desde arriba.. Camino claro rodeado de vegetación, cielo despejado.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-090", + "numeroPlano": "3.2.18", + "segmentoGuion": "III.2 Ejecutando la Estrategia", + "tiempoSegundos": 5, + "accionDescripcion": "Wide shot. La aldea completamente despejada, mostrando el éxito de la estrategia.", + "indicacionesSonido": "silencio momentáneo, seguido de música de cierre triunfante", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "de pie, observando", + "accesoriosVisibles": "gafas de piloto sobre la frente" + }, + { + "nombre": "Miko", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "de pie, observando", + "accesoriosVisibles": "mochila visible" + } + ], + "accion": "La aldea completamente despejada, mostrando el éxito de la estrategia.", + "luz": "Luz cálida de mediodía, resaltando la claridad del lugar.", + "camara": "Frontal", + "optica": "Gran angular, profundidad de campo amplia.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Aldea libre de neblina, colores vibrantes regresando.", + "custom": "" + }, + "promptImagen": "Plano general. Frontal. Gran angular, profundidad de campo amplia.. [object Object],[object Object]. La aldea completamente despejada, mostrando el éxito de la estrategia.. Luz cálida de mediodía, resaltando la claridad del lugar.. Aldea libre de neblina, colores vibrantes regresando.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-III.2" + }, + { + "id": "plano-091", + "numeroPlano": "4.1.1", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE SHOT. La cámara muestra un campo descolorido con neblina marrón oxidado cubriéndolo. En el horizonte, la neblina comienza a retroceder, mostrando los primeros destellos de verde vibrante.", + "indicacionesSonido": "Música triunfante comienza a crecer, sonidos de viento suave.", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "La neblina marrón oxidado comienza a retroceder, revelando verde vibrante.", + "luz": "Luz suave de amanecer, destacando los colores emergentes.", + "camara": "Frontal", + "optica": "Gran angular, profundidad de campo amplia.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Campo descolorido comenzando a mostrar verde vibrante.", + "custom": "" + }, + "promptImagen": "Plano general. Frontal. Gran angular, profundidad de campo amplia.. . La neblina marrón oxidado comienza a retroceder, revelando verde vibrante.. Luz suave de amanecer, destacando los colores emergentes.. Campo descolorido comenzando a mostrar verde vibrante.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [], + "fondoId": "fondo-IV.1", + "imagenUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-091" + }, + { + "id": "plano-092", + "numeroPlano": "4.1.2", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. Coco y Miko, de pie en el campo, observan el retroceso de la neblina. Coco con sus gafas sobre la frente, Miko con su mochila lista.", + "indicacionesSonido": "Meows de felicidad de Coco y Miko.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "izquierda", + "poseCorporal": "de pie, mirando al horizonte", + "accesoriosVisibles": "gafas de piloto sobre la frente" + }, + { + "nombre": "Miko", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "derecha", + "poseCorporal": "de pie, mirando al horizonte", + "accesoriosVisibles": "mochila lista" + } + ], + "accion": "Coco y Miko observan el retroceso de la neblina.", + "luz": "Luz cálida de amanecer, iluminando sus rostros.", + "camara": "Frontal", + "optica": "Normal, profundidad de campo moderada.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Campo con neblina retrocediendo, colores vibrantes emergiendo.", + "custom": "" + }, + "promptImagen": "Plano medio. Frontal. Normal, profundidad de campo moderada.. [object Object],[object Object]. Coco y Miko observan el retroceso de la neblina.. Luz cálida de amanecer, iluminando sus rostros.. Campo con neblina retrocediendo, colores vibrantes emergiendo.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-IV.1", + "imagenUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/imagenes/plano-092" + }, + { + "id": "plano-093", + "numeroPlano": "4.1.3", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. El rostro de Coco mostrando una expresión de alegría mientras sus ojos reflejan el color que regresa al campo.", + "indicacionesSonido": "Sonido de hojas moviéndose suavemente.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "mirando al horizonte", + "accesoriosVisibles": "gafas de piloto sobre la frente" + } + ], + "accion": "El rostro de Coco refleja el color que regresa al campo.", + "luz": "Luz cálida, resaltando los ojos de Coco.", + "camara": "Frontal", + "optica": "Macro, profundidad de campo reducida para enfocar ojos.", + "tipoPlano": "Primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Colores vibrantes reflejados en los ojos de Coco.", + "custom": "" + }, + "promptImagen": "Primer plano. Frontal. Macro, profundidad de campo reducida para enfocar ojos.. [object Object]. El rostro de Coco refleja el color que regresa al campo.. Luz cálida, resaltando los ojos de Coco.. Colores vibrantes reflejados en los ojos de Coco.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ], + "fondoId": "fondo-IV.1" + }, + { + "id": "plano-094", + "numeroPlano": "4.1.4", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "EXTREME CLOSE-UP. Detalle de la mochila de Miko abriéndose ligeramente, mostrando el compartimento de las Virtudes.", + "indicacionesSonido": "Sonido suave de cremallera abriéndose.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "detalle de la mochila", + "accesoriosVisibles": "mochila con compartimento abriéndose" + } + ], + "accion": "Detalle de la mochila de Miko abriéndose para mostrar las Virtudes.", + "luz": "Luz cálida, enfocada en el compartimento abierto.", + "camara": "Frontal", + "optica": "Macro, profundidad de campo muy reducida.", + "tipoPlano": "Plano detalle", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Fondo desenfocado, centrado en el compartimento de la mochila.", + "custom": "" + }, + "promptImagen": "Plano detalle. Frontal. Macro, profundidad de campo muy reducida.. [object Object]. Detalle de la mochila de Miko abriéndose para mostrar las Virtudes.. Luz cálida, enfocada en el compartimento abierto.. Fondo desenfocado, centrado en el compartimento de la mochila.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-IV.1" + }, + { + "id": "plano-095", + "numeroPlano": "4.1.5", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "LOW ANGLE. La cámara mira hacia arriba desde el suelo, mostrando a Coco y Miko de pie con confianza mientras el color regresa al campo.", + "indicacionesSonido": "Música triunfante continúa, sonidos de naturaleza revitalizada.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "izquierda", + "poseCorporal": "de pie con confianza", + "accesoriosVisibles": "gafas de piloto sobre la frente" + }, + { + "nombre": "Miko", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "derecha", + "poseCorporal": "de pie con confianza", + "accesoriosVisibles": "mochila lista" + } + ], + "accion": "Coco y Miko de pie con confianza mientras el color regresa.", + "luz": "Luz cálida, destacando las figuras contra el cielo.", + "camara": "Low angle", + "optica": "Gran angular, profundidad de campo amplia.", + "tipoPlano": "Plano americano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Cielo despejado, campo coloreándose.", + "custom": "" + }, + "promptImagen": "Plano americano. Low angle. Gran angular, profundidad de campo amplia.. [object Object],[object Object]. Coco y Miko de pie con confianza mientras el color regresa.. Luz cálida, destacando las figuras contra el cielo.. Cielo despejado, campo coloreándose.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-IV.1" + }, + { + "id": "plano-096", + "numeroPlano": "4.1.6", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "OVER-THE-SHOULDER. Desde la perspectiva de Miko, observamos cómo los animales del campo comienzan a acercarse, mostrando gratitud.", + "indicacionesSonido": "Sonidos de animales felices, meows de reconocimiento.", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "vista desde su hombro", + "accesoriosVisibles": "mochila visible" + } + ], + "accion": "Los animales del campo se acercan, mostrando gratitud.", + "luz": "Luz cálida, iluminando el campo y los animales.", + "camara": "Over-the-shoulder", + "optica": "Normal, profundidad de campo moderada.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Campo con animales acercándose, colores vibrantes.", + "custom": "" + }, + "promptImagen": "Plano medio. Over-the-shoulder. Normal, profundidad de campo moderada.. [object Object]. Los animales del campo se acercan, mostrando gratitud.. Luz cálida, iluminando el campo y los animales.. Campo con animales acercándose, colores vibrantes.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-IV.1" + }, + { + "id": "plano-097", + "numeroPlano": "4.1.7", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "HIGH ANGLE. La cámara mira hacia abajo desde un árbol, mostrando a Coco y Miko rodeados de animales agradecidos.", + "indicacionesSonido": "Sonidos de naturaleza, música alegre.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "izquierda", + "poseCorporal": "rodeada de animales", + "accesoriosVisibles": "gafas de piloto sobre la frente" + }, + { + "nombre": "Miko", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "derecha", + "poseCorporal": "rodeado de animales", + "accesoriosVisibles": "mochila visible" + } + ], + "accion": "Coco y Miko rodeados de animales agradecidos.", + "luz": "Luz natural filtrada desde las hojas, iluminando a los personajes.", + "camara": "High angle", + "optica": "Gran angular, profundidad de campo amplia.", + "tipoPlano": "Plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Rama de árbol con hojas verdes, animales rodeando a los personajes.", + "custom": "" + }, + "promptImagen": "Plano general. High angle. Gran angular, profundidad de campo amplia.. [object Object],[object Object]. Coco y Miko rodeados de animales agradecidos.. Luz natural filtrada desde las hojas, iluminando a los personajes.. Rama de árbol con hojas verdes, animales rodeando a los personajes.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-IV.1" + }, + { + "id": "plano-098", + "numeroPlano": "4.1.8", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "POV. Desde el punto de vista del Búho Sabio, observando a Coco y Miko. La neblina ha desaparecido completamente.", + "indicacionesSonido": "Sonido de alas batiendo suavemente.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "vista desde sus ojos", + "accesoriosVisibles": "gafas redondas" + } + ], + "accion": "Desde el punto de vista del Búho Sabio, observando a Coco y Miko.", + "luz": "Luz cálida, iluminando el campo desde una perspectiva elevada.", + "camara": "POV", + "optica": "Normal, profundidad de campo amplia.", + "tipoPlano": "POV", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Campo despejado, sin neblina, colores vibrantes.", + "custom": "" + }, + "promptImagen": "POV. POV. Normal, profundidad de campo amplia.. [object Object]. Desde el punto de vista del Búho Sabio, observando a Coco y Miko.. Luz cálida, iluminando el campo desde una perspectiva elevada.. Campo despejado, sin neblina, colores vibrantes.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria" + } + ], + "fondoId": "fondo-IV.1" + }, + { + "id": "plano-099", + "numeroPlano": "4.1.9", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "MEDIUM SHOT. El Búho Sabio se acerca volando y se posa junto a Coco y Miko, abriendo su pequeño libro de pergamino.", + "indicacionesSonido": "Sonido de pergamino abriéndose.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "volando y posándose", + "accesoriosVisibles": "gafas redondas, libro de pergamino" + } + ], + "accion": "El Búho Sabio se posa junto a Coco y Miko, abriendo su libro.", + "luz": "Luz cálida, iluminando al Búho Sabio y su libro.", + "camara": "Frontal", + "optica": "Normal, profundidad de campo moderada.", + "tipoPlano": "Plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Campo con colores vibrantes, cielo despejado.", + "custom": "" + }, + "promptImagen": "Plano medio. Frontal. Normal, profundidad de campo moderada.. [object Object]. El Búho Sabio se posa junto a Coco y Miko, abriendo su libro.. Luz cálida, iluminando al Búho Sabio y su libro.. Campo con colores vibrantes, cielo despejado.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria" + } + ], + "fondoId": "fondo-IV.1" + }, + { + "id": "plano-100", + "numeroPlano": "4.1.10", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "CLOSE-UP. El rostro del Búho Sabio emite una expresión de satisfacción mientras asiente con la cabeza hacia Coco y Miko.", + "indicacionesSonido": "Suave ulular de búho.", + "personajesDetalle": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Búho Sabio", + "emociónVisible": "alegría", + "posiciónEnElEncadre": "centro", + "poseCorporal": "asintiendo con la cabeza", + "accesoriosVisibles": "gafas redondas" + } + ], + "accion": "El rostro del Búho Sabio emite una expresión de satisfacción.", + "luz": "Luz suave, resaltando las facciones del Búho Sabio.", + "camara": "Frontal", + "optica": "Macro, profundidad de campo reducida.", + "tipoPlano": "Primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Fondo desenfocado, centrado en el rostro del Búho Sabio.", + "custom": "" + }, + "promptImagen": "Primer plano. Frontal. Macro, profundidad de campo reducida.. [object Object]. El rostro del Búho Sabio emite una expresión de satisfacción.. Luz suave, resaltando las facciones del Búho Sabio.. Fondo desenfocado, centrado en el rostro del Búho Sabio.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria" + } + ], + "fondoId": "fondo-IV.1" + }, + { + "id": "plano-101", + "numeroPlano": "4.1.11", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "TRACKING SHOT. La cámara sigue a Coco y Miko mientras se alejan del campo, con los animales siguiéndolos con alegría.", + "indicacionesSonido": "Sonido de pasos suaves sobre hierba.", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco", + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocion": "alegria", + "posicion": "izquierda", + "pose": "caminando con energía", + "accesorios": "Gafas de Piloto en la frente" + }, + { + "nombre": "Miko", + "emocion": "alegria", + "posicion": "derecha", + "pose": "caminando con paso seguro", + "accesorios": "Mochila de Inventos en la espalda" + } + ], + "accion": "Coco y Miko avanzan por el campo, rodeados de animales que los siguen con entusiasmo.", + "luz": "Luz natural, cálida y suave, proveniente del sol de la tarde.", + "camara": "tracking shot a nivel del suelo", + "optica": "normal", + "tipoPlano": "plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Campo verde y florido, con animales pequeños como conejos y aves.", + "custom": "" + }, + "promptImagen": "plano medio. tracking shot a nivel del suelo. normal. [object Object],[object Object]. Coco y Miko avanzan por el campo, rodeados de animales que los siguen con entusiasmo.. Luz natural, cálida y suave, proveniente del sol de la tarde.. Campo verde y florido, con animales pequeños como conejos y aves.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ], + "fondoId": "fondo-IV.1" + }, + { + "id": "plano-102", + "numeroPlano": "4.1.12", + "segmentoGuion": "IV.1 El Retorno del Color", + "tiempoSegundos": 5, + "accionDescripcion": "WIDE SHOT. Se muestra el campo completamente revitalizado y lleno de color. Los animales y los protagonistas se ven en armonía.", + "indicacionesSonido": "Música culminante y sonidos de naturaleza en armonía.", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "El campo se muestra vibrante y lleno de vida, con animales disfrutando del entorno.", + "luz": "Luz solar directa, cálida, resaltando los colores vivos del paisaje.", + "camara": "frontal", + "optica": "gran angular", + "tipoPlano": "plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Extenso campo con flores de variados colores, cielo azul claro.", + "custom": "" + }, + "promptImagen": "plano general. frontal. gran angular. . El campo se muestra vibrante y lleno de vida, con animales disfrutando del entorno.. Luz solar directa, cálida, resaltando los colores vivos del paisaje.. Extenso campo con flores de variados colores, cielo azul claro.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [], + "fondoId": "fondo-IV.1" + }, + { + "id": "plano-103", + "numeroPlano": "4.2.1", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "Wide/establishing shot. La cámara muestra un claro iluminado en el bosque donde Miko y Coco están de pie, rodeados de naturaleza vibrante. En el centro del claro, una luz comienza a brillar intensamente, insinuando la formación de la Gema de la Cooperación.", + "indicacionesSonido": "sonido ambiental del bosque, inicio de música calmante", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa" + } + ], + "personajesEnPlano": [ + "Miko", + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emocion": "sorpresa", + "posicion": "centro", + "pose": "de pie, mirada fija en la luz", + "accesorios": "Mochila de Inventos en la espalda" + }, + { + "nombre": "Coco", + "emocion": "sorpresa", + "posicion": "centro", + "pose": "de pie, ojos abiertos mirando la luz", + "accesorios": "Gafas de Piloto en la frente" + } + ], + "accion": "Miko y Coco observan la luz brillante en el centro del claro.", + "luz": "Iluminación natural con un foco de luz brillante en el centro del claro.", + "camara": "cenital", + "optica": "gran angular", + "tipoPlano": "plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Claro de bosque rodeado de árboles altos y verdes, luz intensa en el centro.", + "custom": "" + }, + "promptImagen": "plano general. cenital. gran angular. [object Object],[object Object]. Miko y Coco observan la luz brillante en el centro del claro.. Iluminación natural con un foco de luz brillante en el centro del claro.. Claro de bosque rodeado de árboles altos y verdes, luz intensa en el centro.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "sorpresa", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back" + } + ] + }, + { + "id": "plano-104", + "numeroPlano": "4.2.2", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. La cámara se enfoca en la Gema de la Cooperación, que ahora se ha materializado completamente. Brilla con luz propia, sus facetas reflejan colores vivos y cambiantes.", + "indicacionesSonido": "efecto de sonido brillante que aumenta en intensidad", + "personajesDetalle": [], + "personajesEnPlano": [], + "promptComposition": { + "personajes": [], + "accion": "La Gema de la Cooperación brilla intensamente, mostrando sus facetas multicolores.", + "luz": "Luz intensa y cambiante desde la gema, colores vibrantes.", + "camara": "frontal", + "optica": "macro", + "tipoPlano": "primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Fondo difuminado, con tonos cálidos y colores suaves.", + "custom": "" + }, + "promptImagen": "primer plano. frontal. macro. . La Gema de la Cooperación brilla intensamente, mostrando sus facetas multicolores.. Luz intensa y cambiante desde la gema, colores vibrantes.. Fondo difuminado, con tonos cálidos y colores suaves.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [] + }, + { + "id": "plano-105", + "numeroPlano": "4.2.3", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "Medium shot. Miko se inclina hacia adelante y cuidadosamente recoge la Gema de la Cooperación. Su expresión muestra reverencia y alegría mientras la sostiene en sus patas.", + "indicacionesSonido": "meow suave de logro, música calmante continúa", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Miko" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emocion": "alegria", + "posicion": "centro", + "pose": "inclinándose hacia adelante, sosteniendo la gema con cuidado", + "accesorios": "Mochila de Inventos en la espalda" + } + ], + "accion": "Miko recoge la Gema de la Cooperación con delicadeza.", + "luz": "Luz suave y cálida, centrada en Miko y la gema.", + "camara": "tres cuartos", + "optica": "normal", + "tipoPlano": "plano medio", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Claro de bosque con vegetación verde y luz difusa.", + "custom": "" + }, + "promptImagen": "plano medio. tres cuartos. normal. [object Object]. Miko recoge la Gema de la Cooperación con delicadeza.. Luz suave y cálida, centrada en Miko y la gema.. Claro de bosque con vegetación verde y luz difusa.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + } + ] + }, + { + "id": "plano-106", + "numeroPlano": "4.2.4", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "Over-the-shoulder. Desde detrás de Coco, observamos cómo Miko guarda la gema en el compartimento especial de su mochila. Coco, en primer plano, comienza a sonreír, mostrando orgullo y satisfacción.", + "indicacionesSonido": "sonido de cremallera suave mientras la mochila se cierra", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocion": "alegria", + "posicion": "primer plano", + "pose": "de espaldas, mirando a Miko con una sonrisa", + "accesorios": "Gafas de Piloto en la frente" + } + ], + "accion": "Coco observa a Miko mientras guarda la gema, mostrando orgullo.", + "luz": "Luz cálida y suave, iluminando a Coco y Miko.", + "camara": "over-the-shoulder", + "optica": "normal", + "tipoPlano": "plano americano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Claro de bosque con árboles y luz suave.", + "custom": "" + }, + "promptImagen": "plano americano. over-the-shoulder. normal. [object Object]. Coco observa a Miko mientras guarda la gema, mostrando orgullo.. Luz cálida y suave, iluminando a Coco y Miko.. Claro de bosque con árboles y luz suave.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ] + }, + { + "id": "plano-107", + "numeroPlano": "4.2.5", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "Close-up. La cámara se centra en Coco mientras se quita las gafas de piloto de la frente y las coloca sobre sus ojos. Su expresión es de determinación y confianza.", + "indicacionesSonido": "meow de aceptación, música calmante se intensifica suavemente", + "personajesDetalle": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + } + ], + "personajesEnPlano": [ + "Coco" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Coco", + "emocion": "alegria", + "posicion": "centro", + "pose": "colocándose las gafas sobre los ojos", + "accesorios": "Gafas de Piloto" + } + ], + "accion": "Coco se pone las gafas de piloto con determinación.", + "luz": "Luz suave y centrada en Coco, resaltando su expresión.", + "camara": "frontal", + "optica": "macro", + "tipoPlano": "primer plano", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Fondo desenfocado, tonos cálidos.", + "custom": "" + }, + "promptImagen": "primer plano. frontal. macro. [object Object]. Coco se pone las gafas de piloto con determinación.. Luz suave y centrada en Coco, resaltando su expresión.. Fondo desenfocado, tonos cálidos.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + } + ] + }, + { + "id": "plano-108", + "numeroPlano": "4.2.6", + "segmentoGuion": "IV.2 La Gema de la Cooperación", + "tiempoSegundos": 5, + "accionDescripcion": "High angle. Desde lo alto, vemos a Miko y Coco juntos en el claro, con la luz de la gema aún irradiando suavemente desde la mochila de Miko. El Búho Sabio se acerca desde un árbol cercano, observando con aprobación.", + "indicacionesSonido": "música calmante de cierre, sonido de alas del búho", + "personajesDetalle": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral" + } + ], + "personajesEnPlano": [ + "Miko", + "Coco", + "Búho Sabio" + ], + "promptComposition": { + "personajes": [ + { + "nombre": "Miko", + "emocion": "alegria", + "posicion": "centro", + "pose": "de pie junto a Coco", + "accesorios": "Mochila de Inventos con luz suave emanando" + }, + { + "nombre": "Coco", + "emocion": "alegria", + "posicion": "centro", + "pose": "de pie junto a Miko", + "accesorios": "Gafas de Piloto sobre los ojos" + }, + { + "nombre": "Búho Sabio", + "emocion": "neutral", + "posicion": "fondo", + "pose": "volando en dirección al claro", + "accesorios": "Gafas redondas" + } + ], + "accion": "Miko y Coco están juntos en el claro con la luz de la gema irradiando, mientras el Búho Sabio se acerca volando.", + "luz": "Luz cálida y suave desde la gema, luz natural del día.", + "camara": "high angle", + "optica": "gran angular", + "tipoPlano": "plano general", + "estilo": "Pixar-style 3D animation, vibrant colors, expressive characters", + "fondo": "Claro del bosque, con árboles altos y el Búho Sabio acercándose.", + "custom": "" + }, + "promptImagen": "plano general. high angle. gran angular. [object Object],[object Object],[object Object]. Miko y Coco están juntos en el claro con la luz de la gema irradiando, mientras el Búho Sabio se acerca volando.. Luz cálida y suave desde la gema, luz natural del día.. Claro del bosque, con árboles altos y el Búho Sabio acercándose.. Pixar-style 3D animation, vibrant colors, expressive characters.", + "referenceAssets": [ + { + "personajeId": "miko-001", + "nombre": "Miko", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + }, + { + "personajeId": "coco-001", + "nombre": "Coco", + "emocion": "alegria", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "personajeId": "aliado-001", + "nombre": "Búho Sabio", + "emocion": "neutral", + "tposeFrontUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front", + "tposeSideUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side", + "tposeBackUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back", + "emotionUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ] + } +] \ No newline at end of file diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/prompts.md b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/prompts.md new file mode 100644 index 0000000..126c5e0 --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/capitulos/01/prompts.md @@ -0,0 +1,2718 @@ +--- +capitulo: 'El Primer Nudo: La Cooperación' +totalPrompts: 108 +--- +# Prompts de Imágenes + +Total: 108 prompts generados + +## Plano 1.1.1 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** WIDE/ESTABLISHING SHOT. Una vista amplia del prado donde Coco y Miko están jugando alegremente, rodeados de flores y árboles. El sol brilla suavemente. + +> **Prompt final:** Plano general. Ángulo frontal. Gran angular, profundidad de campo amplia. [object Object],[object Object]. Coco y Miko juegan alegremente en el prado, saltando entre las flores.. Iluminación directa, cálida, desde el sol en lo alto, creando un ambiente alegre y vital.. Prado lleno de flores y árboles, cielo azul claro, colores vibrantes de un día soleado.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Ángulo frontal +- Óptica: Gran angular, profundidad de campo amplia +- Luz: Iluminación directa, cálida, desde el sol en lo alto, creando un ambiente alegre y vital. +- Fondo: Prado lleno de flores y árboles, cielo azul claro, colores vibrantes de un día soleado. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.2 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** MEDIUM SHOT. Coco y Miko están jugando, saltando entre las flores. Coco empieza a detenerse lentamente. + +> **Prompt final:** Plano medio. Ángulo frontal. Normal, profundidad de campo media. [object Object],[object Object]. Coco y Miko saltan entre las flores. Coco empieza a detenerse.. Iluminación directa, cálida, resaltando la vivacidad de la escena.. Flores coloridas y árboles del prado, cielo azul claro.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Ángulo frontal +- Óptica: Normal, profundidad de campo media +- Luz: Iluminación directa, cálida, resaltando la vivacidad de la escena. +- Fondo: Flores coloridas y árboles del prado, cielo azul claro. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.3 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Coco — *sorpresa* + +**Acción:** CLOSE-UP. Rostro de Coco, mostrando sorpresa súbita. Sus gafas comienzan a brillar levemente. + +> **Prompt final:** Primer plano. Ángulo frontal. Teleobjetivo, profundidad de campo reducida. [object Object]. Coco muestra sorpresa con sus gafas empezando a brillar.. Iluminación directa, con un ligero resplandor azul en las gafas, atmósfera tensa.. Desenfocado, resaltando el rostro de Coco.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano +- Cámara: Ángulo frontal +- Óptica: Teleobjetivo, profundidad de campo reducida +- Luz: Iluminación directa, con un ligero resplandor azul en las gafas, atmósfera tensa. +- Fondo: Desenfocado, resaltando el rostro de Coco. + +**Assets de referencia:** +- **Coco**: Front + Side + Back ⚠️ sin emoción sorpresa + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.4 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Coco — *sorpresa* + +**Acción:** EXTREME CLOSE-UP. Detalle de las gafas de Coco, mostrando el brillo y la alerta activada. + +> **Prompt final:** Plano detalle. Ángulo frontal. Macro, profundidad de campo muy reducida. [object Object]. Las gafas de Coco brillan intensamente con la alerta activada.. Iluminación directa sobre las gafas, resaltando el brillo.. Desenfocado completamente para enfocar solo las gafas.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle +- Cámara: Ángulo frontal +- Óptica: Macro, profundidad de campo muy reducida +- Luz: Iluminación directa sobre las gafas, resaltando el brillo. +- Fondo: Desenfocado completamente para enfocar solo las gafas. + +**Assets de referencia:** +- **Coco**: Front + Side + Back ⚠️ sin emoción sorpresa + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.5 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- El Gran Desorden — *neutral* + +**Acción:** POV. Vista desde Coco: A lo lejos, la Neblina Marrón Oxidado ondulando en el horizonte. + +> **Prompt final:** Plano general. POV desde Coco. Normal, profundidad de campo amplia. [object Object]. La Neblina Marrón Oxidado ondulando en el horizonte, vista desde la perspectiva de Coco.. Iluminación difusa con sombras alargadas, atmósfera inquietante.. Horizonte con la Neblina Marrón Oxidado ondulando, campos desaturados.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: POV desde Coco +- Óptica: Normal, profundidad de campo amplia +- Luz: Iluminación difusa con sombras alargadas, atmósfera inquietante. +- Fondo: Horizonte con la Neblina Marrón Oxidado ondulando, campos desaturados. + +**Assets de referencia:** +- **El Gran Desorden**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.6 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Coco — *miedo* +- Miko — *neutral* + +**Acción:** OVER-THE-SHOULDER. Desde detrás de Coco, mirando a Miko que se da cuenta de la preocupación de Coco. + +> **Prompt final:** Plano medio. Over-the-shoulder desde Coco. Normal, profundidad de campo media. [object Object],[object Object]. Coco mira preocupada a Miko, quien nota su preocupación.. Iluminación suave desde un lado, creando un ambiente de tensión.. Prado con flores, desenfocado levemente.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Over-the-shoulder desde Coco +- Óptica: Normal, profundidad de campo media +- Luz: Iluminación suave desde un lado, creando un ambiente de tensión. +- Fondo: Prado con flores, desenfocado levemente. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: miedo +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.7 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Miko — *neutral* + +**Acción:** MEDIUM SHOT. Miko saca un pequeño mapa de su mochila de inventos, mostrando interés y curiosidad. + +> **Prompt final:** Plano medio. Ángulo frontal. Normal, profundidad de campo media. [object Object]. Miko saca un mapa de su mochila, curioso por la situación.. Iluminación suave y cálida, creando un ambiente de descubrimiento.. Flores y árboles del prado, ligeramente desenfocado.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Ángulo frontal +- Óptica: Normal, profundidad de campo media +- Luz: Iluminación suave y cálida, creando un ambiente de descubrimiento. +- Fondo: Flores y árboles del prado, ligeramente desenfocado. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.8 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Coco — *miedo* +- Miko — *neutral* + +**Acción:** HIGH ANGLE. Vista desde arriba, mostrando a Coco y Miko mirando el mapa, con un aire de vulnerabilidad. + +> **Prompt final:** Plano general. Ángulo cenital. Gran angular, profundidad de campo amplia. [object Object],[object Object]. Coco y Miko revisan el mapa, mostrando vulnerabilidad.. Iluminación difusa desde arriba, acentuando la atmósfera vulnerable.. Prado con flores, visto desde arriba.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Ángulo cenital +- Óptica: Gran angular, profundidad de campo amplia +- Luz: Iluminación difusa desde arriba, acentuando la atmósfera vulnerable. +- Fondo: Prado con flores, visto desde arriba. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: miedo +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.9 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** LOW ANGLE. Cámara desde el suelo, mirando hacia arriba a Coco y Miko, sugiriendo su determinación creciente para enfrentar la situación. + +> **Prompt final:** Plano americano. Ángulo contrapicado. Gran angular, profundidad de campo media. [object Object],[object Object]. Coco y Miko miran con determinación hacia el horizonte.. Iluminación directa desde un ángulo bajo, destacando su figura heroica.. Cielo azul contrastado con el horizonte donde se oculta la Neblina.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano americano +- Cámara: Ángulo contrapicado +- Óptica: Gran angular, profundidad de campo media +- Luz: Iluminación directa desde un ángulo bajo, destacando su figura heroica. +- Fondo: Cielo azul contrastado con el horizonte donde se oculta la Neblina. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.10 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** TRACKING SHOT. Siguiendo a Coco y Miko mientras comienzan a caminar hacia la Neblina, mostrando su unión y cooperación. + +> **Prompt final:** Plano general. Seguimiento lateral. Normal, profundidad de campo amplia. [object Object],[object Object]. Coco y Miko caminan juntos hacia la Neblina, mostrando unidad.. Iluminación suave y cálida, creando un ambiente de esperanza.. Prado con la Neblina en el horizonte, cielo despejado.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Seguimiento lateral +- Óptica: Normal, profundidad de campo amplia +- Luz: Iluminación suave y cálida, creando un ambiente de esperanza. +- Fondo: Prado con la Neblina en el horizonte, cielo despejado. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.11 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** CLOSE-UP. Coco y Miko se miran, compartiendo un momento de comprensión y apoyo mutuo. + +> **Prompt final:** Primer plano. Ángulo frontal. Teleobjetivo, profundidad de campo reducida. [object Object],[object Object]. Coco y Miko se miran mutuamente, compartiendo apoyo y comprensión.. Iluminación suave desde el frente, resaltando la conexión emocional.. Desenfocado, resaltando a ambos personajes.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano +- Cámara: Ángulo frontal +- Óptica: Teleobjetivo, profundidad de campo reducida +- Luz: Iluminación suave desde el frente, resaltando la conexión emocional. +- Fondo: Desenfocado, resaltando a ambos personajes. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.1.12 + +**Segmento:** I.1 Vislumbre de la Neblina | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** WIDE SHOT. Coco y Miko de espaldas, acercándose a la Neblina. El paisaje se ve amenazante pero ellos avanzan con determinación. + +> **Prompt final:** Plano general. Ángulo trasero. Gran angular, profundidad de campo amplia. [object Object],[object Object]. Coco y Miko caminan con determinación hacia la Neblina de espaldas.. Iluminación directa con sombras alargadas, creando un ambiente de desafío.. Prado que se torna en neblina marrón oxidado en el horizonte.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Ángulo trasero +- Óptica: Gran angular, profundidad de campo amplia +- Luz: Iluminación directa con sombras alargadas, creando un ambiente de desafío. +- Fondo: Prado que se torna en neblina marrón oxidado en el horizonte. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.1 + +--- + +## Plano 1.2.1 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Acción:** Wide shot. La aldea cubierta parcialmente por la neblina marrón. Los edificios apenas son visibles. + +> **Prompt final:** Plano general. Ángulo frontal. Gran angular, profundidad de campo amplia. . La aldea aparece cubierta parcialmente por la neblina marrón.. Iluminación difusa con sombras largas, atmósfera de misterio.. Aldea cubierta de neblina marrón, edificios difusos, cielo grisáceo.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Ángulo frontal +- Óptica: Gran angular, profundidad de campo amplia +- Luz: Iluminación difusa con sombras largas, atmósfera de misterio. +- Fondo: Aldea cubierta de neblina marrón, edificios difusos, cielo grisáceo. + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.2 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Acción:** Medium shot. Animales desorientados caminan lentamente, algunos mirando alrededor confundidos. + +> **Prompt final:** Plano medio. Ángulo frontal. Normal, profundidad de campo media. . Animales caminan desorientados, observando confusos su entorno.. Iluminación difusa que enfatiza la confusión.. Aldea parcialmente cubierta por neblina, tonos desaturados.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Ángulo frontal +- Óptica: Normal, profundidad de campo media +- Luz: Iluminación difusa que enfatiza la confusión. +- Fondo: Aldea parcialmente cubierta por neblina, tonos desaturados. + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.3 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Coco — *tristeza* + +**Acción:** Close-up. Rostro de Coco mirando hacia la aldea con preocupación. + +> **Prompt final:** Primer plano. Ángulo frontal. Teleobjetivo, profundidad de campo reducida. [object Object]. Coco observa preocupada la aldea cubierta de neblina.. Iluminación tenue que resalta la tristeza en su rostro.. Desenfocado, sugiriendo la aldea detrás.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano +- Cámara: Ángulo frontal +- Óptica: Teleobjetivo, profundidad de campo reducida +- Luz: Iluminación tenue que resalta la tristeza en su rostro. +- Fondo: Desenfocado, sugiriendo la aldea detrás. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: tristeza + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.4 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Coco — *tristeza* +- Miko — *tristeza* + +**Acción:** Over-the-shoulder. Coco y Miko observan la aldea desde la colina. + +> **Prompt final:** Plano americano. Over-the-shoulder desde Coco y Miko. Normal, profundidad de campo amplia. [object Object],[object Object]. Coco y Miko observan la aldea cubiertos por la neblina desde la colina.. Iluminación difusa, creando un ambiente melancólico.. Aldea parcialmente cubierta por neblina, vista desde una colina.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano americano +- Cámara: Over-the-shoulder desde Coco y Miko +- Óptica: Normal, profundidad de campo amplia +- Luz: Iluminación difusa, creando un ambiente melancólico. +- Fondo: Aldea parcialmente cubierta por neblina, vista desde una colina. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: tristeza +- **Miko**: Front + Side + Back + Emoción: tristeza + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.5 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Acción:** High angle. Vista desde arriba de los animales en la aldea, mostrando su vulnerabilidad. + +> **Prompt final:** Plano general. Ángulo cenital. Gran angular, profundidad de campo amplia. . Animales en la aldea se ven vulnerables desde arriba.. Iluminación difusa, resaltando la vulnerabilidad.. Aldea con neblina, animales dispersos, tonos apagados.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Ángulo cenital +- Óptica: Gran angular, profundidad de campo amplia +- Luz: Iluminación difusa, resaltando la vulnerabilidad. +- Fondo: Aldea con neblina, animales dispersos, tonos apagados. + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.6 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Miko — *neutral* + +**Acción:** Close-up. Miko ajustando su mochila de inventos, mostrando determinación. + +> **Prompt final:** Primer plano. Ángulo frontal. Teleobjetivo, profundidad de campo reducida. [object Object]. Miko ajusta su mochila con determinación.. Iluminación directa, resaltando la figura decidida de Miko.. Desenfocado, sugiriendo la aldea detrás.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano +- Cámara: Ángulo frontal +- Óptica: Teleobjetivo, profundidad de campo reducida +- Luz: Iluminación directa, resaltando la figura decidida de Miko. +- Fondo: Desenfocado, sugiriendo la aldea detrás. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.7 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Coco — *tristeza* + +**Acción:** Extreme close-up. Las gafas de piloto de Coco reflejan la imagen borrosa de la aldea. + +> **Prompt final:** Plano detalle. Ángulo frontal. Macro, profundidad de campo muy reducida. [object Object]. Las gafas de Coco reflejan la aldea borrosa.. Iluminación tenue, enfocando el reflejo en las gafas.. Reflejo de la aldea en las gafas, desenfocado.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle +- Cámara: Ángulo frontal +- Óptica: Macro, profundidad de campo muy reducida +- Luz: Iluminación tenue, enfocando el reflejo en las gafas. +- Fondo: Reflejo de la aldea en las gafas, desenfocado. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: tristeza + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.8 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Acción:** Pan shot. Barrido horizontal desde la colina a través de la aldea. + +> **Prompt final:** Plano general. Panorámica horizontal. Gran angular, profundidad de campo amplia. . Barrido horizontal mostrando la aldea desde la colina, cubierto de neblina.. Iluminación difusa, creando un ambiente melancólico y misterioso.. Vista panorámica de la aldea cubierta de neblina, tonos apagados.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Panorámica horizontal +- Óptica: Gran angular, profundidad de campo amplia +- Luz: Iluminación difusa, creando un ambiente melancólico y misterioso. +- Fondo: Vista panorámica de la aldea cubierta de neblina, tonos apagados. + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.9 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Acción:** POV. Vista desde los ojos de Coco y Miko hacia la aldea cubierta de neblina. + +> **Prompt final:** Plano general desde el punto de vista de los personajes.. POV desde la perspectiva de Coco y Miko.. Lente normal con profundidad de campo media para mantener la aldea en foco.. . Vista desde los ojos de Coco y Miko hacia la aldea cubierta de neblina, transmitiendo una sensación de misterio y preocupación.. Iluminación difusa con tonos fríos, creando una atmósfera de incertidumbre y misterio.. La aldea está cubierta de una densa neblina marrón oxidado, oscureciendo y desaturando los colores del entorno.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general desde el punto de vista de los personajes. +- Cámara: POV desde la perspectiva de Coco y Miko. +- Óptica: Lente normal con profundidad de campo media para mantener la aldea en foco. +- Luz: Iluminación difusa con tonos fríos, creando una atmósfera de incertidumbre y misterio. +- Fondo: La aldea está cubierta de una densa neblina marrón oxidado, oscureciendo y desaturando los colores del entorno. + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.10 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** Medium shot. Búho Sabio aparece volando suavemente hacia Coco y Miko. + +> **Prompt final:** Plano medio.. Ángulo frontal.. Lente normal con poca profundidad de campo para enfocar al Búho Sabio.. [object Object]. El Búho Sabio aparece volando suavemente hacia Coco y Miko, creando una sensación de calma.. Iluminación suave y melancólica, con una temperatura de color cálida.. Un cielo ligeramente nublado, con árboles desaturados por la neblina en el fondo.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio. +- Cámara: Ángulo frontal. +- Óptica: Lente normal con poca profundidad de campo para enfocar al Búho Sabio. +- Luz: Iluminación suave y melancólica, con una temperatura de color cálida. +- Fondo: Un cielo ligeramente nublado, con árboles desaturados por la neblina en el fondo. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.11 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** Close-up. Rostro de Búho Sabio con expresión de sabiduría y calma. + +> **Prompt final:** Primer plano.. Frontal.. Lente macro para capturar detalles faciales.. [object Object]. Close-up en el rostro del Búho Sabio, mostrando su expresión de sabiduría y calma.. Iluminación suave con enfoque en el rostro, resaltando los detalles de las plumas y las gafas.. Desenfoque suave de la neblina marrón oxidado en el fondo.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano. +- Cámara: Frontal. +- Óptica: Lente macro para capturar detalles faciales. +- Luz: Iluminación suave con enfoque en el rostro, resaltando los detalles de las plumas y las gafas. +- Fondo: Desenfoque suave de la neblina marrón oxidado en el fondo. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.12 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Miko — *sorpresa* + +**Acción:** Low angle. Miko observa a Búho Sabio, buscando orientación. + +> **Prompt final:** Plano americano.. Low angle.. Lente gran angular para enfatizar la diferencia de altura.. [object Object]. Miko observa a Búho Sabio, buscando orientación.. Contraluz suave para resaltar la expresión de sorpresa.. Árboles cercanos con hojas moviéndose suavemente por el viento.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano americano. +- Cámara: Low angle. +- Óptica: Lente gran angular para enfatizar la diferencia de altura. +- Luz: Contraluz suave para resaltar la expresión de sorpresa. +- Fondo: Árboles cercanos con hojas moviéndose suavemente por el viento. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: sorpresa + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.13 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Acción:** Extreme close-up. El libro de pergamino de Búho Sabio, mostrando símbolos de cooperación. + +> **Prompt final:** Plano detalle.. Cenital.. Lente macro para captar los detalles de los símbolos.. . Detalle extremo del libro de pergamino de Búho Sabio, mostrando símbolos de cooperación.. Iluminación focalizada en la página del libro, resaltando los símbolos.. Textura del pergamino antiguo en el fondo.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle. +- Cámara: Cenital. +- Óptica: Lente macro para captar los detalles de los símbolos. +- Luz: Iluminación focalizada en la página del libro, resaltando los símbolos. +- Fondo: Textura del pergamino antiguo en el fondo. + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.14 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* +- Búho Sabio — *neutral* + +**Acción:** Medium shot. Coco, Miko y Búho Sabio juntos mirando hacia la aldea. + +> **Prompt final:** Plano medio.. Frontal.. Lente normal con profundidad de campo que mantiene a los personajes en foco.. [object Object],[object Object],[object Object]. Coco, Miko y Búho Sabio juntos mirando hacia la aldea.. Iluminación suave con tonos fríos para reflejar determinación.. Neblina marrón oxidado cubriendo la aldea en la distancia.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio. +- Cámara: Frontal. +- Óptica: Lente normal con profundidad de campo que mantiene a los personajes en foco. +- Luz: Iluminación suave con tonos fríos para reflejar determinación. +- Fondo: Neblina marrón oxidado cubriendo la aldea en la distancia. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.15 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** Tracking shot. Coco y Miko comienzan a descender la colina hacia la aldea. + +> **Prompt final:** Plano general.. Tracking shot que sigue el movimiento de los personajes.. Lente gran angular para capturar el movimiento y el entorno.. [object Object],[object Object]. Coco y Miko comienzan a descender la colina hacia la aldea.. Luz difusa con tonos fríos que crea una atmósfera de avance decidido.. Entorno natural con colinas y neblina en el fondo.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general. +- Cámara: Tracking shot que sigue el movimiento de los personajes. +- Óptica: Lente gran angular para capturar el movimiento y el entorno. +- Luz: Luz difusa con tonos fríos que crea una atmósfera de avance decidido. +- Fondo: Entorno natural con colinas y neblina en el fondo. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.16 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** High angle. Vista desde arriba de Coco y Miko descendiendo, la aldea en el fondo. + +> **Prompt final:** Plano general.. High angle.. Lente gran angular para capturar la escala del entorno.. [object Object],[object Object]. Vista desde arriba de Coco y Miko descendiendo, la aldea en el fondo.. Iluminación suave y difusa, con tonos fríos.. Paisaje con colinas y la aldea cubierta de neblina a lo lejos.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general. +- Cámara: High angle. +- Óptica: Lente gran angular para capturar la escala del entorno. +- Luz: Iluminación suave y difusa, con tonos fríos. +- Fondo: Paisaje con colinas y la aldea cubierta de neblina a lo lejos. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.17 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* + +**Acción:** Close-up. Coco bajándose las gafas de piloto, enfocada en la misión. + +> **Prompt final:** Primer plano.. Frontal.. Lente macro para enfatizar la acción y expresión.. [object Object]. Close-up de Coco bajándose las gafas de piloto, enfocada en la misión.. Luz directa sobre el rostro de Coco para resaltar su determinación.. Desenfoque suave del entorno, centrado en Coco.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano. +- Cámara: Frontal. +- Óptica: Lente macro para enfatizar la acción y expresión. +- Luz: Luz directa sobre el rostro de Coco para resaltar su determinación. +- Fondo: Desenfoque suave del entorno, centrado en Coco. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 1.2.18 + +**Segmento:** I.2 La Aldea Desaparecida | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** Wide shot. Coco y Miko se adentran en la aldea cubierta por la neblina. + +> **Prompt final:** Plano general.. Wide shot.. Lente normal para capturar a los personajes y el entorno.. [object Object],[object Object]. Coco y Miko se adentran en la aldea cubierta por la neblina.. Luz difusa que aumenta la melancolía de la escena.. Neblina densa cubre la aldea, creando una atmósfera misteriosa.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general. +- Cámara: Wide shot. +- Óptica: Lente normal para capturar a los personajes y el entorno. +- Luz: Luz difusa que aumenta la melancolía de la escena. +- Fondo: Neblina densa cubre la aldea, creando una atmósfera misteriosa. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-I.2 + +--- + +## Plano 2.1.1 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** WIDE SHOT. La cámara muestra el claro del bosque bajo la luz de la luna. En el centro, se ve un árbol grande del cual desciende el Búho Sabio. + +> **Prompt final:** Plano general.. Wide shot.. Lente gran angular para capturar la amplitud del claro.. [object Object]. La cámara muestra el claro del bosque bajo la luz de la luna, con el Búho Sabio descendiendo del árbol.. Luz de luna que baña el claro del bosque, creando sombras suaves.. Un claro del bosque bajo la luz de la luna, con un árbol grande en el centro.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general. +- Cámara: Wide shot. +- Óptica: Lente gran angular para capturar la amplitud del claro. +- Luz: Luz de luna que baña el claro del bosque, creando sombras suaves. +- Fondo: Un claro del bosque bajo la luz de la luna, con un árbol grande en el centro. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.2 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** MEDIUM SHOT. El Búho Sabio aterriza suavemente en el suelo, sus gafas reflejan la luz de la luna. + +> **Prompt final:** Plano medio.. Frontal.. Lente normal con poca profundidad de campo para enfocar al Búho Sabio.. [object Object]. El Búho Sabio aterriza suavemente en el suelo, sus gafas reflejan la luz de la luna.. Iluminación suave con la luz de la luna reflejándose en las gafas.. Hojas secas en el suelo del bosque, iluminadas por la luna.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio. +- Cámara: Frontal. +- Óptica: Lente normal con poca profundidad de campo para enfocar al Búho Sabio. +- Luz: Iluminación suave con la luz de la luna reflejándose en las gafas. +- Fondo: Hojas secas en el suelo del bosque, iluminadas por la luna. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.3 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** CLOSE-UP. Detalle de las gafas del Búho Sabio, el reflejo de la luna en los cristales. + +> **Prompt final:** Plano detalle.. Close-up.. Lente macro para capturar el detalle del reflejo.. [object Object]. Detalle de las gafas del Búho Sabio, el reflejo de la luna en los cristales.. Iluminación suave con reflejo de la luna en los cristales.. Desenfoque del entorno del bosque.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle. +- Cámara: Close-up. +- Óptica: Lente macro para capturar el detalle del reflejo. +- Luz: Iluminación suave con reflejo de la luna en los cristales. +- Fondo: Desenfoque del entorno del bosque. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.4 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Coco — *sorpresa* +- Miko — *sorpresa* + +**Acción:** OVER-THE-SHOULDER. Desde la perspectiva del Búho Sabio, Coco y Miko miran con admiración y curiosidad. + +> **Prompt final:** Plano medio.. Over-the-shoulder desde el Búho Sabio.. Lente normal para mantener a los personajes en foco.. [object Object],[object Object]. Desde la perspectiva del Búho Sabio, Coco y Miko miran con admiración y curiosidad.. Luz de luna que ilumina suavemente a Coco y Miko.. El bosque iluminado por la luna, creando un ambiente mágico.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio. +- Cámara: Over-the-shoulder desde el Búho Sabio. +- Óptica: Lente normal para mantener a los personajes en foco. +- Luz: Luz de luna que ilumina suavemente a Coco y Miko. +- Fondo: El bosque iluminado por la luna, creando un ambiente mágico. + +**Assets de referencia:** +- **Coco**: Front + Side + Back ⚠️ sin emoción sorpresa +- **Miko**: Front + Side + Back + Emoción: sorpresa + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.5 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** CLOSE-UP. Rostro de Coco con las gafas de piloto sobre la frente, reflejando admiración. + +> **Prompt final:** Primer plano.. Close-up.. Lente macro para capturar la expresión facial.. [object Object]. Rostro de Coco con las gafas de piloto sobre la frente, reflejando admiración.. Iluminación suave con luz de luna, resaltando la expresión de alegría.. Desenfoque suave del entorno del bosque.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano. +- Cámara: Close-up. +- Óptica: Lente macro para capturar la expresión facial. +- Luz: Iluminación suave con luz de luna, resaltando la expresión de alegría. +- Fondo: Desenfoque suave del entorno del bosque. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.6 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** CLOSE-UP. Rostro de Miko, su mochila visible, mostrando una expresión de sorpresa y admiración. + +> **Prompt final:** Primer plano.. Close-up.. Lente macro para capturar detalles faciales.. [object Object]. Rostro de Miko, su mochila visible, mostrando una expresión de sorpresa y admiración.. Luz suave que resalta la expresión de alegría en el rostro de Miko.. Desenfoque suave del fondo del bosque.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano. +- Cámara: Close-up. +- Óptica: Lente macro para capturar detalles faciales. +- Luz: Luz suave que resalta la expresión de alegría en el rostro de Miko. +- Fondo: Desenfoque suave del fondo del bosque. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.7 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** LOW ANGLE. El Búho Sabio se erige majestuoso, sus gafas brillan más intensamente. + +> **Prompt final:** Plano medio.. Low angle.. Lente normal para resaltar su majestuosidad.. [object Object]. El Búho Sabio se erige majestuoso, sus gafas brillan más intensamente.. Luz de luna que ilumina las gafas, creando un brillo intenso.. El bosque bajo la luz de la luna, con sombras alargadas.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio. +- Cámara: Low angle. +- Óptica: Lente normal para resaltar su majestuosidad. +- Luz: Luz de luna que ilumina las gafas, creando un brillo intenso. +- Fondo: El bosque bajo la luz de la luna, con sombras alargadas. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.8 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Coco — *sorpresa* +- Miko — *sorpresa* + +**Acción:** HIGH ANGLE. Vista desde arriba de Coco y Miko observando al Búho, mostrando su pequeño tamaño en comparación. + +> **Prompt final:** Plano general.. High angle.. Lente gran angular para capturar la escala del entorno.. [object Object],[object Object]. Vista desde arriba de Coco y Miko observando al Búho, mostrando su pequeño tamaño en comparación.. Luz de luna suave que ilumina a los personajes.. El claro del bosque iluminado por la luna, con hojas esparcidas.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general. +- Cámara: High angle. +- Óptica: Lente gran angular para capturar la escala del entorno. +- Luz: Luz de luna suave que ilumina a los personajes. +- Fondo: El claro del bosque iluminado por la luna, con hojas esparcidas. + +**Assets de referencia:** +- **Coco**: Front + Side + Back ⚠️ sin emoción sorpresa +- **Miko**: Front + Side + Back + Emoción: sorpresa + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.9 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** TRACKING SHOT. La cámara sigue al Búho Sabio mientras camina hacia Coco y Miko. + +> **Prompt final:** Plano medio.. Tracking shot.. Lente normal para seguir el movimiento.. [object Object]. La cámara sigue al Búho Sabio mientras camina hacia Coco y Miko.. Iluminación suave con luz de luna que sigue al personaje.. Hojas en el suelo del bosque, iluminadas por la luna.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio. +- Cámara: Tracking shot. +- Óptica: Lente normal para seguir el movimiento. +- Luz: Iluminación suave con luz de luna que sigue al personaje. +- Fondo: Hojas en el suelo del bosque, iluminadas por la luna. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.10 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** POV. Vista desde los ojos de Coco, el Búho Sabio se acerca con calma, transmitiendo paz. + +> **Prompt final:** Plano general.. POV desde Coco.. Lente normal con profundidad de campo para mantener al Búho en foco.. [object Object]. Vista desde los ojos de Coco, el Búho Sabio se acerca con calma, transmitiendo paz.. Luz de luna difusa que ilumina la escena suavemente.. El bosque iluminado por la luna, con sombras suaves.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general. +- Cámara: POV desde Coco. +- Óptica: Lente normal con profundidad de campo para mantener al Búho en foco. +- Luz: Luz de luna difusa que ilumina la escena suavemente. +- Fondo: El bosque iluminado por la luna, con sombras suaves. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.11 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** MEDIUM SHOT. El Búho Sabio se detiene frente a Coco y Miko, abriendo su pequeño libro de pergamino. + +> **Prompt final:** plano medio. frontal. normal, profundidad de campo media. [object Object],[object Object],[object Object]. El Búho Sabio abre su libro frente a Coco y Miko, quienes observan con alegría.. difusa, cálida, creando un ambiente acogedor. bosque verde con árboles altos y luz suave filtrándose a través de las hojas. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano medio +- Cámara: frontal +- Óptica: normal, profundidad de campo media +- Luz: difusa, cálida, creando un ambiente acogedor +- Fondo: bosque verde con árboles altos y luz suave filtrándose a través de las hojas + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.1.12 + +**Segmento:** II.1 La Aparición del Aliado | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** EXTREME CLOSE-UP. Detalle de las páginas del libro del Búho, mostrando símbolos de cooperación y armonía. + +> **Prompt final:** primerísimo primer plano. cenital. macro, profundidad de campo reducida. [object Object]. Detalle de los símbolos en las páginas del libro del Búho.. iluminación directa, cálida, resaltando los símbolos. sólo las páginas del libro, sin detalles adicionales. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: primerísimo primer plano +- Cámara: cenital +- Óptica: macro, profundidad de campo reducida +- Luz: iluminación directa, cálida, resaltando los símbolos +- Fondo: sólo las páginas del libro, sin detalles adicionales + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.1 + +--- + +## Plano 2.2.1 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* +- Coco — *sorpresa* +- Miko — *sorpresa* + +**Acción:** WIDE SHOT. Se muestra a Búho Sabio en un claro del bosque, con Coco y Miko atentos frente a él. La neblina marrón oxidado rodea el espacio. + +> **Prompt final:** plano general. frontal. gran angular, profundidad de campo amplia. [object Object],[object Object],[object Object]. Búho Sabio está en el centro del claro con Coco y Miko observándolo, la neblina rodea el área.. difusa, fría, con sombras suaves. claro del bosque con árboles circundantes, cubierto en parte por neblina marrón oxidado. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano general +- Cámara: frontal +- Óptica: gran angular, profundidad de campo amplia +- Luz: difusa, fría, con sombras suaves +- Fondo: claro del bosque con árboles circundantes, cubierto en parte por neblina marrón oxidado + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral +- **Coco**: Front + Side + Back ⚠️ sin emoción sorpresa +- **Miko**: Front + Side + Back + Emoción: sorpresa + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.2 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** MEDIUM SHOT. Búho Sabio gesticula con sus alas, señalando la neblina. + +> **Prompt final:** plano medio. tres cuartos. normal, profundidad de campo media. [object Object]. Búho Sabio señala la neblina con sus alas.. difusa, fría, con luz indirecta. neblina marrón oxidado cubriendo el suelo del bosque. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano medio +- Cámara: tres cuartos +- Óptica: normal, profundidad de campo media +- Luz: difusa, fría, con luz indirecta +- Fondo: neblina marrón oxidado cubriendo el suelo del bosque + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.3 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** CLOSE-UP. Rostro de Coco, ajustándose las gafas de piloto sobre los ojos, mostrando concentración. + +> **Prompt final:** primer plano. frontal. teleobjetivo, profundidad de campo reducida. [object Object]. Coco se ajusta las gafas de piloto mostrando concentración.. directa, cálida, enfocada en el rostro. desenfocado, sugiriendo el bosque. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: primer plano +- Cámara: frontal +- Óptica: teleobjetivo, profundidad de campo reducida +- Luz: directa, cálida, enfocada en el rostro +- Fondo: desenfocado, sugiriendo el bosque + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.4 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** OVER-THE-SHOULDER. Desde la perspectiva de Búho Sabio, mirando a Coco y Miko, quienes asienten con interés. + +> **Prompt final:** plano medio. over-the-shoulder. normal, profundidad de campo media. [object Object],[object Object]. Desde la perspectiva de Búho Sabio, se observa a Coco y Miko asintiendo.. difusa, cálida, enfocada en Coco y Miko. bosque difuminado detrás de Coco y Miko. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano medio +- Cámara: over-the-shoulder +- Óptica: normal, profundidad de campo media +- Luz: difusa, cálida, enfocada en Coco y Miko +- Fondo: bosque difuminado detrás de Coco y Miko + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.5 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** LOW ANGLE. Búho Sabio abre su libro de pergamino, mostrando su autoridad y sabiduría. + +> **Prompt final:** plano medio. contrapicado. gran angular, profundidad de campo amplia. [object Object]. Búho Sabio abre su libro desde un ángulo bajo, destacando su figura autoritaria.. directa, cálida, iluminando el rostro y el libro. cielo azul visible entre las copas de los árboles. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano medio +- Cámara: contrapicado +- Óptica: gran angular, profundidad de campo amplia +- Luz: directa, cálida, iluminando el rostro y el libro +- Fondo: cielo azul visible entre las copas de los árboles + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.6 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- El Gran Desorden — *neutral* + +**Acción:** HIGH ANGLE. Se muestra la neblina marrón oxidado cubriendo el suelo, sugiriendo vulnerabilidad del entorno. + +> **Prompt final:** plano general. cenital. gran angular, profundidad de campo amplia. [object Object]. Vista desde arriba de la neblina marrón oxidado cubriendo el suelo del bosque.. difusa, fría, iluminación suave. suelo del bosque completamente cubierto por la neblina. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano general +- Cámara: cenital +- Óptica: gran angular, profundidad de campo amplia +- Luz: difusa, fría, iluminación suave +- Fondo: suelo del bosque completamente cubierto por la neblina + +**Assets de referencia:** +- **El Gran Desorden**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.7 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** MEDIUM SHOT. Coco y Miko se miran entre sí, mostrando determinación. + +> **Prompt final:** plano medio. frontal. normal, profundidad de campo media. [object Object],[object Object]. Coco y Miko se miran fijamente, sus expresiones reflejan determinación.. difusa, cálida, resaltando sus rostros. desenfocado, sugiriendo el bosque. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano medio +- Cámara: frontal +- Óptica: normal, profundidad de campo media +- Luz: difusa, cálida, resaltando sus rostros +- Fondo: desenfocado, sugiriendo el bosque + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.8 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *neutral* + +**Acción:** EXTREME CLOSE-UP. Detalle del libro de pergamino, mostrando una ilustración de una luz que disipa la neblina. + +> **Prompt final:** primerísimo primer plano. cenital. macro, profundidad de campo reducida. [object Object]. Detalle de la ilustración en el libro de pergamino mostrando una luz que disipa la neblina.. iluminación directa, cálida, enfocada en la ilustración. sólo las páginas del libro, sin detalles adicionales. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: primerísimo primer plano +- Cámara: cenital +- Óptica: macro, profundidad de campo reducida +- Luz: iluminación directa, cálida, enfocada en la ilustración +- Fondo: sólo las páginas del libro, sin detalles adicionales + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.9 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** TRACKING SHOT. Sigue a Miko mientras abre su mochila, sacando un pequeño dispositivo de iluminación. + +> **Prompt final:** plano medio. tracking shot. normal, profundidad de campo media. [object Object]. La cámara sigue a Miko mientras abre su mochila y saca el dispositivo.. difusa, cálida, resaltando sus movimientos. suelo del bosque con hojas caídas. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano medio +- Cámara: tracking shot +- Óptica: normal, profundidad de campo media +- Luz: difusa, cálida, resaltando sus movimientos +- Fondo: suelo del bosque con hojas caídas + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.10 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** CLOSE-UP. Cara de Miko, con una expresión de entusiasmo mientras sostiene el dispositivo. + +> **Prompt final:** primer plano. frontal. teleobjetivo, profundidad de campo reducida. [object Object]. Miko sostiene el dispositivo con una expresión entusiasta.. directa, cálida, enfocada en su rostro. desenfocado, sugiriendo el bosque. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: primer plano +- Cámara: frontal +- Óptica: teleobjetivo, profundidad de campo reducida +- Luz: directa, cálida, enfocada en su rostro +- Fondo: desenfocado, sugiriendo el bosque + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.11 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** POV. Desde la perspectiva de Coco, viendo a Miko encender el dispositivo que comienza a brillar intensamente. + +> **Prompt final:** plano medio. POV. normal, profundidad de campo media. [object Object]. Coco observa cómo Miko enciende el dispositivo que empieza a brillar.. directa, cálida, emanando del dispositivo. luz brillante que ilumina el entorno. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano medio +- Cámara: POV +- Óptica: normal, profundidad de campo media +- Luz: directa, cálida, emanando del dispositivo +- Fondo: luz brillante que ilumina el entorno + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.12 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- El Gran Desorden — *neutral* + +**Acción:** LOW ANGLE. La luz del dispositivo comienza a disipar la neblina marrón oxidado, sugiriendo poder y triunfo. + +> **Prompt final:** plano general. contrapicado. gran angular, profundidad de campo amplia. [object Object]. La luz del dispositivo empieza a disipar la neblina marrón oxidado.. directa, cálida, emanando del dispositivo y disipando la neblina. neblina marrón oxidado comenzando a disiparse. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano general +- Cámara: contrapicado +- Óptica: gran angular, profundidad de campo amplia +- Luz: directa, cálida, emanando del dispositivo y disipando la neblina +- Fondo: neblina marrón oxidado comenzando a disiparse + +**Assets de referencia:** +- **El Gran Desorden**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.13 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- El Gran Desorden — *neutral* + +**Acción:** HIGH ANGLE. Vista del claro del bosque, ahora en parte despejado de la neblina, mostrando la vulnerabilidad de la oscuridad al poder de la cooperación. + +> **Prompt final:** plano general. cenital. gran angular, profundidad de campo amplia. [object Object]. Vista aérea del claro del bosque con partes de la neblina dispersándose.. difusa, cálida, iluminando el claro del bosque. claro del bosque parcialmente despejado de la neblina. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano general +- Cámara: cenital +- Óptica: gran angular, profundidad de campo amplia +- Luz: difusa, cálida, iluminando el claro del bosque +- Fondo: claro del bosque parcialmente despejado de la neblina + +**Assets de referencia:** +- **El Gran Desorden**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.14 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* +- Búho Sabio — *alegria* + +**Acción:** WIDE SHOT. Coco, Miko y Búho Sabio observan satisfechos el efecto de la luz. + +> **Prompt final:** plano general. frontal. gran angular, profundidad de campo amplia. [object Object],[object Object],[object Object]. Coco, Miko y Búho Sabio observan satisfechos el efecto de la luz en el claro.. difusa, cálida, iluminando el área despejada. claro del bosque iluminado, hojas brillantes. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano general +- Cámara: frontal +- Óptica: gran angular, profundidad de campo amplia +- Luz: difusa, cálida, iluminando el área despejada +- Fondo: claro del bosque iluminado, hojas brillantes + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria +- **Búho Sabio**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.15 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *alegria* + +**Acción:** MEDIUM SHOT. Búho Sabio cierra su libro, satisfecho, mientras asiente con aprobación. + +> **Prompt final:** plano medio. frontal. normal, profundidad de campo media. [object Object]. Búho Sabio cierra su libro y asiente satisfecho.. difusa, cálida, iluminando al Búho. bosque iluminado, hojas brillantes. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano medio +- Cámara: frontal +- Óptica: normal, profundidad de campo media +- Luz: difusa, cálida, iluminando al Búho +- Fondo: bosque iluminado, hojas brillantes + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.16 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** EXTREME CLOSE-UP. Detalle de las gafas de Coco brillando con la luz reflejada, simbolizando claridad y visión. + +> **Prompt final:** primerísimo primer plano. frontal. macro, profundidad de campo reducida. [object Object]. Las gafas de Coco brillan con la luz reflejada, simbolizando claridad.. directa, cálida, reflejándose en las gafas. desenfocado, sugiriendo el bosque. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: primerísimo primer plano +- Cámara: frontal +- Óptica: macro, profundidad de campo reducida +- Luz: directa, cálida, reflejándose en las gafas +- Fondo: desenfocado, sugiriendo el bosque + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.17 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** CLOSE-UP. Miko guarda el dispositivo en su mochila, satisfecho con el resultado. + +> **Prompt final:** primer plano. frontal. teleobjetivo, profundidad de campo reducida. [object Object]. Miko guarda el dispositivo en su mochila con satisfacción.. difusa, cálida, enfocada en sus manos. desenfocado, sugiriendo el bosque. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: primer plano +- Cámara: frontal +- Óptica: teleobjetivo, profundidad de campo reducida +- Luz: difusa, cálida, enfocada en sus manos +- Fondo: desenfocado, sugiriendo el bosque + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 2.2.18 + +**Segmento:** II.2 Entendiendo la Cooperación | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* +- Búho Sabio — *alegria* + +**Acción:** WIDE SHOT. Los tres personajes se alejan juntos del claro, dejando atrás el lugar más iluminado y despejado. + +> **Prompt final:** plano general. frontal. gran angular, profundidad de campo amplia. [object Object],[object Object],[object Object]. Coco, Miko y Búho Sabio se alejan juntos del claro del bosque.. difusa, cálida, iluminando el camino despejado. bosque iluminado, hojas brillantes, camino despejado. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano general +- Cámara: frontal +- Óptica: gran angular, profundidad de campo amplia +- Luz: difusa, cálida, iluminando el camino despejado +- Fondo: bosque iluminado, hojas brillantes, camino despejado + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria +- **Búho Sabio**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-II.2 + +--- + +## Plano 3.1.1 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** WIDE/ESTABLISHING SHOT. Muestra a Coco y Miko en una mesa de madera en el bosque, con un mapa desplegado delante de ellos. El entorno es tranquilo y soleado. + +> **Prompt final:** Plano general. Frontal, mostrando a ambos personajes y el entorno del bosque.. Gran angular, profundidad de campo media para capturar detalles del entorno.. [object Object],[object Object]. Coco y Miko analizan el mapa con atención en un entorno sereno.. Iluminación natural y suave, filtrada a través de los árboles, creando un ambiente cálido.. Bosque frondoso, mesa de madera, luz del sol filtrándose a través del follaje, colores verdes y marrones dominan el escenario.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Frontal, mostrando a ambos personajes y el entorno del bosque. +- Óptica: Gran angular, profundidad de campo media para capturar detalles del entorno. +- Luz: Iluminación natural y suave, filtrada a través de los árboles, creando un ambiente cálido. +- Fondo: Bosque frondoso, mesa de madera, luz del sol filtrándose a través del follaje, colores verdes y marrones dominan el escenario. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.2 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** MEDIUM SHOT. Coco se ajusta las gafas de piloto sobre los ojos, mostrando determinación. + +> **Prompt final:** Plano medio. Frontal a nivel de los ojos de Coco.. Normal, con profundidad de campo baja para enfocar a Coco.. [object Object]. Coco se ajusta sus gafas con determinación y alegría.. Iluminación directa y cálida, destacando su expresión de alegría.. Difuminado, sugiriendo el bosque alrededor.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Frontal a nivel de los ojos de Coco. +- Óptica: Normal, con profundidad de campo baja para enfocar a Coco. +- Luz: Iluminación directa y cálida, destacando su expresión de alegría. +- Fondo: Difuminado, sugiriendo el bosque alrededor. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.3 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* + +**Acción:** CLOSE-UP. Detalle de las patas de Coco señalando varias direcciones en el mapa. + +> **Prompt final:** Plano detalle. Frontal, altura de la mesa.. Macro, para resaltar los detalles del mapa y las patas.. [object Object]. Las patas de Coco señalan diferentes direcciones en el mapa.. Iluminación directa y suave, enfocada en las patas y el mapa.. Mapas y bosque ligeramente desenfocados.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle +- Cámara: Frontal, altura de la mesa. +- Óptica: Macro, para resaltar los detalles del mapa y las patas. +- Luz: Iluminación directa y suave, enfocada en las patas y el mapa. +- Fondo: Mapas y bosque ligeramente desenfocados. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.4 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Miko — *neutral* + +**Acción:** OVER-THE-SHOULDER SHOT. Desde el hombro de Coco, se observa a Miko tomando notas en un cuaderno. + +> **Prompt final:** Plano medio. Over-the-shoulder desde Coco hacia Miko.. Normal, con profundidad de campo media.. [object Object]. Miko anota información importante mientras observa el mapa.. Iluminación difusa, cálida, creando un ambiente de enfoque.. Detalles del mapa y el cuaderno visibles detrás de Miko.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Over-the-shoulder desde Coco hacia Miko. +- Óptica: Normal, con profundidad de campo media. +- Luz: Iluminación difusa, cálida, creando un ambiente de enfoque. +- Fondo: Detalles del mapa y el cuaderno visibles detrás de Miko. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.5 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** CLOSE-UP. Miko guarda el cuaderno en su mochila, asegurándose de que esté bien organizado. + +> **Prompt final:** Plano detalle. Frontal a nivel de las manos.. Macro, destacando el detalle del cuaderno y la mochila.. [object Object]. Miko guarda cuidadosamente el cuaderno en su mochila con una expresión de satisfacción.. Iluminación directa y cálida, centrada en las manos y la mochila.. Difuso, sugiriendo el entorno natural.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle +- Cámara: Frontal a nivel de las manos. +- Óptica: Macro, destacando el detalle del cuaderno y la mochila. +- Luz: Iluminación directa y cálida, centrada en las manos y la mochila. +- Fondo: Difuso, sugiriendo el entorno natural. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.6 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* + +**Acción:** EXTREME CLOSE-UP. Detalle de las gafas de Coco reflejando el mapa con las marcas de las rutas. + +> **Prompt final:** Plano detalle extremo. Frontal, muy cerca del rostro de Coco.. Macro, enfocando los reflejos en las gafas.. [object Object]. Reflejo del mapa en las gafas de Coco, mostrando rutas y detalles.. Iluminación intensa sobre las gafas, resaltando los reflejos.. Desenfocado, sugiriendo el entorno del bosque.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle extremo +- Cámara: Frontal, muy cerca del rostro de Coco. +- Óptica: Macro, enfocando los reflejos en las gafas. +- Luz: Iluminación intensa sobre las gafas, resaltando los reflejos. +- Fondo: Desenfocado, sugiriendo el entorno del bosque. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.7 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** LOW ANGLE SHOT. Coco y Miko miran hacia arriba, mostrando su confianza y determinación para enfrentar la misión. + +> **Prompt final:** Plano medio. Low angle, desde abajo mirando hacia los personajes.. Normal, con profundidad de campo media.. [object Object],[object Object]. Coco y Miko miran hacia arriba con expresiones de confianza y determinación.. Iluminación cálida y directa desde arriba, creando un efecto dramático.. Luz del sol brillando desde arriba, cielo azul entre las copas de los árboles.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Low angle, desde abajo mirando hacia los personajes. +- Óptica: Normal, con profundidad de campo media. +- Luz: Iluminación cálida y directa desde arriba, creando un efecto dramático. +- Fondo: Luz del sol brillando desde arriba, cielo azul entre las copas de los árboles. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.8 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* + +**Acción:** POV SHOT. La vista desde los ojos de Coco mirando el mapa con las rutas señaladas. + +> **Prompt final:** Plano detalle. POV desde los ojos de Coco.. Normal, con profundidad de campo baja para destacar el mapa.. [object Object]. Vista detallada del mapa desde los ojos de Coco.. Iluminación difusa, resaltando las marcas en el mapa.. Mapa detallado con rutas marcadas, colores cálidos y terrosos.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle +- Cámara: POV desde los ojos de Coco. +- Óptica: Normal, con profundidad de campo baja para destacar el mapa. +- Luz: Iluminación difusa, resaltando las marcas en el mapa. +- Fondo: Mapa detallado con rutas marcadas, colores cálidos y terrosos. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.9 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** MEDIUM SHOT. Miko revisa otros elementos en su mochila, asegurándose de que están preparados para la aventura. + +> **Prompt final:** Plano medio. Frontal, mostrando a Miko mientras se concentra en la mochila.. Normal, con profundidad de campo media.. [object Object]. Miko revisa el contenido de su mochila con una expresión de satisfacción.. Iluminación cálida, enfocando en Miko y su mochila.. Entorno del bosque ligeramente desenfocado.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Frontal, mostrando a Miko mientras se concentra en la mochila. +- Óptica: Normal, con profundidad de campo media. +- Luz: Iluminación cálida, enfocando en Miko y su mochila. +- Fondo: Entorno del bosque ligeramente desenfocado. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.10 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** HIGH ANGLE SHOT. Muestra a Coco y Miko desde arriba, rodeados de la vitalidad del bosque, mostrando su pequeño tamaño en comparación. + +> **Prompt final:** Plano general. High angle desde arriba.. Gran angular, con profundidad de campo amplia.. [object Object],[object Object]. Coco y Miko se ven pequeños en comparación con la majestuosidad del bosque.. Iluminación suave desde arriba, creando sombras suaves en el suelo.. Bosque denso, hojas y ramas rodeando a los personajes.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: High angle desde arriba. +- Óptica: Gran angular, con profundidad de campo amplia. +- Luz: Iluminación suave desde arriba, creando sombras suaves en el suelo. +- Fondo: Bosque denso, hojas y ramas rodeando a los personajes. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.11 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** CLOSE-UP. Detalle de Miko cerrando su mochila con una sonrisa de satisfacción. + +> **Prompt final:** Plano detalle. Frontal, muy cerca del rostro y mochila de Miko.. Macro, enfocando la expresión de Miko y el cierre de la mochila.. [object Object]. Miko cierra la mochila con una expresión de satisfacción y alegría.. Iluminación cálida y directa sobre Miko.. Difuminado, sugiriendo el ambiente del bosque.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle +- Cámara: Frontal, muy cerca del rostro y mochila de Miko. +- Óptica: Macro, enfocando la expresión de Miko y el cierre de la mochila. +- Luz: Iluminación cálida y directa sobre Miko. +- Fondo: Difuminado, sugiriendo el ambiente del bosque. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.1.12 + +**Segmento:** III.1 Planeación en Equipo | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** TRACKING SHOT. Sigue a Coco y Miko mientras se levantan y comienzan a caminar, listos para la misión. + +> **Prompt final:** Plano americano. Tracking shot desde atrás, siguiendo a los personajes.. Normal, con profundidad de campo media.. [object Object],[object Object]. Coco y Miko caminan decididos, listos para comenzar su misión.. Iluminación cálida, resaltando la energía y alegría de los personajes.. Camino del bosque, hojas y ramas en movimiento.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano americano +- Cámara: Tracking shot desde atrás, siguiendo a los personajes. +- Óptica: Normal, con profundidad de campo media. +- Luz: Iluminación cálida, resaltando la energía y alegría de los personajes. +- Fondo: Camino del bosque, hojas y ramas en movimiento. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.1 + +--- + +## Plano 3.2.1 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** Wide shot. La aldea está parcialmente cubierta por la neblina marrón oxidada. Coco y Miko están al frente, listos para moverse. + +> **Prompt final:** Plano general. Frontal, mostrando la aldea y la neblina en el fondo.. Gran angular, con profundidad de campo amplia.. [object Object],[object Object]. Coco y Miko se preparan para avanzar hacia la aldea.. Iluminación tenue y difusa debido a la neblina, creando un ambiente misterioso.. Aldea parcialmente oculta por la neblina marrón oxidada, colores desaturados.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Frontal, mostrando la aldea y la neblina en el fondo. +- Óptica: Gran angular, con profundidad de campo amplia. +- Luz: Iluminación tenue y difusa debido a la neblina, creando un ambiente misterioso. +- Fondo: Aldea parcialmente oculta por la neblina marrón oxidada, colores desaturados. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.2 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Coco — *neutral* +- Miko — *neutral* + +**Acción:** Medium shot. Coco ajusta sus gafas de piloto sobre sus ojos. Miko revisa su mochila. + +> **Prompt final:** Plano medio. Frontal, capturando las acciones de ambos personajes.. Normal, con profundidad de campo media.. [object Object],[object Object]. Coco y Miko se preparan ajustando sus equipos para la misión.. Iluminación fría y directa, resaltando la concentración de los personajes.. Entorno de la aldea con neblina ligera en el aire.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Frontal, capturando las acciones de ambos personajes. +- Óptica: Normal, con profundidad de campo media. +- Luz: Iluminación fría y directa, resaltando la concentración de los personajes. +- Fondo: Entorno de la aldea con neblina ligera en el aire. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: neutral +- **Miko**: Front + Side + Back + Emoción: neutral + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.3 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** Close-up. Ojos de Coco reflejando determinación mientras observa el camino a seguir. + +> **Prompt final:** Plano detalle. Frontal, muy cerca del rostro de Coco.. Macro, enfocando los ojos de Coco.. [object Object]. Los ojos de Coco reflejan su determinación y alegría ante el desafío.. Iluminación intensa y cálida, enfocando el brillo en sus ojos.. Desenfocado, sugiriendo el entorno de la aldea.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle +- Cámara: Frontal, muy cerca del rostro de Coco. +- Óptica: Macro, enfocando los ojos de Coco. +- Luz: Iluminación intensa y cálida, enfocando el brillo en sus ojos. +- Fondo: Desenfocado, sugiriendo el entorno de la aldea. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.4 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** Over-the-shoulder. Miko observa la aldea y señala una dirección. + +> **Prompt final:** Plano medio. Over-the-shoulder desde atrás de Miko.. Normal, con profundidad de campo media.. [object Object]. Miko señala con confianza hacia la dirección correcta.. Iluminación difusa, creando un ambiente de decisión.. Aldea con neblina marrón oxidada en la distancia.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Over-the-shoulder desde atrás de Miko. +- Óptica: Normal, con profundidad de campo media. +- Luz: Iluminación difusa, creando un ambiente de decisión. +- Fondo: Aldea con neblina marrón oxidada en la distancia. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.5 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** Tracking shot. Coco y Miko corren por la aldea, guiando a un grupo de aves. + +> **Prompt final:** Plano secuencia. Tracking shot, siguiendo a los personajes y aves.. Teleobjetivo, con profundidad de campo reducida para enfocar en el movimiento.. [object Object],[object Object]. Coco y Miko corren liderando a un grupo de aves para guiarlas.. Iluminación cálida, resaltando la energía y movimiento.. Aldea, con casas y árboles pasando rápidamente.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano secuencia +- Cámara: Tracking shot, siguiendo a los personajes y aves. +- Óptica: Teleobjetivo, con profundidad de campo reducida para enfocar en el movimiento. +- Luz: Iluminación cálida, resaltando la energía y movimiento. +- Fondo: Aldea, con casas y árboles pasando rápidamente. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.6 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** Low angle. Coco salta sobre un obstáculo, mostrando poder y agilidad. + +> **Prompt final:** Plano medio. Low angle desde el suelo, mirando hacia arriba.. Gran angular, con profundidad de campo amplia.. [object Object]. Coco realiza un salto poderoso y ágil sobre un obstáculo.. Iluminación cálida y directa, destacando su figura en el aire.. Cielo azul y parte del obstáculo en el suelo.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Low angle desde el suelo, mirando hacia arriba. +- Óptica: Gran angular, con profundidad de campo amplia. +- Luz: Iluminación cálida y directa, destacando su figura en el aire. +- Fondo: Cielo azul y parte del obstáculo en el suelo. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.7 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** High angle. Miko guía un grupo de pequeños roedores desde arriba, mostrando vulnerabilidad. + +> **Prompt final:** Plano general. High angle desde arriba.. Gran angular, con profundidad de campo amplia.. [object Object]. Miko dirige con confianza a un grupo de roedores pequeños por el camino.. Iluminación difusa desde arriba, creando sombras suaves.. Pequeños roedores en el suelo rodeados por la vegetación.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: High angle desde arriba. +- Óptica: Gran angular, con profundidad de campo amplia. +- Luz: Iluminación difusa desde arriba, creando sombras suaves. +- Fondo: Pequeños roedores en el suelo rodeados por la vegetación. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.8 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** Extreme close-up. Detalle de las gafas de Coco brillando mientras observa. + +> **Prompt final:** Plano detalle extremo. Frontal, muy cerca del rostro de Coco.. Macro, enfocando los reflejos en las gafas.. [object Object]. Las gafas de Coco reflejan el entorno con un brillo intenso.. Iluminación intensa sobre las gafas, resaltando los reflejos.. Desenfocado, sugiriendo el entorno de la aldea.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle extremo +- Cámara: Frontal, muy cerca del rostro de Coco. +- Óptica: Macro, enfocando los reflejos en las gafas. +- Luz: Iluminación intensa sobre las gafas, resaltando los reflejos. +- Fondo: Desenfocado, sugiriendo el entorno de la aldea. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.9 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Miko — *sorpresa* + +**Acción:** POV. Vista desde los ojos de Miko, mostrando el camino despejado por la neblina. + +> **Prompt final:** POV. POV. Normal, profundidad de campo moderada.. [object Object]. Vista desde los ojos de Miko mostrando un camino despejado. La neblina marrón oxidado se desvanece, revelando un sendero claro.. Luz difusa, atmósfera de descubrimiento.. Camino despejado, vegetación ligeramente visible en el horizonte.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: POV +- Cámara: POV +- Óptica: Normal, profundidad de campo moderada. +- Luz: Luz difusa, atmósfera de descubrimiento. +- Fondo: Camino despejado, vegetación ligeramente visible en el horizonte. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: sorpresa + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.10 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *alegria* + +**Acción:** Medium shot. Búho Sabio observa desde un árbol, apoyando con un gesto de asentimiento. + +> **Prompt final:** Plano medio. Frontal. Normal, profundidad de campo moderada.. [object Object]. Búho Sabio observa desde un árbol, asintiendo con aprobación.. Luz directa, cálida, iluminando suavemente al Búho Sabio.. Rama de árbol con hojas verdes, cielo claro.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Frontal +- Óptica: Normal, profundidad de campo moderada. +- Luz: Luz directa, cálida, iluminando suavemente al Búho Sabio. +- Fondo: Rama de árbol con hojas verdes, cielo claro. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.11 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Miko — *sorpresa* + +**Acción:** Close-up. Miko saca un objeto brillante de su mochila, simbolizando la Virtud. + +> **Prompt final:** Primer plano. Frontal. Macro, profundidad de campo reducida para enfocar el objeto.. [object Object]. Miko saca un objeto brillante de su mochila.. Luz directa enfocada en el objeto, creando un efecto de brillo mágico.. Fondo desenfocado, concentrándose en el objeto brillante.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano +- Cámara: Frontal +- Óptica: Macro, profundidad de campo reducida para enfocar el objeto. +- Luz: Luz directa enfocada en el objeto, creando un efecto de brillo mágico. +- Fondo: Fondo desenfocado, concentrándose en el objeto brillante. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: sorpresa + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.12 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- El Gran Desorden — *tristeza* + +**Acción:** Wide shot. La neblina marrón comienza a disiparse por completo, mostrando un camino claro. + +> **Prompt final:** Plano general. Frontal. Gran angular, profundidad de campo amplia.. [object Object]. La neblina marrón se disipa, revelando un camino claro.. Luz difusa, atmósfera de claridad y esperanza.. Camino claro, vegetación emergente, cielo despejado.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Frontal +- Óptica: Gran angular, profundidad de campo amplia. +- Luz: Luz difusa, atmósfera de claridad y esperanza. +- Fondo: Camino claro, vegetación emergente, cielo despejado. + +**Assets de referencia:** +- **El Gran Desorden**: Front + Side + Back + Emoción: tristeza + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.13 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** Tracking shot. Coco y Miko avanzan por el camino despejado, seguidos por los animales. + +> **Prompt final:** Plano general. Tracking shot. Normal, profundidad de campo moderada.. [object Object],[object Object]. Coco y Miko avanzan por el camino despejado, seguidos por animales.. Luz directa, cálida, iluminando el camino.. Camino despejado, animales siguiendo, vegetación a los lados.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Tracking shot +- Óptica: Normal, profundidad de campo moderada. +- Luz: Luz directa, cálida, iluminando el camino. +- Fondo: Camino despejado, animales siguiendo, vegetación a los lados. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.14 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Acción:** Low angle. Los animales pasan por debajo de un arco natural de árboles, simbolizando unión. + +> **Prompt final:** Plano general. Low angle. Gran angular, profundidad de campo amplia.. . Los animales pasan por debajo de un arco natural de árboles.. Luz cálida filtrándose entre las hojas, creando un efecto de unión.. Arco de árboles con hojas verdes y luz filtrante.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Low angle +- Óptica: Gran angular, profundidad de campo amplia. +- Luz: Luz cálida filtrándose entre las hojas, creando un efecto de unión. +- Fondo: Arco de árboles con hojas verdes y luz filtrante. + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.15 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** Close-up. Coco y Miko se miran, sonriendo con satisfacción. + +> **Prompt final:** Primer plano. Frontal. Normal, profundidad de campo reducida para enfocar rostros.. [object Object],[object Object]. Coco y Miko se miran, sonriendo con satisfacción.. Luz cálida, resaltando la expresión de felicidad.. Fondo desenfocado, centrado en los rostros.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano +- Cámara: Frontal +- Óptica: Normal, profundidad de campo reducida para enfocar rostros. +- Luz: Luz cálida, resaltando la expresión de felicidad. +- Fondo: Fondo desenfocado, centrado en los rostros. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.16 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** Extreme close-up. Detalle de las patas de Coco y Miko tocándose en señal de camaradería. + +> **Prompt final:** Plano detalle. Frontal. Macro, profundidad de campo muy reducida.. [object Object],[object Object]. Detalle de las patas de Coco y Miko tocándose.. Luz suave, resaltando la textura del pelaje.. Fondo desenfocado, centrado en las patas.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle +- Cámara: Frontal +- Óptica: Macro, profundidad de campo muy reducida. +- Luz: Luz suave, resaltando la textura del pelaje. +- Fondo: Fondo desenfocado, centrado en las patas. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.17 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Acción:** High angle. Vista desde arriba mostrando a Coco, Miko y los animales avanzando juntos. + +> **Prompt final:** Plano general. High angle. Gran angular, profundidad de campo amplia.. . Vista desde arriba de Coco, Miko y los animales avanzando juntos.. Luz natural, iluminando el grupo desde arriba.. Camino claro rodeado de vegetación, cielo despejado.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: High angle +- Óptica: Gran angular, profundidad de campo amplia. +- Luz: Luz natural, iluminando el grupo desde arriba. +- Fondo: Camino claro rodeado de vegetación, cielo despejado. + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 3.2.18 + +**Segmento:** III.2 Ejecutando la Estrategia | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** Wide shot. La aldea completamente despejada, mostrando el éxito de la estrategia. + +> **Prompt final:** Plano general. Frontal. Gran angular, profundidad de campo amplia.. [object Object],[object Object]. La aldea completamente despejada, mostrando el éxito de la estrategia.. Luz cálida de mediodía, resaltando la claridad del lugar.. Aldea libre de neblina, colores vibrantes regresando.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Frontal +- Óptica: Gran angular, profundidad de campo amplia. +- Luz: Luz cálida de mediodía, resaltando la claridad del lugar. +- Fondo: Aldea libre de neblina, colores vibrantes regresando. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-III.2 + +--- + +## Plano 4.1.1 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Acción:** WIDE SHOT. La cámara muestra un campo descolorido con neblina marrón oxidado cubriéndolo. En el horizonte, la neblina comienza a retroceder, mostrando los primeros destellos de verde vibrante. + +> **Prompt final:** Plano general. Frontal. Gran angular, profundidad de campo amplia.. . La neblina marrón oxidado comienza a retroceder, revelando verde vibrante.. Luz suave de amanecer, destacando los colores emergentes.. Campo descolorido comenzando a mostrar verde vibrante.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: Frontal +- Óptica: Gran angular, profundidad de campo amplia. +- Luz: Luz suave de amanecer, destacando los colores emergentes. +- Fondo: Campo descolorido comenzando a mostrar verde vibrante. + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.2 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** MEDIUM SHOT. Coco y Miko, de pie en el campo, observan el retroceso de la neblina. Coco con sus gafas sobre la frente, Miko con su mochila lista. + +> **Prompt final:** Plano medio. Frontal. Normal, profundidad de campo moderada.. [object Object],[object Object]. Coco y Miko observan el retroceso de la neblina.. Luz cálida de amanecer, iluminando sus rostros.. Campo con neblina retrocediendo, colores vibrantes emergiendo.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Frontal +- Óptica: Normal, profundidad de campo moderada. +- Luz: Luz cálida de amanecer, iluminando sus rostros. +- Fondo: Campo con neblina retrocediendo, colores vibrantes emergiendo. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.3 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** CLOSE-UP. El rostro de Coco mostrando una expresión de alegría mientras sus ojos reflejan el color que regresa al campo. + +> **Prompt final:** Primer plano. Frontal. Macro, profundidad de campo reducida para enfocar ojos.. [object Object]. El rostro de Coco refleja el color que regresa al campo.. Luz cálida, resaltando los ojos de Coco.. Colores vibrantes reflejados en los ojos de Coco.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano +- Cámara: Frontal +- Óptica: Macro, profundidad de campo reducida para enfocar ojos. +- Luz: Luz cálida, resaltando los ojos de Coco. +- Fondo: Colores vibrantes reflejados en los ojos de Coco. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.4 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** EXTREME CLOSE-UP. Detalle de la mochila de Miko abriéndose ligeramente, mostrando el compartimento de las Virtudes. + +> **Prompt final:** Plano detalle. Frontal. Macro, profundidad de campo muy reducida.. [object Object]. Detalle de la mochila de Miko abriéndose para mostrar las Virtudes.. Luz cálida, enfocada en el compartimento abierto.. Fondo desenfocado, centrado en el compartimento de la mochila.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano detalle +- Cámara: Frontal +- Óptica: Macro, profundidad de campo muy reducida. +- Luz: Luz cálida, enfocada en el compartimento abierto. +- Fondo: Fondo desenfocado, centrado en el compartimento de la mochila. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.5 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** LOW ANGLE. La cámara mira hacia arriba desde el suelo, mostrando a Coco y Miko de pie con confianza mientras el color regresa al campo. + +> **Prompt final:** Plano americano. Low angle. Gran angular, profundidad de campo amplia.. [object Object],[object Object]. Coco y Miko de pie con confianza mientras el color regresa.. Luz cálida, destacando las figuras contra el cielo.. Cielo despejado, campo coloreándose.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano americano +- Cámara: Low angle +- Óptica: Gran angular, profundidad de campo amplia. +- Luz: Luz cálida, destacando las figuras contra el cielo. +- Fondo: Cielo despejado, campo coloreándose. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.6 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** OVER-THE-SHOULDER. Desde la perspectiva de Miko, observamos cómo los animales del campo comienzan a acercarse, mostrando gratitud. + +> **Prompt final:** Plano medio. Over-the-shoulder. Normal, profundidad de campo moderada.. [object Object]. Los animales del campo se acercan, mostrando gratitud.. Luz cálida, iluminando el campo y los animales.. Campo con animales acercándose, colores vibrantes.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Over-the-shoulder +- Óptica: Normal, profundidad de campo moderada. +- Luz: Luz cálida, iluminando el campo y los animales. +- Fondo: Campo con animales acercándose, colores vibrantes. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.7 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** HIGH ANGLE. La cámara mira hacia abajo desde un árbol, mostrando a Coco y Miko rodeados de animales agradecidos. + +> **Prompt final:** Plano general. High angle. Gran angular, profundidad de campo amplia.. [object Object],[object Object]. Coco y Miko rodeados de animales agradecidos.. Luz natural filtrada desde las hojas, iluminando a los personajes.. Rama de árbol con hojas verdes, animales rodeando a los personajes.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano general +- Cámara: High angle +- Óptica: Gran angular, profundidad de campo amplia. +- Luz: Luz natural filtrada desde las hojas, iluminando a los personajes. +- Fondo: Rama de árbol con hojas verdes, animales rodeando a los personajes. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.8 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *alegria* + +**Acción:** POV. Desde el punto de vista del Búho Sabio, observando a Coco y Miko. La neblina ha desaparecido completamente. + +> **Prompt final:** POV. POV. Normal, profundidad de campo amplia.. [object Object]. Desde el punto de vista del Búho Sabio, observando a Coco y Miko.. Luz cálida, iluminando el campo desde una perspectiva elevada.. Campo despejado, sin neblina, colores vibrantes.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: POV +- Cámara: POV +- Óptica: Normal, profundidad de campo amplia. +- Luz: Luz cálida, iluminando el campo desde una perspectiva elevada. +- Fondo: Campo despejado, sin neblina, colores vibrantes. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.9 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *alegria* + +**Acción:** MEDIUM SHOT. El Búho Sabio se acerca volando y se posa junto a Coco y Miko, abriendo su pequeño libro de pergamino. + +> **Prompt final:** Plano medio. Frontal. Normal, profundidad de campo moderada.. [object Object]. El Búho Sabio se posa junto a Coco y Miko, abriendo su libro.. Luz cálida, iluminando al Búho Sabio y su libro.. Campo con colores vibrantes, cielo despejado.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Plano medio +- Cámara: Frontal +- Óptica: Normal, profundidad de campo moderada. +- Luz: Luz cálida, iluminando al Búho Sabio y su libro. +- Fondo: Campo con colores vibrantes, cielo despejado. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.10 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Personajes:** +- Búho Sabio — *alegria* + +**Acción:** CLOSE-UP. El rostro del Búho Sabio emite una expresión de satisfacción mientras asiente con la cabeza hacia Coco y Miko. + +> **Prompt final:** Primer plano. Frontal. Macro, profundidad de campo reducida.. [object Object]. El rostro del Búho Sabio emite una expresión de satisfacción.. Luz suave, resaltando las facciones del Búho Sabio.. Fondo desenfocado, centrado en el rostro del Búho Sabio.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: Primer plano +- Cámara: Frontal +- Óptica: Macro, profundidad de campo reducida. +- Luz: Luz suave, resaltando las facciones del Búho Sabio. +- Fondo: Fondo desenfocado, centrado en el rostro del Búho Sabio. + +**Assets de referencia:** +- **Búho Sabio**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.11 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* +- Miko — *alegria* + +**Acción:** TRACKING SHOT. La cámara sigue a Coco y Miko mientras se alejan del campo, con los animales siguiéndolos con alegría. + +> **Prompt final:** plano medio. tracking shot a nivel del suelo. normal. [object Object],[object Object]. Coco y Miko avanzan por el campo, rodeados de animales que los siguen con entusiasmo.. Luz natural, cálida y suave, proveniente del sol de la tarde.. Campo verde y florido, con animales pequeños como conejos y aves.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano medio +- Cámara: tracking shot a nivel del suelo +- Óptica: normal +- Luz: Luz natural, cálida y suave, proveniente del sol de la tarde. +- Fondo: Campo verde y florido, con animales pequeños como conejos y aves. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria +- **Miko**: Front + Side + Back + Emoción: alegria + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.1.12 + +**Segmento:** IV.1 El Retorno del Color | **Duración:** 5s + +**Acción:** WIDE SHOT. Se muestra el campo completamente revitalizado y lleno de color. Los animales y los protagonistas se ven en armonía. + +> **Prompt final:** plano general. frontal. gran angular. . El campo se muestra vibrante y lleno de vida, con animales disfrutando del entorno.. Luz solar directa, cálida, resaltando los colores vivos del paisaje.. Extenso campo con flores de variados colores, cielo azul claro.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano general +- Cámara: frontal +- Óptica: gran angular +- Luz: Luz solar directa, cálida, resaltando los colores vivos del paisaje. +- Fondo: Extenso campo con flores de variados colores, cielo azul claro. + +**Fondo ref:** fondo-IV.1 + +--- + +## Plano 4.2.1 + +**Segmento:** IV.2 La Gema de la Cooperación | **Duración:** 5s + +**Personajes:** +- Miko — *sorpresa* +- Coco — *sorpresa* + +**Acción:** Wide/establishing shot. La cámara muestra un claro iluminado en el bosque donde Miko y Coco están de pie, rodeados de naturaleza vibrante. En el centro del claro, una luz comienza a brillar intensamente, insinuando la formación de la Gema de la Cooperación. + +> **Prompt final:** plano general. cenital. gran angular. [object Object],[object Object]. Miko y Coco observan la luz brillante en el centro del claro.. Iluminación natural con un foco de luz brillante en el centro del claro.. Claro de bosque rodeado de árboles altos y verdes, luz intensa en el centro.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano general +- Cámara: cenital +- Óptica: gran angular +- Luz: Iluminación natural con un foco de luz brillante en el centro del claro. +- Fondo: Claro de bosque rodeado de árboles altos y verdes, luz intensa en el centro. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: sorpresa +- **Coco**: Front + Side + Back ⚠️ sin emoción sorpresa + +--- + +## Plano 4.2.2 + +**Segmento:** IV.2 La Gema de la Cooperación | **Duración:** 5s + +**Acción:** Close-up. La cámara se enfoca en la Gema de la Cooperación, que ahora se ha materializado completamente. Brilla con luz propia, sus facetas reflejan colores vivos y cambiantes. + +> **Prompt final:** primer plano. frontal. macro. . La Gema de la Cooperación brilla intensamente, mostrando sus facetas multicolores.. Luz intensa y cambiante desde la gema, colores vibrantes.. Fondo difuminado, con tonos cálidos y colores suaves.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: primer plano +- Cámara: frontal +- Óptica: macro +- Luz: Luz intensa y cambiante desde la gema, colores vibrantes. +- Fondo: Fondo difuminado, con tonos cálidos y colores suaves. + +--- + +## Plano 4.2.3 + +**Segmento:** IV.2 La Gema de la Cooperación | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* + +**Acción:** Medium shot. Miko se inclina hacia adelante y cuidadosamente recoge la Gema de la Cooperación. Su expresión muestra reverencia y alegría mientras la sostiene en sus patas. + +> **Prompt final:** plano medio. tres cuartos. normal. [object Object]. Miko recoge la Gema de la Cooperación con delicadeza.. Luz suave y cálida, centrada en Miko y la gema.. Claro de bosque con vegetación verde y luz difusa.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano medio +- Cámara: tres cuartos +- Óptica: normal +- Luz: Luz suave y cálida, centrada en Miko y la gema. +- Fondo: Claro de bosque con vegetación verde y luz difusa. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria + +--- + +## Plano 4.2.4 + +**Segmento:** IV.2 La Gema de la Cooperación | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** Over-the-shoulder. Desde detrás de Coco, observamos cómo Miko guarda la gema en el compartimento especial de su mochila. Coco, en primer plano, comienza a sonreír, mostrando orgullo y satisfacción. + +> **Prompt final:** plano americano. over-the-shoulder. normal. [object Object]. Coco observa a Miko mientras guarda la gema, mostrando orgullo.. Luz cálida y suave, iluminando a Coco y Miko.. Claro de bosque con árboles y luz suave.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano americano +- Cámara: over-the-shoulder +- Óptica: normal +- Luz: Luz cálida y suave, iluminando a Coco y Miko. +- Fondo: Claro de bosque con árboles y luz suave. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +--- + +## Plano 4.2.5 + +**Segmento:** IV.2 La Gema de la Cooperación | **Duración:** 5s + +**Personajes:** +- Coco — *alegria* + +**Acción:** Close-up. La cámara se centra en Coco mientras se quita las gafas de piloto de la frente y las coloca sobre sus ojos. Su expresión es de determinación y confianza. + +> **Prompt final:** primer plano. frontal. macro. [object Object]. Coco se pone las gafas de piloto con determinación.. Luz suave y centrada en Coco, resaltando su expresión.. Fondo desenfocado, tonos cálidos.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: primer plano +- Cámara: frontal +- Óptica: macro +- Luz: Luz suave y centrada en Coco, resaltando su expresión. +- Fondo: Fondo desenfocado, tonos cálidos. + +**Assets de referencia:** +- **Coco**: Front + Side + Back + Emoción: alegria + +--- + +## Plano 4.2.6 + +**Segmento:** IV.2 La Gema de la Cooperación | **Duración:** 5s + +**Personajes:** +- Miko — *alegria* +- Coco — *alegria* +- Búho Sabio — *neutral* + +**Acción:** High angle. Desde lo alto, vemos a Miko y Coco juntos en el claro, con la luz de la gema aún irradiando suavemente desde la mochila de Miko. El Búho Sabio se acerca desde un árbol cercano, observando con aprobación. + +> **Prompt final:** plano general. high angle. gran angular. [object Object],[object Object],[object Object]. Miko y Coco están juntos en el claro con la luz de la gema irradiando, mientras el Búho Sabio se acerca volando.. Luz cálida y suave desde la gema, luz natural del día.. Claro del bosque, con árboles altos y el Búho Sabio acercándose.. Pixar-style 3D animation, vibrant colors, expressive characters. + +**Composición:** +- Tipo plano: plano general +- Cámara: high angle +- Óptica: gran angular +- Luz: Luz cálida y suave desde la gema, luz natural del día. +- Fondo: Claro del bosque, con árboles altos y el Búho Sabio acercándose. + +**Assets de referencia:** +- **Miko**: Front + Side + Back + Emoción: alegria +- **Coco**: Front + Side + Back + Emoción: alegria +- **Búho Sabio**: Front + Side + Back + Emoción: neutral + +--- + diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/idea-motriz.md b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/idea-motriz.md new file mode 100644 index 0000000..19aef15 --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/idea-motriz.md @@ -0,0 +1,59 @@ +--- +concepto: "Los Guardianes del Mundo Abierto. Dos gatitos, Coco y Miko, trabajan en equipo para coleccionar Virtudes (valores éticos) y sanar los Nudos del Mundo causados por el Gran Desorden, una fuerza de caos que simboliza el impacto negativo del ser humano en el medio ambiente." +ideaMotrizCentral: "Coleccionar Virtudes para sanar las injusticias del mundo a través de la cooperación." +formato: + capitulos: 60 + duracionMinutos: 20 +narrativa: "Sin diálogos. Se utiliza únicamente el diseño de sonido (meows, sonidos animales) y la música para transmitir la emoción y la narrativa. La comunicación es puramente visual y corporal." +valores: + - Cooperación + - Bien común + - Lucha activa contra la injusticia + - Paciencia + - Ingenio + - Tolerancia + - Curiosidad + - Resiliencia + - Generosidad + - Humildad + - Sacrificio +protagonistas: + - nombre: "Coco" + rol: "El Corazón y el Foco. Sensibilidad y Rapidez. Primera en detectar la injusticia." + utileria: "Gafas de Piloto (Goggles) - usadas sobre la frente o puestas." + mecanica: "La Virtud ganada se activa cuando Coco se pone las gafas, que brillan para ver la solución." + - nombre: "Miko" + rol: "La Mente y la Estrategia. Concentración y Planificación. El lado lógico y cauteloso." + utileria: "Mochila de Inventos con compartimento especial para las Virtudes." + mecanica: "Las Virtudes ganadas se materializan como Gemas Luminosas que Miko guarda." +antagonista: + nombre: "El Gran Desorden" + descripcion: "Fuerza de caos y desequilibrio, sin mente ni voz, que simboliza el impacto negativo del ser humano en el mundo." + representacionVisual: "Neblina o Polvo de color Marrón Oxidado (Rust Brown Mist)" + mision: "Los gatitos luchan contra el caos para defender y restaurar el bien común y la ecología." +estructuraGuion: + - numero: 1 + nombre: "Detección" + duracionMin: 3 + duracionMax: 4 + descripcion: "Coco detecta el Nudo del Mundo (área afectada por la Neblina Marrón Oxidado)." + - numero: 2 + nombre: "Encuentro y Bloqueo" + duracionMin: 5 + duracionMax: 6 + descripcion: "Encuentro con el Aliado y comprensión de la Virtud necesaria." + - numero: 3 + nombre: "Cooperación" + duracionMin: 7 + duracionMax: 8 + descripcion: "Trabajo en equipo activo entre Coco y Miko, aplicando la sabiduría del Aliado." + - numero: 4 + nombre: "Victoria y Ganancia" + duracionMin: 2 + duracionMax: 3 + descripcion: "El problema se resuelve, el entorno recupera su color, y la Virtud se materializa en una Gema Luminosa." +expansion: "Arco I (1-60): Coleccionar las 60 Virtudes Fundamentales para crear la Virtud Maestra (Luz Primordial). Arco II (61-120): Exploración del Nuevo Desorden (Gran Desorden 2.0 - Gris Ceniza/apatía). Arco III (121-180): El Ciclo Continúa con desafíos más mentales y dilemas morales." +personajesSecundarios: "En cada capítulo aparece un Aliado (otro animal personificado, vestido como humano) que tiene la sabiduría para guiar a los gatitos a la Virtud, pero no puede resolver el problema por ellos." +--- + +# Coco y Miko - Los Guardianes del Mundo Abierto diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes.md b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes.md new file mode 100644 index 0000000..6edc270 --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes.md @@ -0,0 +1,131 @@ +--- +personajes: + - id: coco-001 + nombre: Coco + tipo: protagonista + especie: gata + aparienciaFisica: >- + Gata pequeña y ágil de pelaje naranja brillante con rayas más claras. Ojos + grandes y expresivos de color ámbar dorado. Orejas puntiagudas siempre + alertas. Cola larga y esponjosa. Complexión delgada y atlética que refleja + su rapidez. + rolPrincipal: >- + El Corazón y la Iniciativa. Motor de la acción y la más empática. Siempre + es la primera en sentir o detectar una injusticia o un Nudo del Mundo. + personalidad: >- + Sensible, Rápida y Expresiva. Actúa con rapidez y valentía. Su + sensibilidad la hace reaccionar emocionalmente ante el desequilibrio + causado por el Gran Desorden. Es el polo más social y activo del dúo. + habilidadInnata: >- + Rapidez y Sentido de la Detección. Es naturalmente veloz y su instinto + para percibir el sufrimiento o la injusticia es su rasgo definitorio. + utileriaVisual: >- + Gafas de Piloto (Goggles). Usadas sobre la frente o puestas sobre los + ojos. Refuerzan su capacidad de Foco y Concentración cuando es necesario. + mecanicaNarrativa: >- + Activación de la Virtud. Las Gafas de Piloto no almacenan la Virtud, sino + que la activan. Al ponérselas en el momento de la cooperación, las lentes + brillan o muestran un pequeño símbolo visual. Este es el clic final que + permite ver la solución exacta para aplicar la Virtud. + comunicacion: >- + Su meow es alto, enérgico y con inflexiones dramáticas. Es el principal + vehículo para comunicar sorpresa, alarma, alegría y afecto. + avanceHabilidad: >- + Las Virtudes de Acción y Empatía (como el Valor, la Iniciativa, la + Paciencia y la Resiliencia) están directamente vinculadas a su progresión. + - id: miko-001 + nombre: Miko + tipo: protagonista + especie: gato + aparienciaFisica: >- + Gato de pelaje gris azulado con manchas blancas en el pecho y las patas. + Ojos grandes de color verde esmeralda que reflejan concentración. + Complexión más robusta que Coco, con patas fuertes. Bigotes largos y + expresivos. Mirada tranquila y observadora. + rolPrincipal: >- + La Mente y el Almacenamiento. Es el estratega, el lógico y el encargado de + la planificación. Es quien recuerda las lecciones aprendidas y gestiona + los recursos. + personalidad: >- + Cauteloso, Concentrado y Práctico. Tiende a ser más observador y a + analizar la situación antes de actuar. Aporta el contrapeso lógico a la + impulsividad de Coco. + habilidadInnata: >- + Concentración y Observación. Su capacidad de enfocarse en los detalles le + permite planear rutas o entender la mecánica de un problema. + utileriaVisual: >- + Mochila de Inventos/Utilidad. La lleva siempre consigo. Contiene los + elementos esenciales para sus planes y, crucialmente, el compartimento + especial para las Virtudes. + mecanicaNarrativa: >- + Almacén de Virtudes y Estrategia. Su mochila es el Almacén donde las + Virtudes se guardan como Gemas Luminosas tras ser ganadas. Miko es quien + decide qué Gema (Virtud) sacar para que Coco la active. + comunicacion: >- + Su meow es más reservado, con tonos que reflejan duda, razonamiento o + satisfacción por un plan cumplido. Es el vehículo para comunicar análisis, + preguntas y satisfacción cautelosa. + avanceHabilidad: >- + Las Virtudes de Lógica y Conocimiento (como el Ingenio, la Memoria, el + Equilibrio y la Planificación) están directamente vinculadas a su + progresión. + - id: gran-desorden-001 + nombre: El Gran Desorden + tipo: antagonista + especie: fuerza abstracta + aparienciaFisica: >- + No tiene forma física definida. Se manifiesta como una neblina densa de + color marrón oxidado (Rust Brown) que flota y se arrastra por el suelo. A + veces forma zarcillos o tentáculos de polvo. Su presencia oscurece y + desatura los colores del entorno, creando un efecto visual de decadencia. + rolPrincipal: >- + Fuerza de caos y desequilibrio que simboliza el impacto negativo y + destructivo del ser humano en el mundo abierto (polución, descuido, + abandono). + personalidad: Sin mente ni voz. Es una fuerza abstracta de caos puro. + habilidadInnata: >- + Corrosión y decadencia. Genera los Nudos del Mundo que afectan el + equilibrio natural. + utileriaVisual: >- + Neblina o Polvo de color Marrón Oxidado (Rust Brown Mist). Este color + representa la putrefacción, el óxido y la decadencia, contrastando con la + vitalidad del mundo. + mecanicaNarrativa: >- + Los gatitos luchan contra el caos que genera el Gran Desorden para + defender y restaurar el bien común y la ecología de su entorno. + comunicacion: Silencioso. Se manifiesta visualmente como neblina y corrosión. + avanceHabilidad: >- + Evoluciona en cada arco: Marrón Oxidado (Arco I), Gris Ceniza (Arco II), + formas más sutiles y mentales (Arco III+). + - id: aliado-001 + nombre: Búho Sabio + tipo: aliado + especie: Búho + aparienciaFisica: >- + Plumaje gris plateado con motas blancas, ojos grandes y profundos de color + ámbar, de tamaño mediano con alas amplias. Lleva pequeñas gafas redondas + que reposan sobre su pico. + rolPrincipal: >- + El guía sabio que proporciona lecciones vitales y consejos útiles a Coco y + Miko para enfrentar los desafíos y encontrar la Virtud necesaria. + personalidad: >- + Paciente, sabio, algo excéntrico, con un toque de humor irónico. Siempre + está dispuesto a ayudar, aunque ocasionalmente se frustra con la + impaciencia de los demás. + habilidadInnata: >- + Posee una memoria prodigiosa y un vasto conocimiento sobre las Virtudes y + cómo se manifiestan en el mundo. + utileriaVisual: Gafas redondas y un pequeño libro de pergamino que lleva en una bandolera. + mecanicaNarrativa: >- + Aparece en momentos clave para ofrecer pistas o historias sobre la Virtud + que necesitan encontrar. No puede resolver los problemas por ellos, pero + les proporciona el conocimiento necesario para hacerlo. + comunicacion: >- + Se expresa a través de movimientos corporales, gestos con las alas y + sonidos suaves y rítmicos como ulular o tararear. + avanceHabilidad: >- + A medida que Coco y Miko avanzan y recogen virtudes, Búho Sabio también + aprende más sobre ellos, ajustando sus enseñanzas para ser más efectivas y + personalizadas. +--- + diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/assets.json b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/assets.json new file mode 100644 index 0000000..3c3585c --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/assets.json @@ -0,0 +1,87 @@ +{ + "assets": [ + { + "id": "aliado-001-tpose-front", + "type": "tpose", + "variant": "front", + "label": "T-Pose Frontal", + "prompt": "Búho Sabio en T-Pose frontal, cuerpo completo de frente, brazos extendidos horizontalmente, plumaje gris plateado con motas blancas, ojos grandes y profundos de color ámbar, gafas redondas sobre el pico, pequeño libro de pergamino en bandolera, estilo character design sheet, clean lines, flat white background", + "status": "generated", + "isBase": true, + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front" + }, + { + "id": "aliado-001-tpose-side", + "type": "tpose", + "variant": "side", + "label": "T-Pose Lateral", + "prompt": "Búho Sabio en T-Pose lateral, cuerpo completo de perfil (lado derecho), brazos extendidos, plumaje gris plateado con motas blancas, ojos grandes de color ámbar, gafas redondas sobre el pico, pequeño libro de pergamino en bandolera, estilo character design sheet, clean lines, flat white background", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side" + }, + { + "id": "aliado-001-tpose-back", + "type": "tpose", + "variant": "back", + "label": "T-Pose Trasera", + "prompt": "Búho Sabio en T-Pose trasera, cuerpo completo de espaldas, brazos extendidos, plumaje gris plateado con motas blancas, gafas redondas visibles desde atrás, pequeño libro de pergamino en bandolera, estilo character design sheet, clean lines, flat white background", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back" + }, + { + "id": "aliado-001-emotion-alegria", + "type": "emotion", + "variant": "alegria", + "label": "Alegría", + "prompt": "Primer plano del rostro de Búho Sabio mostrando alegría, plumaje gris plateado con motas blancas, ojos grandes y profundos de color ámbar, gafas redondas sobre el pico, estilo character design sheet, clean lines, flat white background", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria" + }, + { + "id": "aliado-001-emotion-tristeza", + "type": "emotion", + "variant": "tristeza", + "label": "Tristeza", + "prompt": "Primer plano del rostro de Búho Sabio mostrando tristeza, plumaje gris plateado con motas blancas, ojos grandes y profundos de color ámbar, gafas redondas sobre el pico, estilo character design sheet, clean lines, flat white background", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-tristeza" + }, + { + "id": "aliado-001-emotion-sorpresa", + "type": "emotion", + "variant": "sorpresa", + "label": "Sorpresa", + "prompt": "Primer plano del rostro de Búho Sabio mostrando sorpresa, plumaje gris plateado con motas blancas, ojos grandes y profundos de color ámbar, gafas redondas sobre el pico, estilo character design sheet, clean lines, flat white background", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-sorpresa" + }, + { + "id": "aliado-001-emotion-miedo", + "type": "emotion", + "variant": "miedo", + "label": "Miedo", + "prompt": "Primer plano del rostro de Búho Sabio mostrando miedo, plumaje gris plateado con motas blancas, ojos grandes y profundos de color ámbar, gafas redondas sobre el pico, estilo character design sheet, clean lines, flat white background", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-miedo" + }, + { + "id": "aliado-001-emotion-enfado", + "type": "emotion", + "variant": "enfado", + "label": "Enfado", + "prompt": "Primer plano del rostro de Búho Sabio mostrando enfado, plumaje gris plateado con motas blancas, ojos grandes y profundos de color ámbar, gafas redondas sobre el pico, estilo character design sheet, clean lines, flat white background", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-enfado" + }, + { + "id": "aliado-001-emotion-neutral", + "type": "emotion", + "variant": "neutral", + "label": "Neutral", + "prompt": "Primer plano del rostro de Búho Sabio mostrando expresión neutral, plumaje gris plateado con motas blancas, ojos grandes y profundos de color ámbar, gafas redondas sobre el pico, estilo character design sheet, clean lines, flat white background", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral" + } + ], + "baseLocked": true +} \ No newline at end of file diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria.png new file mode 100644 index 0000000..71cdd90 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-alegria.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-enfado.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-enfado.png new file mode 100644 index 0000000..7988135 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-enfado.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-miedo.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-miedo.png new file mode 100644 index 0000000..52bfc4d Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-miedo.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral.png new file mode 100644 index 0000000..390b74b Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-neutral.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-sorpresa.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-sorpresa.png new file mode 100644 index 0000000..db1f0cf Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-sorpresa.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-tristeza.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-tristeza.png new file mode 100644 index 0000000..c56d36b Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-emotion-tristeza.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back.png new file mode 100644 index 0000000..837e51b Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-back.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front.png new file mode 100644 index 0000000..887a3c6 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-front.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side.png new file mode 100644 index 0000000..5606ff5 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/aliado-001/images/aliado-001-tpose-side.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/assets.json b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/assets.json new file mode 100644 index 0000000..d99601c --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/assets.json @@ -0,0 +1,87 @@ +{ + "assets": [ + { + "id": "coco-001-tpose-front", + "type": "tpose", + "variant": "front", + "label": "T-Pose Frontal", + "prompt": "Character design sheet of a small, agile orange cat with bright fur and lighter stripes, standing in T-pose front view. The cat has large expressive amber golden eyes, pointed ears, and a long fluffy tail. She wears pilot goggles on her forehead. The background is flat white, no shadows.", + "status": "generated", + "isBase": true, + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front" + }, + { + "id": "coco-001-tpose-side", + "type": "tpose", + "variant": "side", + "label": "T-Pose Lateral", + "prompt": "Character design sheet of a small, agile orange cat with bright fur and lighter stripes, standing in T-pose side view. The cat has large expressive amber golden eyes, pointed ears, and a long fluffy tail. She wears pilot goggles on her forehead. The background is flat white, no shadows.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side" + }, + { + "id": "coco-001-tpose-back", + "type": "tpose", + "variant": "back", + "label": "T-Pose Trasera", + "prompt": "Character design sheet of a small, agile orange cat with bright fur and lighter stripes, standing in T-pose back view. The cat has large expressive amber golden eyes, pointed ears, and a long fluffy tail. She wears pilot goggles on her forehead. The background is flat white, no shadows.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back" + }, + { + "id": "coco-001-emotion-alegria", + "type": "emotion", + "variant": "alegria", + "label": "Alegría", + "prompt": "Close-up of an orange cat's face with bright fur and lighter stripes, showing a joyful expression. The cat has large expressive amber golden eyes, pointed ears, and is wearing pilot goggles on her forehead. The background is flat white, no shadows.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria" + }, + { + "id": "coco-001-emotion-tristeza", + "type": "emotion", + "variant": "tristeza", + "label": "Tristeza", + "prompt": "Close-up of an orange cat's face with bright fur and lighter stripes, showing a sad expression. The cat has large expressive amber golden eyes, pointed ears, and is wearing pilot goggles on her forehead. The background is flat white, no shadows.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-tristeza" + }, + { + "id": "coco-001-emotion-sorpresa", + "type": "emotion", + "variant": "sorpresa", + "label": "Sorpresa", + "prompt": "Close-up of an orange cat's face with bright fur and lighter stripes, showing a surprised expression. The cat has large expressive amber golden eyes, pointed ears, and is wearing pilot goggles on her forehead. The background is flat white, no shadows.", + "status": "generating", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-sorpresa" + }, + { + "id": "coco-001-emotion-miedo", + "type": "emotion", + "variant": "miedo", + "label": "Miedo", + "prompt": "Close-up of an orange cat's face with bright fur and lighter stripes, showing a fearful expression. The cat has large expressive amber golden eyes, pointed ears, and is wearing pilot goggles on her forehead. The background is flat white, no shadows.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-miedo" + }, + { + "id": "coco-001-emotion-enfado", + "type": "emotion", + "variant": "enfado", + "label": "Enfado", + "prompt": "Close-up of an orange cat's face with bright fur and lighter stripes, showing an angry expression. The cat has large expressive amber golden eyes, pointed ears, and is wearing pilot goggles on her forehead. The background is flat white, no shadows.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-enfado" + }, + { + "id": "coco-001-emotion-neutral", + "type": "emotion", + "variant": "neutral", + "label": "Neutral", + "prompt": "Close-up of an orange cat's face with bright fur and lighter stripes, showing a neutral expression. The cat has large expressive amber golden eyes, pointed ears, and is wearing pilot goggles on her forehead. The background is flat white, no shadows.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral" + } + ], + "baseLocked": true +} \ No newline at end of file diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria.png new file mode 100644 index 0000000..866fe03 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-alegria.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-enfado.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-enfado.png new file mode 100644 index 0000000..53e49f7 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-enfado.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-miedo.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-miedo.png new file mode 100644 index 0000000..7319a4b Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-miedo.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral.png new file mode 100644 index 0000000..79a5472 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-neutral.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-sorpresa.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-sorpresa.png new file mode 100644 index 0000000..ec8d937 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-sorpresa.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-tristeza.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-tristeza.png new file mode 100644 index 0000000..ef28bbd Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-emotion-tristeza.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back.png new file mode 100644 index 0000000..c853920 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-back.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front.png new file mode 100644 index 0000000..8576ce0 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-front.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side.png new file mode 100644 index 0000000..f5aefe4 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/coco-001/images/coco-001-tpose-side.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/assets.json b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/assets.json new file mode 100644 index 0000000..eb2c08d --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/assets.json @@ -0,0 +1,87 @@ +{ + "assets": [ + { + "id": "gran-desorden-001-tpose-front", + "type": "tpose", + "variant": "front", + "label": "T-Pose Frontal", + "prompt": "El Gran Desorden manifestado como una neblina densa de color marrón oxidado, formando un cuerpo completo de frente con zarcillos de polvo extendidos horizontalmente, estilo character design sheet, líneas limpias, fondo blanco liso, sin sombras", + "status": "generated", + "isBase": true, + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-front" + }, + { + "id": "gran-desorden-001-tpose-side", + "type": "tpose", + "variant": "side", + "label": "T-Pose Lateral", + "prompt": "El Gran Desorden manifestado como una neblina densa de color marrón oxidado, formando un cuerpo completo de perfil (lado derecho) con zarcillos de polvo extendidos, estilo character design sheet, líneas limpias, fondo blanco liso, sin sombras", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-side" + }, + { + "id": "gran-desorden-001-tpose-back", + "type": "tpose", + "variant": "back", + "label": "T-Pose Trasera", + "prompt": "El Gran Desorden manifestado como una neblina densa de color marrón oxidado, formando un cuerpo completo de espaldas con zarcillos de polvo extendidos horizontalmente, estilo character design sheet, líneas limpias, fondo blanco liso, sin sombras", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-back" + }, + { + "id": "gran-desorden-001-emotion-alegria", + "type": "emotion", + "variant": "alegria", + "label": "Alegría", + "prompt": "Primer plano de El Gran Desorden manifestado como una neblina densa de color marrón oxidado mostrando una expresión de alegría, con formas de polvo ligeramente elevadas como si sonrieran, fondo blanco liso", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-alegria" + }, + { + "id": "gran-desorden-001-emotion-tristeza", + "type": "emotion", + "variant": "tristeza", + "label": "Tristeza", + "prompt": "Primer plano de El Gran Desorden manifestado como una neblina densa de color marrón oxidado mostrando una expresión de tristeza, con formas de polvo caídas como si estuvieran llorando, fondo blanco liso", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-tristeza" + }, + { + "id": "gran-desorden-001-emotion-sorpresa", + "type": "emotion", + "variant": "sorpresa", + "label": "Sorpresa", + "prompt": "Primer plano de El Gran Desorden manifestado como una neblina densa de color marrón oxidado mostrando una expresión de sorpresa, con formas de polvo abruptamente alzadas, fondo blanco liso", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-sorpresa" + }, + { + "id": "gran-desorden-001-emotion-miedo", + "type": "emotion", + "variant": "miedo", + "label": "Miedo", + "prompt": "Primer plano de El Gran Desorden manifestado como una neblina densa de color marrón oxidado mostrando una expresión de miedo, con formas de polvo retraídas y comprimidas, fondo blanco liso", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-miedo" + }, + { + "id": "gran-desorden-001-emotion-enfado", + "type": "emotion", + "variant": "enfado", + "label": "Enfado", + "prompt": "Primer plano de El Gran Desorden manifestado como una neblina densa de color marrón oxidado mostrando una expresión de enfado, con formas de polvo puntiagudas y agresivas, fondo blanco liso", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-enfado" + }, + { + "id": "gran-desorden-001-emotion-neutral", + "type": "emotion", + "variant": "neutral", + "label": "Neutral", + "prompt": "Primer plano de El Gran Desorden manifestado como una neblina densa de color marrón oxidado mostrando una expresión neutral, con formas de polvo uniformes y equilibradas, fondo blanco liso", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-neutral" + } + ], + "baseLocked": true +} \ No newline at end of file diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-alegria.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-alegria.png new file mode 100644 index 0000000..c8af904 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-alegria.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-enfado.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-enfado.png new file mode 100644 index 0000000..6a28c6c Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-enfado.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-miedo.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-miedo.png new file mode 100644 index 0000000..bfbc844 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-miedo.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-neutral.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-neutral.png new file mode 100644 index 0000000..04b8473 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-neutral.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-sorpresa.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-sorpresa.png new file mode 100644 index 0000000..7b7ee18 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-sorpresa.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-tristeza.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-tristeza.png new file mode 100644 index 0000000..c60513c Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-emotion-tristeza.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-back.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-back.png new file mode 100644 index 0000000..b73846e Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-back.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-front.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-front.png new file mode 100644 index 0000000..4dd38e7 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-front.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-side.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-side.png new file mode 100644 index 0000000..aa54f75 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/gran-desorden-001/images/gran-desorden-001-tpose-side.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/assets.json b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/assets.json new file mode 100644 index 0000000..1b74cb9 --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/assets.json @@ -0,0 +1,87 @@ +{ + "assets": [ + { + "id": "miko-001-tpose-front", + "type": "tpose", + "variant": "front", + "label": "T-Pose Frontal", + "prompt": "Gato de pelaje gris azulado con manchas blancas en el pecho y las patas, ojos grandes de color verde esmeralda, complexión robusta, patas fuertes, bigotes largos y expresivos, mirada tranquila y observadora. Lleva una mochila de Inventos/Utilidad. Estilo: character design sheet, cuerpo completo de frente, brazos extendidos horizontalmente, postura neutra, clean lines, flat white background, no shadows on background.", + "status": "generated", + "isBase": true, + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front" + }, + { + "id": "miko-001-tpose-side", + "type": "tpose", + "variant": "side", + "label": "T-Pose Lateral", + "prompt": "Gato de pelaje gris azulado con manchas blancas en el pecho y las patas, ojos grandes de color verde esmeralda, complexión robusta, patas fuertes, bigotes largos y expresivos, mirada tranquila y observadora. Lleva una mochila de Inventos/Utilidad. Estilo: character design sheet, cuerpo completo de perfil (lado derecho), brazos extendidos, clean lines, flat white background, no shadows on background.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side" + }, + { + "id": "miko-001-tpose-back", + "type": "tpose", + "variant": "back", + "label": "T-Pose Trasera", + "prompt": "Gato de pelaje gris azulado con manchas blancas en el pecho y las patas, ojos grandes de color verde esmeralda, complexión robusta, patas fuertes, bigotes largos y expresivos, mirada tranquila y observadora. Lleva una mochila de Inventos/Utilidad. Estilo: character design sheet, cuerpo completo de espaldas, brazos extendidos, clean lines, flat white background, no shadows on background.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back" + }, + { + "id": "miko-001-emotion-alegria", + "type": "emotion", + "variant": "alegria", + "label": "Alegría", + "prompt": "Primer plano del rostro de un gato de pelaje gris azulado con manchas blancas, ojos grandes de color verde esmeralda mostrando alegría, bigotes largos y expresivos. Estilo: character design sheet, clean lines, flat white background, no shadows on background.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria" + }, + { + "id": "miko-001-emotion-tristeza", + "type": "emotion", + "variant": "tristeza", + "label": "Tristeza", + "prompt": "Primer plano del rostro de un gato de pelaje gris azulado con manchas blancas, ojos grandes de color verde esmeralda mostrando tristeza, bigotes largos y expresivos. Estilo: character design sheet, clean lines, flat white background, no shadows on background.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-tristeza" + }, + { + "id": "miko-001-emotion-sorpresa", + "type": "emotion", + "variant": "sorpresa", + "label": "Sorpresa", + "prompt": "Primer plano del rostro de un gato de pelaje gris azulado con manchas blancas, ojos grandes de color verde esmeralda mostrando sorpresa, bigotes largos y expresivos. Estilo: character design sheet, clean lines, flat white background, no shadows on background.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa" + }, + { + "id": "miko-001-emotion-miedo", + "type": "emotion", + "variant": "miedo", + "label": "Miedo", + "prompt": "Primer plano del rostro de un gato de pelaje gris azulado con manchas blancas, ojos grandes de color verde esmeralda mostrando miedo, bigotes largos y expresivos. Estilo: character design sheet, clean lines, flat white background, no shadows on background.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-miedo" + }, + { + "id": "miko-001-emotion-enfado", + "type": "emotion", + "variant": "enfado", + "label": "Enfado", + "prompt": "Primer plano del rostro de un gato de pelaje gris azulado con manchas blancas, ojos grandes de color verde esmeralda mostrando enfado, bigotes largos y expresivos. Estilo: character design sheet, clean lines, flat white background, no shadows on background.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-enfado" + }, + { + "id": "miko-001-emotion-neutral", + "type": "emotion", + "variant": "neutral", + "label": "Neutral", + "prompt": "Primer plano del rostro de un gato de pelaje gris azulado con manchas blancas, ojos grandes de color verde esmeralda en expresión neutral, bigotes largos y expresivos. Estilo: character design sheet, clean lines, flat white background, no shadows on background.", + "status": "generated", + "imageUrl": "/api/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral" + } + ], + "baseLocked": true +} \ No newline at end of file diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria.png new file mode 100644 index 0000000..3ed17b7 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-alegria.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-enfado.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-enfado.png new file mode 100644 index 0000000..ecefd6d Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-enfado.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-miedo.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-miedo.png new file mode 100644 index 0000000..fce16e8 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-miedo.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral.png new file mode 100644 index 0000000..3e06eaf Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-neutral.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa.png new file mode 100644 index 0000000..6d69968 Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-sorpresa.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-tristeza.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-tristeza.png new file mode 100644 index 0000000..e2c067a Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-emotion-tristeza.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back.png new file mode 100644 index 0000000..661489a Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-back.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front.png new file mode 100644 index 0000000..166644a Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-front.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side.png b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side.png new file mode 100644 index 0000000..1c7663a Binary files /dev/null and b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/personajes/miko-001/images/miko-001-tpose-side.png differ diff --git a/projects/coco-y-miko-los-guardianes-del-mundo-abierto/project.md b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/project.md new file mode 100644 index 0000000..6588cc1 --- /dev/null +++ b/projects/coco-y-miko-los-guardianes-del-mundo-abierto/project.md @@ -0,0 +1,10 @@ +--- +id: coco-miko-001 +name: Coco y Miko - Los Guardianes del Mundo Abierto +slug: coco-y-miko-los-guardianes-del-mundo-abierto +status: in_progress +currentStep: capitulos +createdAt: '2026-02-01T14:30:00.000Z' +updatedAt: '2026-02-08T00:29:30.123Z' +--- + diff --git a/projects/coco-y-miko/project.md b/projects/coco-y-miko/project.md new file mode 100644 index 0000000..41b75e4 --- /dev/null +++ b/projects/coco-y-miko/project.md @@ -0,0 +1,10 @@ +--- +id: afec3eaa-37a7-4b23-80ab-b148eb16e22f +name: Coco y Miko +slug: coco-y-miko +createdAt: '2026-02-01T12:12:04.501Z' +updatedAt: '2026-02-01T12:12:04.501Z' +status: draft +currentStep: idea_motriz +--- + diff --git a/projects/gota-ota/idea-motriz.md b/projects/gota-ota/idea-motriz.md new file mode 100644 index 0000000..b277751 --- /dev/null +++ b/projects/gota-ota/idea-motriz.md @@ -0,0 +1,64 @@ +--- +ideaMotrizCentral: >- + Una gota de agua vive aventuras junto a una hoja y una piedra mientras explora + el mundo. +formato: + capitulos: 12 + duracionMinutos: 15 +narrativa: >- + Estilo narrativo con diálogos amigables y narrador en tercera persona que guía + la historia. +expansion: >- + La serie puede expandirse a través de libros ilustrados, aplicaciones + interactivas sobre el ciclo del agua y productos educativos para niños. +valores: + - amistad + - respeto por la naturaleza + - curiosidad + - aprendizaje +personajesSecundarios: >- + Los personajes secundarios incluyen animales del bosque, insectos, y otros + elementos de la naturaleza que ayudan o presentan desafíos a los + protagonistas. +protagonistas: + - nombre: Gotti + rol: 'Protagonista, gota de agua aventurera' + utileria: Un pequeño paraguas hecho de pétalo + mecanica: Puede transformarse en diferentes formas de agua + - nombre: Hojas + rol: 'Amiga sabia de Gotti, hoja caduca' + utileria: Sombrero de bellota + mecanica: Puede volar con el viento y proporcionar sombra + - nombre: Chimbombin + rol: 'Amigo fuerte y terco, piedra' + utileria: Gafas de sol + mecanica: Puede rodar y causar pequeños temblores +antagonista: + nombre: Torbellino + descripcion: Un remolino que causa caos y desorden en la naturaleza. + representacionVisual: Un torbellino de viento con un rostro travieso y risa estruendosa. + mision: Busca desorganizar el balance natural y desafiar a Gotti y sus amigos. +estructuraGuion: + - numero: 1 + nombre: El descenso de Gotti + duracionMin: 3 + duracionMax: 5 + descripcion: >- + Gotti se separa de su nube madre y cae hacia la Tierra, donde conoce a + Hojas y Chimbombin. + - numero: 2 + nombre: El primer desafío + duracionMin: 4 + duracionMax: 6 + descripcion: >- + Los amigos enfrentan su primer desafío al cruzar un río con la ayuda de + sus habilidades. + - numero: 3 + nombre: Torbellino ataca + duracionMin: 4 + duracionMax: 6 + descripcion: >- + Torbellino aparece y trata de separar a los amigos, creando caos en el + bosque. +--- +Una gota de agua, llamada Gotti, cae desde su nube madre y desciende a la Tierra, donde entabla amistad con una hoja caduca llamada Hojas y una piedra llamada Chimbombin. Juntos, recorren diferentes paisajes, enfrentando desafíos naturales y aprendiendo sobre el ciclo de la vida. diff --git a/projects/gota-ota/personajes.md b/projects/gota-ota/personajes.md new file mode 100644 index 0000000..d8020bb --- /dev/null +++ b/projects/gota-ota/personajes.md @@ -0,0 +1,105 @@ +--- +personajes: + - id: 7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0 + nombre: Gotti + tipo: protagonista + especie: gota de agua + aparienciaFisica: >- + Transparente y reluciente, con un brillo azulado bajo la luz del sol. De + pequeña estatura, redondeada en forma, con un rostro expresivo y ojos + grandes y curiosos. + rolPrincipal: 'Protagonista, gota de agua aventurera' + personalidad: >- + Curioso, valiente y un poco travieso. Siempre dispuesto a aprender y + ayudar a sus amigos. + habilidadInnata: 'Puede cambiar de forma entre líquida, sólida y gaseosa.' + utileriaVisual: >- + Un pequeño paraguas hecho de pétalo, que usa para protegerse o como + accesorio de aventura. + mecanicaNarrativa: >- + Su capacidad de transformarse en diferentes estados del agua le permite + sortear obstáculos y explorar con libertad. + comunicacion: >- + Se expresa mediante suaves sonidos como el goteo y movimientos de burbuja, + además de expresiones faciales. + avanceHabilidad: >- + Con el tiempo, aprende a controlar su forma y tamaño, pudiendo dividirse + en pequeñas gotas para explorar más ampliamente. + - id: d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64 + nombre: Hojas + tipo: aliado + especie: hoja caduca + aparienciaFisica: >- + De un verde brillante con bordes dentados, con un tamaño que varía según + la estación. Sus nervaduras son visibles, dándole un aspecto de sabiduría + natural. + rolPrincipal: 'Amiga sabia de Gotti, hoja caduca' + personalidad: >- + Paciente, sabia y protectora. Sabe escuchar y ofrece consejos basados en + su experiencia. + habilidadInnata: >- + Puede volar con el viento, lo que le permite observar desde lo alto y + encontrar el mejor camino. + utileriaVisual: >- + Un sombrero de bellota que utiliza como símbolo de sabiduría y + experiencia. + mecanicaNarrativa: >- + Su capacidad de vuelo le permite explorar y encontrar rutas seguras para + sus amigos. + comunicacion: >- + Se comunica con susurros que producen sus movimientos en el aire y la + caída de sus hojas, además de un lenguaje corporal elegante. + avanceHabilidad: >- + Con el tiempo, aprende a manipular el viento para cambiar de dirección a + voluntad y proteger a sus amigos con su sombra. + - id: b2c9de3f-1d0b-4a51-ae3c-5f892c9c6f30 + nombre: Chimbombin + tipo: aliado + especie: piedra + aparienciaFisica: >- + De tamaño mediano, con una superficie lisa y redondeada. Tiene un color + grisáceo con vetas marrones que le dan un aspecto robusto y confiable. + rolPrincipal: 'Amigo fuerte y terco, piedra' + personalidad: >- + Firme, leal y a veces terco. No se deja impresionar fácilmente y siempre + está dispuesto a proteger a sus amigos. + habilidadInnata: >- + Puede rodar para desplazarse y causar pequeños temblores para abrir + caminos. + utileriaVisual: Gafas de sol que usa para parecer más relajado y despreocupado. + mecanicaNarrativa: >- + Utiliza su fuerza para mover obstáculos y proteger a sus amigos de + amenazas. + comunicacion: >- + Se expresa mediante el sonido de las rocas al chocar y movimientos + bruscos, con un lenguaje corporal que muestra su disposición. + avanceHabilidad: >- + Aprende a controlar mejor su fuerza y movimiento, permitiendo movimientos + más precisos y controlados para proteger a sus amigos. + - id: d1f2b6e8-4c3e-4cb1-aa54-3735b0e6f00e + nombre: Torbellino + tipo: antagonista + especie: remolino de viento + aparienciaFisica: >- + Un torbellino de viento en constante movimiento, con un rostro travieso + formado por nubes en remolino y una risa estruendosa que resuena en el + aire. + rolPrincipal: Antagonista que causa caos y desorden en la naturaleza. + personalidad: >- + Travieso, impredecible y un poco malicioso. Disfruta creando caos y + desafiando el orden natural. + habilidadInnata: >- + Puede crear fuertes vientos para desorganizar y separar elementos de la + naturaleza. + utileriaVisual: 'No lleva objetos, pero su ritmo y sonidos son característicos.' + mecanicaNarrativa: >- + Crea desafíos para Gotti y sus amigos, poniendo a prueba su amistad y + habilidades. + comunicacion: >- + Se comunica mediante fuertes ráfagas de viento y su risa resonante que se + escucha a la distancia. + avanceHabilidad: >- + Con el tiempo, aprende a crear ilusiones de viento para confundir a sus + oponentes. +--- + diff --git a/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/assets.json b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/assets.json new file mode 100644 index 0000000..1819a81 --- /dev/null +++ b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/assets.json @@ -0,0 +1,87 @@ +{ + "assets": [ + { + "id": "7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-front", + "type": "tpose", + "variant": "front", + "label": "T-Pose Frontal", + "prompt": "Character design sheet of Gotti, a transparent and relucent water droplet with a bluish shine under sunlight, small stature, round shape, and expressive face with large curious eyes. Gotti is in a full frontal T-pose with arms extended horizontally, holding a small umbrella made of a petal. Clean lines, flat white background, no shadows on background.", + "status": "generated", + "isBase": true, + "imageUrl": "/api/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-front" + }, + { + "id": "7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-side", + "type": "tpose", + "variant": "side", + "label": "T-Pose Lateral", + "prompt": "Character design sheet of Gotti, a transparent and relucent water droplet with a bluish shine under sunlight, small stature, round shape, and expressive face with large curious eyes. Gotti is in a full side T-pose, profile facing right, with arms extended horizontally. Holding a small umbrella made of a petal. Clean lines, flat white background, no shadows on background.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-side" + }, + { + "id": "7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-back", + "type": "tpose", + "variant": "back", + "label": "T-Pose Trasera", + "prompt": "Character design sheet of Gotti, a transparent and relucent water droplet with a bluish shine under sunlight, small stature, round shape, and expressive face with large curious eyes. Gotti is in a full back T-pose with arms extended horizontally, showing the back view of the small umbrella made of a petal. Clean lines, flat white background, no shadows on background.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-back" + }, + { + "id": "7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-alegria", + "type": "emotion", + "variant": "alegria", + "label": "Alegría", + "prompt": "Close-up of Gotti's face showing a joyful expression. Transparent and relucent water droplet with a bluish shine, round shape, large curious eyes. Holding a small umbrella made of a petal. Character design sheet style, clean lines, flat white background.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-alegria" + }, + { + "id": "7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-tristeza", + "type": "emotion", + "variant": "tristeza", + "label": "Tristeza", + "prompt": "Close-up of Gotti's face showing a sad expression. Transparent and relucent water droplet with a bluish shine, round shape, large curious eyes. Holding a small umbrella made of a petal. Character design sheet style, clean lines, flat white background.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-tristeza" + }, + { + "id": "7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-sorpresa", + "type": "emotion", + "variant": "sorpresa", + "label": "Sorpresa", + "prompt": "Close-up of Gotti's face showing a surprised expression. Transparent and relucent water droplet with a bluish shine, round shape, large curious eyes. Holding a small umbrella made of a petal. Character design sheet style, clean lines, flat white background.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-sorpresa" + }, + { + "id": "7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-miedo", + "type": "emotion", + "variant": "miedo", + "label": "Miedo", + "prompt": "Close-up of Gotti's face showing a fearful expression. Transparent and relucent water droplet with a bluish shine, round shape, large curious eyes. Holding a small umbrella made of a petal. Character design sheet style, clean lines, flat white background.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-miedo" + }, + { + "id": "7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-enfado", + "type": "emotion", + "variant": "enfado", + "label": "Enfado", + "prompt": "Close-up of Gotti's face showing an angry expression. Transparent and relucent water droplet with a bluish shine, round shape, large curious eyes. Holding a small umbrella made of a petal. Character design sheet style, clean lines, flat white background.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-enfado" + }, + { + "id": "7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-neutral", + "type": "emotion", + "variant": "neutral", + "label": "Neutral", + "prompt": "Close-up of Gotti's face showing a neutral expression. Transparent and relucent water droplet with a bluish shine, round shape, large curious eyes. Holding a small umbrella made of a petal. Character design sheet style, clean lines, flat white background.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-neutral" + } + ], + "baseLocked": true +} \ No newline at end of file diff --git a/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-alegria.png b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-alegria.png new file mode 100644 index 0000000..f43ada9 Binary files /dev/null and b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-alegria.png differ diff --git a/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-enfado.png b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-enfado.png new file mode 100644 index 0000000..86c040a Binary files /dev/null and b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-enfado.png differ diff --git a/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-miedo.png b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-miedo.png new file mode 100644 index 0000000..9acdfb9 Binary files /dev/null and b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-miedo.png differ diff --git a/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-neutral.png b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-neutral.png new file mode 100644 index 0000000..e1a6288 Binary files /dev/null and b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-neutral.png differ diff --git a/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-sorpresa.png b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-sorpresa.png new file mode 100644 index 0000000..bc716b0 Binary files /dev/null and b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-sorpresa.png differ diff --git a/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-tristeza.png b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-tristeza.png new file mode 100644 index 0000000..c92a357 Binary files /dev/null and b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-emotion-tristeza.png differ diff --git a/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-back.png b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-back.png new file mode 100644 index 0000000..bcb3320 Binary files /dev/null and b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-back.png differ diff --git a/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-front.png b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-front.png new file mode 100644 index 0000000..f37e928 Binary files /dev/null and b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-front.png differ diff --git a/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-side.png b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-side.png new file mode 100644 index 0000000..5ba2a9b Binary files /dev/null and b/projects/gota-ota/personajes/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0/images/7e5d4f73-1e4e-4f7e-9359-4a13b851c9f0-tpose-side.png differ diff --git a/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/assets.json b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/assets.json new file mode 100644 index 0000000..6de2b75 --- /dev/null +++ b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/assets.json @@ -0,0 +1,87 @@ +{ + "assets": [ + { + "id": "d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-front", + "type": "tpose", + "variant": "front", + "label": "T-Pose Frontal", + "prompt": "A character design sheet featuring Hojas, a deciduous leaf character. The character is shown in a full-body front view, in a T-pose with arms extended horizontally, exhibiting a bright green color with serrated edges and visible veins. Hojas wears an acorn hat symbolizing wisdom and experience. The background is a clean, flat white with no shadows.", + "status": "generated", + "isBase": true, + "imageUrl": "/api/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-front" + }, + { + "id": "d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-side", + "type": "tpose", + "variant": "side", + "label": "T-Pose Lateral", + "prompt": "A character design sheet showing Hojas, a deciduous leaf character, in a full-body side view T-pose from the right side. The character displays a bright green color with serrated edges and visible veins. An acorn hat rests atop Hojas' form, representing wisdom. The background is a plain white with no shadows.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-side" + }, + { + "id": "d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-back", + "type": "tpose", + "variant": "back", + "label": "T-Pose Trasera", + "prompt": "A character design sheet of Hojas, a deciduous leaf character, in a full-body back view T-pose. The character is depicted with a bright green color, serrated edges, and visible veins. Hojas wears an acorn hat as a symbol of wisdom and experience. The background is a smooth, flat white with no shadows.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-back" + }, + { + "id": "d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-alegria", + "type": "emotion", + "variant": "alegria", + "label": "Alegría", + "prompt": "A character design sheet focusing on the joyful expression of Hojas, a deciduous leaf character. The close-up shows a bright green color with serrated edges and visible veins. Hojas wears an acorn hat symbolizing wisdom. The emotion is happiness, with a smile. The background is a plain white.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-alegria" + }, + { + "id": "d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-tristeza", + "type": "emotion", + "variant": "tristeza", + "label": "Tristeza", + "prompt": "A character design sheet highlighting the sad expression of Hojas, a deciduous leaf character. The close-up features a bright green color with serrated edges and visible veins. Hojas wears an acorn hat representing wisdom. The emotion is sadness, with a frown. The background is a flat white.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-tristeza" + }, + { + "id": "d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-sorpresa", + "type": "emotion", + "variant": "sorpresa", + "label": "Sorpresa", + "prompt": "A character design sheet showcasing the surprised expression of Hojas, a deciduous leaf character. The close-up reveals a bright green color with serrated edges and visible veins. Hojas wears an acorn hat, symbolizing wisdom. The emotion is surprise, with wide eyes. The background is a simple white.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-sorpresa" + }, + { + "id": "d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-miedo", + "type": "emotion", + "variant": "miedo", + "label": "Miedo", + "prompt": "A character design sheet depicting the fearful expression of Hojas, a deciduous leaf character. The close-up portrays a bright green color with serrated edges and visible veins. Hojas wears an acorn hat that symbolizes wisdom. The emotion is fear, with a concerned look. The background is a clean white.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-miedo" + }, + { + "id": "d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-enfado", + "type": "emotion", + "variant": "enfado", + "label": "Enfado", + "prompt": "A character design sheet featuring the angry expression of Hojas, a deciduous leaf character. The close-up displays a bright green color with serrated edges and visible veins. Hojas wears an acorn hat symbolizing wisdom. The emotion is anger, with a furrowed brow. The background is a plain white.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-enfado" + }, + { + "id": "d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-neutral", + "type": "emotion", + "variant": "neutral", + "label": "Neutral", + "prompt": "A character design sheet showing the neutral expression of Hojas, a deciduous leaf character. The close-up highlights a bright green color with serrated edges and visible veins. Hojas wears an acorn hat, a symbol of wisdom. The emotion is neutral, with a relaxed face. The background is a flat white.", + "status": "generated", + "imageUrl": "/api/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-neutral" + } + ], + "baseLocked": true +} \ No newline at end of file diff --git a/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-alegria.png b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-alegria.png new file mode 100644 index 0000000..28bca9d Binary files /dev/null and b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-alegria.png differ diff --git a/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-enfado.png b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-enfado.png new file mode 100644 index 0000000..8fcc2e3 Binary files /dev/null and b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-enfado.png differ diff --git a/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-miedo.png b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-miedo.png new file mode 100644 index 0000000..5480618 Binary files /dev/null and b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-miedo.png differ diff --git a/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-neutral.png b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-neutral.png new file mode 100644 index 0000000..87cecfb Binary files /dev/null and b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-neutral.png differ diff --git a/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-sorpresa.png b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-sorpresa.png new file mode 100644 index 0000000..e70ef82 Binary files /dev/null and b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-sorpresa.png differ diff --git a/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-tristeza.png b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-tristeza.png new file mode 100644 index 0000000..e71421a Binary files /dev/null and b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-emotion-tristeza.png differ diff --git a/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-back.png b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-back.png new file mode 100644 index 0000000..ad025a6 Binary files /dev/null and b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-back.png differ diff --git a/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-front.png b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-front.png new file mode 100644 index 0000000..b03e984 Binary files /dev/null and b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-front.png differ diff --git a/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-side.png b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-side.png new file mode 100644 index 0000000..d91f8e4 Binary files /dev/null and b/projects/gota-ota/personajes/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64/images/d4f6c7a1-3cde-4b87-8e4b-832b2a9f9d64-tpose-side.png differ diff --git a/projects/gota-ota/project.md b/projects/gota-ota/project.md new file mode 100644 index 0000000..c6a61d7 --- /dev/null +++ b/projects/gota-ota/project.md @@ -0,0 +1,10 @@ +--- +id: 12c72f99-317a-4050-b481-917ac8ef5711 +name: Gota Ota +slug: gota-ota +createdAt: '2026-02-07T18:54:25.048Z' +updatedAt: '2026-02-07T18:59:18.830Z' +status: draft +currentStep: personajes +--- + diff --git a/src/app/api/projects/[slug]/capitulos/[numero]/escaleta/route.ts b/src/app/api/projects/[slug]/capitulos/[numero]/escaleta/route.ts new file mode 100644 index 0000000..b60b0a1 --- /dev/null +++ b/src/app/api/projects/[slug]/capitulos/[numero]/escaleta/route.ts @@ -0,0 +1,267 @@ +import { NextRequest, NextResponse } from 'next/server'; +import fs from 'fs/promises'; +import path from 'path'; +import matter from 'gray-matter'; +import { getIdeaMotriz, getPersonajes } from '@/lib/file-service'; +import type { Personaje, PersonajeEnPlano, PlanoEscaleta, PreEscaleta, EmotionVariant } from '@/types/project'; + +const PROJECTS_DIR = path.join(process.cwd(), 'projects'); + +const VALID_EMOTIONS: EmotionVariant[] = ['alegria', 'tristeza', 'sorpresa', 'miedo', 'enfado', 'neutral']; + +async function findCapDir(capitulosDir: string, numero: string) { + const dirs = await fs.readdir(capitulosDir, { withFileTypes: true }); + return dirs.find(d => + d.isDirectory() && d.name.startsWith(numero.padStart(2, '0')) + ); +} + +/** Validate and fix personajesDetalle IDs against real personajes list */ +function normalizePlanos(planos: any[], personajes: Personaje[]): PlanoEscaleta[] { + const byId = new Map(personajes.map(p => [p.id, p])); + const byName = new Map(personajes.map(p => [p.nombre.toLowerCase(), p])); + + return planos.map((plano) => { + let detalle: PersonajeEnPlano[] = []; + + if (Array.isArray(plano.personajesDetalle)) { + detalle = plano.personajesDetalle.map((pd: any) => { + // Try to resolve the personaje by ID first, then by name + let persona = byId.get(pd.personajeId) || byName.get((pd.nombre || '').toLowerCase()); + if (!persona) return null; + const emocion = VALID_EMOTIONS.includes(pd.emocion) ? pd.emocion : 'neutral'; + return { personajeId: persona.id, nombre: persona.nombre, emocion } as PersonajeEnPlano; + }).filter(Boolean) as PersonajeEnPlano[]; + } + + // Backfill personajesEnPlano from personajesDetalle + const personajesEnPlano = detalle.length > 0 + ? detalle.map(d => d.nombre) + : plano.personajesEnPlano || []; + + return { ...plano, personajesDetalle: detalle, personajesEnPlano }; + }); +} + +/** Migrate old planos that only have personajesEnPlano (string[]) but no personajesDetalle */ +function migrateLegacyPlanos(planos: any[], personajes: Personaje[]): PlanoEscaleta[] { + const byName = new Map(personajes.map(p => [p.nombre.toLowerCase(), p])); + + return planos.map((plano) => { + if (Array.isArray(plano.personajesDetalle) && plano.personajesDetalle.length > 0) { + return plano; // already has structured data + } + if (!Array.isArray(plano.personajesEnPlano) || plano.personajesEnPlano.length === 0) { + return { ...plano, personajesDetalle: [] }; + } + const detalle: PersonajeEnPlano[] = plano.personajesEnPlano + .map((name: string) => { + const persona = byName.get(name.toLowerCase()); + if (!persona) return null; + return { personajeId: persona.id, nombre: persona.nombre, emocion: 'neutral' as EmotionVariant }; + }) + .filter(Boolean) as PersonajeEnPlano[]; + return { ...plano, personajesDetalle: detalle }; + }); +} + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json(null); + } + + const capPath = path.join(capitulosDir, capDir.name); + const escaletaPath = path.join(capPath, 'escaleta.md'); + const planosPath = path.join(capPath, 'escaleta-planos.json'); + + try { + const fileContent = await fs.readFile(escaletaPath, 'utf-8'); + const { data, content } = matter(fileContent); + let planos: any[] = []; + try { + const planosJson = await fs.readFile(planosPath, 'utf-8'); + planos = JSON.parse(planosJson); + } catch { /* no planos file yet */ } + + // Migrate legacy planos: add personajesDetalle from personajesEnPlano if missing + if (planos.length > 0 && planos.some((p: any) => !p.personajesDetalle || p.personajesDetalle.length === 0)) { + const personajes = await getPersonajes(slug); + planos = migrateLegacyPlanos(planos, personajes); + // Persist migration so it only runs once + await fs.writeFile(planosPath, JSON.stringify(planos, null, 2)); + } + + return NextResponse.json({ ...data, contenidoMarkdown: content, planos }); + } catch { + return NextResponse.json(null); + } + } catch (error: any) { + console.error('Error fetching escaleta:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const { action, guion, contenidoMarkdown } = await request.json(); + + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json({ error: 'Capítulo no encontrado' }, { status: 404 }); + } + + const capPath = path.join(capitulosDir, capDir.name); + const escaletaPath = path.join(capPath, 'escaleta.md'); + const planosPath = path.join(capPath, 'escaleta-planos.json'); + + if (action === 'generate') { + if (!guion) { + return NextResponse.json({ error: 'Se necesita el guión conductor para generar la escaleta' }, { status: 400 }); + } + const ideaMotriz = await getIdeaMotriz(slug); + if (!ideaMotriz) { + return NextResponse.json({ error: 'Primero debes crear la Idea Motriz' }, { status: 400 }); + } + const personajes = await getPersonajes(slug); + + // Load pre-escaleta (required — defines exact plano counts per segment) + let preEscaleta: PreEscaleta | null = null; + try { + const preEscaletaJson = await fs.readFile(path.join(capPath, 'pre-escaleta.json'), 'utf-8'); + preEscaleta = JSON.parse(preEscaletaJson); + } catch { /* no pre-escaleta */ } + + if (!preEscaleta) { + return NextResponse.json({ error: 'Primero genera la pre-escaleta para definir la estructura de planos.' }, { status: 400 }); + } + + const { generateEscaleta } = await import('@/lib/llm-service'); + const escaleta = await generateEscaleta(guion, ideaMotriz, personajes, preEscaleta); + + const { contenidoMarkdown: _ignore, planos: rawPlanos, ...frontmatterData } = escaleta as any; + // Normalize personajesDetalle: validate IDs and backfill personajesEnPlano + const planos = normalizePlanos(rawPlanos || [], personajes); + const mdContent = generateEscaletaMarkdown({ ...frontmatterData, planos }); + const fileContent = matter.stringify(mdContent, frontmatterData); + await fs.writeFile(escaletaPath, fileContent); + // Save planos as structured JSON for downstream use (prompts generation) + await fs.writeFile(planosPath, JSON.stringify(planos, null, 2)); + + return NextResponse.json({ ...frontmatterData, contenidoMarkdown: mdContent, planos }); + } + + if (action === 'generate-stream') { + if (!guion) { + return NextResponse.json({ error: 'Se necesita el guión conductor para generar la escaleta' }, { status: 400 }); + } + const ideaMotriz = await getIdeaMotriz(slug); + if (!ideaMotriz) { + return NextResponse.json({ error: 'Primero debes crear la Idea Motriz' }, { status: 400 }); + } + const personajes = await getPersonajes(slug); + + let preEscaletaData: import('@/types/project').PreEscaleta | null = null; + try { + const preEscaletaJson = await fs.readFile(path.join(capPath, 'pre-escaleta.json'), 'utf-8'); + preEscaletaData = JSON.parse(preEscaletaJson); + } catch { /* no pre-escaleta */ } + + if (!preEscaletaData) { + return NextResponse.json({ error: 'Primero genera la pre-escaleta para definir la estructura de planos.' }, { status: 400 }); + } + + const preEscaletaFinal = preEscaletaData; + const encoder = new TextEncoder(); + const stream = new ReadableStream({ + async start(controller) { + const send = (data: any) => { + try { + controller.enqueue(encoder.encode(`data: ${JSON.stringify(data)}\n\n`)); + } catch { /* client disconnected */ } + }; + + try { + const { generateEscaleta } = await import('@/lib/llm-service'); + const escaletaResult = await generateEscaleta(guion, ideaMotriz, personajes, preEscaletaFinal, + (current, total, label) => { + send({ type: 'progress', current, total, label }); + } + ); + + const { contenidoMarkdown: _ignore, planos: rawPlanos, ...frontmatterData } = escaletaResult as any; + const planosSaved = normalizePlanos(rawPlanos || [], personajes); + const mdContent = generateEscaletaMarkdown({ ...frontmatterData, planos: planosSaved }); + const fileContent = matter.stringify(mdContent, frontmatterData); + await fs.writeFile(escaletaPath, fileContent); + await fs.writeFile(planosPath, JSON.stringify(planosSaved, null, 2)); + + send({ type: 'done', result: { ...frontmatterData, contenidoMarkdown: mdContent, planos: planosSaved } }); + } catch (error: any) { + send({ type: 'error', message: error.message }); + } + + controller.close(); + } + }); + + return new Response(stream, { + headers: { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'X-Accel-Buffering': 'no', + }, + }); + } + + if (action === 'save' && contenidoMarkdown !== undefined) { + let frontmatterData: Record = {}; + try { + const existing = await fs.readFile(escaletaPath, 'utf-8'); + const { data } = matter(existing); + frontmatterData = data; + } catch { /* no existing file */ } + + const fileContent = matter.stringify(contenidoMarkdown, frontmatterData); + await fs.writeFile(escaletaPath, fileContent); + return NextResponse.json({ success: true }); + } + + return NextResponse.json({ error: 'Acción inválida' }, { status: 400 }); + } catch (error: any) { + console.error('Error en escaleta:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +function generateEscaletaMarkdown(escaleta: any): string { + let md = `# Escaleta: ${escaleta.capitulo}\n\n`; + md += `**Virtud: ${escaleta.virtudGanada}** | Duración total: ${escaleta.duracionTotalSegundos}s\n\n`; + md += `| # | Plano | Segmento | Tiempo | Personajes | Acción | Sonido |\n`; + md += `|---|-------|----------|--------|------------|--------|--------|\n`; + + if (escaleta.planos) { + for (let i = 0; i < escaleta.planos.length; i++) { + const p = escaleta.planos[i]; + const personajesStr = Array.isArray(p.personajesDetalle) && p.personajesDetalle.length > 0 + ? p.personajesDetalle.map((pd: PersonajeEnPlano) => `${pd.nombre}(${pd.emocion})`).join(', ') + : '-'; + md += `| ${i + 1} | ${p.numeroPlano} | ${p.segmentoGuion} | ${p.tiempoSegundos}s | ${personajesStr} | ${p.accionDescripcion} | ${p.indicacionesSonido} |\n`; + } + } + + return md; +} diff --git a/src/app/api/projects/[slug]/capitulos/[numero]/fondos/[fondoId]/route.ts b/src/app/api/projects/[slug]/capitulos/[numero]/fondos/[fondoId]/route.ts new file mode 100644 index 0000000..481a67a --- /dev/null +++ b/src/app/api/projects/[slug]/capitulos/[numero]/fondos/[fondoId]/route.ts @@ -0,0 +1,43 @@ +import { NextRequest, NextResponse } from 'next/server'; +import fs from 'fs/promises'; +import path from 'path'; + +const PROJECTS_DIR = path.join(process.cwd(), 'projects'); + +async function findCapDir(capitulosDir: string, numero: string) { + const dirs = await fs.readdir(capitulosDir, { withFileTypes: true }); + return dirs.find(d => + d.isDirectory() && d.name.startsWith(numero.padStart(2, '0')) + ); +} + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string; fondoId: string }> } +) { + try { + const { slug, numero, fondoId } = await params; + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json({ error: 'Capítulo no encontrado' }, { status: 404 }); + } + + const imagePath = path.join(capitulosDir, capDir.name, 'fondos', `${fondoId}.png`); + + try { + const imageBuffer = await fs.readFile(imagePath); + return new NextResponse(new Uint8Array(imageBuffer), { + headers: { + 'Content-Type': 'image/png', + 'Cache-Control': 'no-cache', + }, + }); + } catch { + return NextResponse.json({ error: 'Imagen no encontrada' }, { status: 404 }); + } + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/capitulos/[numero]/fondos/route.ts b/src/app/api/projects/[slug]/capitulos/[numero]/fondos/route.ts new file mode 100644 index 0000000..e08185c --- /dev/null +++ b/src/app/api/projects/[slug]/capitulos/[numero]/fondos/route.ts @@ -0,0 +1,267 @@ +import { NextRequest, NextResponse } from 'next/server'; +import fs from 'fs/promises'; +import path from 'path'; +import matter from 'gray-matter'; +import { generateImage } from '@/lib/image-service'; +import { getIdeaMotriz } from '@/lib/file-service'; +import type { FondoReferencia, ActoGuion } from '@/types/project'; + +const PROJECTS_DIR = path.join(process.cwd(), 'projects'); +const DEFAULT_ESTILO = 'Pixar-style 3D animation, vibrant colors, expressive characters'; + +async function findCapDir(capitulosDir: string, numero: string) { + const dirs = await fs.readdir(capitulosDir, { withFileTypes: true }); + return dirs.find(d => + d.isDirectory() && d.name.startsWith(numero.padStart(2, '0')) + ); +} + +/** Extract unique escenarios from escaleta planos + guion actos */ +async function extractFondos(capPath: string): Promise { + // Read escaleta planos + let planos: any[] = []; + try { + planos = JSON.parse(await fs.readFile(path.join(capPath, 'escaleta-planos.json'), 'utf-8')); + } catch { return []; } + + // Read guion actos for disenoFondo / accionVisualClave + let actos: ActoGuion[] = []; + try { + actos = JSON.parse(await fs.readFile(path.join(capPath, 'guion-actos.json'), 'utf-8')); + } catch { /* ok */ } + + // Build segment lookup: segmentoId → { nombre, disenoFondo, accionVisualClave } + const segmentoMap = new Map(); + for (const acto of actos) { + for (const seg of acto.segmentos) { + segmentoMap.set(seg.id, { nombre: seg.nombre, disenoFondo: (seg as any).disenoFondo || '', accionVisualClave: seg.accionVisualClave }); + } + } + + // Get unique segments from planos (segmentoGuion = "I.1 Nombre del Segmento") + const seen = new Set(); + const fondos: FondoReferencia[] = []; + + for (const plano of planos) { + const segGuion: string = plano.segmentoGuion || ''; + // Extract segment ID (e.g. "I.1" from "I.1 El Silencio del Bosque") + const segId = segGuion.split(' ')[0]; + if (!segId || seen.has(segId)) continue; + seen.add(segId); + + const segInfo = segmentoMap.get(segId); + const nombre = segInfo?.nombre || segGuion.replace(segId, '').trim() || segId; + // Prefer disenoFondo (dedicated background description), fall back to accionVisualClave + const descripcion = segInfo?.disenoFondo || segInfo?.accionVisualClave || ''; + + fondos.push({ + id: `fondo-${segId}`, + segmentoId: segId, + nombre, + descripcion, + promptGeneracion: '', + }); + } + + return fondos; +} + +/** Load or auto-generate fondos.json */ +async function loadFondos(capPath: string): Promise { + const fondosPath = path.join(capPath, 'fondos.json'); + try { + return JSON.parse(await fs.readFile(fondosPath, 'utf-8')); + } catch { /* not yet */ } + + // Auto-generate from escaleta + const fondos = await extractFondos(capPath); + if (fondos.length > 0) { + await fs.writeFile(fondosPath, JSON.stringify(fondos, null, 2)); + } + return fondos; +} + +async function saveFondos(capPath: string, fondos: FondoReferencia[]): Promise { + await fs.writeFile(path.join(capPath, 'fondos.json'), JSON.stringify(fondos, null, 2)); +} + +/** Check if fondo image exists on disk */ +async function enrichWithImageStatus( + fondos: FondoReferencia[], + slug: string, + capDirName: string +): Promise { + const fondosDir = path.join(PROJECTS_DIR, slug, 'capitulos', capDirName, 'fondos'); + return Promise.all(fondos.map(async (fondo) => { + try { + await fs.access(path.join(fondosDir, `${fondo.id}.png`)); + return { + ...fondo, + imagenUrl: `/api/projects/${slug}/capitulos/${capDirName}/fondos/${fondo.id}`, + }; + } catch { + return { ...fondo, imagenUrl: undefined }; + } + })); +} + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json(null); + } + + const capPath = path.join(capitulosDir, capDir.name); + const fondos = await loadFondos(capPath); + const enriched = await enrichWithImageStatus(fondos, slug, capDir.name); + const generated = enriched.filter(f => f.imagenUrl).length; + + return NextResponse.json({ fondos: enriched, total: enriched.length, generated }); + } catch (error: any) { + console.error('Error fetching fondos:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const { action, fondoId, descripcion, promptGeneracion } = await request.json(); + + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json({ error: 'Capítulo no encontrado' }, { status: 404 }); + } + + const capPath = path.join(capitulosDir, capDir.name); + let fondos = await loadFondos(capPath); + + if (action === 'generate') { + if (!fondoId) { + return NextResponse.json({ error: 'Se necesita fondoId' }, { status: 400 }); + } + + const fondoIdx = fondos.findIndex(f => f.id === fondoId); + if (fondoIdx === -1) { + return NextResponse.json({ error: 'Fondo no encontrado' }, { status: 404 }); + } + + const fondo = fondos[fondoIdx]; + const ideaMotriz = await getIdeaMotriz(slug); + const estilo = ideaMotriz?.estiloVisual || DEFAULT_ESTILO; + + // Always compose from current descripcion + estilo (promptGeneracion is only a user override) + const prompt = `${estilo}. Empty scene without characters: ${fondo.descripcion}. Panoramic view of the environment, lighting, and atmosphere of the place. No characters, no text, no UI elements.`; + + const imageBuffer = await generateImage(prompt, { aspectRatio: '16:9' }); + + // Save image + const fondosDir = path.join(capPath, 'fondos'); + await fs.mkdir(fondosDir, { recursive: true }); + await fs.writeFile(path.join(fondosDir, `${fondoId}.png`), imageBuffer); + + // Update fondos.json + fondos[fondoIdx] = { + ...fondo, + promptGeneracion: prompt, + imagenUrl: `/api/projects/${slug}/capitulos/${capDir.name}/fondos/${fondoId}`, + }; + await saveFondos(capPath, fondos); + + return NextResponse.json({ fondo: fondos[fondoIdx] }); + } + + if (action === 'generate-all') { + const ideaMotriz = await getIdeaMotriz(slug); + const estilo = ideaMotriz?.estiloVisual || DEFAULT_ESTILO; + const fondosDir = path.join(capPath, 'fondos'); + await fs.mkdir(fondosDir, { recursive: true }); + + const results: { id: string; success: boolean; error?: string }[] = []; + + for (let i = 0; i < fondos.length; i++) { + const fondo = fondos[i]; + + try { + // Always compose from current descripcion + estilo + const prompt = `${estilo}. Empty scene without characters: ${fondo.descripcion}. Panoramic view of the environment, lighting, and atmosphere of the place. No characters, no text, no UI elements.`; + + const imageBuffer = await generateImage(prompt, { aspectRatio: '16:9' }); + await fs.writeFile(path.join(fondosDir, `${fondo.id}.png`), imageBuffer); + + fondos[i] = { + ...fondo, + promptGeneracion: prompt, + imagenUrl: `/api/projects/${slug}/capitulos/${capDir.name}/fondos/${fondo.id}`, + }; + results.push({ id: fondo.id, success: true }); + } catch (err: any) { + console.error(`Error generando fondo ${fondo.id}:`, err); + results.push({ id: fondo.id, success: false, error: err.message }); + } + } + + await saveFondos(capPath, fondos); + const enriched = await enrichWithImageStatus(fondos, slug, capDir.name); + const generated = enriched.filter(f => f.imagenUrl).length; + + return NextResponse.json({ fondos: enriched, total: enriched.length, generated, results }); + } + + if (action === 'refresh') { + // Re-extract fondos from guión, merging with existing data + const freshFondos = await extractFondos(capPath); + const existingMap = new Map(fondos.map(f => [f.id, f])); + + const merged = freshFondos.map(fresh => { + const existing = existingMap.get(fresh.id); + if (!existing) return fresh; + // Update descripcion from guión, clear promptGeneracion so it recomposes on next generate + return { ...fresh, promptGeneracion: '' }; + }); + + await saveFondos(capPath, merged); + const enriched = await enrichWithImageStatus(merged, slug, capDir.name); + const generated = enriched.filter(f => f.imagenUrl).length; + + return NextResponse.json({ fondos: enriched, total: enriched.length, generated }); + } + + if (action === 'update-description') { + if (!fondoId) { + return NextResponse.json({ error: 'Se necesita fondoId' }, { status: 400 }); + } + + const fondoIdx = fondos.findIndex(f => f.id === fondoId); + if (fondoIdx === -1) { + return NextResponse.json({ error: 'Fondo no encontrado' }, { status: 404 }); + } + + fondos[fondoIdx] = { + ...fondos[fondoIdx], + ...(descripcion !== undefined && { descripcion }), + ...(promptGeneracion !== undefined && { promptGeneracion }), + }; + await saveFondos(capPath, fondos); + + return NextResponse.json({ fondo: fondos[fondoIdx] }); + } + + return NextResponse.json({ error: 'Acción inválida' }, { status: 400 }); + } catch (error: any) { + console.error('Error en fondos:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/capitulos/[numero]/guion/route.ts b/src/app/api/projects/[slug]/capitulos/[numero]/guion/route.ts new file mode 100644 index 0000000..929bb58 --- /dev/null +++ b/src/app/api/projects/[slug]/capitulos/[numero]/guion/route.ts @@ -0,0 +1,219 @@ +import { NextRequest, NextResponse } from 'next/server'; +import fs from 'fs/promises'; +import path from 'path'; +import matter from 'gray-matter'; +import { getIdeaMotriz, getPersonajes } from '@/lib/file-service'; + +const PROJECTS_DIR = path.join(process.cwd(), 'projects'); + +async function findCapDir(capitulosDir: string, numero: string) { + const dirs = await fs.readdir(capitulosDir, { withFileTypes: true }); + return dirs.find(d => + d.isDirectory() && d.name.startsWith(numero.padStart(2, '0')) + ); +} + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json(null); + } + + const guionPath = path.join(capitulosDir, capDir.name, 'guion-conductor.md'); + + try { + const fileContent = await fs.readFile(guionPath, 'utf-8'); + const { data, content } = matter(fileContent); + + // Load structured actos from JSON (saved alongside markdown) + let actos; + try { + const actosPath = path.join(capitulosDir, capDir.name, 'guion-actos.json'); + const actosJson = await fs.readFile(actosPath, 'utf-8'); + actos = JSON.parse(actosJson); + } catch { /* no actos file yet — old guion */ } + + return NextResponse.json({ ...data, actos, contenidoMarkdown: content }); + } catch { + return NextResponse.json(null); + } + } catch (error: any) { + console.error('Error fetching guion:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const body = await request.json(); + const { action } = body; + + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json({ error: 'Capítulo no encontrado' }, { status: 404 }); + } + + const guionPath = path.join(capitulosDir, capDir.name, 'guion-conductor.md'); + + if (action === 'generate') { + const ideaMotriz = await getIdeaMotriz(slug); + if (!ideaMotriz) { + return NextResponse.json({ error: 'Primero debes crear la Idea Motriz' }, { status: 400 }); + } + const personajes = await getPersonajes(slug); + if (personajes.length === 0) { + return NextResponse.json({ error: 'Primero debes crear los personajes' }, { status: 400 }); + } + + const { generateGuionConductor } = await import('@/lib/llm-service'); + const guion = await generateGuionConductor(ideaMotriz, personajes, parseInt(numero)); + + // Separate actos (too complex for frontmatter) and save as JSON + const { contenidoMarkdown: _ignore, actos, ...frontmatterData } = guion as any; + const mdContent = generateGuionMarkdown(guion); + const fileContent = matter.stringify(mdContent, frontmatterData); + await fs.writeFile(guionPath, fileContent); + + // Save actos as structured JSON for downstream escaleta generation + if (actos) { + const actosPath = path.join(capitulosDir, capDir.name, 'guion-actos.json'); + await fs.writeFile(actosPath, JSON.stringify(actos, null, 2)); + } + + // Return with actos included so frontend can pass them to escaleta generation + return NextResponse.json({ ...frontmatterData, actos, contenidoMarkdown: mdContent }); + } + + if (action === 'regenerate-actos') { + // Read current guión metadata from disk + let currentGuion: Record = {}; + try { + const existing = await fs.readFile(guionPath, 'utf-8'); + const { data } = matter(existing); + currentGuion = data; + } catch { + return NextResponse.json({ error: 'No hay guión existente para regenerar actos' }, { status: 400 }); + } + + const ideaMotriz = await getIdeaMotriz(slug); + if (!ideaMotriz) { + return NextResponse.json({ error: 'Primero debes crear la Idea Motriz' }, { status: 400 }); + } + const personajes = await getPersonajes(slug); + if (personajes.length === 0) { + return NextResponse.json({ error: 'Primero debes crear los personajes' }, { status: 400 }); + } + + const { regenerateGuionActos } = await import('@/lib/llm-service'); + const guionMetadata = { + titulo: currentGuion.titulo || '', + duracionTotal: currentGuion.duracionTotal || '20:00', + virtudGanada: currentGuion.virtudGanada || '', + nudoDelMundo: currentGuion.nudoDelMundo || '', + aliado: currentGuion.aliado || { nombre: '', descripcion: '' }, + gemaGanada: currentGuion.gemaGanada || '', + }; + + const result = await regenerateGuionActos(guionMetadata, ideaMotriz, personajes, parseInt(numero)); + const actos = result.actos; + + // Merge: keep existing metadata, replace actos + const fullGuion = { ...guionMetadata, actos }; + const { actos: _a, contenidoMarkdown: _c, ...frontmatterData } = fullGuion as any; + const mdContent = generateGuionMarkdown(fullGuion); + const fileContent = matter.stringify(mdContent, frontmatterData); + await fs.writeFile(guionPath, fileContent); + + // Save actos as structured JSON + if (actos) { + const actosPath = path.join(capitulosDir, capDir.name, 'guion-actos.json'); + await fs.writeFile(actosPath, JSON.stringify(actos, null, 2)); + } + + return NextResponse.json({ ...frontmatterData, actos, contenidoMarkdown: mdContent }); + } + + if (action === 'save' && body.contenidoMarkdown !== undefined) { + // Leer frontmatter actual y guardar con nuevo contenido + let frontmatterData: Record = {}; + try { + const existing = await fs.readFile(guionPath, 'utf-8'); + const { data } = matter(existing); + frontmatterData = data; + } catch { /* no existing file */ } + + const fileContent = matter.stringify(body.contenidoMarkdown, frontmatterData); + await fs.writeFile(guionPath, fileContent); + return NextResponse.json({ success: true }); + } + + if (action === 'save-fields') { + const guionData = body.guionData; + if (!guionData) { + return NextResponse.json({ error: 'Se necesita guionData' }, { status: 400 }); + } + + // Extract actos from the guion data (stored separately as JSON) + const { actos, contenidoMarkdown: _ignore2, ...frontmatterFields } = guionData; + + // Regenerate markdown from updated fields + const mdContent = generateGuionMarkdown(guionData); + const fileContent = matter.stringify(mdContent, frontmatterFields); + await fs.writeFile(guionPath, fileContent); + + // Save actos as structured JSON + const actosPath = path.join(capitulosDir, capDir.name, 'guion-actos.json'); + if (actos) { + await fs.writeFile(actosPath, JSON.stringify(actos, null, 2)); + } + + return NextResponse.json({ ...frontmatterFields, actos, contenidoMarkdown: mdContent }); + } + + return NextResponse.json({ error: 'Acción inválida' }, { status: 400 }); + } catch (error: any) { + console.error('Error en guion:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +function generateGuionMarkdown(guion: any): string { + let md = `# ${guion.titulo}\n\n`; + md += `**VIRTUD GANADA: ${guion.virtudGanada?.toUpperCase()}**\n\n`; + md += `## Introducción\n\n`; + md += `| Categoría | Detalle |\n|-----------|--------|\n`; + md += `| **Duración Total** | ${guion.duracionTotal} |\n`; + md += `| **Nudo del Mundo** | ${guion.nudoDelMundo} |\n`; + md += `| **Aliado** | ${guion.aliado?.nombre} — ${guion.aliado?.descripcion} |\n`; + md += `| **Gema Ganada** | ${guion.gemaGanada} |\n\n---\n\n`; + + if (guion.actos) { + for (const acto of guion.actos) { + md += `## ACTO ${acto.numero}: ${acto.nombre?.toUpperCase()} (${acto.tiempoInicio} - ${acto.tiempoFin})\n\n`; + if (acto.segmentos) { + for (const seg of acto.segmentos) { + md += `### ${seg.id} ${seg.nombre} (${seg.tiempo})\n`; + md += `| Tiempo | Acción Visual Clave | Diseño de Fondo | Diseño de Sonido |\n`; + md += `|--------|---------------------|-----------------|------------------|\n`; + md += `| ${seg.tiempo} | ${seg.accionVisualClave} | ${seg.disenoFondo || ''} | ${seg.disenoSonido} |\n\n`; + } + } + md += `---\n\n`; + } + } + + return md; +} diff --git a/src/app/api/projects/[slug]/capitulos/[numero]/imagenes/[planoId]/route.ts b/src/app/api/projects/[slug]/capitulos/[numero]/imagenes/[planoId]/route.ts new file mode 100644 index 0000000..34fee14 --- /dev/null +++ b/src/app/api/projects/[slug]/capitulos/[numero]/imagenes/[planoId]/route.ts @@ -0,0 +1,43 @@ +import { NextRequest, NextResponse } from 'next/server'; +import fs from 'fs/promises'; +import path from 'path'; +import { loadPlanoImage } from '@/lib/image-service'; + +const PROJECTS_DIR = path.join(process.cwd(), 'projects'); + +async function findCapDir(capitulosDir: string, numero: string) { + const dirs = await fs.readdir(capitulosDir, { withFileTypes: true }); + return dirs.find(d => + d.isDirectory() && d.name.startsWith(numero.padStart(2, '0')) + ); +} + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string; planoId: string }> } +) { + try { + const { slug, numero, planoId } = await params; + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json({ error: 'Capítulo no encontrado' }, { status: 404 }); + } + + const imageBuffer = await loadPlanoImage(slug, capDir.name, planoId); + + if (!imageBuffer) { + return NextResponse.json({ error: 'Imagen no encontrada' }, { status: 404 }); + } + + return new NextResponse(new Uint8Array(imageBuffer), { + headers: { + 'Content-Type': 'image/png', + 'Cache-Control': 'no-cache', + }, + }); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/capitulos/[numero]/imagenes/route.ts b/src/app/api/projects/[slug]/capitulos/[numero]/imagenes/route.ts new file mode 100644 index 0000000..97ea8aa --- /dev/null +++ b/src/app/api/projects/[slug]/capitulos/[numero]/imagenes/route.ts @@ -0,0 +1,316 @@ +import { NextRequest, NextResponse } from 'next/server'; +import fs from 'fs/promises'; +import path from 'path'; +import { loadImage, generateSceneImage, savePlanoImage, getPlanoImagePath } from '@/lib/image-service'; +import type { PlanoConPrompt, ReferenceAsset, PromptComposition, FondoReferencia } from '@/types/project'; + +const PROJECTS_DIR = path.join(process.cwd(), 'projects'); + +async function findCapDir(capitulosDir: string, numero: string) { + const dirs = await fs.readdir(capitulosDir, { withFileTypes: true }); + return dirs.find(d => + d.isDirectory() && d.name.startsWith(numero.padStart(2, '0')) + ); +} + +/** Migrate old referenceAsset format: tposeUrl → tposeFrontUrl */ +function migrateReferenceAssets(refs: any[]): ReferenceAsset[] { + return refs.map(ref => { + if (ref.tposeFrontUrl || !ref.tposeUrl) return ref; + const { tposeUrl, ...rest } = ref; + return { ...rest, tposeFrontUrl: tposeUrl }; + }); +} + +/** Load planos: prefer prompts-planos.json, fall back to escaleta-planos.json */ +async function loadPlanos(capPath: string): Promise<{ planos: PlanoConPrompt[]; source: 'prompts' | 'escaleta' }> { + try { + const content = await fs.readFile(path.join(capPath, 'prompts-planos.json'), 'utf-8'); + const promptPlanos: PlanoConPrompt[] = JSON.parse(content); + let escaletaPlanos: any[] = []; + try { + const esc = await fs.readFile(path.join(capPath, 'escaleta-planos.json'), 'utf-8'); + escaletaPlanos = JSON.parse(esc); + } catch { /* ok */ } + + const promptMap = new Map(promptPlanos.map(p => [p.id, p])); + const merged = escaletaPlanos.map((ep: any) => { + const withPrompt = promptMap.get(ep.id); + if (!withPrompt) return { ...ep, promptImagen: '', referenceAssets: [] }; + // Migrate old referenceAssets format + return { + ...withPrompt, + referenceAssets: migrateReferenceAssets(withPrompt.referenceAssets || []), + }; + }); + return { planos: merged.length > 0 ? merged : promptPlanos.map(p => ({ + ...p, + referenceAssets: migrateReferenceAssets(p.referenceAssets || []), + })), source: 'prompts' }; + } catch { /* no prompts-planos.json */ } + + try { + const content = await fs.readFile(path.join(capPath, 'escaleta-planos.json'), 'utf-8'); + const escaletaPlanos = JSON.parse(content); + const planos: PlanoConPrompt[] = escaletaPlanos.map((p: any) => ({ + ...p, + promptImagen: '', + referenceAssets: [], + })); + return { planos, source: 'escaleta' }; + } catch { /* no escaleta either */ } + + throw new Error('NO_PLANOS'); +} + +async function savePromptPlanos(capPath: string, planos: PlanoConPrompt[]): Promise { + await fs.writeFile(path.join(capPath, 'prompts-planos.json'), JSON.stringify(planos, null, 2)); +} + +/** Check which planos already have generated images on disk */ +async function enrichWithImageStatus( + planos: PlanoConPrompt[], + slug: string, + capDirName: string +): Promise { + return Promise.all(planos.map(async (plano) => { + try { + await fs.access(getPlanoImagePath(slug, capDirName, plano.id)); + return { + ...plano, + imagenUrl: `/api/projects/${slug}/capitulos/${capDirName}/imagenes/${plano.id}`, + }; + } catch { + return { ...plano, imagenUrl: undefined }; + } + })); +} + +/** Load reference images from disk for a plano: 3 T-poses + emotion per character + fondo */ +async function loadReferenceImages( + slug: string, + capDirName: string, + refs: ReferenceAsset[], + fondoId?: string +): Promise<{ buffer: Buffer; label: string }[]> { + const images: { buffer: Buffer; label: string }[] = []; + + // Load fondo reference image first (if available) + if (fondoId) { + const fondoPath = path.join(PROJECTS_DIR, slug, 'capitulos', capDirName, 'fondos', `${fondoId}.png`); + try { + const buffer = await fs.readFile(fondoPath); + // Load fondos.json to get the fondo name + let fondoNombre = fondoId; + try { + const fondosJson: FondoReferencia[] = JSON.parse( + await fs.readFile(path.join(PROJECTS_DIR, slug, 'capitulos', capDirName, 'fondos.json'), 'utf-8') + ); + const fondo = fondosJson.find(f => f.id === fondoId); + if (fondo) fondoNombre = fondo.nombre; + } catch { /* ok */ } + images.push({ buffer, label: `Background reference for "${fondoNombre}". Use this image as inspiration for the background/environment where the action takes place. Match the atmosphere, lighting, and setting shown.` }); + } catch { /* no fondo image */ } + } + + // Load character reference images + for (const ref of refs) { + // Front T-pose (also check legacy tposeUrl field) + const frontUrl = ref.tposeFrontUrl || (ref as any).tposeUrl; + if (frontUrl) { + const assetId = frontUrl.split('/').pop()!; + const buffer = await loadImage(slug, ref.personajeId, assetId); + if (buffer) { + images.push({ buffer, label: `${ref.nombre} - T-pose front` }); + } + } + // Side T-pose + if (ref.tposeSideUrl) { + const assetId = ref.tposeSideUrl.split('/').pop()!; + const buffer = await loadImage(slug, ref.personajeId, assetId); + if (buffer) { + images.push({ buffer, label: `${ref.nombre} - T-pose side` }); + } + } + // Back T-pose + if (ref.tposeBackUrl) { + const assetId = ref.tposeBackUrl.split('/').pop()!; + const buffer = await loadImage(slug, ref.personajeId, assetId); + if (buffer) { + images.push({ buffer, label: `${ref.nombre} - T-pose back` }); + } + } + // Emotion + if (ref.emotionUrl) { + const assetId = ref.emotionUrl.split('/').pop()!; + const buffer = await loadImage(slug, ref.personajeId, assetId); + if (buffer) { + images.push({ buffer, label: `${ref.nombre} - ${ref.emocion}` }); + } + } + } + + return images; +} + +/** Compose a final prompt string from sub-fields */ +function composePrompt(comp: PromptComposition): string { + const parts = [ + comp.tipoPlano, + comp.camara, + comp.optica, + comp.personajes, + comp.accion, + comp.luz, + comp.estilo, + comp.custom, + ].filter(Boolean); + return parts.join('. ') + '.'; +} + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json(null); + } + + const capPath = path.join(capitulosDir, capDir.name); + + try { + const { planos } = await loadPlanos(capPath); + const enriched = await enrichWithImageStatus(planos, slug, capDir.name); + const generated = enriched.filter(p => p.imagenUrl).length; + const withPrompt = enriched.filter(p => p.promptImagen).length; + return NextResponse.json({ planos: enriched, total: enriched.length, generated, withPrompt }); + } catch { + return NextResponse.json(null); + } + } catch (error: any) { + console.error('Error fetching imagenes:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const { action, planoId, composition } = await request.json(); + + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json({ error: 'Capítulo no encontrado' }, { status: 404 }); + } + + const capPath = path.join(capitulosDir, capDir.name); + + let planos: PlanoConPrompt[]; + try { + const result = await loadPlanos(capPath); + planos = result.planos; + } catch { + return NextResponse.json( + { error: 'No se encontraron planos. Genera la escaleta primero.' }, + { status: 400 } + ); + } + + if (action === 'generate') { + if (!planoId) { + return NextResponse.json({ error: 'Se necesita planoId' }, { status: 400 }); + } + + const planoIdx = planos.findIndex(p => p.id === planoId); + if (planoIdx === -1) { + return NextResponse.json({ error: 'Plano no encontrado' }, { status: 404 }); + } + + const plano = planos[planoIdx]; + if (!plano.promptImagen) { + return NextResponse.json({ error: 'Este plano no tiene prompt. Genera el prompt primero.' }, { status: 400 }); + } + + const refs = await loadReferenceImages(slug, capDir.name, plano.referenceAssets || [], plano.fondoId); + + const imageBuffer = await generateSceneImage( + refs, + plano.promptImagen, + { aspectRatio: '16:9' } + ); + + const imagenUrl = await savePlanoImage(slug, capDir.name, plano.id, imageBuffer); + planos[planoIdx] = { ...plano, imagenUrl }; + await savePromptPlanos(capPath, planos); + + return NextResponse.json({ plano: planos[planoIdx] }); + } + + if (action === 'generate-all') { + const results: { id: string; success: boolean; error?: string }[] = []; + + for (let i = 0; i < planos.length; i++) { + const plano = planos[i]; + if (!plano.promptImagen) { + results.push({ id: plano.id, success: false, error: 'Sin prompt' }); + continue; + } + + try { + const refs = await loadReferenceImages(slug, capDir.name, plano.referenceAssets || [], plano.fondoId); + const imageBuffer = await generateSceneImage( + refs, + plano.promptImagen, + { aspectRatio: '16:9' } + ); + const imagenUrl = await savePlanoImage(slug, capDir.name, plano.id, imageBuffer); + planos[i] = { ...plano, imagenUrl }; + await savePromptPlanos(capPath, planos); + results.push({ id: plano.id, success: true }); + } catch (err: any) { + console.error(`Error generando imagen para ${plano.id}:`, err); + results.push({ id: plano.id, success: false, error: err.message }); + } + } + + const enriched = await enrichWithImageStatus(planos, slug, capDir.name); + const generated = enriched.filter(p => p.imagenUrl).length; + const withPrompt = enriched.filter(p => p.promptImagen).length; + return NextResponse.json({ planos: enriched, total: enriched.length, generated, withPrompt, results }); + } + + if (action === 'save-composition') { + if (!planoId || !composition) { + return NextResponse.json({ error: 'Se necesita planoId y composition' }, { status: 400 }); + } + + const planoIdx = planos.findIndex(p => p.id === planoId); + if (planoIdx === -1) { + return NextResponse.json({ error: 'Plano no encontrado' }, { status: 404 }); + } + + const promptComposition: PromptComposition = composition; + const promptImagen = composePrompt(promptComposition); + + planos[planoIdx] = { ...planos[planoIdx], promptComposition, promptImagen }; + await savePromptPlanos(capPath, planos); + + return NextResponse.json({ plano: planos[planoIdx] }); + } + + return NextResponse.json({ error: 'Acción inválida' }, { status: 400 }); + } catch (error: any) { + console.error('Error en imagenes:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/capitulos/[numero]/pre-escaleta/route.ts b/src/app/api/projects/[slug]/capitulos/[numero]/pre-escaleta/route.ts new file mode 100644 index 0000000..96bb898 --- /dev/null +++ b/src/app/api/projects/[slug]/capitulos/[numero]/pre-escaleta/route.ts @@ -0,0 +1,133 @@ +import { NextRequest, NextResponse } from 'next/server'; +import fs from 'fs/promises'; +import path from 'path'; +import type { PreEscaleta, PreEscaletaSegmento, PreEscaletaPlano, ActoGuion } from '@/types/project'; +import { parseTimeRange } from '@/lib/prompts'; + +const PROJECTS_DIR = path.join(process.cwd(), 'projects'); + +async function findCapDir(capitulosDir: string, numero: string) { + const dirs = await fs.readdir(capitulosDir, { withFileTypes: true }); + return dirs.find(d => + d.isDirectory() && d.name.startsWith(numero.padStart(2, '0')) + ); +} + +/** Build pre-escaleta from structured actos — pure computation, no LLM */ +function buildPreEscaleta(actos: ActoGuion[], capituloTitulo: string): PreEscaleta { + const segmentos: PreEscaletaSegmento[] = []; + let planoCounter = 1; + let totalSeconds = 0; + + for (const acto of actos) { + for (let segIdx = 0; segIdx < acto.segmentos.length; segIdx++) { + const seg = acto.segmentos[segIdx]; + const duracion = parseTimeRange(seg.tiempo); + const numPlanos = Math.max(2, Math.round(duracion / 5)); + totalSeconds += duracion; + + const planos: PreEscaletaPlano[] = []; + for (let i = 0; i < numPlanos; i++) { + planos.push({ + id: `plano-${String(planoCounter).padStart(3, '0')}`, + numeroPlano: `${acto.numero}.${segIdx + 1}.${i + 1}`, + nombre: `Plano ${acto.numero}.${segIdx + 1}.${i + 1}`, + segmentoId: seg.id, + tiempoSegundos: 5, + }); + planoCounter++; + } + + segmentos.push({ + segmentoId: seg.id, + nombre: seg.nombre, + actoNumero: acto.numero, + segmentoIndex: segIdx, + tiempo: seg.tiempo, + duracionSegundos: duracion, + totalPlanos: numPlanos, + planos, + }); + } + } + + return { + capitulo: capituloTitulo, + duracionTotalSegundos: totalSeconds, + totalPlanos: planoCounter - 1, + segmentos, + }; +} + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json(null); + } + + const preEscaletaPath = path.join(capitulosDir, capDir.name, 'pre-escaleta.json'); + + try { + const content = await fs.readFile(preEscaletaPath, 'utf-8'); + return NextResponse.json(JSON.parse(content)); + } catch { + return NextResponse.json(null); + } + } catch (error: any) { + console.error('Error fetching pre-escaleta:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const { action, guion } = await request.json(); + + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json({ error: 'Capítulo no encontrado' }, { status: 404 }); + } + + const capPath = path.join(capitulosDir, capDir.name); + const preEscaletaPath = path.join(capPath, 'pre-escaleta.json'); + + if (action === 'generate') { + if (!guion?.actos || guion.actos.length === 0) { + return NextResponse.json( + { error: 'El guión conductor no tiene actos estructurados. Regenera el guión primero.' }, + { status: 400 } + ); + } + + const preEscaleta = buildPreEscaleta(guion.actos, guion.titulo || ''); + await fs.writeFile(preEscaletaPath, JSON.stringify(preEscaleta, null, 2)); + return NextResponse.json(preEscaleta); + } + + if (action === 'save') { + const { preEscaleta } = await request.json().catch(() => ({ preEscaleta: null })); + if (preEscaleta) { + await fs.writeFile(preEscaletaPath, JSON.stringify(preEscaleta, null, 2)); + return NextResponse.json({ success: true }); + } + } + + return NextResponse.json({ error: 'Acción inválida' }, { status: 400 }); + } catch (error: any) { + console.error('Error en pre-escaleta:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/capitulos/[numero]/prompts/route.ts b/src/app/api/projects/[slug]/capitulos/[numero]/prompts/route.ts new file mode 100644 index 0000000..6a54ff1 --- /dev/null +++ b/src/app/api/projects/[slug]/capitulos/[numero]/prompts/route.ts @@ -0,0 +1,403 @@ +import { NextRequest, NextResponse } from 'next/server'; +import fs from 'fs/promises'; +import path from 'path'; +import matter from 'gray-matter'; +import { getPersonajes, getCharacterAssetsMap, getIdeaMotriz } from '@/lib/file-service'; +import type { PersonajeEnPlano, PromptComposition, ReferenceAsset, FondoReferencia } from '@/types/project'; + +const PROJECTS_DIR = path.join(process.cwd(), 'projects'); +const DEFAULT_ESTILO = 'Pixar-style 3D animation, vibrant colors, expressive characters'; + +async function findCapDir(capitulosDir: string, numero: string) { + const dirs = await fs.readdir(capitulosDir, { withFileTypes: true }); + return dirs.find(d => + d.isDirectory() && d.name.startsWith(numero.padStart(2, '0')) + ); +} + +/** Compose a final prompt string from sub-fields */ +function composePrompt(comp: PromptComposition): string { + const parts = [ + comp.tipoPlano, + comp.camara, + comp.optica, + comp.personajes, + comp.accion, + comp.luz, + comp.estilo, + comp.custom, + ].filter(Boolean); + return parts.join('. ') + '.'; +} + +/** Build referenceAssets with 3 T-poses + emotion for each character in the plano */ +function buildReferenceAssets( + detalle: PersonajeEnPlano[], + assetsMap: Record +): ReferenceAsset[] { + const referenceAssets: ReferenceAsset[] = []; + for (const pd of detalle) { + const summary = assetsMap[pd.personajeId]; + if (!summary) continue; + referenceAssets.push({ + personajeId: pd.personajeId, + nombre: pd.nombre, + emocion: pd.emocion, + tposeFrontUrl: summary.tposeFrontUrl, + tposeSideUrl: summary.tposeSideUrl, + tposeBackUrl: summary.tposeBackUrl, + emotionUrl: summary.emotions[pd.emocion], + }); + } + return referenceAssets; +} + +/** Map segmentoGuion string (e.g. "I.1 El Silencio") to fondoId */ +function getFondoIdForPlano(plano: any, fondos: FondoReferencia[]): string | undefined { + const segGuion: string = plano.segmentoGuion || ''; + const segId = segGuion.split(' ')[0]; + const fondo = fondos.find(f => f.segmentoId === segId); + return fondo?.id; +} + +/** Ensure a value is a string (LLM may return arrays/objects for some fields) */ +function ensureString(val: any): string { + if (typeof val === 'string') return val; + if (val == null) return ''; + if (Array.isArray(val)) { + return val.map(v => typeof v === 'object' ? Object.values(v).filter(Boolean).join(', ') : String(v)).join('. '); + } + if (typeof val === 'object') return Object.values(val).filter(Boolean).join(', '); + return String(val); +} + +/** Enrich a plano from LLM output: inject estilo, compose promptImagen, add refs + fondoId */ +function enrichPlano( + plano: any, + estiloVisual: string, + assetsMap: Record, + fondos: FondoReferencia[] +): any { + const detalle: PersonajeEnPlano[] = plano.personajesDetalle || []; + const referenceAssets = buildReferenceAssets(detalle, assetsMap); + const fondoId = getFondoIdForPlano(plano, fondos); + + // Build promptComposition: LLM provides most fields, we inject estilo + const llmComp = plano.promptComposition || {}; + const promptComposition: PromptComposition = { + personajes: ensureString(llmComp.personajes), + accion: ensureString(llmComp.accion), + luz: ensureString(llmComp.luz), + camara: ensureString(llmComp.camara), + optica: ensureString(llmComp.optica), + tipoPlano: ensureString(llmComp.tipoPlano), + estilo: estiloVisual, + custom: ensureString(llmComp.custom), + }; + + const promptImagen = composePrompt(promptComposition); + + return { ...plano, promptComposition, promptImagen, referenceAssets, fondoId }; +} + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json(null); + } + + const promptsPath = path.join(capitulosDir, capDir.name, 'prompts.md'); + + try { + const fileContent = await fs.readFile(promptsPath, 'utf-8'); + const { data, content } = matter(fileContent); + return NextResponse.json({ ...data, contenidoMarkdown: content }); + } catch { + return NextResponse.json(null); + } + } catch (error: any) { + console.error('Error fetching prompts:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST( + request: NextRequest, + { params }: { params: Promise<{ slug: string; numero: string }> } +) { + try { + const { slug, numero } = await params; + const { action, planoId } = await request.json(); + + const capitulosDir = path.join(PROJECTS_DIR, slug, 'capitulos'); + const capDir = await findCapDir(capitulosDir, numero); + + if (!capDir) { + return NextResponse.json({ error: 'Capítulo no encontrado' }, { status: 404 }); + } + + const capPath = path.join(capitulosDir, capDir.name); + const promptsPath = path.join(capPath, 'prompts.md'); + + // Shared: read estiloVisual + fondos + const ideaMotriz = await getIdeaMotriz(slug); + const estiloVisual = ideaMotriz?.estiloVisual || DEFAULT_ESTILO; + + let fondos: FondoReferencia[] = []; + try { + fondos = JSON.parse(await fs.readFile(path.join(capPath, 'fondos.json'), 'utf-8')); + } catch { /* no fondos yet */ } + + if (action === 'generate') { + // Read planos from server-side JSON (saved by escaleta generation) + const planosPath = path.join(capPath, 'escaleta-planos.json'); + let planos: any[] = []; + try { + const planosJson = await fs.readFile(planosPath, 'utf-8'); + planos = JSON.parse(planosJson); + } catch { + return NextResponse.json({ error: 'No se encontraron planos. Regenera la escaleta primero.' }, { status: 400 }); + } + if (planos.length === 0) { + return NextResponse.json({ error: 'La escaleta no tiene planos. Regenera la escaleta.' }, { status: 400 }); + } + + // Read escaleta frontmatter for metadata + let escaletaMeta: Record = {}; + try { + const escaletaContent = await fs.readFile(path.join(capPath, 'escaleta.md'), 'utf-8'); + const { data } = matter(escaletaContent); + escaletaMeta = data; + } catch { /* ok */ } + + const personajes = await getPersonajes(slug); + const assetsMap = await getCharacterAssetsMap(slug, personajes); + + const { generateImagePrompts } = await import('@/lib/llm-service'); + const escaletaForLLM = { ...escaletaMeta, planos } as any; + const planosConPrompts = await generateImagePrompts(escaletaForLLM, personajes); + + // Enrich each plano + const planosEnriched = planosConPrompts.map((plano: any) => + enrichPlano(plano, estiloVisual, assetsMap, fondos) + ); + + // Save enriched planos as JSON for downstream image generation + const promptsPlanosPath = path.join(capPath, 'prompts-planos.json'); + await fs.writeFile(promptsPlanosPath, JSON.stringify(planosEnriched, null, 2)); + + const mdContent = generatePromptsMarkdown(planosEnriched); + const frontmatter = { + capitulo: escaletaMeta.capitulo || '', + totalPrompts: planosEnriched.length, + }; + const fileContent = matter.stringify(mdContent, frontmatter); + await fs.writeFile(promptsPath, fileContent); + + return NextResponse.json({ ...frontmatter, contenidoMarkdown: mdContent, planos: planosEnriched }); + } + + if (action === 'generate-stream') { + const escaletaPlanosPath = path.join(capPath, 'escaleta-planos.json'); + let streamPlanos: any[] = []; + try { + const planosJson = await fs.readFile(escaletaPlanosPath, 'utf-8'); + streamPlanos = JSON.parse(planosJson); + } catch { + return NextResponse.json({ error: 'No se encontraron planos. Regenera la escaleta primero.' }, { status: 400 }); + } + if (streamPlanos.length === 0) { + return NextResponse.json({ error: 'La escaleta no tiene planos. Regenera la escaleta.' }, { status: 400 }); + } + + let escaletaMeta: Record = {}; + try { + const escaletaContent = await fs.readFile(path.join(capPath, 'escaleta.md'), 'utf-8'); + const { data } = matter(escaletaContent); + escaletaMeta = data; + } catch { /* ok */ } + + const personajes = await getPersonajes(slug); + const assetsMap = await getCharacterAssetsMap(slug, personajes); + + const encoder = new TextEncoder(); + const stream = new ReadableStream({ + async start(controller) { + const send = (data: any) => { + try { + controller.enqueue(encoder.encode(`data: ${JSON.stringify(data)}\n\n`)); + } catch { /* client disconnected */ } + }; + + try { + const { generateImagePrompts } = await import('@/lib/llm-service'); + const escaletaForLLM = { ...escaletaMeta, planos: streamPlanos } as any; + const planosConPrompts = await generateImagePrompts(escaletaForLLM, personajes, + (current, total, label) => { + send({ type: 'progress', current, total, label }); + } + ); + + const planosEnriched = planosConPrompts.map((plano: any) => + enrichPlano(plano, estiloVisual, assetsMap, fondos) + ); + + const promptsPlanosPath = path.join(capPath, 'prompts-planos.json'); + await fs.writeFile(promptsPlanosPath, JSON.stringify(planosEnriched, null, 2)); + + const mdContent = generatePromptsMarkdown(planosEnriched); + const frontmatter = { + capitulo: escaletaMeta.capitulo || '', + totalPrompts: planosEnriched.length, + }; + const fileContent = matter.stringify(mdContent, frontmatter); + await fs.writeFile(promptsPath, fileContent); + + send({ type: 'done', result: { ...frontmatter, contenidoMarkdown: mdContent, planos: planosEnriched } }); + } catch (error: any) { + send({ type: 'error', message: error.message }); + } + + controller.close(); + } + }); + + return new Response(stream, { + headers: { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'X-Accel-Buffering': 'no', + }, + }); + } + + if (action === 'generate-single') { + if (!planoId) { + return NextResponse.json({ error: 'Se necesita planoId' }, { status: 400 }); + } + + // Read escaleta planos + const planosPath = path.join(capPath, 'escaleta-planos.json'); + let escaletaPlanos: any[] = []; + try { + escaletaPlanos = JSON.parse(await fs.readFile(planosPath, 'utf-8')); + } catch { + return NextResponse.json({ error: 'No se encontraron planos. Regenera la escaleta.' }, { status: 400 }); + } + + const targetPlano = escaletaPlanos.find((p: any) => p.id === planoId); + if (!targetPlano) { + return NextResponse.json({ error: 'Plano no encontrado' }, { status: 404 }); + } + + const personajes = await getPersonajes(slug); + const assetsMap = await getCharacterAssetsMap(slug, personajes); + + // Generate prompt for this single plano + const { generateImagePrompts } = await import('@/lib/llm-service'); + const singleEscaleta = { planos: [targetPlano] } as any; + const result = await generateImagePrompts(singleEscaleta, personajes); + const planoConPrompt = result[0]; + if (!planoConPrompt) { + return NextResponse.json({ error: 'No se generó prompt' }, { status: 500 }); + } + + // Enrich + const enrichedPlano = enrichPlano( + { ...targetPlano, ...planoConPrompt, personajesDetalle: targetPlano.personajesDetalle || planoConPrompt.personajesDetalle }, + estiloVisual, + assetsMap, + fondos + ); + + // Update prompts-planos.json: merge into existing or create + const promptsPlanosPath = path.join(capPath, 'prompts-planos.json'); + let existingPlanos: any[] = []; + try { + existingPlanos = JSON.parse(await fs.readFile(promptsPlanosPath, 'utf-8')); + } catch { /* first time */ } + + const existingIdx = existingPlanos.findIndex((p: any) => p.id === planoId); + if (existingIdx >= 0) { + existingPlanos[existingIdx] = enrichedPlano; + } else { + existingPlanos.push(enrichedPlano); + } + await fs.writeFile(promptsPlanosPath, JSON.stringify(existingPlanos, null, 2)); + + return NextResponse.json({ plano: enrichedPlano }); + } + + return NextResponse.json({ error: 'Acción inválida' }, { status: 400 }); + } catch (error: any) { + console.error('Error en prompts:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +function generatePromptsMarkdown(planos: any[]): string { + let md = `# Prompts de Imágenes\n\n`; + md += `Total: ${planos.length} prompts generados\n\n`; + + for (const plano of planos) { + md += `## Plano ${plano.numeroPlano}\n\n`; + md += `**Segmento:** ${plano.segmentoGuion} | **Duración:** ${plano.tiempoSegundos}s\n\n`; + + const detalle: PersonajeEnPlano[] = plano.personajesDetalle || []; + if (detalle.length > 0) { + md += `**Personajes:**\n`; + for (const pd of detalle) { + md += `- ${pd.nombre} — *${pd.emocion}*\n`; + } + md += `\n`; + } + + md += `**Acción:** ${plano.accionDescripcion}\n\n`; + + if (plano.promptImagen) { + md += `> **Prompt final:** ${plano.promptImagen}\n\n`; + } + + // Show composition sub-fields + const comp = plano.promptComposition; + if (comp) { + md += `**Composición:**\n`; + if (comp.tipoPlano) md += `- Tipo plano: ${comp.tipoPlano}\n`; + if (comp.camara) md += `- Cámara: ${comp.camara}\n`; + if (comp.optica) md += `- Óptica: ${comp.optica}\n`; + if (comp.luz) md += `- Luz: ${comp.luz}\n`; + md += `\n`; + } + + // Reference assets + if (plano.referenceAssets?.length) { + md += `**Assets de referencia:**\n`; + for (const ref of plano.referenceAssets) { + const parts: string[] = []; + if (ref.tposeFrontUrl) parts.push('Front'); + if (ref.tposeSideUrl) parts.push('Side'); + if (ref.tposeBackUrl) parts.push('Back'); + if (ref.emotionUrl) parts.push(`Emoción: ${ref.emocion}`); + const hasTpose = ref.tposeFrontUrl || ref.tposeSideUrl || ref.tposeBackUrl; + const missing = !hasTpose ? ' ⚠️ sin T-pose' : (!ref.emotionUrl ? ` ⚠️ sin emoción ${ref.emocion}` : ''); + md += `- **${ref.nombre}**: ${parts.join(' + ')}${missing}\n`; + } + md += `\n`; + } + + if (plano.fondoId) { + md += `**Fondo ref:** ${plano.fondoId}\n\n`; + } + + md += `---\n\n`; + } + + return md; +} diff --git a/src/app/api/projects/[slug]/capitulos/route.ts b/src/app/api/projects/[slug]/capitulos/route.ts new file mode 100644 index 0000000..e3a7b62 --- /dev/null +++ b/src/app/api/projects/[slug]/capitulos/route.ts @@ -0,0 +1,44 @@ +import { NextRequest, NextResponse } from 'next/server'; +import { getCapitulos, createCapitulo, getIdeaMotriz, getPersonajes } from '@/lib/file-service'; + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string }> } +) { + try { + const { slug } = await params; + const capitulos = await getCapitulos(slug); + return NextResponse.json(capitulos); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST( + request: NextRequest, + { params }: { params: Promise<{ slug: string }> } +) { + try { + const { slug } = await params; + const { numero, titulo, virtudSugerida } = await request.json(); + + // Crear el capítulo + const capitulo = await createCapitulo(slug, numero, titulo || `Capítulo ${numero}`); + + // Si se solicita, generar el guión conductor automáticamente + if (virtudSugerida !== undefined) { + const ideaMotriz = await getIdeaMotriz(slug); + const personajes = await getPersonajes(slug); + + if (ideaMotriz && personajes.length > 0) { + const { generateGuionConductor } = await import('@/lib/llm-service'); + await generateGuionConductor(ideaMotriz, personajes, numero, virtudSugerida); + } + } + + return NextResponse.json(capitulo); + } catch (error: any) { + console.error('Error creando capítulo:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/idea-motriz/route.ts b/src/app/api/projects/[slug]/idea-motriz/route.ts new file mode 100644 index 0000000..0cfee1b --- /dev/null +++ b/src/app/api/projects/[slug]/idea-motriz/route.ts @@ -0,0 +1,45 @@ +import { NextRequest, NextResponse } from 'next/server'; +import { getIdeaMotriz, saveIdeaMotriz } from '@/lib/file-service'; + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string }> } +) { + try { + const { slug } = await params; + const ideaMotriz = await getIdeaMotriz(slug); + return NextResponse.json(ideaMotriz); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST( + request: NextRequest, + { params }: { params: Promise<{ slug: string }> } +) { + try { + const { slug } = await params; + const { action, input, current } = await request.json(); + + let ideaMotriz; + if (action === 'generate') { + const { generateIdeaMotriz } = await import('@/lib/llm-service'); + ideaMotriz = await generateIdeaMotriz(input); + } else if (action === 'refine' && current) { + const { refineIdeaMotriz } = await import('@/lib/llm-service'); + ideaMotriz = await refineIdeaMotriz(current, input); + } else if (action === 'save') { + await saveIdeaMotriz(slug, input); + return NextResponse.json({ success: true }); + } else { + return NextResponse.json({ error: 'Acción inválida' }, { status: 400 }); + } + + await saveIdeaMotriz(slug, ideaMotriz); + return NextResponse.json(ideaMotriz); + } catch (error: any) { + console.error('Error en idea-motriz:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/personajes/[id]/assets/route.ts b/src/app/api/projects/[slug]/personajes/[id]/assets/route.ts new file mode 100644 index 0000000..fb97ded --- /dev/null +++ b/src/app/api/projects/[slug]/personajes/[id]/assets/route.ts @@ -0,0 +1,198 @@ +import { NextRequest, NextResponse } from 'next/server'; +import fs from 'fs/promises'; +import path from 'path'; +import { getPersonajes } from '@/lib/file-service'; +import { generateCharacterAssetPrompts } from '@/lib/llm-service'; +import { generateImage, generateVariation, saveImage, loadImage } from '@/lib/image-service'; +import type { CharacterAsset, CharacterAssetsData } from '@/types/project'; + +const PROJECTS_DIR = path.join(process.cwd(), 'projects'); + +function getAssetsPath(slug: string, personajeId: string): string { + return path.join(PROJECTS_DIR, slug, 'personajes', personajeId, 'assets.json'); +} + +function ensureBaseFlag(data: CharacterAssetsData): boolean { + if (data.assets.some(a => a.isBase)) return false; + const base = data.assets.find(a => a.type === 'tpose' && a.variant === 'front'); + if (base) { + base.isBase = true; + return true; + } + return false; +} + +async function getData(slug: string, personajeId: string): Promise { + try { + const content = await fs.readFile(getAssetsPath(slug, personajeId), 'utf-8'); + const parsed = JSON.parse(content); + // Migrate old format (plain array) to new format + let data: CharacterAssetsData; + if (Array.isArray(parsed)) { + data = { assets: parsed, baseLocked: false }; + } else { + data = parsed; + } + // Ensure isBase flag is set; persist fix if data was modified + const modified = ensureBaseFlag(data); + if (modified) { + await saveData(slug, personajeId, data); + } + return data; + } catch { + return { assets: [], baseLocked: false }; + } +} + +async function saveData(slug: string, personajeId: string, data: CharacterAssetsData): Promise { + const assetsDir = path.join(PROJECTS_DIR, slug, 'personajes', personajeId); + await fs.mkdir(assetsDir, { recursive: true }); + await fs.writeFile(getAssetsPath(slug, personajeId), JSON.stringify(data, null, 2)); +} + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string; id: string }> } +) { + try { + const { slug, id } = await params; + const data = await getData(slug, id); + return NextResponse.json(data); + } catch (error: any) { + console.error('Error fetching assets:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST( + request: NextRequest, + { params }: { params: Promise<{ slug: string; id: string }> } +) { + try { + const { slug, id } = await params; + const body = await request.json(); + const { action } = body; + + // 1. Generate text prompts via LLM + if (action === 'generate-prompts') { + const personajes = await getPersonajes(slug); + const personaje = personajes.find(p => p.id === id); + if (!personaje) { + return NextResponse.json({ error: 'Personaje no encontrado' }, { status: 404 }); + } + const assets = await generateCharacterAssetPrompts(personaje); + // Mark first tpose-front as the base + const base = assets.find(a => a.type === 'tpose' && a.variant === 'front'); + if (base) base.isBase = true; + const data: CharacterAssetsData = { assets, baseLocked: false }; + await saveData(slug, id, data); + return NextResponse.json(data); + } + + // 2. Generate base image (text-to-image) + if (action === 'generate-base-image') { + const { prompt: customPrompt } = body; + const data = await getData(slug, id); + let baseAsset = data.assets.find(a => a.isBase); + if (!baseAsset) { + baseAsset = data.assets.find(a => a.type === 'tpose' && a.variant === 'front'); + } + if (!baseAsset) { + return NextResponse.json({ error: 'No hay asset base definido. Genera los prompts primero.' }, { status: 400 }); + } + const prompt = customPrompt || baseAsset.prompt; + baseAsset.status = 'generating'; + await saveData(slug, id, data); + + const imageBuffer = await generateImage(prompt); + const imageUrl = await saveImage(slug, id, baseAsset.id, imageBuffer); + baseAsset.imageUrl = imageUrl; + baseAsset.prompt = prompt; + baseAsset.status = 'generated'; + data.baseLocked = false; + await saveData(slug, id, data); + return NextResponse.json(data); + } + + // 3. Lock the base image as canonical reference + if (action === 'lock-base') { + const data = await getData(slug, id); + const baseAsset = data.assets.find(a => a.isBase); + if (!baseAsset || baseAsset.status !== 'generated') { + return NextResponse.json({ error: 'Primero genera la imagen base.' }, { status: 400 }); + } + data.baseLocked = true; + await saveData(slug, id, data); + return NextResponse.json(data); + } + + // 4. Generate a single variation from base reference + if (action === 'generate-variation') { + const { assetId } = body; + if (!assetId) { + return NextResponse.json({ error: 'Se necesita assetId' }, { status: 400 }); + } + const data = await getData(slug, id); + if (!data.baseLocked) { + return NextResponse.json({ error: 'Primero fija la imagen base.' }, { status: 400 }); + } + const baseAsset = data.assets.find(a => a.isBase); + const targetAsset = data.assets.find(a => a.id === assetId); + if (!baseAsset || !targetAsset) { + return NextResponse.json({ error: 'Asset no encontrado' }, { status: 404 }); + } + const refImage = await loadImage(slug, id, baseAsset.id); + if (!refImage) { + return NextResponse.json({ error: 'Imagen base no encontrada en disco' }, { status: 400 }); + } + targetAsset.status = 'generating'; + await saveData(slug, id, data); + + const imageBuffer = await generateVariation(refImage, targetAsset.prompt); + const imageUrl = await saveImage(slug, id, targetAsset.id, imageBuffer); + targetAsset.imageUrl = imageUrl; + targetAsset.status = 'generated'; + await saveData(slug, id, data); + return NextResponse.json(data); + } + + // 5. Generate all remaining variations + if (action === 'generate-all-variations') { + const data = await getData(slug, id); + if (!data.baseLocked) { + return NextResponse.json({ error: 'Primero fija la imagen base.' }, { status: 400 }); + } + const baseAsset = data.assets.find(a => a.isBase); + if (!baseAsset) { + return NextResponse.json({ error: 'No hay asset base' }, { status: 400 }); + } + const refImage = await loadImage(slug, id, baseAsset.id); + if (!refImage) { + return NextResponse.json({ error: 'Imagen base no encontrada en disco' }, { status: 400 }); + } + + const pending = data.assets.filter(a => !a.isBase && a.status !== 'generated'); + for (const asset of pending) { + try { + asset.status = 'generating'; + await saveData(slug, id, data); + const imageBuffer = await generateVariation(refImage, asset.prompt); + const imageUrl = await saveImage(slug, id, asset.id, imageBuffer); + asset.imageUrl = imageUrl; + asset.status = 'generated'; + await saveData(slug, id, data); + } catch (err: any) { + console.error(`Error generando variación ${asset.id}:`, err); + asset.status = 'prompt_ready'; + await saveData(slug, id, data); + } + } + return NextResponse.json(data); + } + + return NextResponse.json({ error: 'Acción inválida' }, { status: 400 }); + } catch (error: any) { + console.error('Error en assets:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/personajes/[id]/images/[assetId]/route.ts b/src/app/api/projects/[slug]/personajes/[id]/images/[assetId]/route.ts new file mode 100644 index 0000000..c720d53 --- /dev/null +++ b/src/app/api/projects/[slug]/personajes/[id]/images/[assetId]/route.ts @@ -0,0 +1,25 @@ +import { NextRequest, NextResponse } from 'next/server'; +import { loadImage } from '@/lib/image-service'; + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string; id: string; assetId: string }> } +) { + try { + const { slug, id, assetId } = await params; + const imageBuffer = await loadImage(slug, id, assetId); + + if (!imageBuffer) { + return NextResponse.json({ error: 'Imagen no encontrada' }, { status: 404 }); + } + + return new NextResponse(new Uint8Array(imageBuffer), { + headers: { + 'Content-Type': 'image/png', + 'Cache-Control': 'no-cache', + }, + }); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/personajes/assets-summary/route.ts b/src/app/api/projects/[slug]/personajes/assets-summary/route.ts new file mode 100644 index 0000000..21b8fd8 --- /dev/null +++ b/src/app/api/projects/[slug]/personajes/assets-summary/route.ts @@ -0,0 +1,17 @@ +import { NextRequest, NextResponse } from 'next/server'; +import { getPersonajes, getCharacterAssetsMap } from '@/lib/file-service'; + +export async function GET( + _request: NextRequest, + { params }: { params: Promise<{ slug: string }> } +) { + try { + const { slug } = await params; + const personajes = await getPersonajes(slug); + const assetsMap = await getCharacterAssetsMap(slug, personajes); + return NextResponse.json(assetsMap); + } catch (error: any) { + console.error('Error fetching assets summary:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/personajes/route.ts b/src/app/api/projects/[slug]/personajes/route.ts new file mode 100644 index 0000000..c650e78 --- /dev/null +++ b/src/app/api/projects/[slug]/personajes/route.ts @@ -0,0 +1,72 @@ +import { NextRequest, NextResponse } from 'next/server'; +import { getPersonajes, savePersonajes, getIdeaMotriz } from '@/lib/file-service'; + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string }> } +) { + try { + const { slug } = await params; + const personajes = await getPersonajes(slug); + return NextResponse.json(personajes); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST( + request: NextRequest, + { params }: { params: Promise<{ slug: string }> } +) { + try { + const { slug } = await params; + const { action, personaje, feedback, personajes: inputPersonajes, nuevoPersonaje, ideaMotriz: inputIdeaMotriz } = await request.json(); + + if (action === 'generate') { + const ideaMotriz = await getIdeaMotriz(slug); + if (!ideaMotriz) { + return NextResponse.json({ error: 'Primero debes crear la Idea Motriz' }, { status: 400 }); + } + const { generatePersonajes } = await import('@/lib/llm-service'); + const personajes = await generatePersonajes(ideaMotriz); + await savePersonajes(slug, personajes); + return NextResponse.json(personajes); + } + + if (action === 'refine' && personaje && feedback) { + const { refinePersonaje } = await import('@/lib/llm-service'); + const refined = await refinePersonaje(personaje, feedback); + const current = await getPersonajes(slug); + const updated = current.map(p => p.id === refined.id ? refined : p); + await savePersonajes(slug, updated); + return NextResponse.json(refined); + } + + if (action === 'save' && inputPersonajes) { + await savePersonajes(slug, inputPersonajes); + return NextResponse.json({ success: true }); + } + + if (action === 'improve' && feedback && inputPersonajes) { + const { improvePersonajes } = await import('@/lib/llm-service'); + const improved = await improvePersonajes(inputPersonajes, feedback); + await savePersonajes(slug, improved); + return NextResponse.json(improved); + } + + if (action === 'add' && nuevoPersonaje) { + const ideaMotriz = inputIdeaMotriz || await getIdeaMotriz(slug); + const { generateNewPersonaje } = await import('@/lib/llm-service'); + const newPersonaje = await generateNewPersonaje(nuevoPersonaje, ideaMotriz, inputPersonajes || []); + const current = inputPersonajes || await getPersonajes(slug); + const updated = [...current, newPersonaje]; + await savePersonajes(slug, updated); + return NextResponse.json(newPersonaje); + } + + return NextResponse.json({ error: 'Acción inválida' }, { status: 400 }); + } catch (error: any) { + console.error('Error en personajes:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/[slug]/route.ts b/src/app/api/projects/[slug]/route.ts new file mode 100644 index 0000000..4ff74b3 --- /dev/null +++ b/src/app/api/projects/[slug]/route.ts @@ -0,0 +1,45 @@ +import { NextRequest, NextResponse } from 'next/server'; +import { getProject, updateProject, deleteProject } from '@/lib/file-service'; + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ slug: string }> } +) { + try { + const { slug } = await params; + const project = await getProject(slug); + if (!project) { + return NextResponse.json({ error: 'Proyecto no encontrado' }, { status: 404 }); + } + return NextResponse.json(project); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function PATCH( + request: NextRequest, + { params }: { params: Promise<{ slug: string }> } +) { + try { + const { slug } = await params; + const updates = await request.json(); + const project = await updateProject(slug, updates); + return NextResponse.json(project); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function DELETE( + request: NextRequest, + { params }: { params: Promise<{ slug: string }> } +) { + try { + const { slug } = await params; + await deleteProject(slug); + return NextResponse.json({ success: true }); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/api/projects/route.ts b/src/app/api/projects/route.ts new file mode 100644 index 0000000..be2f92e --- /dev/null +++ b/src/app/api/projects/route.ts @@ -0,0 +1,24 @@ +import { NextRequest, NextResponse } from 'next/server'; +import { listProjects, createProject } from '@/lib/file-service'; + +export async function GET() { + try { + const projects = await listProjects(); + return NextResponse.json(projects); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +export async function POST(request: NextRequest) { + try { + const { name } = await request.json(); + if (!name) { + return NextResponse.json({ error: 'El nombre es requerido' }, { status: 400 }); + } + const project = await createProject(name); + return NextResponse.json(project); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/globals.css b/src/app/globals.css index a2dc41e..9fc0b33 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,26 +1,93 @@ @import "tailwindcss"; +@plugin "@tailwindcss/typography"; :root { - --background: #ffffff; - --foreground: #171717; + --background: #FAFAF8; + --foreground: #1C1917; + --surface: #FFFFFF; + --surface-raised: #FFFFFF; + --border: #E7E5E4; + --border-subtle: #F5F5F4; + --text-primary: #1C1917; + --text-secondary: #57534E; + --text-tertiary: #A8A29E; + --accent: #4338CA; + --accent-hover: #3730A3; + --accent-subtle: #EEF2FF; + --accent-text: #4338CA; + --success: #15803D; + --success-subtle: #F0FDF4; + --danger: #DC2626; + --danger-subtle: #FEF2F2; + --warm: #D97706; + --warm-subtle: #FFFBEB; } @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); + --color-surface: var(--surface); + --color-accent: var(--accent); + --color-accent-hover: var(--accent-hover); + --color-accent-subtle: var(--accent-subtle); --font-sans: var(--font-geist-sans); --font-mono: var(--font-geist-mono); } -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - body { background: var(--background); color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; + font-family: var(--font-sans), system-ui, -apple-system, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* Scrollbar sutil */ +::-webkit-scrollbar { + width: 6px; +} +::-webkit-scrollbar-track { + background: transparent; +} +::-webkit-scrollbar-thumb { + background: #D6D3D1; + border-radius: 3px; +} +::-webkit-scrollbar-thumb:hover { + background: #A8A29E; +} + +/* Focus ring consistente */ +*:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + border-radius: 4px; +} + +/* Animaciones */ +@keyframes fade-in { + from { opacity: 0; transform: translateY(-8px); } + to { opacity: 1; transform: translateY(0); } +} + +@keyframes slide-up { + from { opacity: 0; transform: translateY(16px); } + to { opacity: 1; transform: translateY(0); } +} + +@keyframes scale-in { + from { opacity: 0; transform: scale(0.95); } + to { opacity: 1; transform: scale(1); } +} + +.animate-fade-in { + animation: fade-in 0.2s ease-out; +} + +.animate-slide-up { + animation: slide-up 0.3s ease-out; +} + +.animate-scale-in { + animation: scale-in 0.2s ease-out; } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index f7fa87e..ce9d5b0 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -13,8 +13,8 @@ const geistMono = Geist_Mono({ }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Story Studio", + description: "Herramienta de creación de series animadas con IA", }; export default function RootLayout({ diff --git a/src/app/page.tsx b/src/app/page.tsx index 295f8fd..e4280b4 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,64 +1,184 @@ -import Image from "next/image"; +'use client'; + +import { useEffect, useState } from 'react'; +import Link from 'next/link'; +import { Plus, Film, Clock, ChevronRight, Trash2 } from 'lucide-react'; +import { Button } from '@/components/ui/Button'; +import { Card, CardContent, CardHeader } from '@/components/ui/Card'; +import { Input } from '@/components/ui/Input'; +import type { Project } from '@/types/project'; export default function Home() { + const [projects, setProjects] = useState([]); + const [loading, setLoading] = useState(true); + const [showCreate, setShowCreate] = useState(false); + const [newName, setNewName] = useState(''); + const [creating, setCreating] = useState(false); + + useEffect(() => { + fetchProjects(); + }, []); + + const fetchProjects = async () => { + try { + const res = await fetch('/api/projects'); + const data = await res.json(); + setProjects(data); + } catch (error) { + console.error('Error fetching projects:', error); + } finally { + setLoading(false); + } + }; + + const handleCreate = async () => { + if (!newName.trim()) return; + setCreating(true); + try { + const res = await fetch('/api/projects', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ name: newName }), + }); + if (res.ok) { + setNewName(''); + setShowCreate(false); + fetchProjects(); + } + } catch (error) { + console.error('Error creating project:', error); + } finally { + setCreating(false); + } + }; + + const handleDelete = async (slug: string, e: React.MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + if (!confirm('¿Estás seguro de eliminar este proyecto?')) return; + try { + await fetch(`/api/projects/${slug}`, { method: 'DELETE' }); + fetchProjects(); + } catch (error) { + console.error('Error deleting project:', error); + } + }; + + const getStatusColor = (status: string) => { + switch (status) { + case 'completed': return 'bg-green-100 text-green-800'; + case 'in_progress': return 'bg-blue-100 text-blue-800'; + default: return 'bg-gray-100 text-gray-800'; + } + }; + + const getStepLabel = (step: string) => { + switch (step) { + case 'idea_motriz': return 'Idea Motriz'; + case 'personajes': return 'Personajes'; + case 'capitulos': return 'Capítulos'; + default: return step; + } + }; + return ( -
-
- Next.js logo -
-

- To get started, edit the page.tsx file. -

-

- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -

+
+
+
+
+

Story Studio

+
+
-
+ + {showCreate && ( +
+ + +

Nuevo proyecto

+

Dale un nombre a tu serie animada

+
+ + setNewName(e.target.value)} + placeholder="Ej: Los Guardianes del Mundo Abierto" + autoFocus + onKeyDown={(e) => e.key === 'Enter' && handleCreate()} + /> +
+ + +
+
+
+ )} + +
+ {loading ? ( +
+
+
+ ) : projects.length === 0 ? ( +
+

Todavía no tienes proyectos

+ +
+ ) : ( +
+
+ + {projects.length} {projects.length === 1 ? 'proyecto' : 'proyectos'} + +
+ {projects.map((project) => ( + +
+
+
+

+ {project.name} +

+ + {project.status === 'completed' ? 'Completado' : project.status === 'in_progress' ? 'En progreso' : 'Borrador'} + +
+
+ + {getStepLabel(project.currentStep)} + + · + + {new Date(project.updatedAt).toLocaleDateString('es-ES', { day: 'numeric', month: 'short' })} + +
+
+ + +
+ + ))} +
+ )}
); diff --git a/src/app/project/[slug]/capitulo/[numero]/page.tsx b/src/app/project/[slug]/capitulo/[numero]/page.tsx new file mode 100644 index 0000000..028788a --- /dev/null +++ b/src/app/project/[slug]/capitulo/[numero]/page.tsx @@ -0,0 +1,1239 @@ +'use client'; + +import { useEffect, useState, useRef, useCallback, use } from 'react'; +import Link from 'next/link'; +import { ArrowLeft, Sparkles, FileText, List, Image, Video, ChevronRight, Edit3, Save, Eye, LayoutGrid, AlertTriangle, Palette, RefreshCw } from 'lucide-react'; +import { Button } from '@/components/ui/Button'; +import { Card, CardContent, CardHeader } from '@/components/ui/Card'; +import { Toast } from '@/components/ui/Toast'; +import { ProgressModal, type ProgressLogEntry } from '@/components/ui/ProgressModal'; +import { WizardStepper } from '@/components/wizard/WizardStepper'; +import { PlanoCard } from '@/components/capitulo/PlanoCard'; +import { PlanoAssetCard } from '@/components/capitulo/PlanoAssetCard'; +import { FondoCard } from '@/components/capitulo/FondoCard'; +import { GuionFieldsEditor } from '@/components/capitulo/GuionFieldsEditor'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; +import type { GuionConductor, Escaleta, PlanoEscaleta, PreEscaleta, PlanoConPrompt, FondoReferencia, PromptComposition } from '@/types/project'; +import type { CharacterAssetsSummary } from '@/lib/file-service'; + +const CAPITULO_STEPS = [ + { id: 'guion', name: 'Guión Conductor', description: 'Estructura narrativa' }, + { id: 'escaleta', name: 'Escaleta', description: 'Desglose de planos' }, + { id: 'prompts', name: 'Prompts', description: 'Para generación de imágenes' }, + { id: 'assets', name: 'Assets', description: 'Imágenes y videos' }, +]; + +export default function CapituloPage({ + params +}: { + params: Promise<{ slug: string; numero: string }> +}) { + const { slug, numero } = use(params); + + const [guion, setGuion] = useState(null); + const [preEscaleta, setPreEscaleta] = useState(null); + const [escaleta, setEscaleta] = useState(null); + const [promptsData, setPromptsData] = useState<{ contenidoMarkdown?: string; totalPrompts?: number } | null>(null); + const [currentStep, setCurrentStep] = useState(0); + const [loading, setLoading] = useState(true); + const [generating, setGenerating] = useState(false); + const [toast, setToast] = useState<{ message: string; type: 'success' | 'error' } | null>(null); + const [editingGuion, setEditingGuion] = useState(false); + const [editingGuionFields, setEditingGuionFields] = useState(false); + const [editingEscaleta, setEditingEscaleta] = useState(false); + const [guionDraft, setGuionDraft] = useState(''); + const [escaletaDraft, setEscaletaDraft] = useState(''); + const [escaletaView, setEscaletaView] = useState<'cards' | 'markdown'>('cards'); + const [assetsMap, setAssetsMap] = useState>({}); + const [imagenesData, setImagenesData] = useState<{ planos: PlanoConPrompt[]; total: number; generated: number; withPrompt?: number } | null>(null); + const [generatingPlano, setGeneratingPlano] = useState(null); + const [generatingPromptSingle, setGeneratingPromptSingle] = useState(null); + const [fondosData, setFondosData] = useState<{ fondos: FondoReferencia[]; total: number; generated: number } | null>(null); + const [generatingFondo, setGeneratingFondo] = useState(null); + const [generatingAllFondos, setGeneratingAllFondos] = useState(false); + const [fondosVersion, setFondosVersion] = useState(0); + + // Progress modal state + const [progress, setProgress] = useState<{ + open: boolean; + title: string; + current: number; + total: number; + currentLabel: string; + logs: ProgressLogEntry[]; + }>({ open: false, title: '', current: 0, total: 0, currentLabel: '', logs: [] }); + const abortRef = useRef(null); + + const startProgress = useCallback((title: string, total: number = 0, label: string = 'Iniciando...') => { + abortRef.current = new AbortController(); + setProgress({ open: true, title, current: 0, total, currentLabel: label, logs: [] }); + }, []); + + const updateProgress = useCallback((current: number, total: number, label: string) => { + setProgress(prev => ({ ...prev, current, total, currentLabel: label })); + }, []); + + const addProgressLog = useCallback((label: string, status: 'success' | 'error', detail?: string) => { + setProgress(prev => ({ ...prev, logs: [...prev.logs, { label, status, detail }] })); + }, []); + + const finishProgress = useCallback((current: number, total: number) => { + setProgress(prev => ({ ...prev, current, total, currentLabel: '' })); + }, []); + + const closeProgress = useCallback(() => { + abortRef.current?.abort(); + abortRef.current = null; + setProgress(prev => ({ ...prev, open: false })); + }, []); + + useEffect(() => { + fetchData(); + }, [slug, numero]); + + const showToast = (message: string, type: 'success' | 'error') => { + setToast({ message, type }); + }; + + const fetchData = async () => { + setLoading(true); + try { + const [guionRes, preEscaletaRes, escaletaRes, promptsRes, assetsRes, imagenesRes, fondosRes] = await Promise.all([ + fetch(`/api/projects/${slug}/capitulos/${numero}/guion`), + fetch(`/api/projects/${slug}/capitulos/${numero}/pre-escaleta`), + fetch(`/api/projects/${slug}/capitulos/${numero}/escaleta`), + fetch(`/api/projects/${slug}/capitulos/${numero}/prompts`), + fetch(`/api/projects/${slug}/personajes/assets-summary`), + fetch(`/api/projects/${slug}/capitulos/${numero}/imagenes`), + fetch(`/api/projects/${slug}/capitulos/${numero}/fondos`), + ]); + + if (guionRes.ok) { + const guionData = await guionRes.json(); + if (guionData) setGuion(guionData); + } + if (preEscaletaRes.ok) { + const preEscaletaData = await preEscaletaRes.json(); + if (preEscaletaData) setPreEscaleta(preEscaletaData); + } + if (escaletaRes.ok) { + const escaletaData = await escaletaRes.json(); + if (escaletaData) setEscaleta(escaletaData); + } + if (promptsRes.ok) { + const promptsDataRes = await promptsRes.json(); + if (promptsDataRes) setPromptsData(promptsDataRes); + } + if (assetsRes.ok) { + const assetsData = await assetsRes.json(); + if (assetsData) setAssetsMap(assetsData); + } + if (imagenesRes.ok) { + const imagenesDataRes = await imagenesRes.json(); + if (imagenesDataRes) setImagenesData(imagenesDataRes); + } + if (fondosRes.ok) { + const fondosDataRes = await fondosRes.json(); + if (fondosDataRes) setFondosData(fondosDataRes); + } + } catch (error) { + console.error('Error fetching data:', error); + } finally { + setLoading(false); + } + }; + + const handleSaveGuionMarkdown = async () => { + setGenerating(true); + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/guion`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'save', contenidoMarkdown: guionDraft }), + }); + if (!res.ok) { + const data = await res.json(); + showToast(data.error || 'Error guardando guión', 'error'); + return; + } + setGuion({ ...guion!, contenidoMarkdown: guionDraft }); + setEditingGuion(false); + showToast('Guión guardado correctamente', 'success'); + } catch (error) { + console.error('Error saving guion:', error); + showToast('Error al guardar guión', 'error'); + } finally { + setGenerating(false); + } + }; + + const handleSaveGuionFields = async (updatedGuion: GuionConductor) => { + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/guion`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'save-fields', guionData: updatedGuion }), + }); + const data = await res.json(); + if (!res.ok) { + showToast(data.error || 'Error guardando campos', 'error'); + return; + } + setGuion(data); + setEditingGuionFields(false); + showToast('Guión actualizado correctamente', 'success'); + } catch (error) { + console.error('Error saving guion fields:', error); + showToast('Error al guardar campos del guión', 'error'); + } + }; + + const handleSaveEscaletaMarkdown = async () => { + setGenerating(true); + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/escaleta`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'save', contenidoMarkdown: escaletaDraft }), + }); + if (!res.ok) { + const data = await res.json(); + showToast(data.error || 'Error guardando escaleta', 'error'); + return; + } + setEscaleta({ ...escaleta!, contenidoMarkdown: escaletaDraft }); + setEditingEscaleta(false); + showToast('Escaleta guardada correctamente', 'success'); + } catch (error) { + console.error('Error saving escaleta:', error); + showToast('Error al guardar escaleta', 'error'); + } finally { + setGenerating(false); + } + }; + + // SSE stream reader helper + const readSSEStream = async ( + response: Response, + onProgress: (current: number, total: number, label: string) => void, + signal?: AbortSignal + ): Promise => { + const reader = response.body!.getReader(); + const decoder = new TextDecoder(); + let buffer = ''; + let result: any = null; + + try { + while (true) { + if (signal?.aborted) { reader.cancel(); throw new Error('Cancelado'); } + const { done, value } = await reader.read(); + if (done) break; + buffer += decoder.decode(value, { stream: true }); + const lines = buffer.split('\n\n'); + buffer = lines.pop() || ''; + for (const line of lines) { + const match = line.match(/^data:\s*(.*)/); + if (!match) continue; + try { + const event = JSON.parse(match[1]); + if (event.type === 'progress') onProgress(event.current, event.total, event.label); + else if (event.type === 'done') result = event.result; + else if (event.type === 'error') throw new Error(event.message); + } catch (e: any) { if (e.message !== 'Cancelado') throw e; } + } + } + } finally { reader.releaseLock(); } + return result; + }; + + const handleGenerateGuion = async () => { + startProgress('Generando Guión Conductor', 0, 'Creando estructura narrativa...'); + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/guion`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'generate' }), + signal: abortRef.current?.signal, + }); + const data = await res.json(); + if (!res.ok) { showToast(data.error || 'Error generando guión', 'error'); closeProgress(); return; } + setGuion(data); + addProgressLog('Guión conductor generado', 'success'); + finishProgress(1, 1); + showToast('Guión conductor generado correctamente', 'success'); + } catch (error: any) { + if (error.name !== 'AbortError') { showToast('Error de conexión al generar guión', 'error'); } + closeProgress(); + } + }; + + const handleRegenerateActos = async () => { + startProgress('Regenerando Actos', 0, 'Generando nuevos actos con IA...'); + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/guion`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'regenerate-actos' }), + signal: abortRef.current?.signal, + }); + const data = await res.json(); + if (!res.ok) { showToast(data.error || 'Error regenerando actos', 'error'); closeProgress(); return; } + setGuion(data); + addProgressLog('Actos regenerados (metadata conservada)', 'success'); + finishProgress(1, 1); + showToast('Actos regenerados correctamente', 'success'); + } catch (error: any) { + if (error.name !== 'AbortError') { showToast('Error de conexión al regenerar actos', 'error'); } + closeProgress(); + } + }; + + const handleGeneratePrompts = async () => { + if (!escaleta) return; + startProgress('Generando Prompts', 0, 'Iniciando generación de prompts...'); + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/prompts`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'generate-stream' }), + signal: abortRef.current?.signal, + }); + if (!res.ok) { + const errData = await res.json(); + showToast(errData.error || 'Error generando prompts', 'error'); + closeProgress(); + return; + } + const data = await readSSEStream(res, (current, total, label) => { + updateProgress(current, total, label); + if (current > 0) addProgressLog(`Lote ${current}`, 'success', label); + }, abortRef.current?.signal); + + if (data) { + setPromptsData(data); + try { + const imgRes = await fetch(`/api/projects/${slug}/capitulos/${numero}/imagenes`); + if (imgRes.ok) { const imgData = await imgRes.json(); if (imgData) setImagenesData(imgData); } + } catch { /* ok */ } + addProgressLog(`${data.totalPrompts || 0} prompts generados`, 'success'); + finishProgress(data.totalPrompts || 1, data.totalPrompts || 1); + showToast(`${data.totalPrompts || 0} prompts generados`, 'success'); + } else { closeProgress(); } + } catch (error: any) { + if (error.name !== 'AbortError' && error.message !== 'Cancelado') { showToast('Error al generar prompts', 'error'); } + closeProgress(); + } + }; + + const handleGeneratePreEscaleta = async () => { + if (!guion) return; + startProgress('Generando Pre-Escaleta', 0, 'Calculando estructura de planos...'); + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/pre-escaleta`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'generate', guion }), + signal: abortRef.current?.signal, + }); + const data = await res.json(); + if (!res.ok) { showToast(data.error || 'Error generando pre-escaleta', 'error'); closeProgress(); return; } + setPreEscaleta(data); + addProgressLog(`Pre-escaleta: ${data.totalPlanos} planos en ${data.segmentos?.length} segmentos`, 'success'); + finishProgress(1, 1); + showToast(`Pre-escaleta generada: ${data.totalPlanos} planos`, 'success'); + } catch (error: any) { + if (error.name !== 'AbortError') { showToast('Error al generar pre-escaleta', 'error'); } + closeProgress(); + } + }; + + const handleGenerateEscaleta = async () => { + if (!guion || !preEscaleta) return; + startProgress('Generando Escaleta', preEscaleta.segmentos.length, 'Iniciando generación por segmentos...'); + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/escaleta`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'generate-stream', guion }), + signal: abortRef.current?.signal, + }); + if (!res.ok) { + const errData = await res.json(); + showToast(errData.error || 'Error generando escaleta', 'error'); + closeProgress(); + return; + } + const data = await readSSEStream(res, (current, total, label) => { + updateProgress(current, total, label); + if (current > 0) addProgressLog(`Segmento ${current}/${total}`, 'success', label); + }, abortRef.current?.signal); + + if (data) { + setEscaleta(data); + addProgressLog(`Escaleta completa: ${data.planos?.length || 0} planos`, 'success'); + finishProgress(preEscaleta.segmentos.length, preEscaleta.segmentos.length); + showToast('Escaleta generada correctamente', 'success'); + } else { closeProgress(); } + } catch (error: any) { + if (error.name !== 'AbortError' && error.message !== 'Cancelado') { showToast('Error al generar escaleta', 'error'); } + closeProgress(); + } + }; + + const handleGenerateSinglePrompt = async (planoId: string) => { + setGeneratingPromptSingle(planoId); + startProgress('Generando Prompt', 0, `Prompt para plano ${planoId}...`); + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/prompts`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'generate-single', planoId }), + signal: abortRef.current?.signal, + }); + const data = await res.json(); + if (!res.ok) { showToast(data.error || 'Error generando prompt', 'error'); closeProgress(); return; } + if (imagenesData) { + const updatedPlanos = imagenesData.planos.map(p => p.id === planoId ? data.plano : p); + const withPrompt = updatedPlanos.filter((p: PlanoConPrompt) => p.promptImagen).length; + setImagenesData({ ...imagenesData, planos: updatedPlanos, withPrompt }); + } + addProgressLog(`Prompt generado para ${planoId}`, 'success'); + finishProgress(1, 1); + showToast(`Prompt generado para plano ${planoId}`, 'success'); + } catch (error: any) { + if (error.name !== 'AbortError') { showToast('Error al generar prompt', 'error'); } + closeProgress(); + } finally { setGeneratingPromptSingle(null); } + }; + + const handleGeneratePlanoImage = async (planoId: string) => { + setGeneratingPlano(planoId); + startProgress('Generando Imagen', 0, `Generando imagen para plano ${planoId}...`); + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/imagenes`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'generate', planoId }), + signal: abortRef.current?.signal, + }); + const data = await res.json(); + if (!res.ok) { showToast(data.error || 'Error generando imagen', 'error'); closeProgress(); return; } + if (imagenesData) { + const updatedPlanos = imagenesData.planos.map(p => p.id === planoId ? data.plano : p); + const generated = updatedPlanos.filter((p: PlanoConPrompt) => p.imagenUrl).length; + setImagenesData({ ...imagenesData, planos: updatedPlanos, generated }); + } + addProgressLog(`Imagen generada para ${planoId}`, 'success'); + finishProgress(1, 1); + showToast(`Imagen generada para plano ${planoId}`, 'success'); + } catch (error: any) { + if (error.name !== 'AbortError') { showToast('Error al generar imagen', 'error'); } + closeProgress(); + } finally { setGeneratingPlano(null); } + }; + + const handleGenerateAllImages = async () => { + if (!imagenesData) return; + const pending = imagenesData.planos.filter(p => p.promptImagen); + if (pending.length === 0) return; + + startProgress('Generando Imágenes', pending.length, `Imagen 1/${pending.length}...`); + let successCount = 0; + let errorCount = 0; + let localPlanos = [...imagenesData.planos]; + + for (let i = 0; i < pending.length; i++) { + if (abortRef.current?.signal.aborted) break; + const plano = pending[i]; + updateProgress(i, pending.length, `Imagen ${i + 1}/${pending.length} — ${plano.numeroPlano || plano.id}`); + + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/imagenes`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'generate', planoId: plano.id }), + signal: abortRef.current?.signal, + }); + const data = await res.json(); + if (res.ok) { + localPlanos = localPlanos.map(p => p.id === plano.id ? data.plano : p); + const generated = localPlanos.filter(p => p.imagenUrl).length; + setImagenesData({ ...imagenesData, planos: localPlanos, generated }); + addProgressLog(`${plano.numeroPlano || plano.id}`, 'success'); + successCount++; + } else { + addProgressLog(`${plano.numeroPlano || plano.id}`, 'error', data.error); + errorCount++; + } + } catch (error: any) { + if (error.name === 'AbortError') break; + addProgressLog(`${plano.numeroPlano || plano.id}`, 'error', 'Error de conexión'); + errorCount++; + } + } + + finishProgress(pending.length, pending.length); + if (errorCount > 0) { + showToast(`${successCount} imágenes generadas, ${errorCount} con error`, 'error'); + } else { + showToast(`${successCount} imágenes generadas correctamente`, 'success'); + } + }; + + const handleGenerateFondo = async (fondoId: string) => { + setGeneratingFondo(fondoId); + startProgress('Generando Fondo', 0, `Generando fondo ${fondoId}...`); + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/fondos`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'generate', fondoId }), + signal: abortRef.current?.signal, + }); + const data = await res.json(); + if (!res.ok) { showToast(data.error || 'Error generando fondo', 'error'); closeProgress(); return; } + if (fondosData) { + const updatedFondos = fondosData.fondos.map(f => f.id === fondoId ? data.fondo : f); + const generated = updatedFondos.filter(f => f.imagenUrl).length; + setFondosData({ ...fondosData, fondos: updatedFondos, generated }); + } + setFondosVersion(v => v + 1); + addProgressLog(`Fondo ${fondoId} generado`, 'success'); + finishProgress(1, 1); + showToast('Fondo generado correctamente', 'success'); + } catch (error: any) { + if (error.name !== 'AbortError') { showToast('Error al generar fondo', 'error'); } + closeProgress(); + } finally { setGeneratingFondo(null); } + }; + + const handleGenerateAllFondos = async () => { + if (!fondosData || fondosData.fondos.length === 0) return; + const pending = fondosData.fondos; + + setGeneratingAllFondos(true); + startProgress('Generando Fondos', pending.length, `Fondo 1/${pending.length}...`); + let successCount = 0; + let errorCount = 0; + let localFondos = [...fondosData.fondos]; + + for (let i = 0; i < pending.length; i++) { + if (abortRef.current?.signal.aborted) break; + const fondo = pending[i]; + updateProgress(i, pending.length, `Fondo ${i + 1}/${pending.length} — ${fondo.nombre}`); + + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/fondos`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'generate', fondoId: fondo.id }), + signal: abortRef.current?.signal, + }); + const data = await res.json(); + if (res.ok) { + localFondos = localFondos.map(f => f.id === fondo.id ? data.fondo : f); + const generated = localFondos.filter(f => f.imagenUrl).length; + setFondosData({ ...fondosData, fondos: localFondos, generated }); + setFondosVersion(v => v + 1); + addProgressLog(`${fondo.nombre}`, 'success'); + successCount++; + } else { + addProgressLog(`${fondo.nombre}`, 'error', data.error); + errorCount++; + } + } catch (error: any) { + if (error.name === 'AbortError') break; + addProgressLog(`${fondo.nombre}`, 'error', 'Error de conexión'); + errorCount++; + } + } + + finishProgress(pending.length, pending.length); + setGeneratingAllFondos(false); + if (errorCount > 0) { + showToast(`${successCount} fondos generados, ${errorCount} con error`, 'error'); + } else { + showToast(`${successCount} fondos generados correctamente`, 'success'); + } + }; + + const handleUpdateFondoDescription = async (fondoId: string, descripcion: string, promptGeneracion: string) => { + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/fondos`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'update-description', fondoId, descripcion, promptGeneracion }), + }); + const data = await res.json(); + if (!res.ok) { + showToast(data.error || 'Error actualizando fondo', 'error'); + return; + } + if (fondosData) { + const updatedFondos = fondosData.fondos.map(f => + f.id === fondoId ? data.fondo : f + ); + setFondosData({ ...fondosData, fondos: updatedFondos }); + } + showToast('Fondo actualizado', 'success'); + } catch (error) { + console.error('Error updating fondo:', error); + showToast('Error al actualizar fondo', 'error'); + } + }; + + const handleRefreshFondos = async () => { + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/fondos`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'refresh' }), + }); + const data = await res.json(); + if (!res.ok) { showToast(data.error || 'Error actualizando fondos', 'error'); return; } + setFondosData(data); + showToast('Fondos sincronizados con el guión', 'success'); + } catch { + showToast('Error al sincronizar fondos', 'error'); + } + }; + + const handleSaveComposition = async (planoId: string, composition: PromptComposition) => { + try { + const res = await fetch(`/api/projects/${slug}/capitulos/${numero}/imagenes`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ action: 'save-composition', planoId, composition }), + }); + const data = await res.json(); + if (!res.ok) { + showToast(data.error || 'Error guardando composición', 'error'); + return; + } + // Update the specific plano in local state + if (imagenesData) { + const updatedPlanos = imagenesData.planos.map(p => + p.id === planoId ? data.plano : p + ); + setImagenesData({ ...imagenesData, planos: updatedPlanos }); + } + showToast('Composición guardada', 'success'); + } catch (error) { + console.error('Error saving composition:', error); + showToast('Error al guardar composición', 'error'); + } + }; + + // Build fondoId → imagenUrl lookup + const fondoImagenMap: Record = {}; + if (fondosData) { + for (const f of fondosData.fondos) { + if (f.imagenUrl) fondoImagenMap[f.id] = `${f.imagenUrl}?v=${fondosVersion}`; + } + } + + if (loading) { + return ( +
+
+
+ ); + } + + return ( +
+ {toast && setToast(null)} />} + + +
+
+ + + +
+

+ Cap. {numero} {guion?.titulo ? `— ${guion.titulo}` : ''} +

+
+
+
+ +
+ setCurrentStep(index)} + /> + +
+ {/* Step 0: Guión Conductor */} + {currentStep === 0 && ( +
+
+

Guión Conductor

+

Estructura narrativa del capítulo.

+
+ + {!guion ? ( +
+

La IA creará la estructura narrativa basada en tu Idea Motriz.

+ +
+ ) : ( +
+
+
+ {guion.titulo} + {guion.virtudGanada && {guion.virtudGanada}} +
+
+ {!editingGuion && !editingGuionFields && ( + <> + + + + )} + {editingGuion && ( + <> + + + + )} + +
+
+ +
+ {editingGuionFields ? ( + setEditingGuionFields(false)} + /> + ) : ( + <> +
+ {guion.duracionTotal && ( +
+ Duración +

{guion.duracionTotal}

+
+ )} + {guion.aliado?.nombre && ( +
+ Aliado +

{guion.aliado.nombre}

+
+ )} + {guion.gemaGanada && ( +
+ Gema +

{guion.gemaGanada}

+
+ )} +
+ + {guion.nudoDelMundo && ( +
+ Nudo del Mundo +

{guion.nudoDelMundo}

+
+ )} + + {editingGuion ? ( +