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)
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` |