Johan Alphonso Braga
WorkProjectsReadingStackCraftDesignStatusResume

Utilities

Ask anything

Elsewhere

GitHub

All projects

Computer vision / 2026 / Live in the browser

Vortex Builder

Build voxel structures in the air over your webcam feed: pinch to place, pinch and drag to paint, make a fist to turn the build. A second synced page drives presets and shows live status.

Vortex Builder

01

The problem

Hand-driven building fails in small ways that add up. Aiming with the index tip drags the cursor toward the thumb on every pinch, so blocks land a cell off. MediaPipe's per-landmark z is relative to the wrist, not the camera, so it cannot tell you how far away the hand is. And a pinch with the other fingers curled looks a lot like a fist.

02

How I approached it

The aim point is the midpoint of thumb and index, which barely moves as the pinch closes, run through a One Euro filter and mapped through the object-fit crop and the selfie mirror. Depth comes from a ray cast into the instanced voxel mesh instead of from z: aim at a block and the new one lands on the face you are pointing at, aim at empty space and it lands on the grid plane facing the camera. A held pinch paints along the plane it started on, filling skipped cells and refusing jumps a hand cannot make in one frame. Pinch detection uses metric world landmarks with separate enter and exit thresholds, and the rotate fist comes from MediaPipe's trained gesture classifier rather than a curl threshold. Hands get roles by gesture, not by the left or right label.

03

The outcome

Pinch, paint, erase and rotate run on one GPU gesture model per video frame, and the same picker drives a mouse fallback (Shift+drag to place, right-drag to erase) for visitors without a camera. The gesture math and the placement state machine are unit tested under Node.

vortex-builder.johanthegoat.xyz Open in a new tab ↗
Next projectHollow Purple →