Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/nexu-io-od-web-effect-extractor/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-20 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 76% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 29% | 0% |
Use this plugin when the user gives a website URL and asks OpenDesign 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 OpenDesign's website recreation and editable artifact workflow.
The goal is to produce a faithful, editable OpenDesign 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.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→fail | 9,386 | 5,400 | -42% | 1 | 1 | 0% | 1,477 | 2,168 | +47% | 0 | 0 | — |
case-20 | fail→pass | 19,100 | 27,276 | +43% | 1 | 1 | 0% | 3,561 | 5,352 | +50% | 0 | 0 | — |
case-03 | fail→fail | 26,514 | 43,000 | +62% | 1 | 1 | 0% | 5,658 | 9,559 | +69% | 0 | 0 | — |
case-01 | fail→fail | 38,097 | 39,904 | +5% | 1 | 1 | 0% | 8,252 | 9,566 | +16% | 0 | 0 | — |
case-02 | fail→fail | 42,822 | 8,139 | -81% | 1 | 1 | 0% | 8,253 | 1,656 | -80% | 0 | 0 | — |
case-05 | fail→pass | 26,582 | 28,871 | +9% | 1 | 1 | 0% | 5,439 | 7,418 | +36% | 0 | 0 | — |
case-06 | pass→pass | 19,675 | 17,786 | -10% | 1 | 1 | 0% | 3,552 | 4,595 | +29% | 0 | 0 | — |
case-07 | pass→pass | 14,931 | 12,173 | -18% | 1 | 1 | 0% | 2,422 | 3,260 | +35% | 0 | 0 | — |
case-08 | pass→pass | 17,227 | 15,997 | -7% | 1 | 1 | 0% | 3,099 | 4,400 | +42% | 0 | 0 | — |
case-21 | pass→pass | 14,426 | 4,476 | -69% | 1 | 1 | 0% | 1,997 | 1,936 | -3% | 0 | 0 | — |
case-09 | pass→pass | 14,683 | 20,401 | +39% | 1 | 1 | 0% | 2,543 | 5,154 | +103% | 0 | 0 | — |
case-10 | pass→pass | 14,098 | 9,385 | -33% | 1 | 1 | 0% | 2,118 | 2,787 | +32% | 0 | 0 | — |
case-11 | pass→pass | 13,003 | 14,118 | +9% | 1 | 1 | 0% | 2,122 | 3,530 | +66% | 0 | 0 | — |
case-12 | pass→pass | 11,200 | 8,806 | -21% | 1 | 1 | 0% | 1,834 | 2,663 | +45% | 0 | 0 | — |
case-13 | fail→pass | 18,759 | 11,734 | -37% | 1 | 1 | 0% | 3,012 | 3,159 | +5% | 0 | 0 | — |
case-14 | fail→pass | 13,558 | 18,259 | +35% | 1 | 1 | 0% | 2,422 | 4,265 | +76% | 0 | 0 | — |
case-15 | pass→pass | 25,574 | 22,773 | -11% | 1 | 1 | 0% | 4,058 | 5,381 | +33% | 0 | 0 | — |
case-16 | pass→pass | 18,579 | 18,998 | +2% | 1 | 1 | 0% | 3,286 | 4,523 | +38% | 0 | 0 | — |
case-17 | pass→pass | 15,650 | 9,318 | -40% | 1 | 1 | 0% | 2,287 | 2,723 | +19% | 0 | 0 | — |
case-18 | fail→pass | 17,549 | 13,387 | -24% | 1 | 1 | 0% | 2,610 | 3,371 | +29% | 0 | 0 | — |
case-19 | pass→pass | 17,476 | 18,138 | +4% | 1 | 1 | 0% | 3,020 | 4,525 | +50% | 0 | 0 | — |
case-22 | fail→fail | 14,859 | 12,334 | -17% | 1 | 1 | 0% | 2,856 | 3,611 | +26% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.