Capture the whole page.
One button. It fires whatever lazy-loads, waits for the images, then parks the file.
HTML to Figma Chrome extension + Figma plugin
Real Auto Layout that reflows. Layer names a designer would have typed. Not a screenshot, not a tree of layers called div.
Free No account No import limit
Features
One button. It fires whatever lazy-loads, waits for the images, then parks the file.
The picker names what it is about to take. Arrow up widens the selection, a click captures it.
Desktop 1440, laptop 1280, tablet 768, phone 375. Four frames from a single capture.
No file to import — 2,061 layers straight off the clipboard. Then Figma asks what to swap in for a font it hasn't got.
Why this one
6 captures · verified to 0.6 px
of 2,754 nodes · 0 on all six sites
37 badged · 2 deliberate
2,159 unit · 559 real Chromium · 20 end-to-end
The same documents record what is still wrong, and so does this page: what it misses.
Side by side
| Feature | Relayer | html.to.design |
|---|---|---|
| Price | Free, on your machine | $18 a month, or a free tier |
| Imports | No limit; none in the code | 10 per 30 days, free tier |
| Four device widths | ShippedOne capture, four frames | A separate import per viewport |
| Missing fonts | Offered, then Re-apply fonts | Install it, then re-import |
| Account | None, no sign-up | Figma account; billing bound to it |
| Your page's data | Stays put — networkAccess: none |
Processed through their cloud |
As documented, August 2026. Find a row out of date and I will fix it.
Questions
No Relayer server exists. The capture runs in your tab; the plugin declares
networkAccess: none and fetches only your page's own images and fonts.
Yes — it reads the live tab, not a re-fetched URL. Whatever your browser has already rendered: signed in, on localhost, behind staging.
Three arrive wrong and unbadged: an <img> with no
src, an <img>'s own background, a checkbox's tick.
Pasting also flattens SVG icons to images and takes the first style of mixed-styled
text — the popup says so first. Everything else that could not be carried arrives
badged.
It reads the rendered page, not the source, so the framework mostly does not come
into it. Framer's display: contents shell needed handling; it has it.
A zip: doc.json plus the page's images and fonts. 100 KB to a few
megabytes — stripe.com, in the clip above, is 2.5 MB.
Nothing. There is no account to make, no sign-up, and no import counter — not a generous limit, none in the code.
Capture it with the extension, paste it into Figma. Real Auto Layout, real layer names, no Relayer server.
Free No account No import limit