morfeo 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,7 +32,12 @@ export type Tema = {
32
32
  fuentes: {titulo: string; texto: string; mono: string};
33
33
  tituloMayusculas: boolean;
34
34
  subtitulos: {
35
- tipo: 'karaoke' | 'pop' | 'bloque' | 'palabra' | 'ninguno';
35
+ /**
36
+ * karaoke: frase arriba, lo dicho en un color y lo pendiente tenue · seleccion: igual, pero solo la palabra clave
37
+ * de cada frase lleva caja de selección con asas · pop: 1–3 palabras grandes · bloque: 2 renglones con caja ·
38
+ * palabra: una palabra a la vez · caja: la frase completa en una etiqueta clara.
39
+ */
40
+ tipo: 'karaoke' | 'seleccion' | 'pop' | 'bloque' | 'palabra' | 'caja' | 'ninguno';
36
41
  mayusculas?: boolean;
37
42
  contorno?: number;
38
43
  fondo?: string; // caja detrás de la frase (karaoke)
@@ -43,7 +48,16 @@ export type Tema = {
43
48
  resalte: string; // caja de la palabra actual ('' = sin caja)
44
49
  maxPalabras: number;
45
50
  };
46
- transicion: 'corte' | 'fundido' | 'deslizar' | 'zoom';
51
+ transicion: 'corte' | 'fundido' | 'deslizar' | 'zoom' | 'barrido' | 'empuje' | 'mascara' | 'destello';
52
+ /** Ritmo de las animaciones: duraciones (s) y curva de las entradas. Sin esto: 0.5 / 0.35 / 0.35 y 'suave'. */
53
+ movimiento?: {entrada?: number; salida?: number; transicion?: number; curva?: 'suave' | 'resorte' | 'seca'};
54
+ /** Acabado sobre todo el cuadro: tinte de color, cono de luz y desenfoque de bordes (profundidad). */
55
+ post?: {
56
+ tinte?: {color: string; fuerza?: number; modo?: 'multiply' | 'screen' | 'overlay' | 'soft-light'};
57
+ luz?: {x?: number; y?: number; ancho?: number; largo?: number; color?: string; fuerza?: number; angulo?: number};
58
+ desenfoqueBordes?: number; // px de blur arriba y abajo (efecto maqueta / profundidad)
59
+ vinetaColor?: string;
60
+ };
47
61
  marca: 'esquina' | 'arriba' | 'ninguna';
48
62
  /** Movimiento suave de cámara por defecto en cada escena (zoom de 1 a este valor). */
49
63
  zoomLento: number;
@@ -62,8 +76,9 @@ export const ESTILOS: Record<string, Tema> = {
62
76
  tituloMayusculas: true,
63
77
  subtitulos: {...SUB_BASE, y: 300, color: '#141414', pendiente: 'rgba(20,20,20,0.28)', resalte: ''},
64
78
  transicion: 'deslizar',
79
+ movimiento: {entrada: 0.45, salida: 0.25, transicion: 0.42, curva: 'seca'},
65
80
  marca: 'esquina',
66
- zoomLento: 1.03,
81
+ zoomLento: 1.02,
67
82
  },
68
83
  // Fondo azul profundo con rayos de luz y burbujas; datos en chips (naturaleza, ciencia, océano)
69
84
  documental: {
@@ -74,10 +89,12 @@ export const ESTILOS: Record<string, Tema> = {
74
89
  colores: {texto: '#FFFFFF', acento: '#7FE3FF', acento2: '#FF5A5A', suave: 'rgba(255,255,255,0.55)', tarjeta: 'rgba(8,20,40,0.78)', tarjetaTexto: '#FFFFFF', borde: '#7FE3FF'},
75
90
  fuentes: {titulo: MONT, texto: MONT, mono: MONO},
76
91
  tituloMayusculas: false,
77
- subtitulos: {...SUB_BASE, color: '#FFFFFF', pendiente: 'rgba(255,255,255,0.42)', resalte: '#2C7BE5'},
92
+ subtitulos: {...SUB_BASE, tipo: 'seleccion', y: 310, tam: 50, color: '#FFFFFF', pendiente: 'rgba(255,255,255,0.5)', resalte: '#4C8DFF'},
78
93
  transicion: 'fundido',
94
+ movimiento: {entrada: 0.6, salida: 0.4, transicion: 0.5, curva: 'suave'},
95
+ post: {tinte: {color: '#1E6BFF', fuerza: 0.14, modo: 'soft-light'}},
79
96
  marca: 'esquina',
80
- zoomLento: 1.06,
97
+ zoomLento: 1.07,
81
98
  },
82
99
  // Escenarios ilustrados (bosque, ciudad): el fondo suele ser una imagen tuya; cielo de atardecer por defecto
83
100
  ilustrado: {
@@ -87,8 +104,10 @@ export const ESTILOS: Record<string, Tema> = {
87
104
  colores: {texto: '#FFFFFF', acento: '#FFE27A', acento2: '#FF6B6B', suave: 'rgba(255,255,255,0.55)', tarjeta: 'rgba(20,14,30,0.75)', tarjetaTexto: '#FFFFFF', borde: '#FFFFFF'},
88
105
  fuentes: {titulo: MONT, texto: MONT, mono: MONO},
89
106
  tituloMayusculas: false,
90
- subtitulos: {...SUB_BASE, color: '#FFFFFF', pendiente: 'rgba(255,255,255,0.45)', resalte: '#3D5AFE'},
107
+ subtitulos: {...SUB_BASE, tipo: 'seleccion', y: 310, tam: 50, color: '#FFFFFF', pendiente: 'rgba(255,255,255,0.5)', resalte: '#4C8DFF'},
91
108
  transicion: 'corte',
109
+ movimiento: {entrada: 0.55, salida: 0.3, transicion: 0.4, curva: 'resorte'},
110
+ post: {tinte: {color: '#FF9A5A', fuerza: 0.1, modo: 'soft-light'}},
92
111
  marca: 'esquina',
93
112
  zoomLento: 1.08,
94
113
  },
@@ -101,10 +120,12 @@ export const ESTILOS: Record<string, Tema> = {
101
120
  colores: {texto: '#FFFFFF', acento: '#FFD66B', acento2: '#FF4A4A', suave: 'rgba(255,255,255,0.5)', tarjeta: 'rgba(0,0,0,0.6)', tarjetaTexto: '#FFD66B', borde: '#FFD66B'},
102
121
  fuentes: {titulo: ANTON, texto: MONT, mono: MONO},
103
122
  tituloMayusculas: true,
104
- subtitulos: {...SUB_BASE, color: '#FFFFFF', pendiente: 'rgba(255,255,255,0.4)', resalte: ''},
123
+ subtitulos: {...SUB_BASE, tipo: 'seleccion', y: 310, tam: 50, color: '#FFFFFF', pendiente: 'rgba(255,255,255,0.45)', resalte: '#FFD66B'},
105
124
  transicion: 'corte',
125
+ movimiento: {entrada: 0.6, salida: 0.35, transicion: 0.45, curva: 'suave'},
126
+ post: {luz: {x: 700, ancho: 900, largo: 1700, color: '#FFE2A8', fuerza: 0.22, angulo: 12}, vinetaColor: '#05060F'},
106
127
  marca: 'esquina',
107
- zoomLento: 1.05,
128
+ zoomLento: 1.06,
108
129
  },
109
130
  // Objetos sobre una mesa con foco de luz, contadores tipo LCD (dinero, crecimiento, comparaciones)
110
131
  mesa: {
@@ -115,10 +136,12 @@ export const ESTILOS: Record<string, Tema> = {
115
136
  colores: {texto: '#FFFFFF', acento: '#FFD24A', acento2: '#5CFF7A', suave: 'rgba(255,255,255,0.5)', tarjeta: 'rgba(10,8,6,0.85)', tarjetaTexto: '#FFD24A', borde: '#3A2A1A'},
116
137
  fuentes: {titulo: ANTON, texto: MONT, mono: MONO},
117
138
  tituloMayusculas: true,
118
- subtitulos: {...SUB_BASE, color: '#FFFFFF', pendiente: 'rgba(255,255,255,0.4)', resalte: '#2C7BE5'},
139
+ subtitulos: {...SUB_BASE, tipo: 'seleccion', y: 310, tam: 50, color: '#FFFFFF', pendiente: 'rgba(255,255,255,0.45)', resalte: '#4C8DFF'},
119
140
  transicion: 'fundido',
141
+ movimiento: {entrada: 0.55, salida: 0.35, transicion: 0.5, curva: 'resorte'},
142
+ post: {luz: {x: 540, ancho: 820, largo: 1500, color: '#FFD9A0', fuerza: 0.3}, desenfoqueBordes: 5, vinetaColor: '#0A0503'},
120
143
  marca: 'esquina',
121
- zoomLento: 1.04,
144
+ zoomLento: 1.05,
122
145
  },
123
146
  // El de los shorts clásicos (morado oscuro, Anton, amarillo): para capas dentro de 'datos-curiosos'
124
147
  'datos-curiosos': {
@@ -129,6 +152,7 @@ export const ESTILOS: Record<string, Tema> = {
129
152
  tituloMayusculas: true,
130
153
  subtitulos: {...SUB_BASE, tipo: 'pop', y: 1420, color: '#FFFFFF', pendiente: '#FFFFFF', resalte: ''},
131
154
  transicion: 'corte',
155
+ movimiento: {entrada: 0.45, salida: 0.25, transicion: 0.3, curva: 'resorte'},
132
156
  marca: 'arriba',
133
157
  zoomLento: 1,
134
158
  },
@@ -141,8 +165,9 @@ export const ESTILOS: Record<string, Tema> = {
141
165
  tituloMayusculas: true,
142
166
  subtitulos: {tipo: 'bloque', y: 1080, tam: 62, maxPalabras: 4, color: '#FFFFFF', pendiente: '#FFFFFF', resalte: '#FF3B5C', contorno: 8},
143
167
  transicion: 'corte',
168
+ movimiento: {entrada: 0.45, salida: 0.25, transicion: 0.3, curva: 'resorte'},
144
169
  marca: 'ninguna',
145
- zoomLento: 1.02,
170
+ zoomLento: 1.03,
146
171
  },
147
172
  // Infografía plana (cuerpo, ciencia, comparaciones): gris claro, encabezado y subtítulos abajo en caja
148
173
  infografia: {
@@ -152,22 +177,25 @@ export const ESTILOS: Record<string, Tema> = {
152
177
  fuentes: {titulo: MONT, texto: MONT, mono: MONO},
153
178
  tituloMayusculas: true,
154
179
  subtitulos: {tipo: 'karaoke', y: 1500, tam: 48, maxPalabras: 4, color: '#FFFFFF', pendiente: 'rgba(255,255,255,0.45)', resalte: '', fondo: '#1B1B1F'},
155
- transicion: 'corte',
180
+ transicion: 'empuje',
181
+ movimiento: {entrada: 0.42, salida: 0.25, transicion: 0.45, curva: 'seca'},
156
182
  marca: 'esquina',
157
- zoomLento: 1.0,
183
+ zoomLento: 1.02,
158
184
  },
159
185
  // Escenas 3D (construcción, cómo funciona por dentro): una palabra grande a la vez
160
186
  '3d': {
161
187
  fondo: {tipo: 'degradado', colores: ['#BFE3FF', '#EAF6FF']},
162
188
  vineta: 0.1,
163
189
  // cielo claro: el texto propio va oscuro; los subtítulos siguen blancos con contorno negro
164
- colores: {texto: '#14233A', acento: '#FF8A00', acento2: '#FF5A36', suave: '#4F6278', tarjeta: 'rgba(20,20,20,0.78)', tarjetaTexto: '#FFFFFF', borde: '#141414'},
190
+ colores: {texto: '#14233A', acento: '#FFC400', acento2: '#FF5A36', suave: '#4F6278', tarjeta: 'rgba(20,20,20,0.78)', tarjetaTexto: '#FFFFFF', borde: '#141414'},
165
191
  fuentes: {titulo: MONT, texto: MONT, mono: MONO},
166
192
  tituloMayusculas: true,
167
- subtitulos: {tipo: 'palabra', y: 1400, tam: 76, maxPalabras: 1, color: '#FFFFFF', pendiente: '#FFFFFF', resalte: '', contorno: 10},
193
+ subtitulos: {tipo: 'pop', y: 1380, tam: 50, maxPalabras: 3, color: '#FFFFFF', pendiente: '#FFFFFF', resalte: '', contorno: 10},
168
194
  transicion: 'corte',
195
+ movimiento: {entrada: 0.5, salida: 0.3, transicion: 0.35, curva: 'resorte'},
196
+ post: {desenfoqueBordes: 4},
169
197
  marca: 'esquina',
170
- zoomLento: 1.0,
198
+ zoomLento: 1.04,
171
199
  },
172
200
  // Oscuro y limpio, para lo que sea
173
201
  minimal: {
@@ -178,8 +206,9 @@ export const ESTILOS: Record<string, Tema> = {
178
206
  tituloMayusculas: false,
179
207
  subtitulos: {...SUB_BASE, color: '#FFFFFF', pendiente: 'rgba(255,255,255,0.35)', resalte: '#8B7BFF'},
180
208
  transicion: 'fundido',
209
+ movimiento: {entrada: 0.5, salida: 0.3, transicion: 0.4, curva: 'suave'},
181
210
  marca: 'esquina',
182
- zoomLento: 1.03,
211
+ zoomLento: 1.04,
183
212
  },
184
213
  };
185
214
 
@@ -10,6 +10,9 @@ export type CtxEscena = {
10
10
  tema: Tema;
11
11
  semilla: string;
12
12
  inicios?: number[]; // inicio de cada escena (para el HUD: cambios en {escena: n})
13
+ escena?: number; // en el `mundo`: número de la escena actual (1 = la primera)
14
+ camara?: {x: number; y: number; zoom: number; giro: number}; // en el `mundo`: la cámara de este cuadro (para paralaje)
15
+ tEscena?: number; // en el `mundo`: segundos desde que empezó la escena actual
13
16
  };
14
17
 
15
18
  const norm = (s: string) =>
package/remotion/tipos.ts CHANGED
@@ -21,6 +21,8 @@ export type Datos = {
21
21
  estilo?: string; // 'datos-curiosos' (clásico) o un estilo del motor de capas
22
22
  tema?: Record<string, any>; // ajustes del estilo para este video
23
23
  hud?: Record<string, any>[]; // capas fijas sobre todo el video (día, barra de progreso, hora...)
24
+ mundo?: Record<string, any>[]; // capas del mundo: persisten todo el video y la cámara las recorre con la `toma` de cada escena
25
+ serie?: string; // pastilla fija arriba: 'GYM CON CIENCIA · PARTE 5'
24
26
  audio: string;
25
27
  whisper: number;
26
28
  escenas: Escena[];