This is taking
longer than expected.

Check your connection.

Still tinkering with this one
back to projects
a jjk thing i made with my hands (literally)

Domain Expansion

Make a Jujutsu Kaisen hand sign at your webcam and the matching effect appears on screen. MediaPipe tracks your hands and Three.js handles the particles. I made it to learn gesture tracking and shaders, and because I wanted to throw a Hollow Purple.

Year 2025
Status WIP
Scroll to explore

The techniques you can throw

Each hand sign maps to its own particle effect. These are the ones working right now.

01
Closed fist

Blue

Four arms of particles spiral inward and collapse onto one point.

02
Finger gun

Red

The opposite of Blue. Five jagged arms push outward and scatter across the screen.

03
Pinch

Hollow Purple

Blue and Red meet in the middle, with two vortex arms spiralling into each other. This is usually the first one I show people.

04
Gojo hand sign

Infinite Void

Three rings, a pillar of light, and 30k particles fading into a starfield.

05
Sukuna mudra · both hands

Malevolent Shrine

A torii gate, ground aura, embers, and sound. It needs both hands, so other gestures are ignored while you form the mudra.

From webcam to particles

The short version, in four steps.

01

Your webcam

The browser reads your camera feed. Nothing gets uploaded.

02

Tracking your hands

MediaPipe follows 21 points on each hand, including the fingertips, knuckles, and wrist.

03

Working out the gesture

The distances and angles between those points map to a gesture. It has to hold for 10 frames before anything fires.

04

Drawing the effect

The matching GLSL shader takes over, with 30k particles, additive blending, and bloom.

why i made it

Jujutsu Kaisen is just really good.

That was the motivation. And, it gave me the reason to learn gesture tracking and spend time writing shaders. SAT0RU by reinesana was the starting point, then I kept adding my own effects. The gesture detection is still sensitive to camera angles, but when it locks in, it feels good.

The stuff it's made of

  • Three.js
  • MediaPipe Hands
  • WebGL GLSL Shaders
  • UnrealBloom (three/addons)
  • Web Audio API

A couple of notes

A gesture has to hold for 10 frames straight before it fires, and there's a 30-frame grace period before it drops back to neutral. That's what stops it triggering every time your hand twitches.

Malevolent Shrine has two-hand suppression built in, so single-hand gestures get blocked while you're forming the Sukuna mudra. It only fires once you've locked it in on purpose.

However, please forgive me for not working as much on this project as I've hoped, for a while. Time hasn't allowed for it and it isn't as polished as I'd like it to be.

0 Particles
0 Techniques
0 Hand Landmarks
0 Confirm Frames