Saltar al contenido

Video · Animación

Todo entra una vez, sin rebote, y se queda quieto.

Así se mueve cada elemento de un video nuestro, en vivo y con su duración.

La idea

Cinco curvas, siete duraciones y ninguna rebota.

Cada curva tiene un trabajo, y todo lo que entra usa la misma.

entrada

Todo lo que entra: llega rápido y se asienta despacio.

Video 467 ms
Web 300 ms

estado

Algo que ya está cambia: la perilla, una barra, el zoom.

Video 500 ms
Web 300 ms

salida

Todo lo que sale: se va acelerando.

Video 267 ms
Web 150 ms

micro

Color, clic y conteo de cifras.

Video 200 ms
Web 150 ms

fundido (lineal)

Solo opacidad: el fundido.

Video 300 ms
Web 200 ms

Ocho reglas, cada una con su motivo.

  1. Corte seco primero. Entre dos escenas no pasa nada: el movimiento vive dentro de cada escena y el ojo va solo a lo que cambia.

  2. Lo que entra: fundido y 8 px hacia arriba. Llega rápido y se asienta despacio, sin rebote.

  3. Primero lo quieto, después el contenido y al final lo encendido. El azul llega último, porque solo una cosa debe mirarse.

  4. Una vez y quieto. Una cifra o una barra sube y se queda al menos 1 s: el dueño ya vive entre notificaciones que parpadean.

  5. Escalonado corto. Máximo 4 tarjetas o 6 barras (con más, todas a la vez): más que eso se lee como ruido.

  6. Una idea cada 2,5 a 4 s. El resto del tiempo la imagen casi no se mueve, y deja respirar lo que acaba de entrar.

  7. Entra cuando la voz lo nombra. La voz lleva el argumento y la imagen lo demuestra, nunca al revés.

  8. Con «reducir movimiento», solo fundidos. Sin desplazamiento, para quien lo pide en su dispositivo.

Ver los valores exactos: curvas y duraciones
CurvaTokencubic-bezierVideo · 30 fpsWeb
entradacubic-bezier(.05, .7, .1, 1)14 f · 467 ms300 ms
estadocubic-bezier(.4, 0, 0, 1)15 f · 500 ms300 ms
salidacubic-bezier(.3, 0, .8, .15)8 f · 267 ms150 ms
microcubic-bezier(.2, 0, 0, 1)6 f · 200 ms150 ms
fundido (lineal)cubic-bezier(0, 0, 1, 1)9 f · 300 ms200 ms
DuraciónTokenVideo · 30 fpsWebPara qué
micro6 f · 200 ms150 msColor, clic y conteo
fundido9 f · 300 ms200 msOpacidad
salida8 f · 267 ms150 msLo que sale
entrada14 f · 467 ms300 msLo que entra
estado15 f · 500 ms300 msEl gesto de marca, un empuje
cámara—21 f · 700 ms—Zoom a un detalle
dato24 f · 800 ms800 ms, una vezBarras y conteos (nunca más de 1 s)

A 60 fps se duplican los fotogramas; los milisegundos no cambian. En video los tiempos son más largos porque quien mira no controla nada. Entre elementos van de 3 a 4 f. En los videos de Notion, un plano típico dura de 2,3 a 3 s en cuatro de seis.

Aplicado

Diecisiete elementos cubren todo lo que se ve.

Pulsa «Repetir» para verlo otra vez o «Cámara lenta» para ver cada cuadro.

01

Titular apilado con la clave en caja azul

Una a cuatro palabras, una debajo de otra. La clave llega al final y se enciende en una caja azul con texto blanco.

Dónde Gancho de reels y anuncios, y el cambio de idea en el explicativo. Una palabra clave por titular.

Un entrevistado de perfil y, a su lado, «TO DOING ILLEGAL» con la palabra «ILLEGAL» en una caja roja con texto blanco
The Diary Of A CEO · «Druski: ¡Te Mienten Sobre el Éxito Rápido!» · 0:06,9 · ver original

