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.
- package/bin/morfeo.mjs +35 -1
- package/index.d.ts +57 -5
- package/lib/config.mjs +11 -8
- package/lib/estructura.mjs +104 -0
- package/lib/guion.mjs +25 -8
- package/lib/hoja.mjs +98 -0
- package/lib/imagenes.mjs +2 -1
- package/lib/personajes.mjs +1 -1
- package/lib/recursos.mjs +2 -1
- package/lib/render.mjs +9 -2
- package/package.json +2 -1
- package/python/preparar.py +1 -1
- package/remotion/estilo.ts +13 -0
- package/remotion/kit/ilustrado.tsx +220 -0
- package/remotion/kit/index.ts +6 -0
- package/remotion/kit/tres.tsx +328 -0
- package/remotion/motor/Video.tsx +171 -20
- package/remotion/motor/anotaciones.tsx +296 -0
- package/remotion/motor/capas.tsx +50 -27
- package/remotion/motor/fondo.tsx +56 -2
- package/remotion/motor/plantillas.tsx +26 -1
- package/remotion/motor/subtitulos.tsx +159 -36
- package/remotion/motor/tema.ts +46 -17
- package/remotion/motor/util.ts +3 -0
- package/remotion/tipos.ts +2 -0
package/remotion/motor/tema.ts
CHANGED
|
@@ -32,7 +32,12 @@ export type Tema = {
|
|
|
32
32
|
fuentes: {titulo: string; texto: string; mono: string};
|
|
33
33
|
tituloMayusculas: boolean;
|
|
34
34
|
subtitulos: {
|
|
35
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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: '
|
|
180
|
+
transicion: 'empuje',
|
|
181
|
+
movimiento: {entrada: 0.42, salida: 0.25, transicion: 0.45, curva: 'seca'},
|
|
156
182
|
marca: 'esquina',
|
|
157
|
-
zoomLento: 1.
|
|
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: '#
|
|
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: '
|
|
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.
|
|
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.
|
|
211
|
+
zoomLento: 1.04,
|
|
183
212
|
},
|
|
184
213
|
};
|
|
185
214
|
|
package/remotion/motor/util.ts
CHANGED
|
@@ -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[];
|