Style Extractor logo

Style Extractor

Community
Lucent-Snow
style-extractor

Extract evidence-based style guides and motion appendices from websites or web apps. Use when Codex needs reusable visual language, semantic tokens, component/state rules, runtime animation evidence, or style references that preserve design signal while stripping product-specific structure and content.

Overview

PublisherLucent-Snow
Repositorystyle-extractor
Skill namestyle-extractor
Stars
455
Forks
26
Bundled files
35
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 35 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by Lucent-Snow on GitHub. Read the source before you install it.

Installation

Install the Style Extractor AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Lucent-Snow/style-extractor/tree/main
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Lucent-Snow/style-extractor.git \
  .claude/skills/style-extractor
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Style Extractor in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Style Extractor on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Style Extractor is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Style Extractor (Web Style + Motion)

Extract a reusable design system from web UIs: colors, typography, spacing, components, states, and, when relevant, motion (timings, keyframes, delay chains, JS-driven behavior).

Core principle:

  • Extract visual language and interaction rules, not the source product's information architecture.
  • Keep what is reusable: tokens, component patterns, state changes, layout tendencies, motion cadence.
  • Strip what is product-specific: business copy, app logic, navigation tree, feature taxonomy, marketing claims.

Output location (REQUIRED)

  • Save all generated deliverables under: %USERPROFILE%\\style-extractor\\
  • Never write generated outputs under the skill folder (.codex/skills/...)
  • Never dump screenshots, CSS, JS, and Markdown side-by-side in the root output directory

Each extraction must create a dedicated project folder:

text
%USERPROFILE%\style-extractor\
  <project>-<style>\
    guides\
      style-guide.md
      motion-guide.md
      evidence-manifest.md
    evidence\
      screenshots\
      assets\
      notes\

Required deliverables for every extraction:

  • %USERPROFILE%\\style-extractor\\<project>-<style>\\guides\\style-guide.md
  • %USERPROFILE%\\style-extractor\\<project>-<style>\\guides\\evidence-manifest.md
  • %USERPROFILE%\\style-extractor\\<project>-<style>\\evidence\\

Required when motion is meaningful:

  • %USERPROFILE%\\style-extractor\\<project>-<style>\\guides\\motion-guide.md

Subdirectory rules:

  • guides/ only for final Markdown deliverables
  • evidence/screenshots/ only for PNG/JPG/WebP captures
  • evidence/assets/ only for downloaded CSS/JS/SVG/font stylesheets
  • evidence/notes/ only for raw dumps, runtime notes, traces, or helper text files
  • Root project folder should contain folders only; no loose screenshots or loose guide files

Use these reference files:

  • references/output-contract.md — required output structure and anti-patterns
  • references/style-guide-template.md — required sections for the style guide
  • references/motion-guide-template.md — required sections for the motion appendix
  • references/evidence-manifest-template.md — required sections for the evidence manifest

References (quality bar)

  • references/9nine-visual-novel/ — best-practice style + motion reference package
  • references/motherduck-design-system-reference/ — strong static style reference package

What to learn from these references:

  • keep the document dense enough to feel like a real reference manual
  • preserve semantic token tables with representative raw values
  • preserve component state matrices with concrete observed values
  • preserve copy-paste examples and practical implementation notes when they materially help reuse

What not to copy blindly:

  • long generic filler or repeated product intro
  • raw-value dumping without semantic grouping
  • excessive product-specific branding or IA detail
  • sections that exist only to make the document look long, without adding reuse value

Required reference read-through (MANDATORY)

Before starting any extraction, read in this order:

  1. references/output-contract.md
  2. references/style-guide-template.md
  3. references/motion-guide-template.md
  4. references/evidence-manifest-template.md
  5. all files under references/9nine-visual-novel/guides/
  6. all files under references/motherduck-design-system-reference/guides/

Reference package selection rule:

  • motion-heavy, media-heavy, or section-transition-driven source → use references/9nine-visual-novel/ as the primary quality bar
  • static-structure-heavy source → read references/motherduck-design-system-reference/

Do not start evidence collection, screenshotting, script execution, or drafting until both reference packages have been reviewed. Extraction is incomplete if the final deliverable does not explicitly state:

  • that both reference packages were reviewed before extraction
  • which package was used as the primary quality bar for the current target

Workflow

Phase 0 — Inputs

  1. Project name + style/variant name
  2. Sources: URL / web repo / both
  3. Motion assessment: does the site have meaningful motion? (determines whether Phase 1B is needed)
  4. Reuse target: web app / marketing site / desktop app / design reference only
  5. Primary reference package selected: 9nine / MotherDuck

Before gathering evidence, decide which source traits belong in the reusable style and which should be excluded. Use this simple filter:

  • Keep: tokens, spacing rhythm, typography hierarchy, density, component language, state treatment, motion cadence
  • Adapt carefully: layout primitives, panel structure, navigation patterns, content density
  • Discard: product copy, feature-specific flows, brand story, app-specific IA, domain-specific labels