La palabra clave va sola en una caja de color con texto blanco, en el vacío junto a la cara. Nosotros: la caja es azul y llega la última.

Un invitado y, a su derecha, la frase «or be in my head, they would be miserable» apilada, con «miserable» en rojo
The Diary Of A CEO · «MrBeast: Si quieres caer bien, no ayudes a la gente…» · 0:05,4 · ver original

Una frase en una a cuatro palabras por línea, una debajo de otra, y una sola enfatizada. Nosotros: tinta sobre blanco y la clave en azul.

Ver valores y fotogramas
Duración
14 f · 467 ms por palabra en video
300 ms en web
Curva

cubic-bezier(.05, .7, .1, 1)
Detalle
4 f entre palabras · la caja se enciende en 6 f (micro)
Titular apilado con la clave en caja azul, fotograma 0
f 0 · 0 ms«Tus» op 0 %
y 8 px
Titular apilado con la clave en caja azul, fotograma 6
f 6 · 200 ms«clientes» op 71 %
y 2,3 px
Titular apilado con la clave en caja azul, fotograma 14
f 14 · 467 ms«escribiendo» op 71 %
y 2,3 px
Titular apilado con la clave en caja azul, fotograma 22
f 22 · 733 ms«escribiendo» op 99 %
y 0,1 px
Titular apilado con la clave en caja azul, fotograma 32
f 32 · 1067 mscaja azul 73 %
texto tinta → blanco
Titular apilado con la clave en caja azul, fotograma 60
f 60 · 2000 mscaja azul 100 %
texto tinta → blanco
Cómo se escribe en Remotion
const a = anim(frame, i * 4, DUR.entrada, 'entrada');       // 14 f, 4 f entre palabras
const estilo = {opacity: a, transform: `translateY(${(1 - a) * 8}px)`};
const azul = anim(frame, 30, DUR.micro, 'micro');               // la caja llega al final, en 6 f
background: `color-mix(in srgb, ${C.encendido} ${azul * 100}%, transparent)`
02

Subtítulo con la palabra que suena en azul

De una a tres palabras por bloque. Se enciende la palabra activa un instante antes de oírla; el bloque cambia con corte seco.

Dónde Reels, anuncios y clips de charla, siempre: muchos se ven sin sonido.

Ver valores, referencias y fotogramas
Duración
6 f · 200 ms por palabra en video
150 ms en web
Curva

cubic-bezier(.2, 0, 0, 1)
Detalle
una sola palabra azul a la vez · se enciende 2 f antes de oírla
Un entrevistado gesticulando con un subtítulo pequeño blanco abajo: «the barrel of that gun»
The Diary Of A CEO · «Druski: ¡Te Mienten Sobre el Éxito Rápido!» · 0:13,8 · ver original

El subtítulo va chico, en una línea, sobre el plano. Nosotros: lo ponemos en una caja gris al 90 % y encendemos en azul la palabra que suena.

Subtítulo con la palabra que suena en azul, fotograma 0
f 0 · 0 msbloque 1
«Rosa» azul 73 %
Subtítulo con la palabra que suena en azul, fotograma 9
f 9 · 300 msbloque 1
«escribió» azul 73 %
Subtítulo con la palabra que suena en azul, fotograma 21
f 21 · 700 msbloque 2 · corte seco
activa: «a»
Subtítulo con la palabra que suena en azul, fotograma 25
f 25 · 833 msbloque 2
«las» azul 73 %
Subtítulo con la palabra que suena en azul, fotograma 30
f 30 · 1000 msbloque 2
«10:47» azul 73 %
Subtítulo con la palabra que suena en azul, fotograma 50
f 50 · 1667 msbloque 2
«» azul 100 %
Cómo se escribe en Remotion
const d = palabras[i].desde;                       // tiempos de whisper.cpp, en fotogramas
const a = interpolate(frame, [d - 2, d + 4], [0, 1], {
  easing: Easing.bezier(0.2, 0, 0, 1),
  extrapolateLeft: 'clamp', extrapolateRight: 'clamp',
});
const color = mezcla(TINTA, AZUL, a);
03

