Capturas de pantalla que se actualizan automáticamente
(interblah.net)- Un flujo que captura capturas de pantalla automáticamente desde una aplicación web en ejecución y las actualiza junto con la compilación de la documentación de ayuda, lo que facilita mantener las imágenes de la documentación al día incluso después de cambios en la UI
- Los comentarios
SCREENSHOTdentro del Markdown contienen instrucciones como la ruta de destino, el método de captura y selectores CSS, y durante el proceso de compilación se leen para rellenarse con imágenes reales - Una tarea de Rake ejecuta Chrome en modo headless mediante Capybara y Cuprite, agrupa el trabajo por equipo y, tras iniciar sesión una sola vez, recorre varias URL para hacer las capturas
- La captura admite tres modos: element, full_page y viewport; además, opciones como
click,wait,crop,tornyhidepermiten controlar también interfaces abiertas o elementos innecesarios - Con una sola ejecución de
rails manual:build, la generación de capturas y la compilación de las páginas de ayuda se realizan juntas, lo que facilita alinear código y documentación en el mismo PR o commit y reduce mucho la fricción de las capturas y recortes manuales
Método de capturas de pantalla que se actualizan automáticamente
- El centro de ayuda de Jelly está configurado para capturar capturas de pantalla automáticamente desde una aplicación web en ejecución y actualizarlas junto con cada nueva compilación
- La documentación está escrita en Markdown y, según el artículo Self-updating screenshots, se procesa a HTML con Redcarpet y luego se renderiza como vistas ERB de una app Rails
- Dentro del Markdown se incluyen comentarios
SCREENSHOT, donde también se definen instrucciones como la ruta de destino, el método de captura y selectores CSS<!-- SCREENSHOT: acme-tools/inbox | element | selector=#inbox-brand-new-section -->- La etiqueta de imagen justo debajo se usa como el lugar donde irá el resultado
- Si cambian aunque sea un poco el color de la UI, la posición de los botones o los textos, las capturas existentes de la documentación se vuelven obsoletas con facilidad; este flujo reduce esa carga de actualización manual
Pipeline de captura y efecto en el mantenimiento
- Internamente, una tarea de Rake ejecuta Chrome en modo headless mediante Capybara y Cuprite para escanear los comentarios
SCREENSHOTen todos los archivos Markdown - El trabajo de capturas se procesa agrupado por equipo, de modo que dentro del mismo equipo se inicia sesión una sola vez antes de recorrer varias URL
- Hay tres modos de captura compatibles
- element: captura un elemento específico del DOM con un selector CSS
- full_page: captura la página completa y, si hace falta, puede recortarse según la altura
- viewport: captura solo el área visible actualmente en la ventana del navegador
- Se pueden usar opciones detalladas como click, wait y crop para capturar automáticamente estados que aparecen después de hacer clic en un botón o pantallas posteriores a una animación
<!-- SCREENSHOT: nectar-studio/manage/rules | full_page | click=".rule-create-button" wait=200 crop=0,800 -->- Funciona presionando el botón para abrir el formulario, esperando 200 ms y luego capturando tras recortar al área especificada
- También existen las opciones adicionales torn y hide
tornaplica un efecto de borde de papel rasgado usando CSSclip-pathhideoculta temporalmente elementos que no deberían aparecer en pantalla, como una dev toolbar o un cookie banner
- Todo el pipeline se ejecuta con un solo comando,
rails manual:build, que procesa todas las capturas de pantalla y la compilación de las páginas de ayuda al mismo tiempo - Las fuentes de la documentación están organizadas por secciones como basics, setup y advanced dentro de
public/manual/ - Durante la fase de compilación, estos archivos Markdown se convierten en vistas ERB dentro de
app/views/help/, y también se generan el breadcrumb y la navegación de secciones - Como el desarrollo de funciones y la actualización de la ayuda pueden manejarse juntos dentro de la misma base de código, resulta más fácil mantener la sincronización entre código y documentación en el mismo PR o en el mismo commit
- Los casos especiales como elementos que requieren scroll, popovers que deben abrirse con un clic o recortes para evitar partes innecesarias exigieron más tiempo de implementación, pero una vez montado, el centro de ayuda empezó a actualizarse con mucha más frecuencia
- Con solo cambiar la UI, volver a ejecutar la compilación y hacer commit del resultado, las capturas pueden mantenerse siempre actualizadas, y la fricción de las capturas y recortes manuales prácticamente desaparece
1 comentarios
Comentarios de Hacker News
Ya que generas las capturas por programa, también puedes crear las dos versiones de la app con light/dark theme y alternarlas según
prefers-color-scheme: dark.Este tipo de cosas también funciona bien en los README de GitHub: https://github.com/CyberShadow/CyDo#readme
En una app móvil hice que Nix levantara un emulador de Android desechable para generar capturas actualizadas; no requiere configuración previa y tampoco deja datos después de ejecutarse.
En mi caso, la configuración en sí tampoco fue tan difícil; lo más complicado fue pensar la idea, y el código de Nix lo generé de una sola vez con mi LLM favorito.
Actualizar capturas manualmente no es lo más duro del mundo, pero el flujo
upload-apk + take-screenshot + transfer-back-to-PC + editsiempre es lo suficientemente molesto como para que al final casi nunca lo haga.Más o menos pude inferirlo por contexto, pero aun así fue incómodo.
En las tiendas de apps las capturas son obligatorias, y hay que generar imágenes para cada tamaño de pantalla y cada localización, así que se vuelve tedioso muy rápido.
Antes escribía scripts a mano para esto, y ahora herramientas como Fastlane de https://fastlane.tools/ ayudan muchísimo.
También uso Fastlane en mi juego de lógica Nonoverse, y se pueden ver capturas de ejemplo en la página de la App Store: https://apps.apple.com/us/app/nonoverse-nonogram-puzzles/id6...
Incluso tengo automatizada la grabación de videos de App Preview, incluyendo varias escenas, y si a alguien le interesa me parece un tema que daría para escribir un post aparte.
Los pequeños juegos casuales que hago con vibe coding siempre empiezan con la app ejecutándose en modo headless desde CLI, con renderizado a texturas fuera de pantalla, comando de captura y hasta instrumentación de rendimiento.
Meter eso casi no toma tiempo, y además le da al agente una vía para automatizar la UI e inspeccionar puntos importantes.
Gracias a eso también es muy fácil hacer que el agente actualice las capturas.
No queda tan limpio como algo completamente integrado al proceso de build, pero ahora me dieron ganas de añadir también esa parte.
También tengo argumentos de CLI para offscreen screenshot path y world pos/camera view vector, y corro benchmarks con un formato de entrada basado en texto.
Ese formato consiste en varias líneas de segmentos con nombre, la duración de
nticks de juego por segmento y las entradas de control de cada segmento.Lo uso muchísimo para A/B testing de visuales y rendimiento mientras trabajo en el código del juego.
A mí también me interesa cuánto facilita vibe coding el desarrollo de juegos.
En la época de Adobe Flash, el ecosistema de juegos indie era realmente vibrante, y desde entonces casi nada ha alcanzado ese nivel de facilidad para desarrollar.
vibe coding parece la primera herramienta que de verdad supera ese nivel.
meter eso casi no toma tiempodepende del caso.Me da curiosidad saber qué engine usas.
Me gusta especialmente que puedas poner una declaración de captura en línea dentro de un documento Markdown.
En mi app de escritorio armé una solución que genera capturas en varios idiomas y modos light/dark, elimina ruido y hasta les aplica marcos de ventana de Windows/macOS.
Lo tengo documentado aquí: https://maxschmitt.me/posts/cakedesk-website-redesign#screen...
Por ahora es un script aparte, así que mantenerlo es bastante molesto, pero voy a revisar la idea de integrarlo como parte del markdown/mdx.
Me dio muy buena inspiración.
Da para usarlo como meme del tipo la mejor obra sobre X que nadie notará.
Mi https://github.com/zombocom/rundoc tiene una función parecida.
Su propósito principal es generar tutoriales, así que también vuelve a insertar en el documento la salida de los comandos ejecutados.
Algo como poner la vista previa en vivo de la herramienta dentro de un rectángulo.
Si la herramienta es liviana, hasta podría ser visualmente ideal, y además reflejaría tal cual la configuración de renderizado del navegador, las opciones de accesibilidad o los addons del usuario.
En la documentación de iommi de hecho hacen eso: https://kodare.net/2025/01/14/iframes-not-screenshots.html
Si el
docs/de la documentación está en el mismo repositorio, y cada vez que al actualizar la documentación se necesitan capturas nuevas se agrega una prueba nueva, parece que encajaría bastante bien.Yo empecé a hacer exactamente esto hace unos años, pero al final lo abstraje hacia algo más general, como https://picshift.io/.
Aun así, el caso de uso de capturas me sigue encantando, y de hecho el nombre original de ese proyecto era
ScreenSync.