Phase 0.5 — Read the reference package (REQUIRED)

Complete all of the following before Phase 1A:

  • read references/output-contract.md
  • read references/style-guide-template.md
  • read references/motion-guide-template.md
  • read references/evidence-manifest-template.md
  • read references/9nine-visual-novel/guides/style-guide.md
  • read references/9nine-visual-novel/guides/motion-guide.md
  • read references/9nine-visual-novel/guides/evidence-manifest.md
  • read references/motherduck-design-system-reference/guides/style-guide.md
  • read references/motherduck-design-system-reference/guides/motion-guide.md
  • read references/motherduck-design-system-reference/guides/evidence-manifest.md
  • choose one of the two packages as the primary quality bar for the current extraction

If both packages are not read first, the extraction is invalid.

Phase 1A — Static evidence gathering

Step 1 — Open page & screenshots

Use Chrome MCP tools:

  • new_page / select_page / navigate_page
  • take_screenshot (fullPage when helpful)

Minimum screenshot set:

  1. baseline (full page/section)
  2. navigation visible + active state
  3. primary CTA: default + hover + pressed (if possible)
  4. form controls: default + focus-visible (+ invalid if present)
  5. modal/dialog open (if any)
Step 2 — Extract computed styles

Use evaluate_script to pull:

  • CSS Variables (:root and scoped)
  • Colors, typography, spacing from getComputedStyle
  • Component state matrices (default / hover / active / focus-visible / disabled)
Step 3 — Pull CSS/JS bodies
  • list_network_requests / get_network_request to download CSS files
  • Useful for extracting @keyframes, CSS variables, and media queries offline

Minimum static evidence to keep in ...\\evidence\\:

  • screenshots under evidence/screenshots/
  • downloaded CSS/JS under evidence/assets/
  • notes and selector inventories under evidence/notes/

Phase 1B — Motion evidence gathering (when site has meaningful motion)

Static and motion are independent paths. Skip this phase if the site has no meaningful animation.

Follow these steps in priority order. Each level captures more; stop when you have enough evidence.

Level 1 — @keyframes extraction (no interaction needed)

Paste scripts/transition-scanner.js, then call:

js
__seTransition.keyframes()

Returns all @keyframes definitions from stylesheets. This is deterministic and complete—no timing issues.

Level 2 — CSS transition scan (no interaction needed)

Same script, call:

js
__seTransition.scan()            // scan entire page
__seTransition.scan('.my-section') // scan specific section

Returns every element's transition-property / duration / easing / delay + clusters by pattern. This shows what can animate even if nothing is animating yet.

Level 3 — Interaction diff (requires triggering interactions)

This captures the dominant pattern on modern sites: JS sets inline style → CSS transition interpolates.

Paste scripts/interaction-diff.js, then:

js
// 1. Watch elements you care about
__seDiff.watch([
  '[class*="sectionContainer"]',
  '[class*="illustration"]',
  '[class*="navItem"]',
  'button, a[class*="cta"], a[class*="CTA"]'
])

// 2. Trigger interaction and capture diff
__seDiff.triggerAndCapture(
  () => document.querySelector('.nav-item-2').click(),
  { captureAt: 50, settleAt: 500 }
)

Returns:

  • diffs — per-element before/after inline style + computed style changes
  • duringAnimations — document.getAnimations() captured within the 50ms transition window
  • afterAnimations — what's still running after settle

Key insight: document.getAnimations() only returns results during active CSS transitions. The capture window is typically <300ms. This script captures within that window automatically.

Repeat for 3+ key interactions (section change, component switch, hover, scroll).

Level 4 — JS library extraction

Paste scripts/library-detect.js to detect third-party animation libraries.

Returns { globals, instances, dom, fingerprints, assets }.

Key: many modern sites bundle libraries as modules, so window.Swiper etc. may be undefined. The script also checks:

  • el.swiper — Swiper instance on DOM elements (works when bundled)
  • [data-aos-*] — AOS attributes on elements
  • [data-framer-*] — Framer Motion attributes
  • Asset URL hints (script/stylesheet URLs containing library names)

When instances are found, configs are extracted directly (Swiper params, AOS settings, etc.).

Level 5 — rAF sampling (fallback for opaque JS motion)

When the above levels don't capture enough (e.g., hand-written requestAnimationFrame loops), use scripts/motion-tools.js:

js
__seMotion.sample('.animated-element', { durationMs: 800, include: ['transform', 'opacity'] })

Records computed style values every frame. Useful for inferring duration and property ranges, but cannot capture easing or intent.

Level 6 — Performance trace (optional, complex motion)

For very complex orchestrated animations:

  • performance_start_trace / performance_stop_trace
  • Analyze via performance_analyze_insight