Rótulo de nombre: primero el fondo, luego el texto

Abajo a la izquierda, 3,5 s. El fondo sale de izquierda a derecha; el nombre entra con un fundido; todo se va con corte seco.

Dónde La primera vez que habla alguien; una vez por persona y por video.

Ver valores, referencias y fotogramas
Duración
8 f · 267 ms el fondo, 9 f el texto en video
200 ms en web
Curva

cubic-bezier(0, 0, 1, 1)
Detalle
se sostiene ~3,5 s (aquí 105 f)
Una mujer en una sala de butacas rojas con el rótulo «Emelyn / Stuart Cinema & Café» abajo a la izquierda
Vox · «The business of independent movie theaters, explained» · 0:10,0 · ver original

Rótulo chico abajo a la izquierda: nombre en negrita y lugar debajo, con una línea fina. Nosotros: caja con el fondo que se revela y el texto 4 f después.

Un invitado en primer plano con su nombre grande en blanco sobre el pecho
Colin and Samir · «Cómo Markiplier hizo una película que Hollywood no pudo ignorar» · 0:02,3 · ver original

El nombre aparece en el primer plano, en blanco y bien grande, y se va. Nosotros: más chico y con el cargo, siempre abajo a la izquierda.

Rótulo de nombre: primero el fondo, luego el texto, fotograma 0
f 0 · 0 msfondo 0 %
texto 0 %
Rótulo de nombre: primero el fondo, luego el texto, fotograma 6
f 6 · 200 msfondo 0 %
texto 0 %
Rótulo de nombre: primero el fondo, luego el texto, fotograma 10
f 10 · 333 msfondo 50 %
texto 0 %
Rótulo de nombre: primero el fondo, luego el texto, fotograma 14
f 14 · 467 msfondo 100 %
texto 44 %
Rótulo de nombre: primero el fondo, luego el texto, fotograma 60
f 60 · 2000 msfondo 100 %
texto 100 %
Rótulo de nombre: primero el fondo, luego el texto, fotograma 111
f 111 · 3700 mscorte seco
sin rótulo
Cómo se escribe en Remotion
const m = anim(frame, ini, 8, 'lineal');          // el fondo se revela
const t = anim(frame, ini + 4, 9, 'lineal');      // el texto llega 4 f después
<div style={{clipPath: `inset(0 ${(1 - m) * 100}% 0 0)`}}>
  <span style={{opacity: t}}>{nombre}</span>
</div>
04

Rótulo de fecha: el mismo gesto del nombre

Día y hora en la primera línea; el lugar debajo. Los datos de ejemplo llevan siempre la palabra «Ejemplo».

Dónde Cuando el tiempo cuenta: «Martes · 10:47 p. m.» abre «La vida de un chat».

Ver valores, referencias y fotogramas
Duración
8 f · 267 ms el fondo, 9 f el texto en video
200 ms en web
Curva

cubic-bezier(0, 0, 1, 1)
Detalle
misma entrada que el nombre
Una persona frente a un auto quemado con el rótulo «January 2025» abajo a la izquierda
Colin and Samir · «Mi auto quemado» · 0:04,7 · ver original

La fecha va en un rótulo sencillo, abajo a la izquierda, sobre la imagen que la prueba. Nosotros: el mismo lugar y la misma entrada que el nombre.

Rótulo de fecha: el mismo gesto del nombre, fotograma 0
f 0 · 0 msfondo 0 %
texto 0 %
Rótulo de fecha: el mismo gesto del nombre, fotograma 6
f 6 · 200 msfondo 0 %
texto 0 %
Rótulo de fecha: el mismo gesto del nombre, fotograma 10
f 10 · 333 msfondo 50 %
texto 0 %
Rótulo de fecha: el mismo gesto del nombre, fotograma 14
f 14 · 467 msfondo 100 %
texto 44 %
Rótulo de fecha: el mismo gesto del nombre, fotograma 60
f 60 · 2000 msfondo 100 %
texto 100 %
Rótulo de fecha: el mismo gesto del nombre, fotograma 111
f 111 · 3700 mscorte seco
sin rótulo
Cómo se escribe en Remotion
// igual que el rótulo de nombre: solo cambia el texto
<Rotulo texto="Martes · 10:47 p. m." ini={6} izq={80} abajo={96} />

