πŸ“ˆ GH Trending Explorer 🎲 Surprise me

← all repos

AkbarSheikh-debug / wondersnap

git clone https://github.com/AkbarSheikh-debug/wondersnap.git

Gesture-controlled 3D models made of 200k glowing GPU particles. MediaPipe hand tracking + hand-written WebGL2, runs in the browser.

+0
stars, 24h Β· #37,498
+~0
stars, 7 days Β· #42,822
+87
stars, 30 days Β· #8,102
87
β˜… total
24
forks Β· 0 open issues

Star history (as recorded here)

2026-10-20 Β· 87 β˜… 2026-10-23 Β· 87 β˜…
LanguageJavaScript
LicenseMIT
Created2026-09-28 (25d ago)
Last push21d ago
Watchers0
OwnerUser

Links

README excerpt
# WonderSnap
**Gesture-controlled 3D models made of glowing light particles, running entirely in your browser.**
Snap your fingers in front of your webcam and up to 250,000 GPU particles swirl into existence. Make a fist and they
form the Eiffel Tower, a beating heart or a V8 engine. Open your hand and the model morphs into the next one, or
explodes into a labelled diagram of every part. No mouse, no controller, no install beyond Node.js.
## Quick start
You need Node.js 18 or newer and a webcam (optional: everything also works with the mouse and
keyboard).
 [code] 
Then open **http://localhost:5173** in Chrome or Edge and click **Start with camera**, or **Continue without camera**
to drive it with the on-screen buttons and keyboard.
> The browser only allows camera access on `localhost` or `https`, which is why the app comes with its own tiny
> local server. To use a different port: `npm start -- 8080`.
## How it works
| Layer | What it does |
|---|---|
| **Hand tracking** | MediaPipe Hand Landmarker tracks up to two hands (21 landmarks each) from the webcam, fully on-device |
| **Gesture recognition** | Custom classifiers turn landmarks into poses (fist, open, point, pinch, peace), a finger-snap detector, hand twist/tilt and two-hand zoom, fed through a debouncer and a state machine |
| **Particle engine** | A hand-written WebGL2 renderer. Particle physics runs on the GPU with transform feedback: no Three.js, no game engine, no framework |
| **Models** | 33 procedural models built from real measurements and sampled into point clouds, with named parts that can explode, glow and be pulled out |
| **Server** | A zero-dependency Node.js static server (`server.mjs`) |
Nothing is sent anywhere: the video never leaves your machine.
## Gestures
| Gesture | What it does |
|---|---|
| 🫰 **Snap** | Summon the particles, or dissolve the current model |
| ✊ **Fist** | Form the wonder, organ or machine |
| βœ‹ **Open hand** | Wonders morph to the next one. Organs, engines and vehicles **explode**: how far you open your hand sets how far the parts fly apart, and closing it puts them back together |
| πŸ”„ **Twist / raise your hand** | Turn and tilt the formed model |
| ☝️ **Point** | Hold your finger on a part to select it. It glows, and a card explains what it does |
| 🀏 **Pinch** | Pull the selected part out toward you; pinch again to put it back |
| πŸ™Œ **Two hands** | Move them apart or together to zoom |
| ✌️ **Peace** | Jump to the next model |
## Keyboard and mouse
| Key | Action |
|---|---|
| `Space` | Snap |
| `F` / `O` / `V` | Fist / open hand / peace sign |
| `←` `β†’` | Previous / next model |
| `E`, `↑` `↓`, mouse wheel | Explode amount |
| `+` `-` `0`, ctrl + wheel | Zoom |
| `C` | Camera on/off |
| `L` | Part labels |
| `R` | Auto-rotate |
| `G` | Hand rotation on/off |
| `X` | Cut-away cross-section (`,` and `.` nudge the plane) |
| `Q` | Quiz mode |
| `M` | Voice commands and read-aloud |
| `K` | Record a video |
| `D` | Play the demo |
| `I` / `Esc` |