{"_id":"@dazl/dembrandt","_rev":"18-467950d1fb9b65dd6f557c3e687ceea2","name":"@dazl/dembrandt","dist-tags":{"latest":"0.3.1"},"versions":{"0.3.0":{"name":"@dazl/dembrandt","version":"0.3.0","keywords":["design-tokens","design-system","branding","web-scraping","cli","playwright","extraction"],"author":{"name":"thevangelist","email":"info@esajuhana.com"},"license":"MIT","_id":"@dazl/dembrandt@0.3.0","maintainers":[{"name":"yifat","email":"yifat@dazl.dev"},{"name":"ilyakatts","email":"ilyakatts@gmail.com"},{"name":"idoros","email":"idoros@gmail.com"},{"name":"baraki","email":"barak.music.pro@gmail.com"},{"name":"cijoe","email":"infra@dazl.dev"},{"name":"pistolpete_","email":"stelaviv@gmail.com"},{"name":"avi.vahl","email":"avi@dazl.dev"},{"name":"qballer","email":"qballer@gmail.com"},{"name":"yurimorkovnik","email":"yuriymork62@gmail.com"},{"name":"ariki","email":"Arikishon1@gmail.com"},{"name":"serhiiz","email":"serhii@dazl.dev"},{"name":"plisovyi","email":"pavlol@wix.com"},{"name":"oleksandraab","email":"sasha@dazl.dev"},{"name":"oleh.rak","email":"legrak@gmail.com"},{"name":"ekaterinaza","email":"kate@dazl.dev"},{"name":"yuriin","email":"yuriin@dazl.dev"},{"name":"shakederin","email":"shaked@dazl.dev"},{"name":"dorza","email":"dor@dazl.dev"},{"name":"iuriikowix","email":"iurii.kozhan@gmail.com"},{"name":"alissavrk","email":"alissa.vrk@gmail.com"},{"name":"0xrezaa","email":"reza@dazl.dev"},{"name":"idango10","email":"idan.goshen@gmail.com"},{"name":"yurii-v","email":"yuriiv@dazl.dev"},{"name":"arnonkehat","email":"arnon.k@gmail.com"},{"name":"oleksiiletushev","email":"oleksiy.letushev@gmail.com"},{"name":"danieleww","email":"daniel@dazl.dev"},{"name":"alisey","email":"alisey.login@gmail.com"},{"name":"ranberko91","email":"ran@dazl.dev"},{"name":"vladyslavgoloshchapov","email":"vladg@dazl.dev"},{"name":"tomrav","email":"tom@dazl.dev"},{"name":"vladba-wix","email":"vladb@dazl.dev"},{"name":"noammu","email":"noamm7466@gmail.com"},{"name":"nadavov","email":"nadav@dazl.dev"}],"homepage":"https://github.com/thevangelist/dembrandt#readme","bugs":{"url":"https://github.com/thevangelist/dembrandt/issues"},"bin":{"dembrandt":"index.js"},"dist":{"shasum":"6e053741b4d2cfc8d2288ad4600c46bcfe037436","tarball":"https://registry.npmjs.org/@dazl/dembrandt/-/dembrandt-0.3.0.tgz","fileCount":6,"integrity":"sha512-TfzCL1PXUQONraGNeG3nifxoVzdMssusti/8ctQyXeAsxS2nfywssDR7O9QNhLz+OCmL/Un2pqYem27JBbph7w==","signatures":[{"sig":"MEQCIDQGV6BRUeaL+etddcbMNf3R/GbTmscwyeUuvmNDIBU/AiA2OHhP5fQdLsLZBtDUpKPwJvr00pCpSJdsMJkVylbiKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115014},"main":"index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"02c48511ce399de8cc2a3f28ba7b11a6989939ba","scripts":{"start":"node index.js","release":"./release.sh","brand-challenge":"node run-no-login-challenge.mjs","install-browser":"npx playwright install chromium","brand-challenge:report":"node run-no-login-challenge.mjs || true"},"_npmUser":{"name":"cijoe","email":"infra@dazl.dev"},"repository":{"url":"git+https://github.com/thevangelist/dembrandt.git","type":"git"},"_npmVersion":"11.6.2","description":"Extract design tokens and brand assets from any website","directories":{},"_nodeVersion":"24.11.1","dependencies":{"ora":"^7.0.1","chalk":"^5.3.0","commander":"^11.1.0","playwright":"^1.40.0","@playwright/browser-chromium":"^1.57.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dembrandt_0.3.0_1764515946487_0.5911484859960194","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@dazl/dembrandt","version":"0.3.1","keywords":["design-tokens","design-system","branding","web-scraping","cli","playwright","extraction"],"author":{"name":"thevangelist","email":"info@esajuhana.com"},"license":"MIT","_id":"@dazl/dembrandt@0.3.1","maintainers":[{"name":"yifat","email":"yifat@dazl.dev"},{"name":"ilyakatts","email":"ilyakatts@gmail.com"},{"name":"idoros","email":"idoros@gmail.com"},{"name":"baraki","email":"barak.music.pro@gmail.com"},{"name":"cijoe","email":"infra@dazl.dev"},{"name":"pistolpete_","email":"stelaviv@gmail.com"},{"name":"avi.vahl","email":"avi@dazl.dev"},{"name":"qballer","email":"qballer@gmail.com"},{"name":"yurimorkovnik","email":"yuriymork62@gmail.com"},{"name":"ariki","email":"Arikishon1@gmail.com"},{"name":"serhiiz","email":"serhii@dazl.dev"},{"name":"plisovyi","email":"pavlol@wix.com"},{"name":"oleksandraab","email":"sasha@dazl.dev"},{"name":"oleh.rak","email":"legrak@gmail.com"},{"name":"ekaterinaza","email":"kate@dazl.dev"},{"name":"yuriin","email":"yuriin@dazl.dev"},{"name":"shakederin","email":"shaked@dazl.dev"},{"name":"dorza","email":"dor@dazl.dev"},{"name":"iuriikowix","email":"iurii.kozhan@gmail.com"},{"name":"alissavrk","email":"alissa.vrk@gmail.com"},{"name":"0xrezaa","email":"reza@dazl.dev"},{"name":"idango10","email":"idan.goshen@gmail.com"},{"name":"yurii-v","email":"yuriiv@dazl.dev"},{"name":"arnonkehat","email":"arnon.k@gmail.com"},{"name":"oleksiiletushev","email":"oleksiy.letushev@gmail.com"},{"name":"danieleww","email":"daniel@dazl.dev"},{"name":"alisey","email":"alisey.login@gmail.com"},{"name":"ranberko91","email":"ran@dazl.dev"},{"name":"vladyslavgoloshchapov","email":"vladg@dazl.dev"},{"name":"tomrav","email":"tom@dazl.dev"},{"name":"vladba-wix","email":"vladb@dazl.dev"},{"name":"noammu","email":"noamm7466@gmail.com"},{"name":"nadavov","email":"nadav@dazl.dev"}],"homepage":"https://github.com/thevangelist/dembrandt#readme","bugs":{"url":"https://github.com/thevangelist/dembrandt/issues"},"bin":{"dembrandt":"index.js"},"dist":{"shasum":"40f813a09d2cac79db55eaa225864c6831dbdd45","tarball":"https://registry.npmjs.org/@dazl/dembrandt/-/dembrandt-0.3.1.tgz","fileCount":6,"integrity":"sha512-jkGUimcV3GPjyNqj5k/3QyL1taA/EsFGAkQ3Fv8KTu3EQu8AJGje7ZnCMoyPRU7C4TpBwKsJhswRbtmJ1q3CYQ==","signatures":[{"sig":"MEUCIQDqvhKpvkq5/AMyeXhckTMHVH8FhSZ5k1OoHYPjtNoHdwIgTrxCBuIkB5+x+K0Gzefz9icgojUT91D46LrnDGi3GDo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115030},"main":"index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"8a95dc7a925cbb6fbfe16687a6891b30bf92c8a8","scripts":{"start":"node index.js","brand-challenge":"node run-no-login-challenge.mjs","install-browser":"npx playwright install chromium","brand-challenge:report":"node run-no-login-challenge.mjs || true"},"_npmUser":{"name":"avi.vahl","email":"avi@dazl.dev"},"repository":{"url":"git+https://github.com/dazl-dev/dembrandt.git","type":"git"},"_npmVersion":"11.6.4","description":"Extract design tokens and brand assets from any website","directories":{},"_nodeVersion":"24.11.1","dependencies":{"ora":"^7.0.1","chalk":"^5.3.0","commander":"^11.1.0","playwright":"^1.40.0","@playwright/browser-chromium":"^1.57.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dembrandt_0.3.1_1764630874742_0.606910478847819","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-11-30T15:19:06.486Z","modified":"2026-08-07T07:10:25.834Z","0.3.0":"2025-11-30T15:19:06.688Z","0.3.1":"2025-12-01T23:14:34.920Z"},"bugs":{"url":"https://github.com/thevangelist/dembrandt/issues"},"author":{"name":"thevangelist","email":"info@esajuhana.com"},"license":"MIT","homepage":"https://github.com/thevangelist/dembrandt#readme","keywords":["design-tokens","design-system","branding","web-scraping","cli","playwright","extraction"],"repository":{"url":"git+https://github.com/dazl-dev/dembrandt.git","type":"git"},"description":"Extract design tokens and brand assets from any website","maintainers":[{"email":"evgeny@dazl.dev","name":"evgenyp"},{"email":"idoros@gmail.com","name":"idoros"},{"email":"barak.music.pro@gmail.com","name":"baraki"},{"email":"infra@dazl.dev","name":"cijoe"},{"email":"stelaviv@gmail.com","name":"pistolpete_"},{"email":"tom@dazl.dev","name":"tomrav"},{"email":"nadav@dazl.dev","name":"nadavov"}],"readme":"# 🎨 Dembrandt\n\n[![npm version](https://img.shields.io/npm/v/dembrandt.svg)](https://www.npmjs.com/package/dembrandt)\n[![npm downloads](https://img.shields.io/npm/dm/dembrandt.svg)](https://www.npmjs.com/package/dembrandt)\n[![license](https://img.shields.io/npm/l/dembrandt.svg)](https://github.com/thevangelist/dembrandt/blob/main/LICENSE)\n\nExtract any website’s design system into design tokens in a few seconds: logo, colors, typography, borders, and more. One command.\n\n![Dembrandt Demo](showcase.png)\n\n## Install\n\n```bash\nnpx dembrandt stripe.com\n```\n\nOr install globally: `npm install -g dembrandt` then run `dembrandt stripe.com`\n\nRequires Node.js 18+\n\n## What to expect from extraction?\n\n- Colors (semantic, palette, CSS variables)\n- Typography (fonts, sizes, weights, sources)\n- Spacing (margin/padding scales)\n- Borders (radius, widths, styles, colors)\n- Shadows\n- Components (buttons, inputs, links)\n- Breakpoints\n- Icons & frameworks\n\n## Usage\n\n```bash\ndembrandt <url>                    # Basic extraction\ndembrandt stripe.com --json-only   # JSON output\ndembrandt site.com --debug         # Visible browser\ndembrandt site.com --dark-mode     # Dark mode\ndembrandt site.com --mobile        # Mobile viewport\ndembrandt site.com --slow          # 3x timeouts\n```\n\nResults auto-save to `output/domain.com/YYYY-MM-DDTHH-MM-SS.json`\n\n## Use Cases\n\n- Brand audits & competitive analysis\n- Design system documentation\n- Reverse engineering brands\n- Multi-site brand consolidation\n\n## How It Works\n\nUses Playwright to render the page, extracts computed styles from the DOM, analyzes color usage and confidence, groups similar typography, detects spacing patterns, and returns actionable design tokens.\n\n### Extraction Process\n\n1. Browser Launch - Launches Chromium with stealth configuration\n2. Anti-Detection - Injects scripts to bypass bot detection\n3. Navigation - Navigates to target URL with retry logic\n4. Hydration - Waits for SPAs to fully load (8s initial + 4s stabilization)\n5. Content Validation - Verifies page content is substantial (>500 chars)\n6. Parallel Extraction - Runs all extractors concurrently for speed\n7. Analysis - Analyzes computed styles, DOM structure, and CSS variables\n8. Scoring - Assigns confidence scores based on context and usage\n\n### Color Confidence\n\n- High — Logo, brand elements, primary buttons\n- Medium — Interactive elements, icons, navigation\n- Low — Generic UI components (filtered from display)\n- Only shows high and medium confidence colors in terminal. Full palette in JSON.\n\n## Limitations\n\n- Dark mode requires --dark-mode flag (not automatically detected)\n- Hover/focus states extracted from CSS (not fully interactive)\n- Canvas/WebGL-rendered sites cannot be analyzed (e.g., Tesla, Apple Vision Pro demos)\n- JavaScript-heavy sites require hydration time (8s initial + 4s stabilization)\n- Some dynamically-loaded content may be missed\n- Default viewport is 1920x1080 (use --mobile for responsive analysis)\n\n## Ethics & Legality\n\nDembrandt extracts publicly available design information (colors, fonts, spacing) from website DOMs for analysis purposes. This falls under fair use in most jurisdictions (USA's DMCA § 1201(f), EU Software Directive 2009/24/EC) when used for competitive analysis, documentation, or learning.\n\nLegal: Analyzing public HTML/CSS is generally legal. Does not bypass protections or violate copyright. Check site ToS before mass extraction.\n\nEthical: Use for inspiration and analysis, not direct copying. Respect servers (no mass crawling), give credit to sources, be transparent about data origin.\n\n## Contributing\n\nBugs you found? Weird websites that make it cry? Pull requests (even one-liners make me happy)?\n\nSpam me in [Issues](https://github.com/thevangelist/dembrandt/issues) or PRs. I reply to everything.\n\nLet's keep the light alive together.\n\n@thevangelist\n\n---\n\nMIT — do whatever you want with it.\n","readmeFilename":"README.md"}