Sincronía

La voz manda: todo entra cuando la nombra.

La imagen entra un instante antes de que se oiga la palabra.

Ver cómo se calcula el instante
{"word": "escribió", "start": 0.32}
f = redondear(0,32 × 30) − 2 = 8

Un programa (whisper.cpp) transcribe la narración y da el instante exacto de cada palabra. Con ese tiempo, la burbuja de Rosa entra en el fotograma 8. Cada elemento dura 14 f (entrada) y el titular entra palabra por palabra, una cada 4 f.

Referencia

De Notion tomamos seis movimientos.

Miramos seis videos oficiales de Notion. Cada movimiento va con su cuadro original y con nuestra versión, en un solo azul.

01

El titular sube desde una línea invisible

Notion
Sube en ~0,33 a 0,4 s; la segunda línea entra ~0,08 s después; se sostiene 1,8 a 2,3 s y se corta.
Nosotros
Sube con la curva de entrada y la segunda línea llega un instante después. Se sostiene y sale con corte seco.
Ver valores, referencias y fotogramas
Duración
10 f · 333 ms en video
300 ms en web
Curva

cubic-bezier(.05, .7, .1, 1)
Detalle
10 f · segunda línea 3 f después
El titular sube desde una línea invisible
Notion (canal oficial de YouTube) · Introducing the new Notion AI · 0:02,8 · ver original

El titular sube desde una línea invisible, y la segunda línea entra un instante después. Nosotros: 10 f con la curva de entrada y 3 f entre líneas.

El titular sube desde una línea invisible, fotograma 0
f 0 · 0 mslínea 1 ↑ 0 %
línea 2 ↑ 0 %
El titular sube desde una línea invisible, fotograma 3
f 3 · 100 mslínea 1 ↑ 87 %
línea 2 ↑ 0 %
El titular sube desde una línea invisible, fotograma 6
f 6 · 200 mslínea 1 ↑ 97 %
línea 2 ↑ 87 %
El titular sube desde una línea invisible, fotograma 10
f 10 · 333 mslínea 1 ↑ 100 %
línea 2 ↑ 99 %
El titular sube desde una línea invisible, fotograma 13
f 13 · 433 mslínea 1 ↑ 100 %
línea 2 ↑ 100 %
El titular sube desde una línea invisible, fotograma 40
f 40 · 1333 mslínea 1 ↑ 100 %
línea 2 ↑ 100 %
Cómo se escribe en Remotion
const y = (1 - anim(frame, 3 * i, 10, 'entrada')) * 112;   // % de la altura de la línea
<div style={{overflow: 'hidden'}}>
  <div style={{transform: `translateY(${y}%)`}}>{linea}</div>
</div>
02

Una palabra se subraya en azul

Notion
Un subrayado a mano se dibuja en ~0,45 s sobre la palabra «new».
Nosotros
Subrayado azul que se dibuja de izquierda a derecha. Helvetica Bold, sin cursiva ni trazo a mano.
Ver valores, referencias y fotogramas
Duración
12 f · 400 ms en video
300 ms en web
Curva

cubic-bezier(.4, 0, 0, 1)
Detalle
12 f · 400 ms
«new» se subraya con un trazo hecho a mano
Notion (canal oficial de YouTube) · Introducing the new Notion AI · 0:03,5 · ver original

Una sola palabra se subraya con un trazo que se dibuja de izquierda a derecha. Nosotros: subrayado azul de 12 f.

