TrackHands is a cross-platform desktop app that detects when your fingers are near your mouth and reminds you to stop.
- Real-time hand and face detection using MediaPipe
- Unobtrusive system tray app
- Warning overlay when hands are detected near mouth
- Camera preview with detection visualization
- Adjustable detection frequency
- Configurable camera resolution
- Screenshot capture of detected incidents
- Privacy-focused — all processing done locally
- macOS 11+, Windows 10+, or Linux
- Built-in camera or compatible webcam
- Camera permissions enabled
Download the latest release for your platform from the Releases page.
Since the app is not signed with an Apple Developer certificate, macOS may show a warning that the app "is damaged and can't be opened." To fix this, run the following command in Terminal after installing:
xattr -cr /Applications/TrackHands.app-
Clone the repository:
git clone https://github.com/cacoos/trackhands.git cd trackhands -
Install dependencies:
pnpm install
-
Run in development mode:
pnpm tauri dev
-
Build for production:
pnpm tauri build
The built application will be in src-tauri/target/release/bundle/.
TrackHands runs in your system tray and uses your camera to:
- Detect your face and mouth position using MediaPipe Face Mesh
- Track your hand and finger positions using MediaPipe Hands
- Show a warning overlay when fingers are detected near your mouth
- Capture a screenshot of the incident to help build awareness
- All processing is done locally on your device
- No data is collected or transmitted
- Camera access is required but footage never leaves your computer
- Detection Speed: Adjust how frequently detection runs (Slow/Medium/Fast)
- Resolution: Configure camera resolution (Low/Medium/High)
trackhands/
├── src/ # React frontend
│ ├── components/ # UI components
│ ├── hooks/ # Custom hooks (detection)
│ └── stores/ # State management
├── src-tauri/ # Rust backend
│ ├── src/ # Tauri commands
│ └── icons/ # App icons
└── public/ # Static assets
- Frontend: React, TypeScript, Vite, Tailwind CSS
- Backend: Rust, Tauri 2.0
- Detection: MediaPipe (Face Mesh + Hand Landmarks)
- State: Zustand
If you're having issues with detection:
- Ensure good lighting on your face
- Try quitting and reopening the app
- Check camera permissions in System Settings
- Try a different camera resolution setting
Contributions are welcome! Please feel free to submit a Pull Request.
Joaquin Ossandon (@cacoos)