stitch::extract-static-html
Extract self-contained static HTML from a built web application or React components by inlining CSS and images.
Skill by google-labs-code
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/google-labs-code-stitch-extract-static-html
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, frontend, frontend-development, ui-design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/stitch-extract-static-html
What's inside
- Skill name
stitch::extract-static-html- Description
- Extract self-contained static HTML from a built web application or React components by inlining CSS and images. Use this skill whenever you need to capture a specific UI state, share a static version of a page, or prepare assets for Stitch upload, even if the user just asks to 'save the HTML' or 'mock the view'.
- License
- Apache-2.0
- Instructions
- 234 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Agent Skills spec issues
- name: only lowercase letters, digits and single hyphens allowed
- name: "stitch::extract-static-html" does not match folder "extract-static-html"
- allowed-tools: must be a space-separated string
Files (4)
- SKILL.md
- extract_inline_html.ts · scripts/
- post_process.ts · scripts/
- snapshot.ts · scripts/
SKILL.md (first lines)
# 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 <SKILL_DIR>/scripts/snapshot.ts \
--url http://localhost:5173 \
--output .stitch/home.html \
--wait 2000
```
3. **Multiple pages** — run once per route:
```bash
npx tsx <SKILL_DIR>/scripts/snapshot.ts \
--url http://localhost:5173 --output .stitch/home.html --wait 2000
npx tsx <SKILL_DIR>/scripts/snapshot.ts \
--url http://localhost:5173/pricing --output .stitch/pricing.html --wait 2000
npx tsx <SKILL_DIR>/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 `<html>` 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 `<canvas>` elements (ECharts, Chart.js, D3) to base64 `<img>` tags |
### What It Does Automatically
- Captures all CSSOM rules from `document.styleSheets` (preserves dynamic Vite/Tailwind dev styles and CSS-in-JS)
- Inlines all `<link rel="stylesheet">` → `<style>` blocks
- Converts `<img>` `src` **and `srcset`** → base64 data URIs (skips external fonts)
- Inlines same-origin and relative icon font files (`@font-face`) as base64 data URIs so ligatures never render as ASCII text
- Inlines `<source srcset>` URLs as base64
- Removes failed/dead `srcset` entries so the browser falls back to the inlined `src`
- Removes `<script>` tags, Vite HMR dev style blocks (`createHotContext`, `import.meta.hot`), and dev overlays
- Resolves relative CSS `url()` paths before inlining
### Framework Notes
| Framework | Notes |
| :--- | :--- |
| **React + Vite** | Works out of the box. `--wait 1000`. |
| **Next.js** | `--wait 3000` for SSR hydration. URL: `http://localhost:3000`. `<img srcset>` from `/_next/image` is auto-inlined as base64. |
| **Angular (@angular/cli / v17+)** | Works out of the box with `ng serve` (default URL: `http://localhost:4200`). `--wait 2000` for Angular Material / PrimeNG animation hydration and lazy-loaded routes. |
| **Vue / Nuxt** | Works out of the box. |
| **Svelte / SvelteKit** | Works out of the box. |
| **Storybook** | Use story URL: `--url http://localhost:6006/?path=/story/...` |
| **SSR (Webpack)** | May need longer `--wait`. |
### Troubleshooting
| Issue | Solution |
| :--- | :--- |
| Images missing | Increase `--wait` |
| Images show as broken after server stops | Verify `srcset` was inlined — check log for "Inlined N images". If `srcset` URLs failed, they are auto-removed so `src` (inlined) is used. |
| Icons display as text / Serif unstyled font | Ensure `snapshot.ts` captures CSSOM from `document.styleSheets` (step 0) and same-origin icon fonts (`@font-face`) are inlined as base64 data URIs. |
| Next.js `/_next/image` not inlined | Ensure the dev server is running when snapshot runs — the script fetches optimized images from the running server. |
| Dark mode not applied | `--html-class dark` |
| Cookie banner in output | `--remove-fixed` |
| Page requires login | Use `--auth-script ./auth.ts` (see Auth-Gated Pages below) |
| Charts/graphs show as blank boxes | Use `--inline-canvas` to serialize `<canvas>` to base64 `<img>` |
| `Cannot find module 'puppeteer'` | `npm install -g puppeteer` |From google-labs-code/stitch-skills, Apache-2.0.
More from google-labs-code/stitch-skills
- 0.798score
stitch::extract-design-md
google-labs-code
Extract a comprehensive design system (DESIGN.md) directly from frontend source code — React, Vue, Svelte, Angular, plain HTML/CSS, or any web framework.
SkillBFreshness: B★ 8.6KClaude Code +9 - 0.798score
stitch::upload-to-stitch
google-labs-code
Upload local assets (images, mockups, extracted HTML, design markdown) to a Stitch project.
SkillBFreshness: B★ 8.6KClaude Code +9 - 0.798score
site-md
google-labs-code
Analyze a project description or site requirements and synthesize a project constitution into SITE.md for the Stitch Build Loop
SkillBFreshness: B★ 8.6KClaude Code +9 - 0.792score
stitch::code-to-design
google-labs-code
Convert frontend code (Vite, React, Angular, Vue, etc.) to a Stitch Design by chaining static HTML extraction, design system extraction, and file upload.
SkillBFreshness: B★ 8.6KClaude Code +9 - 0.746score
enhance-prompt
google-labs-code
Transforms vague UI ideas into polished, Stitch-optimized prompts.
SkillCFreshness: C★ 8.6KClaude Code +9 - 0.746score
shadcn-ui
google-labs-code
Expert guidance for integrating and building applications with shadcn/ui components, including component discovery, installation, customization, and best…
SkillCFreshness: C★ 8.6KClaude Code +9 - 0.743score
remotion
google-labs-code
Generate walkthrough videos from Stitch projects using Remotion with smooth transitions, zooming, and text overlays
SkillCFreshness: C★ 8.6KClaude Code +9 - 0.740score
taste-design
google-labs-code
Semantic Design System Skill for Google Stitch.
SkillCFreshness: C★ 8.6KClaude Code +9 - 0.740score
react-vite-dashboard
google-labs-code
Convert Stitch designs into production React + Vite dashboards with TanStack Query, accessible tokens from DESIGN.md, and Web3-ready patterns (ethers/viem).
SkillCFreshness: C★ 8.6KClaude Code +9 - 0.737score
stitch::react-native
google-labs-code
Convert Stitch HTML designs to React Native components, or syncs/updates existing native components to align with the latest Stitch designs, using StyleSheet.
SkillCFreshness: C★ 8.6KClaude Code +9 - 0.737score
stitch::react-components
google-labs-code
Converts Stitch designs into modular Vite and React components, or syncs/updates existing React components to align with the latest Stitch designs, using…
SkillCFreshness: C★ 8.6KClaude Code +9 - 0.737score
stitch-loop
google-labs-code
Teaches agents to iteratively build websites using Stitch with an autonomous baton-passing loop pattern
SkillCFreshness: C★ 8.6KClaude Code +9
Compare and alternatives
Featured in
Signals
- Stars
- 8,572
- Forks
- 1,052
- Open issues
- 10
- Last commit (this folder)
- Jul 29, 2026 (3 months ago)
- Last release
- May 18, 2026 (5 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from google-labs-code
- 0.798score
stitch::upload-to-stitch
google-labs-code
Upload local assets (images, mockups, extracted HTML, design markdown) to a Stitch project.
SkillBFreshness: B★ 8.6KClaude Code +9 - 0.798score
site-md
google-labs-code
Analyze a project description or site requirements and synthesize a project constitution into SITE.md for the Stitch Build Loop
SkillBFreshness: B★ 8.6KClaude Code +9 - 0.798score
stitch::extract-design-md
google-labs-code
Extract a comprehensive design system (DESIGN.md) directly from frontend source code — React, Vue, Svelte, Angular, plain HTML/CSS, or any web framework.
SkillBFreshness: B★ 8.6KClaude Code +9 - 0.792score
stitch::code-to-design
google-labs-code
Convert frontend code (Vite, React, Angular, Vue, etc.) to a Stitch Design by chaining static HTML extraction, design system extraction, and file upload.
SkillBFreshness: B★ 8.6KClaude Code +9 - 0.746score
shadcn-ui
google-labs-code
Expert guidance for integrating and building applications with shadcn/ui components, including component discovery, installation, customization, and best…
SkillCFreshness: C★ 8.6KClaude Code +9 - 0.746score
enhance-prompt
google-labs-code
Transforms vague UI ideas into polished, Stitch-optimized prompts.
SkillCFreshness: C★ 8.6KClaude Code +9
Cite this page
stitch::extract-static-html skill. Agent Mart. https://agentmart.dev/skills/google-labs-code-stitch-extract-static-html (last updated 2026-10-24)