Una palabra se subraya en azul, fotograma 0
f 0 · 0 mstexto op 0 %
subrayado 0 %
Una palabra se subraya en azul, fotograma 14
f 14 · 467 mstexto op 100 %
subrayado 0 %
Una palabra se subraya en azul, fotograma 18
f 18 · 600 mstexto op 100 %
subrayado 0 %
Una palabra se subraya en azul, fotograma 24
f 24 · 800 mstexto op 100 %
subrayado 86 %
Una palabra se subraya en azul, fotograma 30
f 30 · 1000 mstexto op 100 %
subrayado 100 %
Una palabra se subraya en azul, fotograma 50
f 50 · 1667 mstexto op 100 %
subrayado 100 %
Cómo se escribe en Remotion
const sub = anim(frame, 18, 12, 'estado');
<i style={{transform: `scaleX(${sub})`, transformOrigin: 'left'}} />
03

El cursor viaja, hace clic y aparece el resultado

Notion
Cursor visible y clic sobre el elemento; un solo clic por escena.
Nosotros
Viaja con la curva de estado, espera un instante, hace clic y enseguida aparece el resultado.
Ver valores, referencias y fotogramas
Duración
21 f el viaje · 5 f el clic en video
300 ms en web
Curva

cubic-bezier(.4, 0, 0, 1)
Detalle
viaje 700 ms · espera 4 f · clic 150 ms · resultado 4 f después
El avatar «N» con un cursor que hace clic
Notion (canal oficial de YouTube) · New Year. New You. Introducing Notion Faces. · 0:16,5 · ver original

Un cursor grande hace clic sobre el elemento, en lugar de capturar toda la pantalla.

Acercamiento al botón «+» con la ayuda «Add a new view»
Notion (canal oficial de YouTube) · ¿Qué son las vistas de base de datos en Notion? | Consejo rápido · 0:18,6 · ver original

Acercamiento al botón exacto, con el cursor y una ayuda flotante: un solo clic por escena.

El cursor viaja, hace clic y aparece el resultado, fotograma 0
f 0 · 0 msrecorrido 0 %
cursor ×1
El cursor viaja, hace clic y aparece el resultado, fotograma 12
f 12 · 400 msrecorrido 91 %
cursor ×1
El cursor viaja, hace clic y aparece el resultado, fotograma 21
f 21 · 700 msrecorrido 100 %
pausa 4 f
El cursor viaja, hace clic y aparece el resultado, fotograma 25
f 25 · 833 msclic: botón ×0,97
anillo 50 px
El cursor viaja, hace clic y aparece el resultado, fotograma 27
f 27 · 900 msclic: botón ×0,97
anillo 100 px
El cursor viaja, hace clic y aparece el resultado, fotograma 40
f 40 · 1333 msresultado +4 f
chip op 100 %
Cómo se escribe en Remotion
const p = interpolate(frame, [0, 21], [0, 1], {
  easing: Easing.bezier(0.4, 0, 0, 1), extrapolateRight: 'clamp',
});
const x = x0 + (x1 - x0) * p;
const y = y0 + (y1 - y0) * p;   // recto
04

Se escribe solo dentro de un campo

Notion
Escribe letra por letra, ~15 letras por segundo, con cursor; en el lanzamiento, a tamaño gigante.
Nosotros
La cámara llega al campo y escribe con el cursor fijo. Una frase de 2 s como máximo.
Ver valores, referencias y fotogramas
Duración
21 f el acercamiento · 2 f por letra en video
300 ms en web
Curva

cubic-bezier(.4, 0, 0, 1)
Detalle
acercamiento 21 f · 2 f por letra (66 ms)
Acercamiento al cuadro de texto mientras se escribe
Notion (canal oficial de YouTube) · Introducing the new Notion AI · 0:14,9 · ver original

La cámara se acerca al cuadro de texto y la pregunta se escribe letra por letra, con el cursor visible.

Escribir a tamaño gigante: «Crea|»
Notion (canal oficial de YouTube) · Presentamos Notion 3.0: Agentes · 0:23,3 · ver original

El texto se escribe en pantalla a tamaño gigante, con cursor. Nosotros: solo dentro de un campo, nunca en un titular.

