2 puntos por GN⁺ 3 시간 전 | 1 comentarios | Compartir por WhatsApp
  • Genera una copia estática funcional sin código renderizando la página con Chrome sin interfaz para capturar una instantánea del DOM final que vería una persona, luego elimina todo el JavaScript y descarga CSS, imágenes y fuentes a rutas locales
  • Resuelve el problema de las páginas guardadas con "Save As" que con el tiempo se rompen y terminan en una pantalla en blanco, un spinner congelado o intentando conectarse a servidores de analytics que ya no existen
    • Proporciona archivos .html que se abren directamente desde el disco, sin rastreo, llamadas de red ni comportamientos inesperados
  • Usa rastreo en amplitud para leer robots.txt, tomar puntos de inicio desde sitemap.xml y mantenerse dentro del host semilla
    • Gracias a su carácter idempotente, obtiene cada página solo una vez sin importar si usa http o https ni si tiene o no trailing slash
    • Guarda la posición al presionar Ctrl-C y continúa al volver a ejecutarse; --refresh vuelve a renderizar y --force inicia desde cero
  • Ofrece flags para controlar el alcance y comportamiento del rastreo como --max-pages, --max-depth, --scope-prefix, --subdomains, --scroll y --workers
  • Con kage pack comprime la copia en un solo archivo, con opción de archivo ZIM o ejecutable autónomo que funciona como el propio sitio
    • ZIM es compatible con el ecosistema Kiwix, por lo que también puede verse en kiwix-serve o en las apps de escritorio y móviles de Kiwix
    • El binario autónomo no requiere que quien lo reciba instale nada, y con --base puede crear un visor para otro sistema operativo (aprox. 13 MiB + el tamaño del sitio)
  • El empaquetado determinista garantiza que una misma copia siempre produzca archivos idénticos byte por byte, y el UUID del archivo se deriva del contenido, por lo que es seguro para checksums y caché
  • Al compilar con la etiqueta webview, usa el WebView del sistema operativo (WKWebView, WebView2, WebKitGTK) para abrirse en su propia ventana en lugar de una pestaña del navegador
  • Flujo de procesamiento: URL semilla → renderizado con Chrome sin interfaz → instantánea del DOM final → eliminación de JS → localización de recursos → guardado en disco
  • Licencia MIT

