Analyze images, websites, and Figma files to generate structured design.md with DTCG tokens, component inventory, and reconstruction notes
Scanned 9/8/2026
Install to Claude Code
npx -y skills add Aradotso/design-skills --skill anydesign-analyzer --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Anydesign Analyzer?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/aradotso-anydesign-analyzer)More formats (shields.io, HTML) on the badges page.
---
name: anydesign-analyzer
description: Analyze images, websites, and Figma files to generate structured design.md with DTCG tokens, component inventory, and reconstruction notes
triggers:
- analyze this design and create a design.md
- extract design tokens from this website
- generate a design system from this screenshot
- pull the color palette and typography from this image
- create a design brief from this Figma file
- analyze this landing page and document the design system
- extract CSS variables and create design tokens
- generate WCAG contrast report for these colors
---
# anydesign-analyzer
> Skill by [ara.so](https://ara.so) — Design Skills collection.
**anydesign** is a Claude skill that analyzes visual sources (images, websites, Figma files) and produces structured `design.md` files with DTCG-compliant design tokens, component inventories, and reconstruction notes. The output is portable across all AI builders (v0, Lovable, Cursor, Bolt, Claude Code) and design tools.
## What it produces
Every analysis generates three artifacts:
1. **`design.md`** — 7-section structured document (TL;DR, visual identity, design system, components, layout, reconstruction notes, open questions)
2. **`design-tokens.json`** — W3C DTCG format tokens (`$value` / `$type`)
3. **`design-a11y.md`** *(optional)* — WCAG 2.1 contrast report
All inferences include confidence levels: ✅ high / ⚠️ medium / ❓ low
## Installation
### 1. Clone and install the skill
```bash
# Clone the repository
git clone https://github.com/uxKero/anydesign.git
# Copy to Claude skills directory (personal)
cp -r anydesign ~/.claude/skills/
# OR for project-specific installation
cp -r anydesign /path/to/project/.claude/skills/
```
### 2. Install Python dependencies
```bash
cd anydesign
pip install -r requirements.txt
# If using capture_site.py for screenshots
playwright install chromium
```
### 3. (Optional) Connect Figma MCP
For Figma file analysis, connect the Figma MCP in Claude settings (`Settings → Connectors`). The skill uses these tools when available:
- `get_metadata`
- `get_variable_defs`
- `get_design_context`
- `get_screenshot`
## Core workflows
### Analyze a website
```python
# The skill activates automatically when you provide a URL
# Example prompt:
"Analyze https://vercel.com and create a design.md with full token extraction"
# The skill will:
# 1. Fetch the page HTML
# 2. Extract all CSS custom properties from linked stylesheets
# 3. Capture screenshots (multi-viewport if needed)
# 4. Generate design.md + design-tokens.json
```
### Analyze an uploaded image
```python
# Upload a screenshot or design mockup
# Example prompt:
"Extract the design system from this landing page screenshot"
# The skill will:
# 1. Use vision to identify colors, typography, spacing
# 2. Extract dominant colors via extract_colors.py
# 3. Infer component structure and hierarchy
# 4. Mark each inference with confidence level
```
### Analyze a Figma file
```python
# Requires Figma MCP connection
# Example prompt:
"Analyze this Figma file and check token consistency"
# The skill will:
# 1. Pull variable definitions via get_variable_defs
# 2. Extract usage via get_design_context
# 3. Cross-reference explicit tokens vs actual usage
# 4. Flag inconsistencies in the design.md
```
## Standalone CLI scripts
All scripts in `scripts/` work independently of Claude:
### Extract CSS variables from any URL
```bash
# Basic extraction
python scripts/extract_css_vars.py https://vercel.com/ --pretty
# Save to file
python scripts/extract_css_vars.py https://example.com/ --output tokens.json
# The script:
# - Fetches all linked stylesheets
# - Extracts inline <style> blocks
# - Groups --* custom properties by category (color, spacing, typography, etc.)
```
### Capture multi-viewport screenshots
```bash
# Single viewport
python scripts/capture_site.py https://your-site.com --output screenshot.png
# Multiple viewports
python scripts/capture_site.py https://your-site.com \
--viewports desktop,tablet,mobile \
--output captures/
# Options:
# --scroll: Enable scroll-capture for lazy-loaded content
# --dismiss-cookies: Auto-dismiss cookie banners
```
### Extract dominant colors from image
```bash
# Extract 5 dominant colors
python scripts/extract_colors.py screenshot.png --count 5
# Output as hex codes
python scripts/extract_colors.py image.png --format hex
# Save to JSON
python scripts/extract_colors.py image.png --output colors.json
```
### Check WCAG contrast
```bash
# Check single pair
python scripts/check_contrast.py --pair "#111,#FFF"
# Check multiple pairs
python scripts/check_contrast.py \
--pair "#111,#FFF" \
--pair "#3B82F6,#FFF" \
--pair "#EF4444,#FFF"
# From pairs file (one per line: foreground,background)
python scripts/check_contrast.py --pairs-file colors.txt
# Output markdown table
python scripts/check_contrast.py --pair "#111,#FFF" --output contrast-report.md
```
### Validate a design.md
```bash
# Lint against spec
python scripts/lint_design_md.py path/to/design.md
# Validates:
# - YAML frontmatter presence
# - {token.refs} resolve correctly
# - 1:1 component mapping
# - Section 6 (reconstruction notes) is non-empty
```
### Audit tokens against live site
```bash
# Check if declared tokens match current CSS
python scripts/verify_design.py path/to/design-tokens.json https://vercel.com/
# Reports drift between:
# - Declared token values in JSON
# - Live CSS custom properties on the site
```
### Export for Claude Design
```bash
# Generate bundle for claude.ai/design upload
python scripts/export_for_claude_design.py path/to/design.md --out my-brand/
# Produces:
# - brand-kit.pptx (primary asset)
# - brand-overview.docx (full design.md as Word)
# - tokens.css (CSS custom properties)
# - tailwind.config.ts (Tailwind v3 config)
# - README-claude-design.md (upload instructions)
```
## Environment setup
```bash
# No API keys required for core functionality
# The skill uses Claude's built-in capabilities
# For Figma analysis, configure MCP in Claude settings
# For Playwright screenshots, ensure chromium is installed:
playwright install chromium
```
## design.md structure
Every generated `design.md` follows this 7-section format:
```markdown
---
title: Design System — [Project Name]
source: [URL or file path]
analyzed_at: [ISO timestamp]
confidence_legend: "✅ high / ⚠️ medium / ❓ low"
---
## 1. TL;DR
Three-sentence summary for AI builders and designers
## 2. Visual Identity
Brand personality, color philosophy, typography strategy
## 3. Design System (Tokens)
Colors, typography, spacing, radii, shadows, borders
All with confidence markers and {token.refs}
## 4. Component Inventory
Buttons, inputs, cards, navigation — structured by category
## 5. Layout & Composition
Grid systems, breakpoints, content hierarchy
## 6. Reconstruction Notes
Step-by-step guidance for rebuilding this design
## 7. Open Questions
What requires clarification or additional references
```
## design-tokens.json format
Tokens follow [W3C DTCG specification](https://www.designtokens.org/):
```json
{
"color": {
"primary": {
"$value": "#3b82f6",
"$type": "color",
"confidence": "high",
"source": "CSS var(--color-primary)"
},
"background": {
"$value": "#ffffff",
"$type": "color",
"confidence": "high"
}
},
"spacing": {
"unit": {
"$value": "4px",
"$type": "dimension",
"confidence": "medium"
},
"scale": {
"1": { "$value": "{spacing.unit}", "$type": "dimension" },
"2": { "$value": "8px", "$type": "dimension" },
"4": { "$value": "16px", "$type": "dimension" }
}
},
"typography": {
"font-family": {
"sans": {
"$value": "Inter, system-ui, sans-serif",
"$type": "fontFamily",
"confidence": "high"
}
},
"font-size": {
"base": { "$value": "16px", "$type": "dimension" },
"lg": { "$value": "18px", "$type": "dimension" }
}
}
}
```
## Real-world examples
### Example 1: Analyze Vercel landing page
```python
# Prompt:
"Analyze https://vercel.com and extract the complete design system"
# Output (in examples/vercel-landing/):
# - design.md: Full analysis with 808 extracted CSS variables
# - design-tokens.json: Geist design system in DTCG format
# - design-a11y.md: WCAG contrast report
# - capture.png: Desktop screenshot
# - claude-design-bundle/: Ready for claude.ai/design upload
```
### Example 2: Generate v0 brief from screenshot
```python
# Upload screenshot, prompt:
"Create a design.md I can paste into v0 to build this landing page"
# The skill generates a reconstruction-focused design.md
# Paste into v0.dev → builds working app
# See live demo: https://v0-anydesignexample.vercel.app/
```
### Example 3: Extract tokens for Style Dictionary
```bash
# Analyze site
python scripts/extract_css_vars.py https://your-brand.com/ --output raw-tokens.json
# The design-tokens.json is already DTCG-compliant
# Import directly into Style Dictionary:
# config.json:
{
"source": ["design-tokens.json"],
"platforms": {
"css": {
"transformGroup": "css",
"buildPath": "build/css/",
"files": [{
"destination": "variables.css",
"format": "css/variables"
}]
}
}
}
```
### Example 4: Audit brand consistency
```bash
# After 6 months, check if site still matches captured tokens
python scripts/verify_design.py design-tokens.json https://your-brand.com/
# Output shows:
# - Tokens that match (✓)
# - Tokens that drifted (⚠️ with delta)
# - Tokens no longer present (✗)
```
## Using output with AI builders
| Tool | How to consume |
|------|----------------|
| **v0** | Paste entire `design.md` as project brief |
| **Lovable** | Paste `design.md`, iterate visually |
| **Cursor/Windsurf** | Add `design.md` to context, ask for components |
| **Claude Code** | Provide both `design.md` + `design-tokens.json` |
| **Bolt** | Paste `design.md` as prompt |
| **Style Dictionary** | Import `design-tokens.json` directly |
| **Figma Variables** | Import `design-tokens.json` (DTCG format) |
| **Tokens Studio** | Import `design-tokens.json` |
## Common patterns
### Pattern 1: Full website capture and tokenization
```bash
# 1. Capture screenshots
python scripts/capture_site.py https://example.com \
--viewports desktop,tablet,mobile \
--scroll \
--output captures/
# 2. Extract CSS tokens
python scripts/extract_css_vars.py https://example.com --output raw-tokens.json
# 3. Analyze in Claude
"Using these screenshots and raw-tokens.json, create a complete design.md"
# 4. Validate output
python scripts/lint_design_md.py design.md
# 5. Check contrast
python scripts/check_contrast.py --pairs-file design-tokens.json
```
### Pattern 2: Figma to code workflow
```python
# In Claude with Figma MCP connected:
"Analyze [Figma file URL], check for token consistency, and generate design.md"
# The skill will:
# 1. Pull variable definitions (explicit tokens)
# 2. Extract actual usage (get_design_context)
# 3. Flag discrepancies
# 4. Generate design.md with notes on inconsistencies
# Then feed to v0/Cursor:
"Build this using the attached design.md"
```
### Pattern 3: Brand asset bundle for Claude Design
```bash
# 1. Analyze reference
"Analyze our brand homepage and create design.md"
# 2. Export bundle
python scripts/export_for_claude_design.py design.md --out brand-bundle/
# 3. Upload to claude.ai/design:
# - brand-kit.pptx (main asset)
# - brand-overview.docx (brief)
# - tokens.css or tailwind.config.ts (code reference)
# 4. All future Claude Design projects use this brand by default
```
## Troubleshooting
### Issue: CSS extraction returns empty
**Cause**: Site uses inline styles or CSS-in-JS, not CSS custom properties.
**Solution**:
```bash
# Check if site uses custom properties
curl -s https://example.com | grep -o "var(--[^)]*)" | head -5
# If empty, the site doesn't use CSS vars
# Rely on vision-based extraction instead:
"Analyze this screenshot and infer the design system"
```
### Issue: Playwright screenshot fails
**Cause**: Chromium not installed or site blocks automation.
**Solution**:
```bash
# Reinstall chromium
playwright install chromium
# Try with different user agent
python scripts/capture_site.py https://example.com \
--user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
```
### Issue: Token references don't resolve in design.md
**Cause**: Circular references or malformed `{token.ref}` syntax.
**Solution**:
```bash
# Validate the design.md
python scripts/lint_design_md.py design.md
# Check design-tokens.json for circular refs
# Fix manually or regenerate
```
### Issue: Figma MCP tools not available
**Cause**: MCP not connected or insufficient permissions.
**Solution**:
1. Open Claude settings → Connectors
2. Verify Figma MCP is enabled
3. Check Figma file permissions (must have view access)
4. Retry analysis
### Issue: Contrast report shows all failures
**Cause**: Background color not correctly identified.
**Solution**:
```bash
# Manually specify background
python scripts/check_contrast.py \
--pair "#3B82F6,#FFFFFF" \
--background "#FFFFFF"
# Or update design.md with correct background token
```
## Advanced usage
### Custom token extraction with filters
```python
# In Python, use extract_css_vars.py as a module
import sys
sys.path.append('scripts')
from extract_css_vars import extract_css_variables
url = "https://example.com"
tokens = extract_css_variables(url)
# Filter only color tokens
color_tokens = {
k: v for k, v in tokens.items()
if k.startswith('--color-') or '#' in v
}
# Convert to DTCG
dtcg = {
"color": {
k.replace('--color-', ''): {
"$value": v,
"$type": "color"
}
for k, v in color_tokens.items()
}
}
```
### Batch processing multiple sites
```bash
# Create a sites.txt with URLs (one per line)
# Then process in batch:
while read url; do
domain=$(echo $url | sed 's|https://||' | sed 's|/.*||')
mkdir -p "output/$domain"
python scripts/extract_css_vars.py "$url" \
--output "output/$domain/tokens.json"
python scripts/capture_site.py "$url" \
--output "output/$domain/screenshot.png"
done < sites.txt
# Analyze each in Claude:
"For each folder in output/, create a design.md using the tokens.json and screenshot.png"
```
### Integration with CI/CD
```yaml
# .github/workflows/design-audit.yml
name: Design Token Audit
on:
schedule:
- cron: '0 0 * * 0' # Weekly
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements.txt
playwright install chromium
- name: Audit tokens
run: |
python scripts/verify_design.py \
design-tokens.json \
https://production-site.com/ \
--output audit-report.md
- name: Create issue if drift detected
if: failure()
uses: actions/github-script@v6
with:
script: |
github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: 'Design token drift detected',
body: require('fs').readFileSync('audit-report.md', 'utf8')
})
```
## Project structure reference
```
anydesign/
├── scripts/
│ ├── extract_css_vars.py # CSS custom property extraction
│ ├── capture_site.py # Multi-viewport screenshots
│ ├── extract_colors.py # Dominant color extraction
│ ├── check_contrast.py # WCAG contrast checker
│ ├── lint_design_md.py # design.md validator
│ ├── verify_design.py # Token drift auditor
│ └── export_for_claude_design.py # Claude Design bundle generator
├── examples/
│ ├── vercel-landing/ # Real production example
│ └── landing-example/ # Synthetic demo
├── requirements.txt
└── SKILL.md # This file
```
## Additional resources
- [W3C Design Tokens Community Group](https://www.designtokens.org/)
- [WCAG 2.1 Contrast Guidelines](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html)
- [Claude Agent Skills Documentation](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview)
- [Live v0 demo](https://v0-anydesignexample.vercel.app/) built from skill output
- [Example: Vercel landing analysis](https://github.com/uxKero/anydesign/tree/main/examples/vercel-landing)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!