Everything happens as you record, on this device, so the video is finished the moment you stop.
Your camera never leaves this device. There is no server, no upload and no analytics. Recordings are held in the page and are gone when you close the tab. Two features are exceptions, voice control and the optional restyle, and both are off unless you turn them on.
Each step passes when this page actually sees it, and the camera stays live throughout.
No hand in view
Every option here changes how the application behaves and is remembered on this device.
Built by Amey Thakur. Open source under the MIT licence.
Six steps run on every frame, all of them on this device. Each one is a piece of arithmetic small enough to state exactly.
A convolutional model returns a landmark for every joint, at 24 Hz. Everything after this reads those coordinates and never the picture, which is why a gesture is recognised the same way in any light.
Take two vectors across the palm and cross them. The result points out of the back of the hand, and the sign of its component toward the camera says which way the hand is turned.
s = (v1 × v2)z / |v1| |v2| = k(θ) cos θ
The factor k is positive for any hand that is not folded flat, so s and cos θ change sign together. A flip is a sign change, which is exact: it does not depend on the size of the hand, its distance, or how it is rotated in the picture.
Two index tips and two thumb tips, kept in anatomical order, are the corners of a quadrilateral. A pixel is inside it when a ray cast from that pixel crosses the boundary an odd number of times.
Counting crossings rather than splitting the shape into triangles is what keeps this correct when the hands cross. The quad then folds into two lobes, and the count still gives exactly those.
Landmarks move by a percent of the frame while the hands do not. Each corner is smoothed toward its measurement by a coefficient that is written per frame at 60 Hz and then rescaled to the interval that actually elapsed.
α = 1 − (1 − k)Δt / 16.7
Without the exponent the window settles at a different speed on every device. The coefficient k itself rises with the speed of the hand, so a still frame is smoothed hard and a moving one is barely smoothed at all.
A cartoon is three things at once: flat interiors, sharp boundaries, and a line. Each is computed separately and then composed, after the white-box decomposition of cartoon representation.
The canvas the effects are drawn on is the canvas that is captured. The recorder reads that surface rather than the camera, so what lands in the file is what you saw, already finished.
Every constant above is derived rather than tuned, and the reasoning for each sits beside it in the source. The detector's accuracy is measured, not asserted.
A video model redraws the whole take, and the window your hands made reveals it. Everything else here runs on your device. This does not.
Held in this tab and sent only to Google. It is never written to this repository, a log, or anywhere else. Get a key.
Every prompt carries the same alignment constraint, which is what keeps the generated frame under the window instead of beside it.
A preview model, so its name changes. If generation returns a 404, the current name is in Google’s documentation.
The tracking model is downloaded once and then cached by your browser.
The camera is needed to track your hand and to record. The video is processed on this device and is never sent anywhere.
Your browser will ask for permission next.
This file is held in the page only. Closing the tab discards it.