Work / Lab

EyeOS

Webcam eye tracking as an input device: MediaPipe gaze moves the Windows cursor behind a four-gate safety model.

Status
explored
Role
Solo project
Timeline
Feb 2026 →
  • Python
  • OpenCV
  • MediaPipe Face Mesh
  • pywin32
  • websockets
  • TypeScript
  • Vite
  • three.js

TL;DR

  • EyeOS explores a plain webcam as an OS input device: gaze moves the Windows cursor like a joystick.
  • The design centres on safety. The cursor moves only when four independent gates all pass.
  • It’s a design-stage prototype: it never ran end to end, so calibration and latency are unmeasured.

The design

A Python daemon runs MediaPipe Face Mesh with iris landmarks and turns the iris’s offset from the eye corners into a gaze vector, plus a blink signal from the eye aspect ratio. The vector is smoothed with a dead zone, an exponential moving average and dwell detection, then drives the cursor through Win32 SendInput.

The four gates: an explicit Ctrl+Alt+E opt-in, an ESC kill switch, the daemon’s own window holding focus, and an ACTIVE status. A localhost WebSocket feeds the same gaze stream to a three.js scene built to steer its camera with your eyes.

Four gates instead of one toggle → an input device that moves the cursor for you has to be trivially stoppable → more states to get right, and every one of them has to be tested.

Next

Run it end to end, replace the stub calibration step with a real one, and measure how steady the cursor is before anything else.

Verified numbers

MetricValueSource
Blink threshold (eye aspect ratio)< 0.18local: eyeos/daemon/gaze.py:83
Cursor safety gates4local: eyeos/daemon/state.py:76-84
m.mittal
Home
Work
Research
Lab
About
Experience
Now
Résumé
Uses
Colophon
Contact
AccountWardin-build
Redlbuilt
The Councilresearch
BEMAresearch
EXIT LIQUIDITYin-build
NEXUSarchived
Warrant + Forgebuilt
Concordarchived
BlueCollarPalin-build
Chispenbuilt
Warrant Portalbuilt
JobAppin-build
Night/Dayexplored
BLACKSITE: NULLin-build
SlugBitesbuilt
Riptidebuilt
AeroBitesarchived
Internbuilt
CAD & 3D printingexplored
ForgeCouncilexplored
ADDE: adversarial due-diligence engineexplored
Model routing in practiceexplored
AI due-diligence market mapexplored
Quorumarchived
Colossus Wakeexplored
FitFindrbuilt
Project Omniexplored
Oblivionexplored
MeetWisebuilt
EyeOSexplored
LinkLeap AIexplored
Up-Toexplored
Offline speech-to-notes (Java)explored
AI-assisted game production pipelineexplored
COLLAPSEarchived
THE TRIALSarchived
EcoNodearchived
ESP32-S3 / LoRa benchexplored
CleanPlaybuilt
Rezonyrbuilt
Habit Tracker Telegram Botbuilt
Job Board Aggregatorin-build
Visual Hand Trackbuilt
CLI Task Trackerbuilt
All work44 entries
Can’t Hallucinate, Can Still Be Wrong: Calibration of a Typed-Decision Model Under Input Noisepaper
Disagreement as Signal: A Hybrid Multi-Agent and Council Architecture for Error Detection in LLM Systemspaper
Killing Good Ideasessay
Uncorrelated Failure Modesessay
ADDE: adversarial due-diligence engineexplored
AI due-diligence market mapexplored
AI-assisted game production pipelineexplored
Aura Chatexplored
Colossus Wakeexplored
EcoNodearchived
ESP32-S3 / LoRa benchexplored
EyeOSexplored
FitFindrbuilt
ForgeCouncilexplored
LinkLeap AIexplored
MeetWisebuilt
Model routing in practiceexplored
Offline speech-to-notes (Java)explored
Oblivionexplored
Print benchexplored
Project Omniexplored
Provably-fair outcome enginebuilt
Quorumarchived
Up-Toexplored
Copy hello@mitanshm.com
Switch theme
Play motion
RésuméPDF
Open GitHub ↗mit37
Open LinkedIn ↗
Toggle layout gridh
Toggle single-key shortcuts/ h