PTENES
TRILHA 2

🎥 Captura de la app real

La secuencia que controla la app de verdad. A partir del enlace, agent-browser (con Playwright por debajo) abre la app en un viewport fijo, ejecuta cada paso, captura las pantallas reales y mide la bounding box de cada objetivo, lo que genera los shots PNG + o steps.json que alimentan el render.

4
Módulos
~28
Temas
~2h
Duración
Práctico
Nivel
actions.json URL + viewport pasos + objetivos agent-browser Playwright · viewport fijo click · fill · screenshot shots/*.png 1 pantalla real por estado steps.json bboxes + subtítulos app real sin clave de API

Captura — actions.json → agent-browser navega la app real → shots PNG + steps.json con bounding boxes

Mapa de la ruta

Contenido detallado

2.1~30 min

🌐 Controlar la app con agent-browser

agent-browser (con Playwright por debajo) abre la app real en un viewport fijo, navega a la URL, encuentra elementos, ejecuta acciones y toma capturas de pantalla — es lo que captura las pantallas reales que usa el video.

Qué es:

Es una skill de navegación que controla un navegador real (con Playwright por debajo) mediante comandos sencillos: open, snapshot, fill, click, screenshot, eval.

Por qué aprender:

Es el motor de captura. Sin él no hay pantallas reales, y las pantallas reales son lo que diferencia esta skill de unos motion graphics genéricos.

Conceptos clave:

agent-browser, Playwright, app objetivo en ejecución (p. ej., localhost:8000), sin clave de API.

Qué es:

Fijas el viewport (agent-browser set viewport 1280 800) y abre la URL (agent-browser open http://localhost:8000/). La sesión permanece activa entre comandos.

Por qué aprender:

El orden importa: viewport ANTES de abrir, para que las bounding boxes salgan en el mismo espacio que las capturas de pantalla.

Conceptos clave:

set viewport, open, sesión persistente, viewport fijo.

Qué es:

agent-browser snapshot -i lista los elementos interactivos y asigna refs (@e1, @e2…) que usas para apuntar a acciones.

Por qué aprender:

Las refs cambian después de navegar o de que cambie el DOM. Vuelve a tomar una instantánea después de cambios importantes y prefiere selectores estables cuando cambie el estado.

Conceptos clave:

snapshot -i, refs @eN, refs volátiles, nueva captura.

Qué es:

fill llena un campo, click haz clic, screenshot guarda la pantalla, eval ejecuta JS. El scroll se hace a mano por ahora (elemento del roadmap en capture.mjs).

Por qué aprender:

Son los bloques de cada paso de la demo. Cada acción cambia el estado de la pantalla y cada estado se convierte en una captura de pantalla.

Conceptos clave:

fill, click, screenshot, eval, scroll manual (roadmap).

Qué es:

Después de cada acción, agent-browser screenshot assets/shots/01-prompt.png graba la pantalla real de ese estado en PNG.

Por qué aprender:

Es la regla de oro «capturar antes, animar después»: el render es determinístico, así que nada de sitios en vivo — solo capturas reales.

Conceptos clave:

1 toma por estado, assets/shots/NN-id.png, capturar antes/animar después.

Qué es:

Mediante eval, tú lees el getBoundingClientRect() del objetivo y guarda {x,y,w,h}. Es el cuadro exacto al que apuntará el cursor en el video.

Por qué aprender:

La bbox real es lo que hace que el cursor caiga en el centro del botón, no "a ojo". Es el detalle que le da un aspecto profesional.

Conceptos clave:

getBoundingClientRect, {x,y,w,h}, target del cursor, eval --json.

Qué es:

El viewport de captura (p. ej., 1280×800) es el espacio de coordenadas de todas las bboxes y capturas de pantalla. Ancho ≤ ~1280 para que quepa en el canvas 16:9.

Por qué aprender:

Viewport inconsistente = el cursor no acierta el objetivo. Si vuelves a capturar, captura todo con el mismo viewport.

Conceptos clave:

viewport fijo, espacio de coordenadas, ≤ ~1280 de ancho, volver a capturar todo.

Ver completo
2.2~30 min

🗺️ El actions.json

El archivo de entrada de capture.mjs: describe la URL, el viewport y la lista de pasos con sus selectores y narración. Ejecutar node capture.mjs actions.json genera los shots PNG + el steps.json.

Qué es:

Un JSON con url, viewport, window, eyebrow, ctaNarration, ctaCaption y el array steps. Es el guion que ejecuta capture.mjs.

Por qué aprender:

Es la forma automatizada (recomendada) de capturar: un archivo describe toda la demo de principio a fin.

Conceptos clave:

url, viewport, window, steps[], CTA integrada.

Qué es:

"url": "http://localhost:8000/" e "viewport": [1280, 800]. capture.mjs hace set viewport e open exactamente con esos valores.

Por qué aprender:

El viewport definido aquí es el espacio de coordenadas de los bboxes. Si lo cambias aquí, cambia en todo el video.

Conceptos clave:

url, viewport [W,H], espacio de coordenadas, ≤ ~1280.

Qué es:

Cada elemento de steps tiene id, opcional do, target, flags (intro, click, zoom), caption e narration. La captura se ejecuta en orden.

Por qué aprender:

5–8 pasos + CTA ≈ 35–50s. El primero suele ser la pantalla inicial (intro:true) y el último, el resultado (zoom:true).

Conceptos clave:

arco abrir→acciones→resultado→CTA, intro, zoom, 5–8 pasos.

Qué es:

La acción que se ejecutará antes de la captura de pantalla: fill (CSS selector), click, clickText ({tag,text}), setValue (dispara input/change) y wait (ms).

Por qué aprender:

Sin do, el paso solo toma la captura de pantalla del estado actual. Elegir el tipo correcto evita capturar la pantalla equivocada.

Conceptos clave:

fill, click, clickText, setValue, wait.

Qué es:

target es un selector CSS (string) o {tag,text}. capture.mjs lee el bbox de ese elemento — es hacia donde se dirige el cursor en el video.

Por qué aprender:

O do e o target pueden ser elementos diferentes: puedes llenar un campo y apuntar a otro botón.

Conceptos clave:

target, selector CSS, {tag,text}, bbox del target.

Qué es:

Cada paso incluye caption (leyenda en pantalla) y narration (la voz). Los números y las siglas se expanden: "512" → "quinientos doce".

Por qué aprender:

La narración va al steps.json y, desde ahí, Kokoro genera los WAV. El texto fonético produce una voz natural.

Conceptos clave:

caption, narration, expandir números/siglas, 1 frase por paso.

Qué es:

capture.mjs genera assets/shots/NN-id.png e o steps.json (pantallas + bboxes + flags + captions + narración) — todo listo para el composition-template.

Por qué aprender:

El steps.json es el puente entre la captura (T2) y el render (T3). Es el contrato entre las dos mitades del pipeline.

Conceptos clave:

steps.json, shots/*.png, contrato captura→render.

Ver completo
2.3~30 min

🎯 Coordenadas, selectores y bounding boxes

Qué hace que el cursor caiga exactamente sobre el control: bboxes relativas al viewport, selectores robustos, el apuntado al centro de la caja, la región de zoom y cómo comprobar que se seleccionó el elemento correcto.

Qué es:

Las bboxes son relativas al viewport (la esquina superior izquierda de la ventana). En el video se convierten en canvasX = WIN_L + sx, canvasY = SHOT_T + sy.

Por qué aprender:

Es el mapeo que coloca el cursor sobre el elemento correcto de la captura de pantalla dentro del marco del navegador.

Conceptos clave:

viewport-relative, WIN_L, SHOT_T, mapeo de coordenadas.

Qué es:

Para cada paso con target, capture.mjs lee getBoundingClientRect() y redondea a {x,y,w,h} en steps.json.

Por qué aprender:

Si no se encuentra el objetivo, la bbox queda null y capture avisa: es la señal de que el selector es incorrecto.

Conceptos clave:

getBoundingClientRect, {x,y,w,h}, target nulo = aviso.

Qué es:

Prefiere data-testid, role o texto visible ({tag,text}) en lugar de refs @eN — que se desplazan cuando cambia el DOM.

Por qué aprender:

Después de "Generar", aparece un enlace de descarga y los refs se desplazan. Los selectores estables sobreviven al cambio de estado.

Conceptos clave:

data-testid, role, {tag,text}, evitar @eN en estado mutable.

Qué es:

El cursor es un SVG con el hotspot en la punta (~6,3 dentro de 42px). El tween usa x = alvoX - 6 para que la punta caiga en el centro de la bbox.

Por qué aprender:

Apuntar al centro del cuadro (no al borde) es lo que da la sensación de un clic preciso y profesional.

Conceptos clave:

hotspot en la punta, centro de la bbox, tween de cursor.

Qué es:

La bbox también posiciona el resaltado (anillo ámbar con resplandor) y, en el paso zoom:true, el acercamiento con transformOrigin en el centro del objetivo.

Por qué aprender:

El resaltado y el zoom reutilizan la misma coordenada del cursor: una bbox correcta sirve para los tres efectos.

Conceptos clave:

highlight (.hlbox), zoom:true, transformOrigin en el objetivo.

Qué es:

Si el objetivo está debajo del pliegue, hay que desplazarse hasta él antes de tomar la captura de pantalla y medir la bbox (hoy se hace manualmente; capture.mjs todavía no se desplaza).

Por qué aprender:

Como las bboxes son relativas al viewport, coinciden con la captura de ese scroll, pero solo si el screenshot y la medición se hacen después del mismo scroll.

Conceptos clave:

scrollIntoView, target fuera del pliegue, scroll = roadmap de capture.mjs.

Qué es:

Compara la bbox con el screenshot: el {x,y,w,h} debe caer sobre el control visible. capture.mjs imprime cada bbox en el registro para verificar rápidamente.

Por qué aprender:

Elegir el elemento equivocado solo se nota en el render. Revisarlo en la captura ahorra un ciclo entero de volver a renderizar.

Conceptos clave:

verificar bbox frente a shot, el registro de capture y validar antes de renderizar.

Ver completo
2.4~30 min

⏳ Páginas largas, inputs de React y múltiples estados

Los casos difíciles de las demos reales: desplazarse por páginas largas, manejar inputs controlados por React/Vue, esperar una condición en vez de un tiempo fijo y capturar flujos asíncronos con múltiples estados. Aquí queda claro lo que ya funciona y lo que está en el roadmap.

Qué es:

En páginas largas, hay que scrollIntoView en la sección antes de capturar. Hoy esto se hace manejando agent-browser manualmente — capture.mjs todavía no lo hace.

Por qué aprender:

Fue exactamente el caso de inemaVOX. Es el elemento n.º 1 del backlog: agregar una acción scroll/scrollTo a capture.mjs.

Conceptos clave:

scrollIntoView, página larga, captura manual por ahora, scroll = roadmap.

Qué es:

Configurar .value vía eval muestra el texto pero no activa el estado del framework — los botones siguen disabled. Usa el fill nativo de Playwright.

Por qué aprender:

O setValue de capture.mjs dispara input+change y ayuda, pero lo ideal (roadmap nº 2) es el fill @ref nativo.

Conceptos clave:

input controlado, no configurar .value, setValue dispara eventos, fill nativo (roadmap).

Qué es:

Hoy el capture usa wait (ms) de margen. Lo ideal es un waitFor de texto/selector — esperar la condición real en vez de confiar en el tiempo.

Por qué aprender:

La generación lenta (flux2-klein tardó ~2,5 min en el POC) necesita un poll de un <img> real antes del screenshot del resultado.

Conceptos clave:

wait ms (hoy), waitFor (roadmap n.º 3), poll por elemento.

Qué es:

Los pipelines largos (analizar → aprobar → doblar → completado) se capturan como subpasos con nombre, con poll de finalización entre ellos.

Por qué aprender:

Probó la skill en inemaVOX: 14 pasos, 2:08. La consulta se hizo con un script manual; incorporarla es el roadmap nº 4.

Conceptos clave:

subpasos con nombre, sondeo de finalización, demo de 14 pasos.

Qué es:

Algunos flujos se detienen en estados de espera (p. ej., waiting_approval) hasta que alguien lo apruebe. La captura debe reconocer ese estado y continuar.

Por qué aprender:

Uno wait de tiempo fijo no lo resuelve: el estado cambia cuando hay aprobación, no cuando el reloj marca la hora. De ahí la necesidad de waitFor.

Conceptos clave:

waiting_approval, estado activado por evento, poll de estado.

Qué es:

Refs que cambian, eval --json anidado (data URL en data.result), captura de pantalla dentro de los límites del canvas, viewport inconsistente.

Por qué aprender:

Son los errores que más tiempo cuestan. Aplicarlos ANTES de renderizar evita volver a renderizar por un detalle tonto.

Conceptos clave:

refs volátiles, data.result, límites del canvas, gotchas.md.

Qué es:

Funciona hoy: actions.json con fill/click/clickText/setValue/wait, bboxes, steps.json. Hoja de ruta: scroll, fill nativo, waitFor, poll multiestado integrado, 9:16, v3.

Por qué aprender:

Conocer el límite evita prometer lo que la skill aún no hace y te indica dónde todavía debes manejar agent-browser manualmente.

Conceptos clave:

v1 actual, backlog, scroll/fill/waitFor/poll, v3 grabación de pantalla.

Ver completo
← Ruta 1: Fundamentos Pista 3: Composición & Render →