step 3 of 6 · open the toolsSix brushes
Marker, Neon, Velocity, Rainbow, Mono, Sparks — six behaviours, not six colours of one pen.
drawing.js:35A real highlighter
Drop the Marker's opacity and it becomes a highlighter — for notes, screenshots, lessons.
brush-panel.js:8448 colours + a wheel
Six palettes that agree with each other; an HSV wheel behind them stores any hex.
drawing.js:9An infinite canvas
Strokes live in world coordinates — pan with three fingers, zoom with thumb + middle.
viewport.jsSnap to a perfect shape
Draw rough, hold, and it becomes real — seven families, line to polygon.
shape-fit.jsSculpt — rope & rubber
Grab a finished line and bend it. Rope keeps its length; rubber stretches.
sculpt.js:68An eraser that fits your hand
It sizes itself from how wide you open your pinch — then sweeps clean.
main.js:3245Undo, everywhere
The session menu takes it back by gesture — or Ctrl/Cmd+Z, E, brackets, F, Esc by key.
file-menu.js:16Thirteen grounds
Live camera, frosted blur, six gradients, five animated — the ground moves while you draw.
background.jsA floating notepad
Sketchy, draggable, resized by gesture — notes riding over the canvas.
notepad.jsPanels, without touching
Point to aim, pinch to choose — every dock and menu is operated bare-handed.
brush-panel.js · pinch-latch.jsA full gesture lesson
Six guided steps with picture-in-picture demos, checked live against your camera.
gesture-guide.jsMeasured on your hand
One open hand, one pinch — every threshold placed inside your own measured gap.
calibration.jsBuilt steady
A pinch latch bridges dropped frames at 7fps; tracking holds with the wrist off-frame.
pinch-latch.js · pinch.js:55Air writing
Words written in the air — for teaching, streams and rooms.
/air-writing/Landscape & portrait
A wide canvas for desks and demos; a tall one for phones and reels.
app.htmlCapture
Full-resolution PNG stills; MP4 or WebM video, up to an hour.
recorder.js:242Timelapse replay
The whole session, replayed at 2×, 3×, 5× — the format process videos are made of.
modal.js:9Keep it on your device
One tap installs it from the browser — no store, no admin password.
manifest.webmanifestWhat it does not do
No layers · no pressure · no offline · exports carry a small corner mark.
the honest halfThe full spec · every claim read from the code
Every feature,performed.
This is a live AirVA session. Scroll, and the session plays — scroll back and it runs in reverse. Twenty features, every one implemented in the file it cites.
The spec sheet.
Everything above, plus what a performance cannot show — each line traced to source.
- Brushes
- Marker · Neon · Velocity · Rainbow · Mono · Sparks — six distinct render behaviours drawing.js:35
- Highlighter
- Marker at reduced opacity is a true highlighter; opacity is pinched along a bar brush-panel.js:84
- Colour
- Six 8-colour palettes; full HSV wheel stores any hex drawing.js:9 · brush-panel.js:102
- Stroke quality
- Speed-adaptive smoothing; pinch latch bridges dropped frames on ~7fps devices pinch.js:27 · pinch-latch.js
- Shape snap
- Seven families — line, circle, ellipse, arc, triangle, polygon, polyline shape-fit.js
- Sculpt
- Two modes: rope keeps length and drags like cord; rubber stretches sculpt.js:68
- Eraser
- Sizes itself from your pinch width, against your own calibration main.js:3245
- Undo
- Session menu by gesture; Ctrl/Cmd+Z by keyboard file-menu.js:16
- Canvas
- Infinite world coordinates; the screen is a viewport viewport.js
- Backgrounds
- Camera · frosted blur · solid · six gradients · five animated background.js
- Panels
- Brush rack, palettes and menus are spatial panels operated bare-handed — point to aim, pinch to choose brush-panel.js · pinch-latch.js
- Notepad
- Floating overlay, dragged and resized by gesture notepad.js
- Stills
- PNG at full canvas resolution, lossless recorder.js:242
- Video
- MP4 where the browser remuxes, WebM otherwise; recordings to one hour modal.js:220 · recorder.js:17
- Timelapse
- 2× · 3× · 5× modal.js:9
- Lessons
- Six guided steps with picture-in-picture demos; a skip appears after 30s of struggle gesture-guide.js
- Calibration
- One open hand + one pinch; thresholds placed inside your measured gap calibration.js
- Edge stability
- Wrist-extrapolation was built, proven unnecessary live, and deleted — stability stayed pinch.js:55
- Shortcuts
- Ctrl/Cmd+Z · E · [ ] · F · Esc app.html
- Install
- One tap from the browser; no store, no admin rights — how, for every device → manifest.webmanifest
- Privacy
- Hand tracking runs on-device; the camera feed is never uploaded mediapipe.js
- Modes
- Landscape and portrait sessions app.html
- Price
- Free — no account, no trial, no paywall verified: no billing code exists
- Support
- support@getairva.com — a human answers, usually within the day —
Not in the spec
No layers. No pressure sensitivity — width follows hand speed. No offline mode. Exports carry a small getairva.com corner mark, image and video alike.