Play chords in the air with your webcam. Every performance is captured as portable data — not a video file — so it can be replayed, remixed, and traded. How that works ↓
Grant camera permission. Your video never leaves your device — nothing is uploaded.
Pick a key, then raise 1–5 fingers to choose the chord. Wrist tilt swings it major or minor.
Fingers set the chord's richness, height sets volume, tilt sets tone. Both hands must be visible.
Record up to 60 seconds. The take is saved as data you can replay, list, and sell.
Most "music NFTs" mint a video file: heavy, unverifiable, impossible to remix. A gesture performance isn't pixels — it's a stream of hand positions and chord events. Captured as data, it stays tiny, replays exactly, and anyone who owns it can re-render it in their own skin.
Every capture splits into two tracks:
Chord events, timing, and settings. This is the music — replay it and you get the identical performance back. Size follows how much you move: held chords cost almost nothing, constant expression costs the most. Cheap as calldata or on an L2; storing it on Ethereum L1 would not be.
The hand landmarks, quantized and delta-encoded. This is the visual — the skeleton that danced. Flat cost, since it is one sample per frame. Sized for IPFS, not for a block.
Replayable — a listing plays the actual performance in your browser, not a preview clip.
Remixable — buy a score, re-skin it, change the key, keep the phrasing.
Provable — the data carries how it was played, so a performance can be checked rather than trusted.
Every gesture combination in Gesture mode. Both hands required — left sets harmony, right controls expression. Quick start ↑
Your left hand picks the chord — each finger count is a different scale degree:
| Fingers | Chord | Gesture | Example (A Major) |
|---|---|---|---|
| 1 | I | Any 1 finger raised | A |
| 2 | ii | Any 2 fingers (not VI combo) | Bm |
| 3 | iii | Any 3 fingers (not VII combo) | C#m |
| 4 | IV | Any 4 fingers raised | D |
| 5 | V | All 5 fingers raised | E |
| VI | vi | Index + Pinky ONLY (middle/ring/thumb down) | F#m |
| VII | vii° | Index + Pinky + Thumb ONLY (middle/ring down) | G#dim |
| 0 (Fist) | — | All fingers curled in | Mute (notes held, resume when fingers return) |
Default is Scale notes only (Major locked) — wrist tilt is off until you switch to Scale+Tilt in Settings.
| Wrist Action | Result | Notes |
|---|---|---|
| Tilt Left (tilt < 0) | Minor | All chords become minor (I→i, IV→iv, V→v, etc.) |
| Tilt Right (tilt ≥ 0) | Major | All chords become major (I, IV, V, etc.) |
| Scale notes only (lock mode) | Fixed | Mode locked (default: Major) — ignores wrist tilt |
Your right hand shapes the sound — chord type, volume, tone, and octave:
| Fingers | Major Chord Type | Minor Chord Type |
|---|---|---|
| 1 | Major Triad | Minor Triad |
| 2 | Major 1st Inversion | Minor 1st Inversion |
| 3 | Major 7th | Minor 7th |
| 4 | Major 9th | Minor 9th |
| 0 (Fist) | Default chord type — the tucked thumb also brings the octave back to normal; sound continues | |
Finger count → chord type requires Right Hand Mode = Finger Layout in Settings — the default is Fixed Chord Style (Major Triad), where the right hand controls volume + tone instead. The 8 fixed styles: Major Triad, Major 1st Inv, Minor Triad, Diminished, Sus2, Sus4, Major 7th, Dominant 7th.
Height controls volume; wrist tilt sweeps the tone filter:
| Movement | Controls | How It Works |
|---|---|---|
| Hand Height (Y-axis) | Volume | Hand higher = louder. Hand lower = quieter. |
| Wrist Tilt (left/right) | Filter Sweep / Tone | Tilt right = brighter (filter opens). Tilt left = darker (filter closes). |
Thumb out drops the octave for low bass lines:
| Thumb Position | Result | Status Display |
|---|---|---|
| Thumb curled in (default) | Normal octave | e.g. A |
| Thumb extended out | Down one octave (-8ve) | e.g. A (-8ve) |
| Condition | Behavior |
|---|---|
| Left fist (0 fingers) | Music mutes — notes held, resume when fingers return |
| Right fist (0 fingers) | Thumb tucks in → back to normal octave — sound continues, chord keeps updating |
| One hand leaves frame | Music stops after 80ms grace period |
| Both hands leave frame | Music stops after 80ms grace period |
Both hands required — the left hand picks a single note (interval + key), the right hand triggers it and controls volume. Left fist = silence.
| Left Fingers | Interval | Example (Key A) |
|---|---|---|
| 1 | Root note | A4 |
| 2 | Major 3rd | C#5 |
| 3 | Perfect 5th | E5 |
| 4 | Octave | A5 |
| 5 | 9th (octave + 2nd) | B5 |
Both hands required — right hand height = pitch (C3 → C6, logarithmic), left hand height = volume. Raise your right hand for higher notes; raise your left for a louder sound.
| Control | Options | Notes |
|---|---|---|
| Key | 12 keys (C – B) | Toolbar dropdown — transposes every chord |
| Left Hand Mode | Scale+Tilt · Scale notes only | Scale+Tilt: wrist tilt flips major ↔ minor (default: Scale only, Major locked) |
| Right Hand Mode | Finger Layout · Fixed Chord Style | Finger Layout: 1–4 fingers = triad / 1st inv / 7th / 9th (default: Fixed, Major Triad) |
| Fixed Chord Style | 8 types | Major Triad · Major 1st Inv · Minor Triad · Diminished · Sus2 · Sus4 · Major 7th · Dominant 7th |
| Timbre | Gesture (sawtooth) · Theremin (sine) | Follows the selected mode |
| Arpeggiator | Off · Slow · Normal · Fast | ⟿ toggle — sweeps chord notes sequentially like a harp |
| Auto Bass | Off · On (volume slider) | ∿ toggle — root note two octaves below, independent volume |
| Metronome | BPM 40–240 · 3/4·4/4·5/4·6/8·7/8 · 1–16 bars · Click/Wood/Beep/Hi-hat · TAP · volume | ♪ toggle in Settings. Note: the metronome is audible in recordings when it's on |
| Shortcuts | Space = stop all notes · Esc = reset | Work at any time (browser focus) |
| Setting | Default | Description |
|---|---|---|
| Key | A | All chords transposed to A major scale (change via toolbar dropdown) |
| Left Hand Mode | Scale Only (Major locked) | Fingers pick scale degree, mode locked to Major |
| Right Hand Mode | Fixed Chord Style (Major Triad) | Chord type locked, right hand controls volume + tone |
| Arpeggiator | Off | Toggle ⟿ to sweep chord notes sequentially |
| Auto Bass | Off | Toggle ∿ for automatic low-end root note |
Click the lock (or camera) icon in your browser's address bar → set Camera to Allow → reload. On iPhone: Settings → Safari → Camera → Allow. On Android Chrome: ⋮ → Settings → Site settings → Camera.
Close any other app holding the camera (Zoom, Meet, Teams, Photo Booth), then reload. On a desktop, check the camera isn't disabled in your OS privacy settings.
Camera access requires a secure context — the page must be on HTTPS, or on localhost for local development. Plain http:// on a remote host is blocked by the browser, not by us.
First start downloads about 19 MB of hand-tracking runtime. It's cached for a year afterward. If it stalls, reload — the download resumes from cache.
Use Chrome or Edge with hardware acceleration on. Improve your lighting and keep both hands fully inside the frame — tracking runs at 30fps and needs to see your whole hand.
Both hands must be visible — one hand alone produces silence by design. Also check that your left hand isn't a fist (that mutes), and that system volume isn't muted.
| Error | Meaning | Fix |
|---|---|---|
| NotAllowedError | You denied camera permission | Allow it in the address bar, then reload |
| NotFoundError | No camera detected | Connect a webcam or check OS privacy settings |
| NotReadableError | Another app is using the camera | Quit that app and reload |
| NotSupportedError | Insecure context | Open the site over HTTPS (or localhost) |