Volver al blog
EngineeringBuild in PublicVideo

Lancé un segundo motor de renderizado para que la vista previa coincidiera con la exportación. Empeoró las cosas.

Mi editor de clips con IA tenía dos motores de renderizado para que la vista previa coincidiera con la exportación. Dos motores divergen. Por eso borré uno.

3 de septiembre de 2026

Lancé un segundo motor de renderizado para que la vista previa coincidiera con la exportación. Empeoró las cosas.

Katto es un recortador de video con IA. Le pasas un video largo, corta los mejores momentos en shorts verticales, y un editor te deja ajustar el encuadre, los subtítulos y la disposición antes de exportar. Lo construyo yo solo, en público. Esta es la historia de un error que cometí en ese editor, y de lo que aprendí, al corregirlo, sobre eso de "lo que ves es lo que obtienes".

El problema que estaba resolviendo

Un editor de clips vive o muere por una sola promesa. Lo que ves en la vista previa es exactamente lo que descargas. Si el subtítulo queda un píxel más arriba en la exportación, si el recorte se desplaza, si un color no coincide, el usuario deja de confiar en la herramienta. Y la confianza es todo el producto.

Mi vista previa es una composición de React renderizada en el navegador. Mis exportaciones se renderizaban en el servidor con FFmpeg. Dos renderizadores distintos dibujando el mismo clip. Divergían, como era de esperar. Las fuentes de los subtítulos, el renderizado de los emojis, el recorte exacto en una pantalla dividida. El clásico "la vista previa no coincide con la exportación".

La solución que parecía correcta (y no lo era)

Así que hice lo obvio. Hice que la misma composición de React que dibuja la vista previa en el navegador renderizara también la exportación en el servidor, a través de un Chromium sin interfaz (Remotion). Un solo componente, una sola fuente de verdad. Vista previa igual a exportación, garantizado.

Esto no es una crítica a Remotion. Es excelente en aquello para lo que fue construido. El error fue mío. Lo enchufé como un segundo motor de exportación al lado de una tubería de FFmpeg que ya existía.

Mis clips iniciales, los que la IA genera antes de que abras siquiera el editor, seguían renderizándose con FFmpeg. Es rápido, está probado, ejecuta toda la tubería. No pensaba arrancarlo de raíz.

Así que ahora tenía dos motores produciendo archivos. FFmpeg para el clip generado, Chromium y Remotion para la reexportación editada. La divergencia exacta que me había propuesto eliminar ahora era peor. El clip que veías en tu lista de resultados (FFmpeg) y el mismo clip reexportado tras una edición mínima (Remotion) podían salir sutilmente distintos. Había convertido un renderizador en dos y lo había llamado paridad.

Encima, el renderizado con Chromium era lento. De tres a cuatro minutos por clip, frente a unos 30 segundos de FFmpeg. Y fallaba de vez en cuando. Cuando fallaba, recurría en silencio a FFmpeg y le entregaba al usuario un archivo con sus ediciones descartadas sin avisar. El peor fallo posible. Incorrecto, y silencioso.

La toma de conciencia

"Vista previa igual a exportación" no se logra haciendo que la vista previa sea el renderizador. Se logra teniendo una sola fuente de verdad para el renderizado, y dejando que la vista previa sea una aproximación fiel a ella.

Un Player de navegador es una gran vista previa. Nunca debió convertirse en un segundo motor de exportación. En el momento en que lo hizo, tuve dos implementaciones de la misma geometría, divergiendo con cada cambio.

Lo que hice

Las lecciones

  1. "Haz que la vista previa sea el renderizador" es seductor y casi siempre erróneo. Acabas con dos renderizadores el día que tengas cualquier otra ruta de renderizado. Una sola fuente de verdad para la salida. La vista previa la aproxima.
  2. Un segundo motor "por paridad" se convierte en una tercera fuente de divergencia oculta. Si dos rutas de código calculan la misma geometría o formato, van a divergir. La única pregunta es cuándo.
  3. Los recursos silenciosos son el pecado capital. Un archivo levemente incorrecto sin advertencia cuesta más confianza que un error honesto. Falla en voz alta.
  4. Verifica el artefacto, no los registros. Mis registros decían "disposición apilada renderizada". Solo encontré el bug real sacando el MP4 exportado real del almacenamiento y mirando un fotograma. Los píxeles son la verdad.

Soy un fundador en solitario que lanza rápido, en público. Este me costó un desvío bienintencionado. Si estás construyendo cualquier editor con una vista previa y una exportación, el camino más corto hacia la confianza es aburrido. Un solo renderizador, errores honestos, y revisa los fotogramas.

Katto está en katto.tech. Si construyes herramientas de video, me encantaría de verdad comparar notas sobre la paridad entre vista previa y exportación.

Artículos relacionados

¿Listo para convertir tus vídeos en clips virales?

Katto recorta, subtitula y reencuadra automáticamente tus vídeos largos en contenido de formato corto.

Prueba Katto gratis
Lancé un segundo motor de renderizado para que la vista previa coincidiera con la exportación. Empeoró las cosas. | Katto