Phase 2 — Abstraction and de-productization (REQUIRED)

Do not write the guide as a product teardown. Convert evidence into reusable rules.

For each major finding, classify it explicitly:

  • Reusable: can be copied directly as a token, component rule, state rule, or motion primitive
  • Adapted: useful idea, but needs reshaping for the target product type
  • Discarded: source-specific structure or content that should not be copied

Examples:

  • A cloud-blue surface palette: Reusable
  • A docs sidebar + article rail layout: Adapted
  • An AI chat app's prompt-library IA: Discarded
  • A marketing hero with video background: Adapted or Discarded, depending on target

Phase 3 — Semantic tokenization (REQUIRED)

Do not stop at raw values. Convert repeated values into semantic tokens:

  1. cluster repeated values (colors/radii/durations/easings/shadows)
  2. map usage (CTA/text/border/overlay/active/etc.)
  3. name by intent (e.g., --color-accent, --motion-300, nav.switch.iconColor)
  4. keep evidence alongside tokens (raw values + element/selector/screenshot)

Phase 4 — Write the deliverables

Start from the reference templates. Do not improvise the top-level structure unless the source clearly requires one.

Deliverable A — Style guide (REQUIRED)

Follow references/style-guide-template.md.

This file must answer:

  • what the style feels like
  • which tokens define it
  • how components behave across states
  • what layout tendencies are reusable
  • how to rebuild the visual language without copying the product itself
Deliverable B — Motion guide (REQUIRED when dynamic)

Follow references/motion-guide-template.md.

This file must answer:

  • what moves
  • what triggers motion
  • durations, delays, easing, and keyframes
  • whether motion is CSS-driven, transition-driven, or JS/library-driven
  • which motion primitives are reusable in another product
Deliverable C — Evidence manifest (REQUIRED)

Follow references/evidence-manifest-template.md.

Include:

  • source URLs / repo refs / date captured
  • screenshot list
  • downloaded CSS/JS files or notes
  • scripts used
  • interactions tested
  • gaps, blockers, and confidence notes
  • reference package reviewed and which package files were read before extraction

Component state matrix must include at least:

  • default / hover / active(pressed) / focus-visible / disabled
  • include loading / selected / invalid when those states exist

Scripts reference

ScriptNamespacePurpose
scripts/transition-scanner.js__seTransitionScan CSS transitions + extract @keyframes
scripts/interaction-diff.js__seDiffBefore/after inline style diff + instant getAnimations
scripts/motion-tools.js__seMotiongetAnimations snapshot + rAF sampling
scripts/library-detect.js(returns directly)Library detection + instance config extraction
scripts/extract-keyframes.pyCLIOffline @keyframes extraction from downloaded CSS files

Quality checklist

Static

  • tokens include usage intent (not just lists)
  • examples are copy-pasteable (HTML+CSS)
  • 5+ copy-paste component examples
  • reusable vs adapted vs discarded source traits are called out
  • product-specific IA/copy is stripped from the final guide

Motion (when dynamic)

  • all @keyframes extracted from stylesheets (Level 1)
  • CSS transition patterns documented with durations/easing (Level 2)
  • 3+ key interactions with before/after diff evidence (Level 3)
  • JS libraries detected and configs extracted when present (Level 4)
  • at least one documented "delay chain" if present
  • motion semantic tokens defined (duration scale + easing scale)

Self-check (run after completing the guide)

  1. Does every color token have a usage mapping? (not just a hex list)
  2. Does every component have a state matrix with actual computed values?
  3. Can someone reproduce the motion from the documentation alone?
  4. Are all copy-paste examples self-contained (HTML + CSS in one block)?
  5. If the original product disappeared, would this guide still be useful as a design reference?
  6. Did the guide extract style without accidentally cloning the source product's information model?

Failure conditions

Do not consider the extraction complete if any of the following are true:

  • output is only one prose-heavy markdown file with no evidence manifest
  • tokens are raw lists without semantic naming or usage mapping
  • the document describes the source product more than the reusable style
  • dynamic sites have no motion appendix despite meaningful motion
  • examples cannot be implemented directly
  • screenshots and downloaded assets are dumped loose in the project root instead of grouped into subfolders

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Style Extractor AI skill do?

Extract evidence-based style guides and motion appendices from websites or web apps. Use when Codex needs reusable visual language, semantic tokens, component/state rules, runtime animation evidence, or style references that preserve design signal while stripping product-specific structure and content.

Why use Style Extractor on TypingMind?

Because you install it once and use it with any model. Style Extractor is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Style Extractor in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Lucent-Snow/style-extractor/tree/main. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Style Extractor?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Style Extractor?

As many as you like. As long as a model supports skills, you can use Style Extractor with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Style Extractor AI skill free?

It is published on GitHub by Lucent-Snow. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