Install any skill in seconds. Free to start, no credit card required.
Get Started Free →A real-time data/particle/simulation visualizer whose heavy compute runs in a Web Worker (off the main thread), optionally sharing memory with the UI via SharedArrayBuffer, and renders to a canvas at 60fps. Produced as a single self-contained `index.html`. Use when the brief asks for a "web worker", "simulation", "particle system", "physics", "off-main-thread", "fractal", "real-time compute", or "audio/data visualizer". Open Design serves this in powered-preview mode so Workers and SharedArrayBu
.claude/skills/nexu-io-worker-visualizer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 110% | 0% |
| case-08 | ✓→✗ | ▼ Worse | 40% | 0% |
| case-20 | ✓→✗ | ▼ Worse | 101% | 0% |
| case-21 | ✓→✗ | ▼ Worse | 9% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 212% | 0% |
Produce a single self-contained index.html that moves heavy per-frame compute into a Web Worker and renders the result to a canvas, keeping the main thread at a smooth 60fps.
OpenDesign detects new Worker( / SharedArrayBuffer / OffscreenCanvas and renders this file in powered preview — a cross-origin-isolated iframe with allow-same-origin. That means external and blob Web Workers construct successfully, SharedArrayBuffer is defined (crossOriginIsolated === true), and importScripts works. In the old opaque sandbox all three failed; here they just work.
worker-visualizer/
├── SKILL.md ← you're reading this
└── example.html ← a working 12k-particle SharedArrayBuffer sim (READ FIRST)Read example.html. Note the split: the worker integrates positions each tick; the main thread only reads + draws. It feature-detects crossOriginIsolated and uses a SharedArrayBuffer for zero-copy when available, falling back to a transferable postMessage copy otherwise. Always ship that fallback so the artifact still animates if isolation is off.
Pick ONE compute-bound job worth offloading:
ImageData buffer.index.htmlBlob + URL.createObjectURL (inline its source), or embed it as a data: URL.SharedArrayBuffer to the worker, and read the same Float32Array/Uint8ClampedArray view while drawing. Guard on typeof SharedArrayBuffer !== 'undefined' && crossOriginIsolated.postMessage a transferable ArrayBuffer each frame.OffscreenCanvas + canvas.transferControlToOffscreen() to render inside the worker for the heaviest scenes.SharedArrayBuffer path engages when crossOriginIsolated is true; postMessage fallback engages otherwise — verify BOTH branches degrade cleanly.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 42,395 | 48,963 | +15% | 1 | 1 | 0% | 8,285 | 9,007 | +9% | 0 | 0 | — |
case-02 | fail→fail | 43,950 | 43,601 | -1% | 1 | 1 | 0% | 8,271 | 8,993 | +9% | 0 | 0 | — |
case-03 | fail→fail | 42,223 | 39,156 | -7% | 1 | 1 | 0% | 8,272 | 8,994 | +9% | 0 | 0 | — |
case-04 | pass→pass | 16,691 | 38,668 | +132% | 1 | 1 | 0% | 2,880 | 8,982 | +212% | 0 | 0 | — |
case-05 | pass→pass | 9,885 | 38,277 | +287% | 1 | 1 | 0% | 1,879 | 8,974 | +378% | 0 | 0 | — |
case-11 | fail→pass | 18,002 | 29,740 | +65% | 1 | 1 | 0% | 3,225 | 6,779 | +110% | 0 | 0 | — |
case-06 | pass→pass | 19,689 | 39,505 | +101% | 1 | 1 | 0% | 3,451 | 8,959 | +160% | 0 | 0 | — |
case-07 | pass→pass | 14,294 | 36,043 | +152% | 1 | 1 | 0% | 2,518 | 8,173 | +225% | 0 | 0 | — |
case-08 | pass→fail | 31,185 | 44,034 | +41% | 1 | 1 | 0% | 6,390 | 8,966 | +40% | 0 | 0 | — |
case-09 | pass→pass | 13,116 | 39,867 | +204% | 1 | 1 | 0% | 2,358 | 8,954 | +280% | 0 | 0 | — |
case-10 | pass→pass | 15,721 | 39,912 | +154% | 1 | 1 | 0% | 2,819 | 8,955 | +218% | 0 | 0 | — |
case-12 | pass→pass | 20,380 | 11,334 | -44% | 1 | 1 | 0% | 3,407 | 2,660 | -22% | 0 | 0 | — |
case-13 | fail→fail | 42,522 | 47,974 | +13% | 1 | 1 | 0% | 8,233 | 8,955 | +9% | 0 | 0 | — |
case-14 | pass→pass | 7,552 | 35,671 | +372% | 1 | 1 | 0% | 1,336 | 7,968 | +496% | 0 | 0 | — |
case-15 | pass→pass | 17,291 | 40,118 | +132% | 1 | 1 | 0% | 3,016 | 8,942 | +196% | 0 | 0 | — |
case-16 | fail→fail | 44,318 | 45,918 | +4% | 1 | 1 | 0% | 8,234 | 8,956 | +9% | 0 | 0 | — |
case-17 | fail→fail | 43,782 | 44,369 | +1% | 1 | 1 | 0% | 8,241 | 8,963 | +9% | 0 | 0 | — |
case-18 | fail→fail | 47,088 | 45,218 | -4% | 1 | 1 | 0% | 8,233 | 8,955 | +9% | 0 | 0 | — |
case-19 | pass→pass | 16,135 | 19,129 | +19% | 1 | 1 | 0% | 2,657 | 4,477 | +68% | 0 | 0 | — |
case-20 | pass→fail | 24,021 | 39,885 | +66% | 1 | 1 | 0% | 4,457 | 8,980 | +101% | 0 | 0 | — |
case-21 | pass→fail | 38,040 | 38,602 | +1% | 1 | 1 | 0% | 8,231 | 8,953 | +9% | 0 | 0 | — |
case-22 | pass→pass | 17,598 | 38,051 | +116% | 1 | 1 | 0% | 3,665 | 8,958 | +144% | 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. The headline lift of -50 percentage points is the difference between those two pass rates over the 22 comparable cases. 3 cases got worse with the skill loaded, and they are 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.