Se escribe solo dentro de un campo, fotograma 0
f 0 · 0 mscámara ×1
0 de 28 letras
Se escribe solo dentro de un campo, fotograma 14
f 14 · 467 mscámara ×1,3
0 de 28 letras
Se escribe solo dentro de un campo, fotograma 24
f 24 · 800 mscámara ×1,3
0 de 28 letras
Se escribe solo dentro de un campo, fotograma 34
f 34 · 1133 mscámara ×1,3
5 de 28 letras
Se escribe solo dentro de un campo, fotograma 50
f 50 · 1667 mscámara ×1,3
13 de 28 letras
Se escribe solo dentro de un campo, fotograma 80
f 80 · 2667 mscámara ×1,3
28 de 28 letras
Cómo se escribe en Remotion
const n = Math.floor((frame - 24) / 2);              // 2 f por letra (66 ms)
const texto = FRASE.slice(0, Math.max(0, n));
const z = anim(frame, 0, DUR.camara, 'estado', 1, 1.3);   // la cámara llega al campo
05

Acercamiento al detalle, el resto atenuado

Notion
Un acercamiento corto (~0,3 s) a la parte que importa, con el resto fuera de cuadro.
Nosotros
Se acerca hasta ×1,3 y lo demás baja a 40 %. Vuelve con la misma curva. Sin desenfoque.
Ver valores, referencias y fotogramas
Duración
21 f · 700 ms en video
Curva

cubic-bezier(.4, 0, 0, 1)
Detalle
21 f · 700 ms
Acercamiento a la lista de tareas de la interfaz
Notion (canal oficial de YouTube) · Presentamos Notion 3.0: Agentes · 0:05,3 · ver original

Después del plano general, un acercamiento corto a la parte que importa, con el resto fuera de cuadro.

Acercamiento al detalle, el resto atenuado, fotograma 0
f 0 · 0 mscámara ×1
resto op 100 %
Acercamiento al detalle, el resto atenuado, fotograma 8
f 8 · 267 mscámara ×1,2
resto op 87 %
Acercamiento al detalle, el resto atenuado, fotograma 12
f 12 · 400 mscámara ×1,3
resto op 60 %
Acercamiento al detalle, el resto atenuado, fotograma 21
f 21 · 700 mscámara ×1,3
resto op 40 %
Acercamiento al detalle, el resto atenuado, fotograma 66
f 66 · 2200 mscámara ×1,3
resto op 40 %
Acercamiento al detalle, el resto atenuado, fotograma 81
f 81 · 2700 mscámara ×1
resto op 100 %
Cómo se escribe en Remotion
const z = interpolate(frame, [0, 21], [0, 1], {
  easing: Easing.bezier(0.4, 0, 0, 1), extrapolateRight: 'clamp',
});
const s = 1 + 0.3 * z;
const resto = interpolate(frame, [6, 15], [1, 0.4]);
06

La espera: tres puntos, una sola pasada

Notion
«Crafting» y tres puntos de color mientras trabaja, en un estado a la vez.
Nosotros
Tres puntos grises que se encienden en tinta uno por uno y, al terminar, corte seco a «Reporte listo» con el único azul.
Ver valores, referencias y fotogramas
Duración
6 f por punto · 8 f entre puntos en video
150 ms en web
Curva

cubic-bezier(.2, 0, 0, 1)
«Crafting» con tres puntos de colores mientras la IA trabaja
Notion (canal oficial de YouTube) · Presentamos Notion 3.0: Agentes · 0:33,6 · ver original

La espera se muestra con una palabra y tres puntos, no con una barra de carga. Nosotros: tres puntos que se encienden una vez y un solo azul al terminar.

