Scroll to explore the build
← Back to store
hand trackingmediapipevideo scrubbingreact + vite

MOTION / FORM — Gesture-Controlled Exploded Gallery

Pinch your fingers apart and the object comes apart with them.

A full-screen gallery of five transformation films driven entirely by your hands. Slide sideways to move between cards, hold an open palm to enter one, then pinch to scrub the object between assembled and exploded — the distance between thumb and index maps straight onto the film's timeline, so the object is wherever your fingers are. Two fingers dismisses it. Hand tracking runs on-device through MediaPipe with the WASM served from the app's own origin, so it works offline and no video ever leaves the machine. The films are never played linearly while gesture control is on: currentTime is written from the pinch value every frame, which is why they are re-encoded so that every frame is a keyframe. Spoken feedback announces each card, and mouse, scroll and keyboard fallbacks mean the whole thing still works with no camera at all.

How to run this

Works the same on Windows, macOS and Linux. No prior setup beyond Node.js, and nothing to configure — the pack runs as-is.

Built with
Vite 8
Requires
Node.js 20 or newer
Opens at
http://localhost:5173

Note — Driven entirely by hand gestures, so it needs a webcam — allow the camera prompt when the page loads. Tracking runs on-device via MediaPipe and no video ever leaves the machine. Note that browsers only grant camera access on a secure context: localhost is fine, but on any other host it must be served over HTTPS. The films ship re-encoded to 720p all-intra so the pack fits in one download; the README has the ffmpeg line to rebuild them at 1080p from your own masters.

Or let an AI agent set it up for you

Already using Claude Code, Antigravity, Cursor or Windsurf? Unzip the pack, open the folder as a project, and just ask:

Install the dependencies and run this project, then give me the URL

It reads the README included in the pack, runs the right commands for this project, and sorts out anything that trips along the way. You still need Node.js installed (step 1 below) — everything after that it can handle.

Or run it yourself

  1. 1

    Install Node.js, if you don't have it

    Download the LTS build from nodejs.org and run the installer — on Windows and Mac it handles everything. Mac users with Homebrew can run brew install node instead.

    To check it worked, run node --version. It should print a number like v22.11.0.

  2. 2

    Unzip the pack, then open a terminal inside the folder

    Windows: open the unzipped folder in File Explorer, click the address bar, type powershell and press Enter.

    Mac: press Cmd+Space, type terminal, press Enter. Then type cd (with a trailing space) and drag the unzipped folder onto the terminal window — it fills in the path for you. Press Enter.

  3. 3

    Install the dependencies

    Run npm install

    One-time, and takes roughly 30–60 seconds. It creates a node_modules folder — that's expected, and it's why the zip doesn't ship one.

  4. 4

    Start it

    Run npm run dev

    Then open http://localhost:5173 in your browser. Leave the terminal open while you use it — closing it stops the site. Press Ctrl+C in the terminal to stop.

  5. 5

    Optional — build for production

    When you're ready to deploy, npm run build produces the optimised output. The pack deploys to Vercel, Netlify or any Node host with no changes.

+ If something goes wrong
“npm is not recognised” / “command not found: npm”
Node.js isn’t installed, or the terminal was open before you installed it. Close the terminal, open a new one, and try again.
“Port 5173 is already in use”
Something else is running there — often a previous copy of this site. Close the other terminal, or stop it with Ctrl+C.
The page loads but images or video are missing
Make sure you ran the command from inside the unzipped MOTION / FORM — Gesture-Controlled Exploded Gallery folder itself, not the folder containing it.
npm install shows warnings
Warnings (as opposed to errors) are normal and safe to ignore. Only a message starting with ERR! needs attention.

Still stuck? Email us and we'll get it running with you.