# Stitch::extract Static Html > Extrae HTML estático autocontenido de una app web o componentes React, inlineando CSS e imágenes, para capturar una vista o subirla a Stitch. Fuente: https://skillsagentes.com/skills/google-labs-code/stitch-skills/stitch-extract-static-html Markdown: https://skillsagentes.com/skills/google-labs-code/stitch-skills/stitch-extract-static-html.md Repositorio: https://github.com/google-labs-code/stitch-skills Autor: google-labs-code Licencia: Apache-2.0 Actualizado: hace 2 meses Coste de contexto: 78 tok instalada, 2.7k tok al activarse, 28.6k tok con todos los archivos del bundle Bundle: 4 archivos, 112 KB Permisos que pide: stitch*:*, bash, read, write, web_fetch ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add google-labs-code/stitch-skills --skill extract-static-html --agent claude-code # Cursor npx -y skills add google-labs-code/stitch-skills --skill extract-static-html --agent cursor # Codex npx -y skills add google-labs-code/stitch-skills --skill extract-static-html --agent codex # Gemini CLI npx -y skills add google-labs-code/stitch-skills --skill extract-static-html --agent gemini # Windsurf npx -y skills add google-labs-code/stitch-skills --skill extract-static-html --agent windsurf # Cline npx -y skills add google-labs-code/stitch-skills --skill extract-static-html --agent cline ``` ## Qué hace - Captura una app web renderizada con Puppeteer headless y produce un HTML autocontenido con CSS y assets inlineados - Convierte imágenes, srcset y fuentes de iconos a base64 data URIs - Elimina scripts, overlays de dev y estilos HMR del HTML final - Ofrece una alternativa con subagente de navegador para interactuar con la página antes de capturarla - Incluye un método de respaldo con MockPage.jsx cuando la app no puede correr localmente ## Cuándo usarla - Necesitas capturar un estado específico de la UI - Quieres compartir una versión estática de una página - Necesitas preparar assets para subirlos a Stitch - El usuario pide 'guardar el HTML' o 'mockear la vista' ## Qué la activa - "Guarda el HTML de esta página como archivo estático" - "Necesito una versión estática del dashboard para subir a Stitch" - "Extrae el HTML renderizado de localhost:5173/pricing" ## Antes de instalar - Requiere Node.js con puppeteer instalado y la app corriendo localmente (por ejemplo con npm run dev). - Necesita en el PATH: npx - Variables de entorno: MAX_REDIRECTS - runs shell commands - writes to your files - makes network requests - reads environment config ## Archivos - SKILL.md — 11 KB - scripts/extract_inline_html.ts — 34 KB - scripts/post_process.ts — 14 KB - scripts/snapshot.ts — 53 KB ## SKILL.md Reproducido tal cual desde google-labs-code/stitch-skills bajo Apache-2.0. Esta sección es el documento original y está en inglés. # Extract Static HTML Extract a self-contained static HTML file from any web application. ## Which Strategy to Use You MUST ask the user to choose which strategy to use before proceeding. Present the options clearly, **recommend Strategy A** as the preferred default, and **provide a brief pros/cons summary** for each option to help them make an informed decision. | | Strategy A (Puppeteer) | Strategy B (Browser Subagent) | | :--- | :--- | :--- | | **When** | App runs locally, no auth wall | Need to interact with page first (click, fill forms) | | **Fidelity** | **Highest — computed styles resolved** | High — rendered DOM | | **Setup** | **Zero — no mock needed** | Zero — no mock needed | | **Framework** | **Any** | Any | | **Output** | **Writes to file — no size limit** | May truncate in agent context | > [!WARNING] > **Checkpoint — User Confirmation Required.** > You **MUST** ask the user which strategy they prefer before proceeding. > Present the comparison table above, recommend Strategy A as the default, and > wait for explicit approval. Do **NOT** make the decision yourself or proceed > until the user confirms. *** ## Strategy A: Puppeteer Snapshot (Recommended) Launches headless Chrome, captures the fully rendered DOM, and produces a self-contained HTML file with all CSS inlined and images as base64. Works with **any framework** — no MockPage.jsx needed. ### Prerequisites - App running locally (e.g., `npm run dev`) - Node.js with `puppeteer` available (check: `node -e "require('puppeteer')"`) ### Workflow 1. **Start the App** and note the port. > [!WARNING] > **Checkpoint — User Confirmation Required.** > After starting the local server, you **MUST** pause and ask the user for > confirmation before running the snapshot script or launching a browser > subagent. Report the URL and port to the user so they can verify the app > is running and rendering correctly. Do **NOT** proceed to the snapshot > step until the user confirms. 2. **Run the Snapshot Script**: ```bash npx tsx /scripts/snapshot.ts \ --url http://localhost:5173 \ --output .stitch/home.html \ --wait 2000 ``` 3. **Multiple pages** — run once per route: ```bash npx tsx /scripts/snapshot.ts \ --url http://localhost:5173 --output .stitch/home.html --wait 2000 npx tsx /scripts/snapshot.ts \ --url http://localhost:5173/pricing --output .stitch/pricing.html --wait 2000 npx tsx /scripts/snapshot.ts \ --url http://localhost:5173/dashboard --output .stitch/dashboard.html --wait 2000 --html-class dark ``` 4. **Clean Up Dev Server**: If a local dev server was started specifically for snapshot extraction, make sure to stop the server process or terminate the background task once extraction is completed. ### Script Flags | Flag | Default | Description | | :--- | :--- | :--- | | `--url` | *(required)* | URL to capture | | `--output` | *(required)* | Output file path | | `--wait` | `1000` | Extra wait (ms) after network idle. Increase for lazy-loading apps. | | `--viewport` | `1280x800` | Viewport size as `WIDTHxHEIGHT` | | `--html-class` | — | Class(es) for `` element (e.g., `dark`) | | `--remove-fixed` | `false` | Remove fixed/sticky elements (cookie banners, chat widgets) | | `--full-height` | `false` | Resize viewport to full scroll height | | `--title` | — | Override page title (set to the route path, e.g. `/dashboard` or `/settings/profile`) | | `--auth-script` | — | Path to a JS/TS module that exports a default `async (page) => void` function for authentication | | `--inline-canvas` | `false` | Convert `` elements (ECharts, Chart.js, D3) to base64 `` tags | ### What It Does Automatically - Captures all CSSOM rules from `document.styleSheets` (preserves dynamic Vite/Tailwind dev styles and CSS-in-JS) - Inlines all `` → `