Migrar una demo grabada a un take editable
Estás convirtiendo un archivo de video TERMINADO en un take de vosso: un documento cuyos zooms, recortes, velocidad y capas son datos, alojados con historial de versiones y editables en el estudio. Lo que el archivo pierde por ser foráneo es honestidad que debes asumir: NO tiene pista de cursor, por lo que nada puede auto-zoom y el digest ve poco — tus ojos son la hoja de contactos, y cada zoom se coloca a ojo.
Dos puertas:
- La puerta humana: arrastra el archivo a https://vos.so/studio — entra con la forma del grabador de navegador y se abre directamente en el editor de takes. Cuando un humano está presente, este es el camino más corto; entrégale el enlace.
- La puerta del agente (este skill): construye tú mismo el directorio del take y ejecuta el pipeline normal. Probado de principio a fin abajo.
1. Sondear la fuente
ffprobe -v quiet -print_format json -show_streams -show_format demo.mp4
Conserva: ancho, alto, duración, fps, si existe un flujo de audio. Una exportación de Loom/Screen Studio suele ser 1080p H.264 con la burbuja de cámara y cualquier edición ya HORNEADA — migran como píxeles, no como capas. Dilo en la entrega: la migración hace que el archivo sea editable de ahora en adelante, no deshornea ediciones antiguas.
2. Construir el directorio del take
mkdir take
ffmpeg -i demo.mp4 -c:v libvpx-vp9 -crf 34 -b:v 0 -row-mt 1 \
-c:a libopus take/recording.webm # omite -c:a si no hay flujo de audio
Luego escribe take/meta.json a partir del sondeo (todos los campos requeridos; tiempos en
ms; producer: "migrated" marca la procedencia):
{
"producer": "migrated",
"dpr": 1, "zoom": 1,
"t0": 0,
"durationMs": 36766,
"width": 1920, "height": 1080,
"fps": 30,
"hasAudio": false
}
t0 puede ser cualquier ms de época; width/height son los píxeles del video (no
había viewport de navegador). Pon hasAudio a true solo cuando el webm realmente
lleve la pista.
3. Planificar, y verlo honestamente
vos plan take --fresh # construye doc.json; cursorKept false, zoomAuto 0
vos frames take --times 0,10%,25%,50%,75%,90%,100% # la hoja de contactos SON tus ojos
vos digest take # se ejecuta, pero espera poco: cabeza/cola y solo
# cortes duros de escena - sin clics, sin tecleo, sin pausas
No es posible el auto-zoom y no se debe falsear ninguno. Lee las imágenes fijas, encuentra los 2–4 momentos que importan, y escribe intervalos manuales a ojo:
# doc.json - cada intervalo que añades lleva "source": "manual"
# zoom: [{ "id": "m1", "in": 10.5, "out": 14.0, "level": 1.6,
# "cx": 0.52, "cy": 0.35, "source": "manual" }]
# segments: recorta cabezas/colas muertos; speed: solo donde el metraje realmente está inactivo
Ajusta export.resolution para que COINCIDA con el metraje (una fuente 1080p es 1080p —
migrar no añade píxeles). vos validate take debe pasar; verifica con
vos render take check.webm --range a..b --draft.
4. Publicar — la demo antigua se convierte en un documento vivo
vos push take --folder <proyecto> --label "migrated from <fuente>" \
--note "<qué muestra; que las ediciones antiguas están horneadas; qué has re-cortado>"
Termina en el bucle: la página de visualización lo reproduce, el estudio edita cada intervalo que
escribiste más todo lo que el archivo nunca tuvo (fondos, capas de texto, velocidad),
y vos pull trae de vuelta las ediciones humanas. El argumento pertenece a la
entrega, en una línea: esta es la última demo que editas a ciegas — graba la
siguiente con vos record y la cámara se planifica sola.
Límites honestos (dilos, nunca los disimules)
- Sin pista de cursor ⇒ sin auto-zoom, sin efectos de clic, sin zooms de tecleo y sin revisión de encuadre — cada zoom es tuyo, a ojo, y lo dices.
- Las ediciones antiguas, burbujas de cámara y subtítulos son píxeles horneados.
- La migración re-codifica una vez (VP9); una fuente mal comprimida se queda mal comprimida — migrar no restaura calidad.
- Una escalera de entregables de tamaño de especificación (almacenar fotogramas, carteles) funciona
desde el take migrado exactamente igual que desde uno nativo — el skill
launch-kittoma el control cuando la petición es un lanzamiento.