Skip to content

Overview

Vidrip Mimic turns a face into a controller. You bind a behaviour (fire, jump, pause, steer) to a facial gesture (a blink, a wink, a smile, a raised brow, a head turn) and your code receives a start event when the gesture begins and an end event when it stops.

Everything runs on the device. Mimic reads the camera locally, calibrates to the person in front of it, and never sends frames or face data anywhere.

Platform Package Camera and face tracking
Web (any framework) @vidrip/mimic-web Browser camera, WebAssembly face tracker, GPU when available
React Native (iOS, Android) @vidrip/mimic-react-native + @vidrip/mimic-landmarker VisionCamera 5 frames, native face tracker
Unity (Editor, iOS, Android) com.vidrip.mimic (UPM) WebCamTexture, MediaPipe Unity Plugin

All three run the same gesture engine with the same thresholds, so a blink is a blink everywhere.

  1. A provider turns each camera frame into a face sample: the face mesh, expression scores and head pose. Each platform has one, and you can write your own (see Providers).
  2. The engine judges every sample against the player’s calibrated resting face and emits gesture events with hysteresis and confirm windows, so a flicker in one frame never fires.
  3. A binding delivers the events in your framework’s idiom: mimic.on('blink', …) on the web, useMimic({ on: … }) in React Native, MimicFace.On(…) or Inspector UnityEvents in Unity.
import { Mimic } from '@vidrip/mimic-web';
const mimic = await Mimic.create({ modelUrl, wasm, preview: videoElement });
mimic.on('blink', (e) => { if (e.phase === 'start') fire(); });
mimic.on('head.*', (e) => { if (e.phase === 'start') steer(e.id); });
await mimic.calibrate(); // about 2.5 seconds of a resting face