{
    "componentChunkName": "component---src-templates-blog-post-js",
    "path": "/en/web-to-figma-tools-2026/",
    "result": {"data":{"site":{"siteMetadata":{"title":"지나가던 개발(zigae)","author":"geonwoo","lang":"ko"}},"markdownRemark":{"id":"f88e594d-6dcc-5116-ab78-3e429e6431db","excerpt":"At a redesign kickoff, our designer asked: “Can I get the current screens in Figma?” Not screenshots — something she could actually edit. The old answer was…","html":"<p>At a redesign kickoff, our designer asked: “Can I get the current screens in Figma?” Not screenshots — something she could actually edit.</p>\n<p>The old answer was someone tracing rectangles over a screenshot for half a day. The current answer is a category of tools that read a page’s DOM and computed styles and rebuild it as real Figma nodes. Since some of the screens I needed to migrate sat behind a login, I ran three of these tools against real pages to see what survives and what breaks.</p>\n<p>One confession before we start: one of the three, html2figma, is <strong>a tool I built</strong>. I’ve deliberately spent more words on its limitations than its strengths here. Discount accordingly.</p>\n<h2 id=\"the-test-setup\" style=\"position:relative;\"><a href=\"#the-test-setup\" aria-label=\"the test setup permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The test setup</h2>\n<p>I ran three kinds of pages through each tool. If you write frontend code for a living, you can already guess where each one gets interesting:</p>\n<ol>\n<li><strong>A marketing landing page</strong> — gradient backgrounds, inline SVG icons, decorative elements drawn with <code class=\"language-text\">::before</code></li>\n<li><strong>An admin dashboard</strong> — behind a login session, heavy on SVG charts and data tables</li>\n<li><strong>A work-in-progress screen on <code class=\"language-text\">localhost:3000</code></strong> — not deployed anywhere</li>\n</ol>\n<p>Four things I checked: does text arrive as real text nodes (not flattened images), do SVGs convert to vectors, does the tool build a sane Auto Layout structure, and is the layer tree something a human can navigate.</p>\n<h2 id=\"htmltodesign\" style=\"position:relative;\"><a href=\"#htmltodesign\" aria-label=\"htmltodesign permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>html.to.design</h2>\n<p>The best-known tool in this space, and after using it you understand why.</p>\n<p>The workflow is the star. You type a URL inside the Figma plugin and <strong>their server renders the page</strong> and drops the result into your file — you never open a browser tab. Importing desktop, tablet, and mobile viewports in a single pass is genuinely the best starting point for a responsive redesign I’ve seen. Conversion quality on the landing page was solid: text, gradients, and SVGs all came through cleanly.</p>\n<p>Pages 2 and 3 are where things get complicated. Server-side rendering obviously <strong>can’t see behind your login session or reach localhost</strong>. There’s a Chrome extension path for that, but it still means your admin panel’s DOM transits a third-party server — if your org has a security review process, expect questions. I wouldn’t point it at an internal dashboard.</p>\n<p>Pricing: $12/month billed annually ($144/year) or $18/month billed monthly, per user. Free tier is 10 imports per 30 days. For an agency batch-importing a fifty-page site, the price is easily justified. For individual use it’s on the steep side.</p>\n<h2 id=\"html2figma\" style=\"position:relative;\"><a href=\"#html2figma\" aria-label=\"html2figma permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>html2figma</h2>\n<p>This is mine. I built it precisely because of where the previous tool’s approach stops, so the architecture is different.</p>\n<p>The Chrome extension reads <strong>the page as it currently exists in your tab</strong> via the Chrome DevTools Protocol’s DOMSnapshot. Because it captures actual browser state rather than a server re-render, login sessions, localhost, and even A/B variants only you can see all capture exactly as rendered. The capture leaves your machine only as a .h2f file (JSON) or through your clipboard — nothing is stored server-side. Migrating the admin dashboard is exactly the case this was built for.</p>\n<p>Fidelity is where most of the engineering time went: icons drawn with <code class=\"language-text\">::before</code>/<code class=\"language-text\">::after</code>, asymmetric borders, merged iframe and shadow DOM capture, and inline SVGs converted to editable vectors. Large pages stream over in chunks. On the Figma side, the plugin generates Auto Layout and Local Styles (color/text), which meaningfully cuts the cleanup work afterward.</p>\n<p>Now the honest downsides. First, <strong>Chrome shows a “this extension is debugging this browser” banner during capture</strong> — an unavoidable cost of using CDP, and mildly alarming the first time you see it. Second, there’s no multi-viewport import like html.to.design’s; you resize the window and capture each breakpoint separately. Third, the free tier is 5 conversions per month — fewer raw imports than html.to.design’s free tier. There are no feature gates on free, though, and no sign-up at all. Pro is $9/month.</p>\n<p>It’s on the <a href=\"https://chromewebstore.google.com/detail/html2figma/cgjbnhacnalehnfkkkoilmglhiigbjmf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Chrome Web Store</a> if you want to poke at it.</p>\n<h2 id=\"html-to-figma-builderio\" style=\"position:relative;\"><a href=\"#html-to-figma-builderio\" aria-label=\"html to figma builderio permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>HTML to Figma (Builder.io)</h2>\n<p>Builder.io’s open-source plugin. Being completely free makes it the zero-commitment way to try this category, and the <a href=\"https://github.com/BuilderIO/figma-html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">source is public</a> — worth reading if you’re curious how these tools work internally.</p>\n<p>Output quality depends heavily on the page. Simple layouts come through fine; on complex pages I hit misplaced elements and dropped styles. There’s no post-processing either — no Local Styles generation, no careful Auto Layout reconstruction. It’s a side project next to Builder’s main product (Visual Copilot), and the pace of improvement reflects that.</p>\n<p>Fine for occasionally moving a simple page. The variance makes it hard to put in a real pipeline.</p>\n<h2 id=\"why-the-outputs-differ\" style=\"position:relative;\"><a href=\"#why-the-outputs-differ\" aria-label=\"why the outputs differ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Why the outputs differ</h2>\n<p>The differences between these tools come down to <strong>how each one reads the DOM</strong>:</p>\n<ul>\n<li><strong>Server-side rendering</strong> (html.to.design’s URL import) renders a clean initial state, which makes results reproducible — but it can’t access sessions or local state, and JS that runs at render time can diverge from what your users actually see.</li>\n<li><strong>CDP DOMSnapshot</strong> (html2figma) pulls the layout tree and computed styles the browser has already calculated. You get exactly what’s on screen — including, notably, whatever transient state was on screen (an open dropdown will be captured too).</li>\n<li><strong>DOM traversal + <code class=\"language-text\">getComputedStyle</code></strong> (Builder.io) is the simplest to implement but tends to miss pseudo-elements and shadow DOM boundaries.</li>\n</ul>\n<p>If you check “how does it read the page” first, you can rule out the wrong tool for your situation quickly.</p>\n<h2 id=\"summary\" style=\"position:relative;\"><a href=\"#summary\" aria-label=\"summary permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Summary</h2>\n<table>\n<thead>\n<tr>\n<th>Situation</th>\n<th>Pick</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Multi-viewport imports, batch-migrating many pages</td>\n<td>html.to.design</td>\n</tr>\n<tr>\n<td>Pages behind auth, localhost, no third-party transit allowed</td>\n<td>html2figma</td>\n</tr>\n<tr>\n<td>Occasional simple pages, zero budget</td>\n<td>Builder.io</td>\n</tr>\n<tr>\n<td>Full redesign — you’ll redraw everything anyway</td>\n<td>Skip the tools; a reference screenshot may be faster</td>\n</tr>\n</tbody>\n</table>\n<p>That last row is sincere. Converted layer structures earn their keep when <strong>most of the existing UI survives</strong> the redesign. If you’re razing everything, a pinned screenshot for reference often beats inheriting someone else’s layer tree. All three have free tiers — the most reliable test is to run one page you know well through each and compare the layer trees yourself.</p>","timeToRead":5,"frontmatter":{"title":"I ran three web-to-Figma tools on a real project — here's what broke","date":"July 08, 2026","description":"A frontend developer's field notes on html.to.design, html2figma, and Builder.io's HTML to Figma: how each one reads the DOM, where each one breaks, and which one fits which job.","tags":["figma","html.to.design","html2figma","design-tools","chrome-extension"]},"fields":{"langKey":"en"}}},"pageContext":{"slug":"/en/web-to-figma-tools-2026/","previous":{"fields":{"slug":"/en/tennis-video-auto-edit/","langKey":"en","directoryName":"tennis-video-auto-edit"},"frontmatter":{"date":"July 23, 2026","title":"An hour of tennis footage, fifteen minutes of actual tennis","tags":["tennis","video-editing","auto-editing","filming-guide","onlyrally","side-project"]}},"next":null,"previousInSameTag":null,"nextInSameTag":{"fields":{"slug":"/web-to-figma-tools-2026/","langKey":"ko","directoryName":"web-to-figma-tools-2026"},"frontmatter":{"date":"July 08, 2026","title":"웹페이지를 Figma로 옮기는 도구 3개, 실제 프로젝트에 돌려본 기록","tags":["figma","html.to.design","html2figma","design-tools","chrome-extension"]}},"translationsLink":[{"name":"Korean","url":"/web-to-figma-tools-2026/"}]}},
    "staticQueryHashes": ["1522010811","1558996917","1615650028","3765107650"]}