Help us improve
Share bugs, ideas, or general feedback.
From humaninloop
Analyzes UI screenshots to extract design tokens, color palettes, typography scales, spacing patterns, components, and layout structures via eight-phase process.
npx claudepluginhub joshuarweaver/cascade-ai-ml-agents-agent-framework --plugin deepeshbodh-human-in-loopHow this skill is triggered — by the user, by Claude, or both
Slash command
/humaninloop:analysis-screenshotThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Extract precise, implementation-ready design tokens, components, and layout structure from screenshot images through a systematic eight-phase process. Every extraction must trace back to something observed in the screenshot, and every gap must be explicitly acknowledged.
Reverse-engineers design systems from screenshots or URLs, extracting colors, typography, spacing, and component patterns. Use before redesigning or auditing an existing page.
Extracts design DNA—colors, typography, spacing tokens, component patterns—from app screenshots, live URLs, or projects using Google Stitch. Outputs design-tokens.json, Tailwind config, or CSS vars for audits and design systems.
Analyzes websites for design inspiration by navigating URLs, capturing desktop/mobile screenshots, and extracting colors with hex codes, typography details, layouts, grids, and UI patterns into structured reports.
Share bugs, ideas, or general feedback.
Extract precise, implementation-ready design tokens, components, and layout structure from screenshot images through a systematic eight-phase process. Every extraction must trace back to something observed in the screenshot, and every gap must be explicitly acknowledged.
Before extracting any tokens, establish the context of the interface.
Identify and document:
| Attribute | What to Determine |
|---|---|
| Platform | Mobile (iOS/Android), web (desktop/responsive), desktop app |
| Design language | Material, iOS HIG, custom, hybrid |
| Layout approach | Single column, multi-column, sidebar+content, dashboard grid |
| Density | Compact (data-heavy), comfortable (standard), spacious (marketing) |
| Color mode | Light, dark, or mixed |
| Apparent era | Current design trends vs. dated patterns |
Output format:
PLATFORM: [platform]
DESIGN LANGUAGE: [language]
LAYOUT: [approach]
DENSITY: [level]
COLOR MODE: [mode]
NOTES: [anything notable about the overall approach]
Extract every distinguishable color. Organize by role, not by where it appears.
PRIMARY PALETTE:
Brand Primary: #XXXXXX (observed in: [element])
Brand Secondary: #XXXXXX (observed in: [element])
NEUTRAL PALETTE:
Background Base: #XXXXXX (observed in: [element])
Background Elevated: #XXXXXX (observed in: [element])
Surface: #XXXXXX (observed in: [element])
Border Default: #XXXXXX (observed in: [element])
Text Primary: #XXXXXX (observed in: [element])
Text Secondary: #XXXXXX (observed in: [element])
Text Muted: #XXXXXX (observed in: [element])
SEMANTIC PALETTE:
Success: #XXXXXX (observed in: [element])
Warning: #XXXXXX (observed in: [element])
Error: #XXXXXX (observed in: [element])
Info: #XXXXXX (observed in: [element])
ACCENT PALETTE:
[role]: #XXXXXX (observed in: [element])
Every color entry MUST include the (observed in: ...) attribution. If a semantic color is not visible in the screenshot, omit it and note its absence in the gaps section.
Identify every distinct typographic treatment visible in the screenshot.
FONT FAMILIES:
Primary: [family] (confidence: high/medium/low)
Secondary: [family] (confidence: high/medium/low)
Monospace: [family] (if present)
TYPE SCALE:
Display: ~[size]px / weight [N] / leading [N] (observed in: [element])
Heading 1: ~[size]px / weight [N] / leading [N] (observed in: [element])
Heading 2: ~[size]px / weight [N] / leading [N] (observed in: [element])
Heading 3: ~[size]px / weight [N] / leading [N] (observed in: [element])
Body: ~[size]px / weight [N] / leading [N] (observed in: [element])
Caption: ~[size]px / weight [N] / leading [N] (observed in: [element])
Label: ~[size]px / weight [N] / leading [N] (observed in: [element])
Overline: ~[size]px / weight [N] / leading [N] (observed in: [element])
LETTER SPACING:
Headings: [value or "normal"]
Labels: [value or "normal"]
Overline: [value or "normal"]
Mark all pixel values with ~ (approximate) unless the screenshot provides enough context for exact measurement. Note confidence level for font family identification.
Extract the spacing system by identifying the base unit and its multipliers.
BASE UNIT: [N]px
SPACING SCALE:
2xs: [N]px ([base] x [multiplier]) — used for: [context]
xs: [N]px ([base] x [multiplier]) — used for: [context]
sm: [N]px ([base] x [multiplier]) — used for: [context]
md: [N]px ([base] x [multiplier]) — used for: [context]
lg: [N]px ([base] x [multiplier]) — used for: [context]
xl: [N]px ([base] x [multiplier]) — used for: [context]
2xl: [N]px ([base] x [multiplier]) — used for: [context]
COMPONENT PADDING PATTERNS:
Buttons: [top] [right] [bottom] [left]
Cards: [top] [right] [bottom] [left]
Inputs: [top] [right] [bottom] [left]
List items: [top] [right] [bottom] [left]
GAP PATTERNS:
Form fields: [N]px between fields
Button groups: [N]px between buttons
Section gap: [N]px between major sections
Identify and document every distinct UI component visible in the screenshot.
For each component:
For each component:
COMPONENT: [Name]
Variants observed: [list]
States visible: [list]
States NOT visible: [list — mark as gap]
Dimensions:
Height: ~[N]px
Padding: [values]
Border radius: [N]px
Font size: ~[N]px
Font weight: [N]
Icon size: [N]px (if applicable)
Colors:
Background: #XXXXXX
Text: #XXXXXX
Border: #XXXXXX (if applicable)
Icon: #XXXXXX (if applicable)
Composition: [sub-elements]
Notes: [anything unusual or distinctive]
Scan for each of these. Mark present or absent:
Document the spatial organization and visual hierarchy of the interface.
GRID:
Type: [fixed/fluid/hybrid]
Columns: [N]
Gutter: ~[N]px
Margin: ~[N]px
Max width: ~[N]px (if constrained)
SECTION MAP:
[Section name]: [position, approximate dimensions, role]
[Section name]: [position, approximate dimensions, role]
...
VISUAL HIERARCHY (reading order):
1. [Element/area] — draws attention via [mechanism]
2. [Element/area] — secondary focus via [mechanism]
3. [Element/area] — tertiary via [mechanism]
ALIGNMENT:
Primary axis: [left/center/mixed]
Notable breaks: [any deliberate alignment breaks]
CONTENT DENSITY:
[Section]: [sparse/moderate/dense]
Document the depth strategy, border treatments, and shadow system.
DEPTH STRATEGY: [borders-only / subtle-shadows / layered-shadows / surface-shifts]
BORDER RADII:
Small (buttons, inputs): [N]px
Medium (cards, panels): [N]px
Large (modals, sheets): [N]px
Full (avatars, pills): [N]px (9999px / 50%)
SHADOWS:
Level 1 (subtle): [offset-x] [offset-y] [blur] [spread] [color]
Level 2 (medium): [offset-x] [offset-y] [blur] [spread] [color]
Level 3 (elevated): [offset-x] [offset-y] [blur] [spread] [color]
BORDER TREATMENTS:
Default: [width] [style] [color]
Subtle: [width] [style] [color]
Strong: [width] [style] [color]
ELEVATION MAP:
Level 0: [elements at base level]
Level 1: [elements floating above base]
Level 2: [elements above level 1]
Level 3: [highest elevation elements]
DIVIDER PATTERN: [description of how sections are separated]
Compile all phase outputs into a single structured extraction document.
Every extraction MUST end with an honest gaps section:
KNOWN GAPS:
Cannot determine from static screenshot:
- [ ] Hover states for [components]
- [ ] Focus ring styles
- [ ] Animation/transition properties
- [ ] Responsive breakpoint behavior
- [ ] Touch target sizes (if mobile)
- [ ] Scroll behavior
- [ ] [Other gaps specific to this screenshot]
Low confidence extractions:
- [ ] [Item] — reason for low confidence
- [ ] [Item] — reason for low confidence
Never fabricate values for gaps. State what is unknown and suggest how to obtain the missing information (e.g., "inspect the live app," "request additional screenshots at different viewport widths").
When the user intends to implement the extracted system, include a CSS custom properties mapping or Tailwind configuration snippet. See references/implementation-templates.md for starter templates.
| Mistake | Fix |
|---|---|
| Guessing hex values instead of acknowledging approximation | Prefix all color values with context; use ~ for uncertain sizes |
| Extracting colors without assigning roles | Every color must have a named role (primary, secondary, border, etc.) |
| Listing components without measuring them | Every component needs dimensions, padding, and radius values |
| Ignoring the spacing system | Identify the base unit first; express all spacing as multiples |
| Skipping the gaps section | Always document what cannot be determined from a static image |
| Treating all text sizes as a flat list | Organize into a hierarchical scale with named levels |
| Extracting shadows without noting the depth strategy | Classify the overall approach before listing individual shadow values |
| Providing vague font identification | State confidence level; suggest closest known match |
Before delivering any screenshot analysis:
Completeness:
Precision:
~ where approximate)Honesty: