Your face is the
controller.
Bind gameplay verbs and interactive triggers to a blink, a wink, a smile, a raised brow or a turn of the head. Mimic reads the face on the device, calibrates to each player in seconds, and hands your code clean start and end events.
Try every gesture on your face
Turn on your camera
The face tracker runs in this tab. Each frame is read and discarded on your device; nothing is uploaded.
No frames or landmarks leave your device.
Gesture matrix
Play Neon Glider with your face
Feel the latency yourself. The ship follows your head: turn a little left or right to steer, and blink or raise your brows to fire. No camera? A/D steer and Space fires.
Ready
Dodge the neon mines or shoot them. Turn your head to steer, blink to fire.
Built for instant, expressive play.
Face tracking gives you hundreds of moving points. Mimic gives your game a short list of things the player meant to do.
Calibrated to every face
About two and a half seconds of a resting face sets each player's own baseline. Every threshold is relative to it, so wide eyes, narrow eyes, glasses and laptop webcams all read the same way.
Events, not noisy numbers
Each gesture has a start and an end, stamped at the moment it began, with a strength. A one-frame flicker never fires.
On the device, always
No video frames, face measurements or calibration profiles leave the phone or the browser. The SDK makes no network calls and has no telemetry.
The same gestures on every engine
One gesture engine, one set of thresholds, three platforms.
import { Mimic } from '@vidrip/mimic-web';
// Load the face tracker; the camera opens on start()
const mimic = await Mimic.create({ modelUrl, wasm, preview: video, blendshapes: true });
// Bind verbs to the start and end of each gesture
mimic.on('blink', (e) => { if (e.phase === 'start') fireLaser(); });
mimic.on('smile', (e) => setBoost(e.phase === 'start' ? e.strength : 0));
// Subscribe to a whole family at once
mimic.on('head.*', (e) => steer(e.id, e.phase));
await mimic.start();
await mimic.calibrate(); // about 2.5 s of a resting faceimport { useMimic, MimicCamera } from '@vidrip/mimic-react-native';
export function FaceGameScreen() {
const face = useMimic({
on: {
'blink': (e) => e.phase === 'start' && jump(),
'head.left': (e) => e.phase === 'start' && laneLeft(),
'head.right': (e) => e.phase === 'start' && laneRight(),
'smile': (e) => setShield(e.phase === 'start' ? e.strength : 0),
},
});
return <MimicCamera mimic={face} style={{ flex: 1 }} />;
}using UnityEngine;
using Vidrip.Mimic;
using Vidrip.Mimic.Unity;
public class PlayerFaceController : MonoBehaviour
{
[SerializeField] MimicFace face;
[SerializeField] Animator ship;
void Start()
{
face.On(Gesture.Blink, e => { if (e.Phase == GesturePhase.Start) TriggerNitro(); });
face.On(Gesture.HeadLeft, e => { if (e.Phase == GesturePhase.Start) BankLeft(); });
face.On(Gesture.Smile, e => ship.SetFloat("Grin", (float)e.Strength));
}
}Getting-started guides: Web · React Native · Unity
Every gesture, start and end
Each one carries a strength and a start/end life cycle. The full catalog →
Eyes & brows
blinkboth eyesblink.leftwink leftblink.rightwink rightbrows.raisesurprise
Mouth
smilecorners uplaughsmile + openmouth.openjaw downexpression.matchcopy a face
Gaze
eyes.awayoff screeneyes.leftlook lefteyes.rightlook righteyes.uplook up
Head & face
head.leftturn lefthead.rightturn righthead.uptilt uphead.downtilt downhead.neutralcentredface.lostno face
Free during the beta.
Mimic is invite-only for now: game studios, indie developers and accessibility builders. Tell us what you're making and we'll send package access for Web, React Native and Unity. A commercial license comes with 1.0; beta users hear about it first.