La espera: tres puntos, una sola pasada, fotograma 0
f 0 · 0 mspunto 1 0 %
punto 2 0 %
punto 3 0 %
La espera: tres puntos, una sola pasada, fotograma 6
f 6 · 200 mspunto 1 0 %
punto 2 0 %
punto 3 0 %
La espera: tres puntos, una sola pasada, fotograma 14
f 14 · 467 mspunto 1 100 %
punto 2 0 %
punto 3 0 %
La espera: tres puntos, una sola pasada, fotograma 22
f 22 · 733 mspunto 1 100 %
punto 2 100 %
punto 3 0 %
La espera: tres puntos, una sola pasada, fotograma 30
f 30 · 1000 mspunto 1 100 %
punto 2 100 %
punto 3 100 %
La espera: tres puntos, una sola pasada, fotograma 50
f 50 · 1667 mscorte seco
listo: único azul
Cómo se escribe en Remotion
const punto = (i: number) => anim(frame, 6 + i * 8, 6, 'micro');   // 6 f, uno tras otro
background: mezcla(C.tinta, punto(i) * 100, C.apagado)
Ver los siete rasgos de Notion, medidos, y qué hacemos con cada uno
RasgoNotionNosotros
CortesCorte seco casi siempre; el movimiento vive dentro de la escena (solo 2 a 8 cambios graduales por video).Corte seco por defecto y entrada de 14 f dentro de la escena.
Fondo y colorLienzo casi blanco y un campo de color liso por función (azul, rojo, amarillo).Blanco o papel y un solo azul por vista.
TitularSube desde una máscara en 0,33 a 0,4 s; segunda línea 0,08 s después; se sostiene 1,8 a 2,3 s y se corta.Sube 10 f con la curva de entrada; segunda línea 3 f después; se sostiene 1,8 a 2,3 s y sale con corte.
ÉnfasisUna palabra con un subrayado a mano que se dibuja en ~0,45 s.Subrayado azul que se dibuja en 12 f (400 ms); Helvetica Bold, sin cursiva.
ProductoCursor visible y clic; el texto se escribe a ~15 letras por segundo; acercamiento de ~0,3 s.Cursor 700 ms y clic 150 ms; texto a 2 f por letra, solo en un campo; acercamiento de 21 f hasta ×1,3.
IlustraciónLínea negra con punteado y un color plano por ícono.No: nuestro personaje es el Memoji 3D y sale solo en el cierre.
FirmaCubo y cursor a los 0,5 s; cierra con una frase corta y el cubo solo (~1 s); el logo nunca queda fijo.El gesto de marca cierra el video: la perilla sube y el nombre entra. El logo nunca queda fijo.

Medido en la apertura (0 a ~58 s) de cada video; tiempos finos a ±0,1 a 0,3 s. Los cuadros son de los videos del canal oficial de Notion y llevan su enlace.

Lo que no hacemos

Nada rebota, brilla, gira ni parpadea.

Cada «no» corre al lado de su «sí». Pulsa «Repetir» en cualquiera y se repiten los dos.

Sí

Entra con la curva de entrada: llega rápido y se asienta en 14 f.

No · rebote

Rebote: el titular se pasa de su sitio y vuelve. Un interruptor de verdad sube una vez y se queda.

Sí

Se enciende una vez, en 6 f, y se queda.

No · parpadeo

Parpadeo: el dueño ya vive entre notificaciones que parpadean.

Sí

Un fundido de 9 f, sin desplazamiento.

No · giro en 3D

Giro en 3D: la traslación se entiende mejor que la rotación, y en el teléfono marea.

Ver siete movimientos más que no usamos
Sí

Un botón plano que entra y se queda.

No · brillo o halo

Brillo o halo: en el sistema no hay sombras ni luz.

Sí

El color llega de golpe, en 6 f.

No · degradado que cambia

Degradado que va cambiando: la marca no tiene degradados.

Sí

Cada palabra sube una vez y queda quieta.

No · texto que tiembla

Texto que tiembla: parece un error de la pantalla.

Sí

El guiño es un punto azul que se enciende.

No · confeti

Confeti y partículas: celebrar con ruido le quita seriedad a la cifra.

Sí

Las palabras entran enteras, cada 4 f.

No · letra por letra

Letra por letra en un titular: se lee lento. Solo se escribe dentro de un campo.

Sí

Solo opacidad y 8 px hacia arriba, nítido desde el primer cuadro.

