Any website, from a URL.A whole site, from one scan.Your app, from your own browser.Now make it perfect in Figma.
Paste a URL or scan an entire site without leaving Figma, or capture anything you can open in Chrome. Twinfig rebuilds it the way a designer would: real text, exact auto layout, components and tokens.
Build the component in your editor, capture it from the browser, and paste it into Figma as a design you can keep refining.
A PlanCard React component is typed in an editor while it renders on localhost. The page is captured with Option-Shift-P, pasted into Figma with Command-V, and its corner radius and button fill are then edited in Figma.
PlanCard.tsxpricing.tsxui/Button.tsx
1import { Button } from "./ui/Button";23export function PlanCard({ plan }) {4 return (5 <div className="rounded-2xl border p-6">6 <p className="text-muted">{plan.name}</p>7 <p className="text-4xl">$24<span>/mo</span></p>8 <ul className="mt-4 space-y-2">9 <li>Unlimited captures</li>10 <li>Storybook to component sets</li>11 <li>Tokens and prototype links</li>12 </ul>13 <Button>Start free trial</Button>14 </div>15 );16}
⑂ feat/pricing vite · ready in 212 msLn 16, Col 2 · TSX
localhost:5173/pricing
Pro
$24/mo
Unlimited captures
Storybook to component sets
Tokens and prototype links
Start free trial
[vite] hmr update /src/PlanCard.tsx
Copied to clipboardFull page · paste in Figma with ⌘V
⌥⇧PFull page
Drafts / PricingShare
Layers6
localhost:5173 — 1440
PlanCard
Pro
$24/mo
Features
Button
localhost:5173 — 1440
Pro
$24/mo
Unlimited captures
Storybook to component sets
Tokens and prototype links
Start free trial300 × 38
348 × 356
Button
VariantPrimary
Fill2F6BFF
Radius10
⌘VPaste in Twinfig
Works with your stack
If it renders in Chrome, Twinfig can bring it into Figma.
Next.jslocalhost:3000
Vitelocalhost:5173
Reactany app
Astrolocalhost:4321
Nuxtlocalhost:3000
SvelteKitlocalhost:5173
Angularlocalhost:4200
Remixlocalhost:3000
Vuelocalhost:5173
Gatsbylocalhost:8000
Solidlocalhost:3000
Next.jslocalhost:3000
Vitelocalhost:5173
Reactany app
Astrolocalhost:4321
Nuxtlocalhost:3000
SvelteKitlocalhost:5173
Angularlocalhost:4200
Remixlocalhost:3000
Vuelocalhost:5173
Gatsbylocalhost:8000
Solidlocalhost:3000
Chromeany open tab
Storybooklocalhost:6006
Tailwindutility classes
Vercelpreview deploys
Webflowpublished sites
shadcn/uicomponent kits
Netlifydeploy previews
Framerpublished sites
Shopifystorefronts
Stagingbehind SSO
WordPresslive themes
Plain HTMLindex.html
Chromeany open tab
Storybooklocalhost:6006
Tailwindutility classes
Vercelpreview deploys
Webflowpublished sites
shadcn/uicomponent kits
Netlifydeploy previews
Framerpublished sites
Shopifystorefronts
Stagingbehind SSO
WordPresslive themes
Plain HTMLindex.html
What you get
Not a screenshot. A design you can work in.
Twinfig reads the rendered page the way a browser does, then rebuilds it the way a designer would.
Capture anything you can see
Public pages import straight from Figma. For everything else, use your own browser and session: a full page, the visible area, one element or several pages, with real customer data swapped for mock data on the way out.
In a logged-in dashboard the Twinfig popup opens, Data is switched to Mock, and the element picker moves from a name to a row to the whole customers table. The captured table arrives in Figma with names, emails, phones and avatars replaced.
Teo Parkteo.park@example.com(206) 555-0176StarterPast due
Real layers, not fragments
Text stays text. Auto layout is applied only where it reproduces the page exactly, and repeated UI becomes components.
A typical import with hundreds of per-letter layers switches to Twinfig’s clean tree; the headline, an auto layout row and a button instance are inspected in turn.
Drafts / DashboardShare
Typical importTwinfig
Layers412
Group 184
Rectangle 92
S
h
i
p
t
h
e
d
a
s
h
b
o
a
r
d
Group 185
Vector
E
v
e
r
y
m
e
t
r
i
c
Rectangle 93
Group 186
Vector
Vector
Group 184
Rectangle 92
S
h
i
p
t
h
e
d
a
s
h
b
o
a
r
d
Group 185
Vector
E
v
e
r
y
m
e
t
r
i
c
Rectangle 93
Group 186
Vector
Vector
Layers14
Hero
Ship the dashboard.
Every metric your team checks…
Actions
Button · Primary
Button · Secondary
Metrics
MetricCard
MetricCard
MetricCard
Dashboard — 1440
Shipthedashboard.
Every metric your team checks, in one calm view.
Open dashboardInvite team
Revenue$48,210
Customers1,284
Churn1.9%
Button
VariantPrimary
SizeLarge
MainButton
Storybook in, component sets out
Open your Storybook, pick components, and every story becomes a variant. Themes and viewports become extra variant properties.
Button and Badge are picked in the Twinfig popup on a Storybook. Eight Button variants appear in a Figma component set across Light and Dark themes, then a Badge set, then the instance properties.
localhost:6006
S StorybookFind componentsComponents
ButtonPrimarySecondaryGhostDisabled
Badge
Input
Continue
Storybook found
Capture stories as components
Capture 7 stories
Button
ContinueVariant=Primary, Theme=Light
ContinueVariant=Secondary, Theme=Light
ContinueVariant=Ghost, Theme=Light
ContinueVariant=Disabled, Theme=Light
ContinueVariant=Primary, Theme=Dark
ContinueVariant=Secondary, Theme=Dark
ContinueVariant=Ghost, Theme=Dark
ContinueVariant=Disabled, Theme=Dark
Badge
NeutralVariant=Neutral
SuccessVariant=Success
WarningVariant=Warning
ButtonVariant Primary ▾Theme Dark ▾
Tokens and prototypes, included
Colors used more than once become variables, type becomes text styles, and links between pages become prototype connections.
Captured colors, type and spacing appear as Figma variables, three pages are linked with prototype connections, and the prototype is presented from Pricing to Sign up.
Local variables9
Captured from localhost:5173
color/ink11141C
color/paperFAFBFE
color/accent2F6BFF
color/muted717888
color/borderE1E5EE
Aatype/display56 / 100%
Aatype/body16 / 150%
#radius/card24
#space/416
Components4
Button · Primary
Button · Secondary
PlanCard
NavBar
Home
DocsPricing
Design from what’s real.Get started
Pricing
DocsPricing
Pricing that scales
Start free trial
Sign up
Create your accountContinue
Present
Sign up2 / 2
DocsPricing
Pricing that scales
Start free trial
Create your accountContinue
You
The details
The small things a handoff depends on.
Settings live in both the plugin and the extension, so every capture comes out the way your team works.
1440 · Light
1024 · Light
768 · Light
390 · Light
Every viewport and theme
Capture 1920, 1440, 1024, 768 and 390 in light, dark or both. Each combination becomes its own frame.
/
/pricing
/blog/*412 pages3 of 412
/docs/*86 pages3 of 86
/changelog
Scan a whole site
Twinfig reads the sitemap and links, then groups template pages so you import three blog posts, not 412.
Real Mock
DWDana Whitfielddana@northwind.io
MBMarcus Bellmarcus.bell@gmail.com
PRPriya Ramanpriya@raman.design
Mock data, consistently
Names, emails, phones and IDs swap for stand-ins. One person keeps one face everywhere, from any DiceBear style.
Plans for every team
Starter$0
Pro$12
Team$24
Chrome
Plans for every team
Starter$0
Pro$12
Team$24
Figma
Check it against the browser
Every frame carries a hidden reference screenshot. Drag to compare the import with what Chrome rendered.
localhost:5173 — 1440
RecaptureUpdated just now
Recapture in place
Frames remember their URL, width, theme and language. Select one, recapture, and it updates where it sits.
⌥⇧PFull page
⌥⇧EPick an element
⌘VPaste in Figma
Keyboard first
Capture without opening anything. Shortcuts work on any page, and the capture is on your clipboard when it’s done.
Your browserClipboardFigma
0 bytes uploaded
Private by default
Browser captures go to your clipboard and local history. Nothing is uploaded to capture a page you’re logged into.
Get started
Three steps from any site to your canvas.
1
Twinfig for FigmaTwinfig for Chrome Pinned to toolbar
Install Twinfig
Add the Figma plugin. Add the Chrome extension too for logged-in apps, localhost and Storybook.
2
~/app$npm run devVITE v6.0.3 ready in 212 ms➜ Local: http://localhost:5173/⌥⇧PCopied
Pick what to capture
In Figma, paste a URL and import the page or scan the whole site. In Chrome, press ⌥⇧P for the full page or ⌥⇧E to pick an element, then ⌘V in Twinfig.
3
localhost:5173 — 1440
4 components
Refine it
Everything lands as real layers, not a picture. Start designing.
A screenshot is a reference. Twinfig gives you a design.
Feature
Screenshot
Typical HTML import
Twinfig
Text
Pixels
Lines split up or one layer per letter
Real text layers with every style run
Animations
Whatever frame was on screen
Often caught mid-transition
Finished before capture
Layout
Flat image
Absolute positions
Auto layout where it reproduces the page exactly
Repeated UI
Not available
Copies of copies
Components with instances, across every page
Colors and type
Not available
Hard-coded values
Variables and text styles
Links between pages
Not available
Not available
Prototype connections
Whole sites
One page at a time
One page at a time
Scan the site, pick pages, import them in one run
localhost and logins
Yes
Usually not
Yes, captured in your own browser
Storybook
Not available
Not available
Component sets, one variant per story
Customer data
Captured as is
Captured as is
Swapped for mock data on the way out
Compared with other tools
Built for teams that design from what they ship.
How Twinfig lines up against the importers designers already know.
Capability
Twinfig
html.to.design
Figma’s Chrome extension
Import a live URL
Yes
Yes
Yes
Pages behind a login, localhost
Your own browser session
Via its extension
Your own browser session
Pick a single element
Yes
Not advertised
Not advertised
Many viewports × light and dark in one run
Yes
Viewports
Not advertised
Repeated UI becomes components
Across every page
Not advertised
Not advertised
Colors and type as variables and text styles
Yes
Not advertised
Not advertised
Links become prototype connections
Yes
Not advertised
Not advertised
Storybook stories to component sets
Yes
Not advertised
Not advertised
Mock data for customer information
Before it leaves the page
Not advertised
Not advertised
Recapture a frame in place
Yes
Not advertised
Not advertised
Based on each tool’s public product pages as of October 2026. “Not advertised” means we couldn’t find the capability described, not that it can’t exist. html.to.design and Figma are trademarks of their owners.
Roadmap
Where Twinfig is going next.
These are planned, not shipped yet.
Planned
GitHub repo → Figma
Point Twinfig at a repo. It installs, starts the dev server or Storybook, finds your routes and captures each one.
Planned
Light and dark as variable modes
Pair each color with its dark-theme twin and write them as two modes of one variable.
Planned
Interactive states
Hover, focus, active, open menus and dialogs, added as variants like State=Hover.
Planned
CSS grid → auto layout
Simple grid layouts map to wrapping auto layout instead of absolute positions.
Planned
Mobile apps
Expo and React Native through the web pipeline first, then native iOS and Android from the simulator.
FAQ
Questions designers ask.
What is Twinfig?
Twinfig is a Figma plugin and a Chrome extension that turn any website or app into an editable Figma design. Import public pages, or a whole site, straight from Figma; capture anything else from Chrome. Pages arrive with real text layers, finished animations, exact auto layout, components, variables, text styles and prototype connections, not as a screenshot.
Can I import an entire website from inside Figma?
Yes. Type a URL in the plugin and choose Scan site. Twinfig finds the site’s pages from its sitemap or by following links, groups them by path and collapses repetitive templates such as blog posts, so you pick the pages that matter and import them in one run, linked as a prototype. No extension needed for public sites.
Does it work on localhost, staging and pages behind a login?
Yes. The Chrome extension captures in your own browser with your own session, so anything you can see works: dev servers, preview deploys, staging behind SSO and admin dashboards.
Do my captures leave my machine?
Not when you capture with the extension. The capture goes to your clipboard, your local history and, if you choose, a .twinfig file. The one network call is to DiceBear when mock avatars are on, and it sends only the mock name. Public website imports from the plugin use Twinfig’s capture service.
What about real customer data in a logged-in app?
Switch Data to Mock before you capture. Names, emails, phone numbers, addresses, card numbers and other IDs, handles and avatars are replaced with realistic stand-ins inside the browser, before anything reaches the clipboard. Each person keeps one consistent stand-in across every page and viewport.
Which frameworks are supported?
All of them, because Twinfig reads what Chrome renders: React, Next.js, Remix, Vue, Nuxt, Svelte, Astro, Tailwind, plain HTML and anything else that ends up in the DOM.
How does Storybook capture work?
Open your Storybook and click Twinfig. It reads the story index, you pick components, and every story is captured and combined into a Figma component set with one variant per story. If you capture more than one theme or viewport, those become extra variant properties.
Will it break my Figma file with thousands of layers?
No. Twinfig drops wrapper elements that only exist for layout, keeps text as whole text layers, turns repeated UI into instances and builds in small batches so Figma stays responsive. A typical marketing page arrives as a few hundred clean layers.
How is Twinfig different from a screenshot or other HTML-to-Figma importers?
A screenshot is a picture. Most importers give you absolute positions and text split into fragments. Twinfig rebuilds the page as a designer would: style runs inside real text, auto layout only where it matches the page exactly, components, tokens and prototype links.
Is Twinfig affiliated with Figma?
No. Twinfig is an independent product. Figma is a trademark of Figma, Inc.