1 comentarios

 
GN⁺ 3 시간 전
Comentarios de Hacker News
  • Me dio curiosidad ver cómo se generó el GIF de demostración del README: https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63...
    Resulta que usa otro proyecto del mismo autor: https://github.com/tamnd/ascii-gif
    El script usado en la demo está en https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63..., y también incluye comentarios sobre cómo ejecutarlo: ascii-gif render docs/demo/kage.tape -o docs/static/demo.gif
    Parece una especie de wrapper muy opinionado alrededor de https://github.com/charmbracelet/vhs

    • ¿Ya escuchaste la buena palabra de asciinema, el salvador de la terminal?: https://asciinema.org/
    • Yo también tengo bastantes binarios personales de este estilo en mi $HOME/bin/. Cosas como delete-all-npm, clean-rust-cache, download-youtube-playlist, get-markdown; está bueno no tener que memorizar comandos
      A veces incluso un agente de código encuentra por su cuenta cómo invocar estas herramientas
    • También se puede hacer como SVG animado en vez de GIF, y como solo son keyframes de texto, queda mucho más liviano que un GIF: https://github.com/vytskalt/pseudoc/blob/main/assets/factori...
    • Como referencia, en otras plataformas como Windows/macOS, LiceCAP es una excelente herramienta para grabar la pantalla en GIFs pequeños. La hizo el autor de Winamp y Reaper DAW: https://www.cockos.com/licecap/
    • VHS es excelente para hacer scripts de generación de video desde la línea de comandos
  • Esto podría servir cuando quieras que la wiki de la empresa sea fácil de consultar también sin conexión. Por ejemplo, podría haber documentación útil en la wiki para trabajo de campo donde no hay señal en el celular
    Está genial que se pueda empaquetar todo un sitio en un solo binario, pero me gustaría todavía más una versión que no necesite un proceso de serving aparte
    También parece posible algo como un shim con un único punto de entrada HTML que archive el contenido del sitio y, de ser posible de forma embebida, incluya un poco de JavaScript para buscarlo

    • Publicarlo en Hacker News fue justo el lugar indicado. Voy a considerar implementar la idea
      Ya tengo en mente un script/programa que convierte HTML a Markdown, así que en realidad incluso podría guardar todo como una carpeta de archivos Markdown en disco y luego hacer commit a un repositorio Git
  • Esto está excelente. Quería poder tomar un prototipo hecho por alguien en algo como Lovable como copia offline, para versionarlo y compartirlo en un formato más fácil
    El enfoque que tomamos está escrito aquí: https://productnow.ai/blogs/extracting-html-from-ai-prototyp...
    Ahora voy a revisar esto para ver si puedo adaptar alguna parte. Me gusta la idea del mirror offline, y simplifica mucho más los casos de uso colaborativos

  • Dice kage serve $HOME/data/kage/paulgraham.com, pero si el resultado es estático, no entiendo por qué hace falta un servidor. ¿No se puede hacer para que simplemente se abra en el navegador?
    Por ejemplo, si fuera posible algo como $ firefox $HOME/data/kage/paulgraham.com, se podría usar el resultado incluso en una máquina sin kage instalado

    • En su lugar, parece que podrías usar python -m http.server. No lo he probado todavía, pero da la impresión de que funcionaría
      En realidad Kage tiene dos partes. Una es el crawler que, después del renderizado de Chrome/Chromium, captura el DOM, recorre las páginas y las convierte en HTML limpio; la otra es el componente de pack/serve que empaqueta el resultado como archivo ZIM para Kiwix o como ejecutable
    • Normalmente, si cargas la página de esa forma, el JavaScript queda bloqueado
    • Si haces eso, probablemente te topes con muchísimos problemas de CORS
  • Creo que SingleFile [0] es una versión mucho más sólida de esto
    También elimina todo el JavaScript, pero empaqueta todo en un solo archivo HTML fácil de transferir. Los recursos binarios como fuentes web o imágenes se incluyen como cadenas en base64
    También ofrece un CLI basado en Puppeteer [1]
    [0]: https://github.com/gildas-lormeau/singlefile
    [1]: https://github.com/gildas-lormeau/single-file-cli

    • Este repositorio parece guardar solo una página web
      Lo que se está implementando aquí es mirroring de un sitio web completo, incluyendo subpáginas, para poder navegarlo entero sin conexión. Por ejemplo, todos los ensayos de paulgraham.com
    • Me gusta mucho SingleFile. La extensión de Firefox funciona bastante bien para guardar páginas de forma limpia
      Pero si Kage puede combinar la calidad de reproducción de SingleFile con un enfoque de rastreo estilo HTTPTrack, se ve prometedor. Las aplicaciones de una sola página son algo difíciles de archivar, así que tengo curiosidad por ver qué tan bien las maneja Kage
    • Gracias por el enlace. Voy a intentar implementar esta función de HTML único. Parece que estaría bueno tenerla
    • ¿En qué se diferencia de hacer File -> Save as en cualquier navegador web de la computadora?
    • Yo también pensé en eso al principio, y me parece una solución muy elegante. Tampoco es innecesariamente compleja
  • Intenté clonar un sitio HTTP, o sea, no HTTPS, pero me salió navigation failed: net::ERR_NAME_NOT_RESOLVED. Incluso especificando el protocolo con http:// pasó lo mismo

  • He usado httrack(https://www.httrack.com) para bajar wikis y leerlas en el avión. No es perfecto, pero me funcionó mejor que otras cosas que había encontrado antes
    También voy a probar esto, y si da buenos resultados me pondría muy contento

    • Qué recuerdos. Hace unos 20 años, internet seguía siendo conexión telefónica cara, así que iba al cibercafé, bajaba sitios web y manga con HTTrack, copiaba todo a una memoria USB de 128 MB que en ese momento parecía enorme, y luego me lo llevaba a casa para leerlo sin conexión
    • Si hablamos solo de wikis, ¿hay alguna razón para no usar Kiwix? Para cosas que no sean lanzamientos “oficiales” es más complicado, pero hay servicios que te generan archivos ZIM. La app lectora de escritorio me ha parecido bastante buena en mi experiencia
      https://wiki.openzim.org/wiki/Build_your_ZIM_file
      EDIT: https://get.kiwix.org/en/solutions/applications/kiwix-reader...
    • https://github.com/archiveteam/grab-site o browsertrix pueden ser más fáciles de usar para algunas personas. Son herramientas que se usaron para guardar mucho material de data.gov antes de que lo bajaran
  • Durante años he reunido bastantes archivos de sitios web antiguos. Lo interesante es que los volcados HTML feos resultaron más útiles que los archivos “perfectos”
    Esa es una de las razones por las que con el tiempo me ha gustado más RSS. A menudo, un feed de hace unos 10 años hoy es más fácil de usar que un sitio web tipo aplicación cuidadosamente preservado

    • Estoy trabajando en un proyecto para generar y archivar feeds RSS. Conserva el historial completo desde el momento en que el crawler empezó a correr
      Planeo ordenarlo un poco y publicarlo como código abierto pronto
  • Parece que esto podría generar una carga bastante grande en los sitios. ¿Hay alguna opción para controlar la velocidad de clonación o evitar imágenes y video?
    También me pregunto si hay alguna forma de traer solo una parte del sitio web

    • ¿Podrías convertir esto en un issue nuevo? Lo revisaré más tarde. Son la 1 a. m. en mi zona horaria, pero me alegra que a alguien le interese
    • Solo hazte pasar por un crawler de IA y problema resuelto
  • Proyecto limpio, y me gusta la idea
    Leyéndolo rápido, veo que ejecuta Chrome con --no-sandbox; ¿hay alguna razón para eso? Desde el punto de vista de seguridad, probablemente no sea una buena idea. Si no hay una razón, recomendaría dejar activado el sandbox
    De todos modos, gran trabajo

    • --no-sandbox es necesario en Docker. ¿Será que asumieron que la mayoría lo iba a ejecutar en Docker?