Show HN: Perfectclone – Yoink the source code of any website, not an AI clone A developer released perfectclone, a Python 3.10+ command-line tool that mirrors a public website's own HTML, JavaScript, CSS, fonts and images via a Playwright browser crawl in about 15 seconds, producing a servable folder rather than an AI-regenerated lookalike. In the project's own compat.py comparison at 1440×900, perfectclone matched nine sites at 100% pixel accuracy with zero hydration errors — including huly.io, nextjs.org, astro.build, svelte.dev, vitepress.dev, docusaurus.io, wordpress.org/news, paulgraham.com and example.com — while framer.com scored 96% and webflow.com 93%, and every clone loaded with zero requests to trackers. The tool ships clone, serve, replace, rehost and strip-trackers commands, strips trackers by default, and is installable via pip or uvx. Pull the real frontend of any public site in ~15 seconds. No AI, no tokens. perfectclone clones any website 1:1. It crawls the site with a real browser Playwright , downloads the site's own HTML, JavaScript, CSS, fonts and images, and gives you a folder you can serve, edit and deploy. Then it lets you rebrand it, rehost it and strip the original owner's trackers without breaking it, including Next.js sites that hydrate on load. pip install perfectclone perfectclone clone example.com perfectclone serve example.com → http://localhost:8000 That's it. Chromium is downloaded automatically the first time you clone. Requires Python 3.10+. Or try it without installing anything, using uv https://docs.astral.sh/uv/ : uvx perfectclone clone example.com Most "clone any website" tools today regenerate the site: an AI agent looks at screenshots or scraped markup, writes a new React/Next.js app, and compares the result against the original with a visual-similarity score until it's close enough. That gets you a lookalike. The code is new, the behaviour is approximate, and there are always gaps. perfectclone doesn't regenerate anything. It mirrors the bytes the site actually serves, so the clone is the site: same markup, same bundles, same animations, same JavaScript running. Sometimes the real solution is the simple one. | | AI cloners | wget / HTTrack | perfectclone | |---|---|---|---| | Copies the site's real files | ❌ | ✅ | ✅ | | Pixel-identical on modern JS sites | ❌ | ❌ | ✅ | | Catches lazy-loaded JS, fonts, images | — | ❌ | ✅ | | React / Next.js sites still run | — | ❌ | ✅ | | Rebrand without breaking the site | ✅ | | ✅ | | Strips the original site's trackers | — | ❌ | ✅ | | Works without an LLM or API key | ❌ | ✅ | ✅ | Each card is one site split down the middle: the live site on the left, the clone on the right. scripts/compat.py clones each site, serves the copy, and compares its home page with the live one at 1440×900, with animations and videos paused on the same frame: | Site | Built with | Pixel match | Hydration errors | Notes | |---|---|---|---|---| | huly.io | Next.js | 100% | 0 | | | nextjs.org | Next.js | 100% | 0 | | | astro.build | Astro | 100% | 0 | | | svelte.dev | SvelteKit | 100% | 0 | | | vitepress.dev | VitePress Vue | 100% | 0 | | | docusaurus.io | Docusaurus React | 100% | 0 | | | wordpress.org/news | WordPress | 100% | 0 | | | paulgraham.com | Hand-written HTML | 100% | 0 | | | example.com | Static HTML | 100% | 0 | | | framer.com | Framer | 96% | 0 | Cookie banner needs Framer's backend | | webflow.com | Webflow | 93% | 0 | Cookie banner won't run on localhost; carousel caught mid-scroll | Every clone loaded with zero requests to trackers. Run it yourself with python scripts/compat.py , and please open an issue for any site that doesn't come out right. perfectclone clone