Projects · 04 of 08
Hand Walker
A severed hand that walks on its fingertips, built in Three.js. The walk is solved from the anatomy of the model each frame, and the hand lives in a small room you can play in.

- Year
- 2026
- Built with
- Three.js, JavaScript, WebGL
A severed hand walks around a small room on its fingertips, in the manner of Thing. Nobody animated the walk. Each frame a gait engine decides which fingers are down, and a solver places every joint from the anatomy of the model, which is the free generic-hand WebXR model, rigged at load from its bind pose.
The body is a 0.45 kg mass under real gravity. Planted fingers push with a capped force, friction limits their grip, and a jump gets its height from the energy the planted fingers can deliver. Click the floor and the hand walks there. The room has a light switch it has to jump for, a bell, a ball, a rug to nap on, a box it goes home to, and a floor piano that sounds a note under each fingertip, and if you leave the hand alone it finds things to do.
The hard part
A walk that is drawn by hand can cheat, and a walk that is solved cannot. The mark of a bad one is a foot that slides along the floor while it is supposed to be planted. A hand makes this harder than a dog or a spider would, because its five legs are all different lengths and no two of them reach the same distance. A stride that suits the middle finger is more than the little finger can cover.
How I solved it
Before the hand takes a step, it measures itself. A calibration pass at load asks the same solver that will place the joints how far each fingertip can travel along the floor while staying where it was told to be, and it keeps that distance for every finger. The gait engine then sets its step rate from those measurements, so that the ground a planted finger has to cover at the current speed always fits inside what that finger can reach. Turning uses up reach as well, so the hand steps faster in a turn.
The walk is held to a scripted test matrix that runs the real page on a virtual clock, which means its numbers repeat exactly. Sixteen of the eighteen scenarios pass, and the two that fail are listed in the source with their reasons.