Automatically pause and resume media playback when you look away from the screen β a privacy-focused solution for maintaining attention and reducing digital distraction.
- Desktop App: Python-based webcam eye detection with configurable timeout and multi-face support for VLC, browser media, and desktop players.
- Chrome Extension: MediaPipe-powered gaze detection specifically for YouTube with per-tab camera instances and offline processing.
- Web App: React-based documentation hub and demo platform showcasing the technology and providing installation guides.
All processing happens locally and offline β no cloud dependencies, ensuring privacy and low latency.
- Problem Solved: Constantly pausing/resuming videos manually when cooking, multitasking, or getting distracted is tedious; modern attention spans suffer from digital overload; accessibility needs for hands-free media control.
- How It Solves It: Uses computer vision (OpenCV + dlib for desktop, MediaPipe for browser) to detect when eyes are looking at the screen; automatically sends pause/play commands when attention shifts.
- Impact Created: Reduces friction in media consumption; helps users stay focused on long-form content; provides accessibility for hands-free control; tracks attention patterns for digital wellbeing insights.
- π Project Title & Tagline
- π Overview
- π§© Problem, Solution & Impact
- β¨ Features
- π₯ Demo
- π± Origin
- β‘ Quick Start
- π§ Architecture
- π£οΈ Future Roadmap & Potential Features
- π Comparable Projects
- π§βπ Target Users & Use Cases
β οΈ Risks & Challenges- π° Potential Monetization & Growth Ideas
- π Folder Structure
- π Built With
- βοΈ Installation & Setup
- βοΈ Configuration
- π§ͺ Testing
- π Deployment
- π Known Issues
- π Performance / Optimization
- π Privacy & Security
- π Acknowledgments
- π€ Author
- π License
-
For Users
- β Interactive documentation and guides
- β Installation instructions for all platforms
- β Chrome extension download and setup guide
- β Desktop app feature showcase
- β Live gaze detection demo (optional)
- β Responsive design for mobile/tablet
- β Dark mode support
-
For Developers
- β React + TypeScript + Vite stack
- β shadcn/ui component library
- β TailwindCSS for styling
- β React Router for navigation
- β MediaPipe integration for browser demo
- β Modular component architecture
-
For Users
- β Real-time eye and face detection using webcam
- β Automatic pause/resume via spacebar key events
- β Configurable timeout (how long to wait before pausing)
- β Multi-face support (pause only when all viewers look away)
- β Target application selection (VLC, browser, any media player)
- β Visual debug mode with face landmarks overlay
- β Activity logging and detection statistics
- β Completely offline β no internet required
- β Cross-platform (Windows, macOS, Linux)
-
For Developers
- β Modular architecture with clean separation of concerns
- β OpenCV + dlib for robust face/eye detection
- β PyAutoGUI for cross-platform keyboard events
- β Tkinter-based GUI with real-time feedback
- β Comprehensive logging and error handling
- β Easy-to-extend configuration system
-
For Users
- β Gaze detection using MediaPipe face landmarks
- β Auto pause/resume for YouTube videos
- β Configurable timeout and sensitivity settings
- β Real-time status indicators in popup
- β Per-tab camera instances (privacy-focused)
- β Offline MediaPipe processing
- β YouTube-only permissions (minimal access)
-
For Developers
- β Hybrid architecture (background + content scripts)
- β Manifest V3 compliant
- β MediaPipe WASM for browser-based face detection
- β Service worker for state management
- β YouTube API integration
- β PowerShell build scripts for packaging
- Desktop App: Launch the app, enable detection, and watch it pause your video player when you look away β resume automatically when you look back.
- Chrome Extension: Install in Chrome, navigate to YouTube, enable detection in popup, and experience hands-free pause/resume.
- Web App: Visit the live demo at [your-deployed-url] to explore guides and test browser-based gaze detection.
Back in March 2018, when I had just moved out of home, I often wanted to continue watching shows or YouTube videos while cooking for the first time. I realized how inconvenient it was to manually pause or play videos whenever I had to turn away. That's when the idea for a video player that responds to your eyes first sparked β a simple script that could detect when you're looking at the screen and automatically play/pause the video.
In today's world, I often catch myself not paying the kind of attention to the content on the big screen in front of me as much as I used to. As a self-proclaimed cinephile and TV connoisseur, this is heartbreaking.
While there are so many other things one should be doing to fix attention spans β getting back to reading, putting phones on flight mode, practicing mindfulness β I couldn't help but wonder if my borderline dystopian idea from 2018 could be leveraged in this Black Mirror-esque world to actually help people stay focused on long-form content.
I remember building a very slightly working prototype which could detect the eyeballs. I'm not sure why I abandoned building it into a full-fledged project at the time β likely a combination of limited computer vision knowledge, unclear use case, and shifting priorities.
Idea Date: March 2018
Possible Names Considered:
- SightSync
- EyePause
- GazePlay
# Clone the repository
git clone https://github.com/yourusername/eyeremote.git
cd eyeremote/eyeremote-deskapp
# Run the automated installer (Windows)
installers\install.bat
# OR run the automated installer (macOS/Linux)
chmod +x installers/install.sh
installers/install.sh
# Launch the application
python eyeremote.py# Navigate to extension directory
cd eyeremote/eyeremote-chromeext
# Download MediaPipe assets (Windows PowerShell)
.\download_mediapipe.ps1
# Load unpacked extension in Chrome
# 1. Open chrome://extensions/
# 2. Enable "Developer mode"
# 3. Click "Load unpacked" and select eyeremote-chromeext folder
# 4. Grant camera permissions when prompted# Clone and navigate to project root
git clone https://github.com/yourusername/eyeremote.git
cd eyeremote
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
npm run previewgraph TB
subgraph Desktop App
D[Python Desktop App] --> CV[OpenCV + dlib]
D --> GUI[Tkinter GUI]
D --> KC[PyAutoGUI Keyboard Control]
CV --> CAM1[Webcam Feed]
KC --> MP1[Media Players]
end
subgraph Chrome Extension
E[Chrome Extension] --> BG[Background Service Worker]
E --> CS[Content Script]
E --> GD[MediaPipe Gaze Detector]
BG --> ST[State Management]
CS --> YT[YouTube API]
GD --> CAM2[Webcam Feed]
end
subgraph Web App
W[React Web App] --> RT[React Router]
W --> UI[shadcn/ui Components]
W --> MD[MediaPipe Demo]
MD --> CAM3[Webcam Feed]
end
USER[User] --> D
USER --> E
USER --> W
graph LR
A[Main GUI] --> B[EyeDetector]
B --> C[OpenCV Camera]
B --> D[dlib Face Detection]
D --> E[Eye Landmark Detection]
E --> F[Attention State]
F --> G[Timeout Logic]
G --> H[PyAutoGUI Spacebar]
H --> I[Target Media App]
A --> J[Config Manager]
J --> K[JSON Config File]
graph LR
A[Popup UI] --> B[Background Worker]
B --> C[Content Script]
C --> D[YouTube Page]
B --> E[Gaze Detector]
E --> F[MediaPipe WASM]
F --> G[Webcam Stream]
E --> H[Detection State]
H --> I[Timeout Logic]
I --> C
C --> J[Video Control]
sequenceDiagram
participant User
participant Camera
participant Detector
participant Timer
participant MediaPlayer
User->>Detector: Enable Detection
Detector->>Camera: Start Capture
loop Every Frame
Camera->>Detector: Video Frame
Detector->>Detector: Detect Face/Eyes
alt Eyes Detected
Detector->>Timer: Reset Timeout
Timer->>MediaPlayer: Resume (if paused)
else No Eyes
Detector->>Timer: Increment Counter
alt Timeout Reached
Timer->>MediaPlayer: Pause
end
end
end
- Logs: Track how long user was attentive vs. distracted
- Digital Wellbeing Tracker: Matplotlib dashboard showing attention over time
- Attention Graphs: Visualize attentive vs. distracted durations
- Pattern Detection: Identify binge-watching habits or distraction triggers
- Audio Cue Mode: Lower system volume or fade audio instead of pausing
- Smart Ambient Mode: Dim screen or trigger ambient visuals when eyes are away
- Voice Alerts: Optional audio notifications for state changes
- Focus Mode Integration: Block short-form apps or websites when watching long-form content
- Eye-Aware Productivity Suite: Extend to coding, reading, studying scenarios
- Multi-Monitor Support: Track which screen user is watching
- Multi-user Calibration: Pause only when all watchers look away
- Shared Viewing Stats: Compare attention metrics with friends
- Group Watch Mode: Coordinate playback for remote viewing parties
- Emotion Recognition: Detect engagement level, not just presence
- Distraction Classification: Identify phone checking, side conversations
- Learning Optimization: Adjust timeout based on content type and user patterns
- Mobile Apps: iOS/Android versions with camera-based detection
- Smart TV Integration: Native apps for major TV platforms
- Game Console Support: Xbox/PlayStation media control
- VR/AR Headset: Eye tracking for immersive media
| Project | Platform | Key Features | How EyeRemote Differs |
|---|---|---|---|
| FacePause | Android | Pauses games/video when you leave webcam view | Multi-platform; configurable timeout; multi-face support; open source |
| Tobii Eye Tracker | Hardware + Software | Commercial eye tracking with gaming/productivity focus | Software-only; no hardware required; privacy-focused offline processing |
| Eye Tracking Demos | OpenCV tutorials | Educational eye detection examples | Production-ready apps; full media control; attention analytics roadmap |
- Entirely software-based β no external hardware required
- Cross-platform β desktop app works on Windows, macOS, Linux; extension works on Chrome/Edge
- Privacy-first β completely offline processing, no cloud dependencies
- Designed for attention management β not just gaze detection, but helping users stay focused
- Multi-app support β works with VLC, YouTube, Netflix, and any media player
- Open source β community-driven development and transparent implementation
| User Type | Use Case | Benefit |
|---|---|---|
| Casual Watchers | Auto-pause Netflix/YouTube when distracted or stepping away | Convenience; never miss a moment |
| Cooking Enthusiasts | Watch recipe videos hands-free while cooking | Safety; hygiene; uninterrupted learning |
| Students | Maintain focus during online lectures or tutorials | Better retention; attention tracking |
| Productivity Users | Track attention during work/study sessions | Digital wellbeing insights; reduce multitasking |
| Couples/Friends | Shared viewing with pause when anyone looks away | Coordinated experience; no manual coordination |
| Accessibility Users | Hands-free video control for mobility-impaired users | Independence; ease of use |
| Parents | Pause children's content when they're not watching | Screen time management; content awareness |
| Fitness Enthusiasts | Follow workout videos without manual pause/resume | Seamless training; hygiene |
-
False Positives: Brief eye movements or head turns might trigger unintended pauses
- Solution: Smoothing filters + configurable timeout (default 2-3 seconds)
-
Lighting & Camera Quality: Poor lighting or low-quality webcams reduce detection accuracy
- Solution: Adjustable thresholds; debug mode to test conditions; recommendations for setup
-
Multi-Monitor Scenarios: Hard to detect which screen user is watching
- Solution: Future roadmap feature; currently assumes single primary display
-
Performance Impact: Continuous video processing can use CPU/battery
- Solution: Optimized frame rates; GPU acceleration where available; idle detection
-
App Focus Issues: Sending key events to the correct window across different OSes
- Solution: Manual target app selection; platform-specific handlers
-
Learning Curve: Users need to understand timeout settings and calibration
- Solution: Sensible defaults; interactive setup wizard; visual feedback
-
Privacy Perception: Webcam usage requires clear user consent and transparency
- Solution: Prominent privacy notices; offline-only processing; open-source code
- Benefit: No data collection, storage, or transmission
-
Security Concerns: Malware could misuse webcam access
- Solution: Code audits; signed releases; minimal permissions; open development
-
Freemium Model
- Free: Basic detection with standard timeout
- Premium ($4.99/month or $39.99/year): Attention analytics dashboard, multi-user mode, advanced features
-
One-Time Purchase ($29.99)
- Lifetime access to desktop app + extension
- Free updates and bug fixes
-
Corporate Wellbeing Add-on: Integrate into workplace productivity suites
- License to companies for employee focus tracking (ethical implementation required)
- Privacy-focused attention analytics for remote work
-
Educational Institutions: Site licenses for online learning platforms
- Help students stay focused during remote classes
- Provide attention metrics to educators (anonymized)
-
Hardware Bundles: Partner with webcam manufacturers
- Pre-configured USB cameras with EyeRemote software
- "TV Focus Mode" kits for living room setups
-
Travel & Hospitality: In-flight entertainment integration
- Airlines license for seatback entertainment systems
- Hotels offer as premium room feature
-
Open-Source Core with optional premium features
- Developer version for computer vision and UX research
- Community contributions for new features and platform support
-
API Access: Paid API for third-party integrations
- Enable other apps to use attention detection
- Usage-based pricing model
- Focus Coaching: Subscription service with attention training programs
- Gamified challenges to improve focus duration
- Personalized recommendations based on attention patterns
eyeremote/
βββ eyeremote-deskapp/ # Python Desktop Application
β βββ app/
β β βββ __init__.py
β β βββ main.py # Main GUI application
β β βββ eye_detector.py # Core detection logic
β β βββ config.py # Configuration management
β β βββ utils.py # Helper utilities
β βββ docs/
β β βββ QUICKSTART.md # Quick start guide
β β βββ TECHNICAL.md # Technical documentation
β β βββ AppScreen.png # Screenshot
β βββ installers/
β β βββ install.bat # Windows installer
β β βββ install.sh # macOS/Linux installer
β β βββ run.bat # Windows launcher
β βββ models/
β β βββ .gitkeep
β β βββ download_models.py # Download dlib models
β βββ scripts/
β β βββ debug.py # Debug window
β β βββ setup.py # Setup utilities
β β βββ test_eye_detection.py # Detection tests
β β βββ test_keypress.py # Keyboard tests
β β βββ test_setup.py # Setup tests
β βββ eyeremote.py # Main entry point
β βββ requirements.txt # Python dependencies
β βββ README.md # Desktop app README
β
βββ eyeremote-chromeext/ # Chrome Extension
β βββ icons/
β β βββ icon16.png
β β βββ icon48.png
β β βββ icon128.png
β βββ lib/ # MediaPipe assets (after download)
β β βββ tasks-vision/
β β βββ wasm/
β βββ manifest.json # Extension manifest
β βββ popup.html # Extension popup UI
β βββ popup.js # Popup logic
β βββ background.js # Service worker
β βββ content.js # YouTube integration
β βββ gazeDetector.js # MediaPipe gaze detection
β βββ download_mediapipe.ps1 # Download MediaPipe
β βββ build.ps1 # Package extension
β βββ README.md # Extension README
β
βββ src/ # React Web App
β βββ components/
β β βββ ui/ # shadcn/ui components
β β βββ ChromeExtensionBanner.tsx
β β βββ DesktopAppBanner.tsx
β β βββ GazeDetector.tsx # Browser gaze demo
β β βββ Navbar.tsx
β β βββ SettingsPanel.tsx
β β βββ StatusIndicator.tsx
β β βββ URLInput.tsx
β β βββ VideoPlayer.tsx
β βββ pages/
β β βββ Index.tsx # Home page
β β βββ ExtensionGuide.tsx # Extension guide
β β βββ NotFound.tsx # 404 page
β βββ hooks/
β β βββ use-mobile.tsx
β β βββ use-toast.ts
β βββ lib/
β β βββ utils.ts # Utility functions
β βββ App.tsx # Main app component
β βββ main.tsx # Entry point
β βββ index.css # Global styles
β βββ vite-env.d.ts # TypeScript definitions
β
βββ public/ # Static assets
β βββ icons/ # App icons
β βββ eyeremote-chromeext.crx # Packaged extension
β βββ robots.txt
β
βββ index.html # HTML entry point
βββ vite.config.ts # Vite configuration
βββ tailwind.config.ts # Tailwind configuration
βββ package.json # Node dependencies
βββ README.md # This file
| Component | Technology | Purpose |
|---|---|---|
| GUI Framework | Tkinter | Cross-platform desktop interface |
| Computer Vision | OpenCV | Camera capture and image processing |
| Face Detection | dlib | Robust face and eye landmark detection |
| Keyboard Control | PyAutoGUI | Cross-platform keyboard event simulation |
| Configuration | JSON | Persistent settings storage |
| Logging | Python logging | Activity tracking and debugging |
| Component | Technology | Purpose |
|---|---|---|
| Face Detection | MediaPipe (WASM) | Browser-based face landmark detection |
| Manifest | V3 | Modern Chrome extension architecture |
| Background | Service Worker | State management and coordination |
| Content Script | Vanilla JS | YouTube page integration |
| UI | HTML/CSS | Extension popup interface |
| Build Tools | PowerShell | Asset download and packaging |
| Component | Technology | Purpose |
|---|---|---|
| Framework | React 18 | UI component library |
| Language | TypeScript | Type-safe development |
| Build Tool | Vite | Fast development and building |
| Styling | TailwindCSS | Utility-first CSS framework |
| UI Components | shadcn/ui | Pre-built accessible components |
| Router | React Router 6 | Client-side routing |
| Animations | Framer Motion | Smooth transitions and effects |
| Media Player | React Player | Video playback component |
| Gaze Detection | MediaPipe | Browser-based demo |
| Icons | Lucide React | Icon library |
- Operating System: Windows 10+, macOS 10.14+, or Linux (Ubuntu 20.04+)
- Python: Version 3.8 or higher
- Webcam: Built-in or USB webcam
- Media Player: VLC, browser, or any keyboard-controllable player
Windows:
cd eyeremote-deskapp
installers\install.batmacOS/Linux:
cd eyeremote-deskapp
chmod +x installers/install.sh
installers/install.shThe installer will:
- Check Python version (3.8+ required)
- Install required packages from
requirements.txt - Download dlib face detection models
- Verify installation and dependencies
cd eyeremote-deskapp
# Create virtual environment (optional but recommended)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Download face detection models
python models/download_models.py
# Verify installation
python scripts/test_setup.pypython eyeremote.pyOr use the launcher scripts:
- Windows:
installers\run.bat - macOS/Linux:
python eyeremote.py
- Browser: Google Chrome or Microsoft Edge (Chromium-based)
- PowerShell: Windows PowerShell 5.1+ (for asset download script)
- Webcam: Built-in or USB webcam
cd eyeremote-chromeext
.\download_mediapipe.ps1This downloads the MediaPipe face detection model and WASM files to the lib/ directory.
Manual Download Alternative: If PowerShell script fails, manually download from:
- MediaPipe Tasks Vision: https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/
- Place files in
eyeremote-chromeext/lib/directory
- Open Chrome/Edge and navigate to
chrome://extensions/ - Enable Developer mode (toggle in top right)
- Click "Load unpacked"
- Select the
eyeremote-chromeextfolder - Grant camera permissions when prompted
- Click the puzzle icon in Chrome toolbar
- Find "EyeRemote"
- Click the pin icon to keep it visible
- Navigate to any YouTube video
- Click the EyeRemote extension icon
- Toggle "Enable Detection"
- Adjust timeout settings as needed
- Video will auto-pause when you look away
- Node.js: Version 18+ recommended
- npm: Version 8+ (comes with Node.js)
# Clone repository (if not already cloned)
git clone https://github.com/yourusername/eyeremote.git
cd eyeremote
# Install dependencies
npm install
# Start development server
npm run devThe app will be available at http://localhost:5173 (or next available port).
# Build for production
npm run build
# Preview production build locally
npm run preview
# Deploy dist/ folder to hosting serviceCreate a .env file in project root for custom configuration:
# Optional: Custom port for dev server
VITE_PORT=3000
# Optional: API endpoints for future features
VITE_API_URL=https://your-api-endpoint.comConfiguration is stored in eyeremote_config.json (created automatically on first run).
Default Configuration:
{
"timeout_seconds": 3,
"max_faces": 1,
"target_application": "All Applications",
"camera_index": 0,
"eye_detection_threshold": 0.3,
"show_face_landmarks": false,
"log_activity": true
}Configuration Options:
| Setting | Type | Default | Description |
|---|---|---|---|
timeout_seconds |
Integer | 3 | Seconds to wait before pausing |
max_faces |
Integer | 1 | Number of faces required to be watching |
target_application |
String | "All Applications" | Window to send keyboard events to |
camera_index |
Integer | 0 | Camera device index (0 = default) |
eye_detection_threshold |
Float | 0.3 | Detection sensitivity (0.0 - 1.0) |
show_face_landmarks |
Boolean | false | Show debug overlay with landmarks |
log_activity |
Boolean | true | Enable activity logging |
Editing Configuration:
- Use the GUI settings panel (recommended)
- Or manually edit
eyeremote_config.json(restart required)
Settings are accessible via the extension popup.
Available Settings:
| Setting | Type | Default | Description |
|---|---|---|---|
| Timeout | Slider | 2000ms | Milliseconds to wait before pausing |
| Detection Status | Toggle | Off | Enable/disable gaze detection |
| Tab-specific | Automatic | Per-tab | Each tab has independent detection state |
Changing Settings:
- Click extension icon
- Adjust timeout slider (500ms - 5000ms)
- Toggle detection on/off
- Settings persist across browser sessions
Minimal configuration required. Customization via:
Tailwind Config (tailwind.config.ts):
- Theme colors
- Breakpoints
- Custom utilities
Vite Config (vite.config.ts):
- Build options
- Plugin configuration
- Path aliases
Test Eye Detection:
cd eyeremote-deskapp
python scripts/test_eye_detection.py- Shows live camera feed with detection status
- Press 's' to toggle face landmark visualization
- Press 'q' to quit
Test Keyboard Events:
python scripts/test_keypress.py- Opens notepad/text editor
- Sends spacebar events to verify key simulation
- Useful for diagnosing media control issues
Test Setup:
python scripts/test_setup.py- Verifies all dependencies installed
- Checks camera access
- Downloads missing models if needed
Debug Mode:
python scripts/debug.py- Interactive debug window
- Real-time FPS and detection statistics
- Visual face/eye detection overlay
Manual Testing:
- Load unpacked extension
- Open Chrome DevTools (
F12) - Navigate to YouTube video
- Enable detection in extension popup
- Monitor console for logs:
popup.js: Popup interaction logsbackground.js: Background worker logscontent.js: YouTube integration logsgazeDetector.js: Detection logs
Testing Checklist:
- Camera permission granted
- Detection toggle works
- Timeout slider updates correctly
- Video pauses when looking away
- Video resumes when looking back
- Status indicator updates in popup
- Works across multiple tabs independently
Run Development Server:
npm run dev- Hot module replacement for instant feedback
- Check browser console for errors
- Test responsive design with DevTools device emulation
Linting:
npm run lintBuild Test:
npm run build
npm run preview- Verify production build works
- Check bundle size
- Test all routes
Distribution Options:
-
Source Distribution
- Share the GitHub repository
- Users follow installation instructions
- Best for open-source community
-
Executable Packaging (Future)
- Use PyInstaller or py2exe to create standalone executables
- Bundle Python runtime and dependencies
- Simplest for end users
# Example PyInstaller command (not yet implemented)
pyinstaller --onefile --windowed --icon=icon.ico eyeremote.py- Installer Packages (Future)
- Create
.exeinstaller for Windows (Inno Setup) - Create
.dmgfor macOS - Create
.deb/.rpmfor Linux
- Create
Option 1: Chrome Web Store (Recommended for Public)
- Create developer account ($5 one-time fee)
- Package extension:
cd eyeremote-chromeext .\build.ps1 - Upload to Chrome Web Store dashboard
- Fill in store listing details
- Submit for review (1-3 days)
Option 2: Direct Distribution (Private)
- Package as
.crxfile (already included inpublic/) - Host on your website
- Users download and drag into Chrome extensions page
- Chrome will warn about "unverified developer"
Option 3: Enterprise Distribution
- Use Chrome Enterprise policies
- Deploy via Google Admin Console
- No Web Store approval needed
Recommended Hosting: Vercel/Netlify (Free Tier Available)
Deploy to Vercel:
# Install Vercel CLI
npm install -g vercel
# Deploy
vercel --prodDeploy to Netlify:
# Install Netlify CLI
npm install -g netlify-cli
# Build and deploy
npm run build
netlify deploy --prod --dir=distDeploy to GitHub Pages:
# Build
npm run build
# Deploy dist/ folder to gh-pages branch
npm run deploy # (requires gh-pages package)Static Hosting Providers:
- Vercel (Recommended)
- Netlify
- GitHub Pages
- Cloudflare Pages
- AWS S3 + CloudFront
- Firebase Hosting
Build Output:
- All builds create a
dist/folder - Upload
dist/contents to any static host - No server-side rendering required
| Issue | Severity | Workaround | Status |
|---|---|---|---|
| False positives with brief head movements | Low | Increase timeout setting | By design |
| Poor detection in low light | Medium | Improve lighting; adjust threshold | Documented |
| Doesn't work with fullscreen apps on macOS | Medium | Use windowed mode | Investigating |
| High CPU usage on older machines | Low | Lower camera resolution; reduce FPS | Future optimization |
| Multi-monitor detection unclear | Low | Use on primary monitor | Future feature |
| Issue | Severity | Workaround | Status |
|---|---|---|---|
| Doesn't work on other video sites | Low | Desktop app supports all sites | By design (YouTube-only) |
| Camera permission needs manual grant | Low | Browser security requirement | Expected behavior |
| Slight delay before pause/resume | Low | Adjust timeout setting | Acceptable latency |
| Doesn't persist across browser restarts | Medium | Re-enable in popup after restart | Investigating |
| Issue | Severity | Workaround | Status |
|---|---|---|---|
| Gaze demo requires HTTPS | Medium | Use localhost or HTTPS deployment | Browser security |
| Large bundle size (~2MB with MediaPipe) | Low | Code splitting; lazy loading | Future optimization |
| No mobile camera support for demo | Low | Desktop-only feature | By design |
Current Metrics:
- Detection FPS: 15-30 FPS (depending on hardware)
- CPU Usage: 10-20% on modern hardware
- Memory Usage: ~150-250 MB
- Latency: <100ms from eye movement to detection
Optimization Strategies:
- Frame rate throttling (process every Nth frame)
- Configurable detection resolution
- GPU acceleration where available (future)
- Multi-threading for camera capture and processing
Current Metrics:
- Detection Rate: 10 FPS (hardcoded for battery efficiency)
- Memory Usage: ~50-100 MB per tab
- Battery Impact: Low (pauses detection when tab inactive)
Optimization Strategies:
- Tab-level detection (paused on inactive tabs)
- MediaPipe WASM for native performance
- Efficient landmark processing (only necessary points)
- Debounced state updates
Current Metrics:
- Initial Load: ~1.5s (with MediaPipe demo)
- Bundle Size: ~500KB (minified + gzipped)
- Lighthouse Score: 90+ Performance
Optimization Strategies:
- Code splitting for MediaPipe demo
- Lazy loading of components
- Image optimization (WebP, responsive images)
- TailwindCSS purging (unused styles removed)
β 100% Offline Processing
- All face/eye detection happens locally on your device
- No video or image data is ever transmitted to servers
- No internet connection required for core functionality
β No Data Collection
- We don't collect, store, or transmit any personal data
- No analytics, tracking, or telemetry
- Configuration files stored locally only
β Camera Access Transparency
- Camera access only when detection is explicitly enabled
- Clear visual indicators when camera is active
- Easy toggle to disable at any time
β Open Source
- All code is publicly auditable on GitHub
- No hidden backdoors or data exfiltration
- Community-reviewed security
π For Users:
- Download only from official sources (GitHub, Chrome Web Store)
- Review permissions before installing
- Keep software updated for security patches
- Disable detection when not needed
π For Developers:
- Code signing for desktop app releases (future)
- Chrome Web Store verification
- Regular security audits
- Dependency vulnerability scanning
| Data Type | Location | Purpose | Retention |
|---|---|---|---|
| Configuration | Local JSON file | User preferences | Until manual deletion |
| Activity Logs | Local text file | Debugging, statistics | Until manual deletion |
| Extension Settings | Chrome Local Storage | User preferences | Until extension uninstall |
| Video Frames | RAM only (never saved) | Real-time processing | Immediate disposal |
Desktop App:
- Camera access (for eye detection)
- Keyboard event simulation (for media control)
Chrome Extension:
- Camera access (for gaze detection)
- YouTube page access (for video control)
- Local storage (for settings persistence)
Web App:
- Camera access (optional, for demo only)
- No special permissions required for documentation
- OpenCV: Computer vision library powering desktop detection
- dlib: Robust face and eye landmark detection
- MediaPipe: Google's ML solution for browser-based face detection
- React Ecosystem: Vite, TailwindCSS, shadcn/ui for web app
- Python Community: PyAutoGUI, Tkinter, and countless tutorials
Karan Gupta
- GitHub: @yourusername
- Email: your.email@example.com
- Project Link: https://github.com/yourusername/eyeremote
MIT License
Copyright (c) 2025 Karan Gupta
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- Choose your platform (Desktop App, Chrome Extension, or both)
- Follow installation instructions for your chosen platform
- Configure timeout settings based on your preferences
- Test with a sample video to verify detection works
- Adjust settings for optimal experience
- Read privacy policy and understand offline processing
- Install Python 3.8+
- Run installer script
- Launch
eyeremote.py - Select target application (VLC, browser, etc.)
- Configure timeout and max faces
- Enable detection and test with media
- Download MediaPipe assets
- Load unpacked extension in Chrome
- Grant camera permissions
- Navigate to YouTube video
- Enable detection in popup
- Adjust timeout as needed
- Visit deployed site or run locally
- Read documentation and guides
- Explore gaze detection demo (optional)
- Download desktop app or extension
- Share feedback and contribute