nexu-io/od-web-effect-extractor
Extract visual effects, animation systems, Canvas/WebGL/Shader behavior, and interaction details from a reference website, then rebuild them as an editable Open Design web artifact.
npx skills add https://github.com/nexu-io/open-design --skill od-web-effect-extractor
Use this plugin when the user gives a website URL and asks Open Design to recreate, remix, or learn from its visual effects. It is especially useful for hero backgrounds, WebGL scenes, Canvas animations, shader effects, cursor trails, scroll-driven motion, animated typography, and interaction patterns that are hard to understand from screenshots alone.
This workflow is inspired by the MIT-licensed web-shader-extractor skill from lixiaolin94/skills, adapted for Open Design's website recreation and editable artifact workflow.
The goal is to produce a faithful, editable Open Design artifact that preserves the reference site's visual effect and interaction logic while replacing private content, trademarks, tracking code, and nonessential app logic.
Extract only what is needed to understand and recreate the visual behavior:
Do not copy private product copy, hidden application state, user data, analytics, auth flows, or unrelated business logic.
Start from the supplied URL and define the exact effect to recreate. If the user is vague, inspect the first viewport first and infer the likely target effect.
Before extracting runtime details, prefer a browser context that can evaluate page scripts and inspect canvas/WebGL state. If Chrome DevTools MCP is available, use it for runtime interception. If it is not available, continue with the strongest available browser automation and clearly state that shader/runtime capture may be incomplete.
Record:
Capture runtime evidence before simplifying anything.
Inspect:
THREE, BABYLON, __NEXT_DATA__, __NUXT__, vite, GSAP, Lenis, Framer Motion, or custom scene globalsWhen WebGL is present and tooling allows pre-page-load injection, intercept:
gl.shaderSource() for vertex and fragment sourcegl.uniform*() calls for names and observed valuesgl.bindFramebuffer() to understand multipass render ordergl.drawArrays() and gl.drawElements() to understand draw-call orderWhen 2D Canvas is present, inspect the render loop, draw primitives, image sources, compositing operations, and device-pixel-ratio handling.
Turn the raw capture into a compact visual model:
Prefer evidence over guesses. If an effect cannot be observed directly, mark it as an inference.
Create a standalone web artifact that can be inspected and edited.
Choose the simplest implementation that preserves the effect:
Keep the rebuild self-contained unless a dependency materially reduces complexity. If dependencies are used, load them in a transparent, reviewable way.
Important reconstruction rules:
prefers-reduced-motion fallbacks for intense effects.Open the reference and the rebuilt artifact at the same viewport sizes. Compare:
For WebGL and Canvas work, verify that the canvas is not blank and that animation advances over time. If possible, compare screenshots or pixel samples across at least two timestamps.
Finish with:
If the user asks for an extraction report, create EXTRACTION-REPORT.md with the source URL, capture method, visual model, implementation choices, validation notes, and remaining gaps.
Take nexu-io/od-web-effect-extractor from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.