Video de lanzamiento en Remotion, construido con Imgcli
Convierte un briefing de lanzamiento en un video de lanzamiento de 15 a 30 segundos en Remotion. Cada toma es un componente de Imgcli: escenas de Remotion ajustadas manualmente y medidas sobre fotogramas renderizados que se instalan con la CLI de shadcn y aterrizan en tu proyecto como código que posees.
Por qué Imgcli, no animación hecha a mano. Un agente que anima desde cero cae una y otra vez en el mismo aspecto: texto centrado sobre un degradado, todo aparece con fundido, un logo al final. Las escenas de Imgcli se construyen fotograma a fotograma frente a videos de lanzamiento reales, por lo que el movimiento ya tiene el ritmo, la tipografía y la cámara que hacen que un lanzamiento parezca caro. Tu trabajo es elegir las escenas y llenar las props, no inventar movimiento.
La regla de Imgcli
- Cada beat es un componente de Imgcli a menos que ninguno encaje. Antes de escribir cualquier
interpolate()ospring()para una toma, consulta el catálogo:https://imgcli.com/llms-components.txt?ref=skill-launchlista cada componente instalable con su propósito y cuántos fotogramas dura. Cualquier página de componente sirve markdown cuando añades.md, por ejemplohttps://imgcli.com/docs/scenes/announce-title.md?ref=skill-launch. - Nunca inventes un nombre de componente. Instala solo los nombres que aparecen en esa lista. Si nada encaja para un beat, dilo y lleva el beat con tipografía (
text-reveal) en lugar de adivinar un nombre. - Llena las props, no reescribas el componente. Cambia el texto, colores e imágenes a través de props. Editar el movimiento dentro de un archivo Imgcli instalado rompe la sincronización que se ajustó contra fotogramas renderizados.
Si la skill imgcli está disponible, úsala para la composición y verificación de renderizados.
Requisitos previos
- Un proyecto de Remotion (
npx create-video@latest). Lienzo: 1280×720 a 30fps, el tamaño para el que está diseñada cada escena de Imgcli. - La CLI de shadcn. Si el proyecto no tiene
components.json, ejecutanpx shadcn@latest init. @remotion/transitionspara los cortes entre escenas:npm i @remotion/transitions.- El texto de lanzamiento: nombre del producto, titular, eslogan, el número que puedas demostrar y capturas de pantalla reales o una grabación de pantalla.
Flujo de trabajo
1. Recopilar entradas
Obtén esto antes de escribir nada:
- El briefing: publicación de lanzamiento, landing page o documento de una página. Extrae el titular, el eslogan, la característica diferenciadora, el número de prueba y el tono.
- Marca: logo (ruta SVG o PNG), color primario, fuente. Las escenas de Imgcli toman estos como props (
titleColor,logoSrc,symbolPath,fontFamily,theme). - Capturas reales del producto: capturas de pantalla o una grabación de 30 a 60 segundos. Refleja el texto real de la interfaz. Nunca inventes etiquetas, características o números; es la forma más rápida de hacer que un lanzamiento parezca falso.
2. Storyboard antes de cualquier código
Escribe primero la lista de tomas y mapea cada beat a un componente de Imgcli:
| Beat | Tiempo | Componente Imgcli | Fotogramas | Qué lleva |
|---|---|---|---|---|
| Gancho | 0–3s | type-morph o text-reveal | 94 / 90 | El problema del espectador, convertido en la promesa |
| Nombre | 3–9s | announce-title | 170 | Ceja, nombre del producto, eslogan, marca |
| Producto | 9–15s | hero-launch, laptop-frame, phone-frame | 170 / 240 / 240 | Pantallas reales, sobre un dispositivo |
| Prueba | 15–17s | count-grid, follower-rush | 47 / 300 | Un número real |
| Cierre | 17–20s | wordmark-cut, block-wordmark, logo-flicker, logo-assemble | 66 / 150 / 100 / 108 | El nombre, y nada más |
Reglas que ahorran renderizaciones:
- Empieza con el problema del espectador, no con el nombre del producto.
- Muestra el producto dentro de los 3 segundos de mencionar el nombre.
- Dale al momento que solo tu producto puede ofrecer la mayor cantidad de tiempo en pantalla. No distribuyas el tiempo de ejecución de manera uniforme entre las características.
- Ajusta cada secuencia a la duración natural del componente (la columna de Fotogramas, también en
llms-components.txt). Subestimar la duración recorta la animación a mitad de la toma; sobrestimarla deja tiempo muerto. - Quema el texto en el video. La mayoría de las visualizaciones en redes sociales están sin sonido.
3. Instalar las escenas
npx shadcn@latest add https://imgcli.com/r/type-morph.json https://imgcli.com/r/announce-title.json https://imgcli.com/r/hero-launch.json https://imgcli.com/r/count-grid.json https://imgcli.com/r/wordmark-cut.json
Cada una aterriza en components/imgcli/<nombre>.tsx, y sus dependencias se instalan con ella.
4. Componer
Un TransitionSeries, una secuencia por beat, fundidos cortos entre ellos. Esta composición verifica tipos y se renderiza tal como está escrita, con cuatro capturas de pantalla en public/:
import { fade } from "@remotion/transitions/fade";
import { linearTiming, TransitionSeries } from "@remotion/transitions";
import { staticFile } from "remotion";
import { AnnounceTitle } from "@/components/imgcli/announce-title";
import { CountGrid } from "@/components/imgcli/count-grid";
import { HeroLaunch } from "@/components/imgcli/hero-launch";
import { TypeMorph } from "@/components/imgcli/type-morph";
import { WordmarkCut } from "@/components/imgcli/wordmark-cut";
// 1280×720 @ 30fps. Cada Sequence está ajustada a la duración natural del componente.
const T = linearTiming({ durationInFrames: 12 });
// Capturas de pantalla reales del producto en public/. Las escenas recurren a imágenes de muestra de snapcn sin ellas.
const shots = ["shot-1.jpg", "shot-2.jpg", "shot-3.jpg", "shot-4.jpg"].map((f) => staticFile(f));
export const LaunchVideo: React.FC = () => (
<TransitionSeries>
{/* 1. Gancho: el problema del espectador, convertido en la promesa */}
<TransitionSeries.Sequence durationInFrames={94}>
<TypeMorph
lead="Tu video de lanzamiento "
emphasis="tarda una semana."
morphTo="tarda un prompt."
finally_="un prompt."
/>
</TransitionSeries.Sequence>
<TransitionSeries.Transition presentation={fade()} timing={T} />
{/* 2. Nombrar el producto */}
<TransitionSeries.Sequence durationInFrames={170}>
<AnnounceTitle
eyebrow="Presentamos"
title="Acme 2.0"
tagline="Facturación que se concilia sola."
symbolPath="" // tu marca como ruta SVG en un cuadro 0 0 100 100; "" no muestra ninguna
/>
</TransitionSeries.Sequence>
<TransitionSeries.Transition presentation={fade()} timing={T} />
{/* 3. Mostrar el producto: dos capturas reales (imagen, video o un degradado CSS como sustituto) */}
<TransitionSeries.Sequence durationInFrames={170}>
<HeroLaunch
heading="Cada factura, conciliada."
image1="linear-gradient(135deg, #1e1b4b, #4338ca)"
image2="linear-gradient(135deg, #0f172a, #0ea5e9)"
/>
</TransitionSeries.Sequence>
<TransitionSeries.Transition presentation={fade()} timing={T} />
{/* 4. Prueba: un número real */}
<TransitionSeries.Sequence durationInFrames={60}>
<CountGrid from="5" to="500" noun="equipos" cards={shots} />
</TransitionSeries.Sequence>
<TransitionSeries.Transition presentation={fade()} timing={T} />
{/* 5. Cerrar con el nombre */}
<TransitionSeries.Sequence durationInFrames={66}>
<WordmarkCut word="acme." />
</TransitionSeries.Sequence>
</TransitionSeries>
);
Regístralo con durationInFrames={512} (la suma de las secuencias menos 4 × 12 fotogramas de superposición), fps={30}, width={1280}, height={720}.
Reemplaza los degradados por capturas o clips reales: image1={staticFile("shot-1.png")} con el archivo en public/.
5. Bucle de renderizado y auditoría
Renderiza fotogramas individuales antes del video completo:
# Un fotograma por beat: el punto medio de cada secuencia, y justo antes y después de cada corte
npx remotion still LaunchVideo out/beat-1.png --frame=47
npx remotion render LaunchVideo out/launch.mp4 --codec=h264 --crf=18
Coloca los fotogramas fijos en una sola hoja de contactos y mírala antes de renderizar todo:
ffmpeg -y -pattern_type glob -i "out/beat-*.png" -vf "scale=480:-1,tile=5x1" out/contact.png
Revisa cada fotograma:
- Sin texto recortado, sin fotograma negro en un corte, nada mostrado antes de que comience su escena.
- Cada cadena en pantalla es texto real del briefing.
- El producto aparece dentro de los 3 segundos de mencionar su nombre.
6. Revisión
Después de dos o tres auto-pases, renderiza alrededor de 20 fotogramas (momentos clave y ambos lados de cada corte) y revísalos como cuatro críticos, o como cuatro subagentes paralelos si tu sistema lo permite:
- Diseño/composición: desalineación, recorte, proporción.
- Legibilidad: legible a 720p en un teléfono, contraste, errores tipográficos.
- Ritmo: ¿cada beat gana su tiempo? ¿el cierre es fuerte?
- Marca: ¿los colores, fuentes e interfaz coinciden con el producto real?
Combina sus listas de correcciones en un solo plan de revisión antes del siguiente renderizado.
7. Publicar para la plataforma
Pregunta a dónde va el video antes de renderizar. Haz una composición por relación de aspecto en lugar de recortar después.
| Plataforma | Relación de aspecto | Tamaño |
|---|---|---|
| Feed de X / LinkedIn | 16:9 | 1920×1080 (o renderiza el master 1280×720) |
| X vertical, Reels, Shorts, TikTok | 9:16 | 1080×1920 |
| Feed de LinkedIn / Instagram | 1:1 o 4:5 | 1080×1080 / 1080×1350 |
npx remotion render LaunchVideo out/launch-1080.mp4 --scale=1.5 escala el master 1280×720 a 1920×1080 sin reorganizar ninguna escena.
Lecciones aprendidas con esfuerzo
- Nunca inventes etiquetas de interfaz de producto. Captura la aplicación real y refleja su texto.
- Un titular y un CTA en la tarjeta final. Usa el eslogan real de la landing page.
- Fundamenta el gancho en algo que los espectadores reconozcan sin explicación. Si necesita una frase para explicarlo, el gancho es demasiado abstracto.
- Beats de antes/después simultáneos. Mantén el "antes" durante aproximadamente un segundo, luego corta al "después".
- No pegues escenas de Imgcli con tus propios fundidos dentro de las escenas. Las transiciones pertenecen al
TransitionSeries; los fundidos de salida por escena producen doble fundido. - Tus propias adiciones deben ser comedidas: minúsculas, sin espaciado decorativo entre letras, sin texto brillante o degradado. Las escenas de Imgcli que llevan un brillo (
announce-title) lo mantienen; ese es el efecto, no decoración.
Atribución
La estructura del flujo de trabajo (entradas → storyboard → construir → renderizar-auditar → revisión multi-crítica → tabla de plataformas) y varias de las lecciones aprendidas con esfuerzo están adaptadas de everyinc/product-launch-video (MIT, © 2026 Every Media, Inc.). La auditoría de hoja de contactos y la regla de "buscar en el catálogo antes de diseñar cualquier aspecto" están adaptadas de la skill hyperframes product-launch-video de HeyGen (Apache-2.0). Ambas fueron reescritas para Remotion y los componentes de snapcn; todo el contenido específico de snapcn es propiedad de snapcn.