No · desenfoque que se aclara

Desenfoque que se aclara (Diary of a CEO): lo borroso cansa y nuestra marca es nítida.

Sí

Fichas rectas que entran con 3 f de diferencia.

No · fichas inclinadas con rayitas

Fichas inclinadas con rayitas de velocidad (Notion): nuestra marca es recta y no corre.

Descargar

Llévate todo lo que ves aquí.

Hoja de animaciones

Un solo HTML que funciona sin conexión: los veintitrés escenarios y los diez pares «sí / no», en claro y en oscuro.

Hoja (HTML)

Componentes en JS y CSS

Las escenas de esta página, listas para pegar en una landing.

Componentes (ZIP)

Componentes de Remotion

El kit original con el que se hacen los videos.

Kit de Remotion (ZIP)

Tiempos de cada animación

La duración, la curva y el token de cada escenario, en una tabla.

Tiempos (CSV)

Núcleo de animación

Unas cuarenta líneas de JS: la curva, la mezcla de color y un titular de ejemplo.

Núcleo (JS)
Ver el núcleo, para copiar
/* Núcleo de animación · Creators Latam (versión JS del kit de Remotion: kit/base.tsx)
   Una curva por trabajo, a 30 fps, con tope: nada se pasa y nada rebota. Copia, pega y úsalo en tu HTML. */
const FPS = 30;
const BEZ = {
  entrada: [.05, .7, .1, 1], estado: [.4, 0, 0, 1], salida: [.3, 0, .8, .15],
  micro: [.2, 0, 0, 1], lineal: [0, 0, 1, 1],
};

function bezier(x1, y1, x2, y2) {
  const cx = (t) => 3 * x1 * t * (1 - t) ** 2 + 3 * x2 * t * t * (1 - t) + t ** 3;
  const cy = (t) => 3 * y1 * t * (1 - t) ** 2 + 3 * y2 * t * t * (1 - t) + t ** 3;
  return (x) => {
    if (x <= 0) return 0; if (x >= 1) return 1;
    let lo = 0, hi = 1, t = x;
    for (let i = 0; i < 30; i++) {
      const v = cx(t);
      if (Math.abs(v - x) < 1e-6) break;
      if (v < x) lo = t; else hi = t;
      t = (lo + hi) / 2;
    }
    return cy(t);
  };
}
const CURVA = Object.fromEntries(Object.entries(BEZ).map(([k, p]) => [k, bezier(...p)]));

/** De `de` a `a` entre los fotogramas ini..ini+dur, con la curva de la marca. Siempre con tope. */
export const anim = (f, ini, dur, curva = 'entrada', de = 0, a = 1) => {
  const t = Math.min(1, Math.max(0, (f - ini) / dur));
  return de + (a - de) * CURVA[curva](t);
};

/** Color entre `base` y el azul, sin inventar un tercer color. */
export const mezcla = (p, base = 'var(--texto)') => `color-mix(in srgb, var(--acento) ${p * 100}%, ${base})`;

/* Ejemplo: titular palabra por palabra (4 f entre palabras), la clave se enciende en azul al final.
   Entrada de todo texto: opacidad + 8 px hacia arriba en 14 f (467 ms), curva `entrada`. */
export function titular(el, palabras, clave) {
  el.innerHTML = palabras
    .map((w) => `<span style="display:inline-block;margin-right:.26em">${w}</span>`).join('');
  const spans = [...el.querySelectorAll('span')], t0 = performance.now();
  (function paso(now) {
    const f = (now - t0) * FPS / 1000;
    spans.forEach((s, i) => {
      const a = anim(f, i * 4, 14, 'entrada');
      s.style.opacity = a; s.style.transform = `translateY(${(1 - a) * 8}px)`;
      if (palabras[i] === clave) {
        s.style.color = mezcla(anim(f, palabras.length * 4 + 14, 6, 'micro'));
      }
    });
    if (f < palabras.length * 4 + 24) requestAnimationFrame(paso);
  })(t0);
}