Controlling A Cursor With Your Eyes Actually Works Now
The Mouse on the Moon is a free, open-source macOS app that turns your laptop's webcam into an eye-tracking input device. You look at something on screen, hold your gaze for a fraction of a second, and it clicks. No external hardware. No mount. Just the built-in FaceTime camera and a Python backend running local inference. I've spent weeks living with it as a daily driver when my wrist flared up badly enough that a standard mouse became painful. Here is the rundown of what it does, where it trips up, and what I learned after the initial novelty wore off.
The Mouse On The Moon
The project lives on GitHub under the maintainer "lukas-blecher." The latest release is a compiled macOS app you download directly, so you are not expected to compile anything yourself unless you want to dig into the code. The repository contains the training pipeline and the Python backend, but the end-user experience is just the app. The core mechanism relies on gaze estimation. The model detects your face, localizes the pupils and iris boundaries, and maps the gaze vector onto the screen coordinate space. A dwell-click system replaces the physical click: stare at a button long enough, and it registers as a click. The default dwell time sits around 400 milliseconds, adjustable in the settings. There is also a scroll mode where moving your eyes rapidly across the screen triggers vertical or horizontal scrolling depending on your gaze trajectory. I ran into a specific issue that almost made me abandon the whole thing. My apartment has large east-facing windows, and in the morning the direct sunlight hitting my face caused the pupil detection to completely fail. The model treated the blown-out highlights as the iris boundary, which sent the cursor jumping to random corners of the screen. It was unusable between roughly 9 AM and 11 AM without intervention.
The workaround was simple but not obvious from the readme. I positioned a dark fabric backdrop behind me so the camera only captured my face against a neutral background, and I closed the curtains. The contrast improvement alone stabilized the tracking. If you are dealing with this yourself, a plain black t-shirt hung on a chair behind you works just as well as a proper backdrop. Do not try to fix this with software settings. The model needs good input. Another edge case worth noting: the app does not play nicely with external monitors at different resolutions. When I connected my MacBook to a 4K display, the gaze-to-screen mapping became misaligned. The camera reports coordinates in the native resolution of the built-in display, and there is no automatic scaling factor for an extended desktop setup. I worked around it by disabling the external monitor in System Settings and using a window management tool to snap apps onto the laptop screen only. It is a real limitation if you depend on a multi-monitor workflow.
Get the Full Details

Installation And Setup
Download the latest release from the official GitHub repository. The .dmg file contains the app bundle. Drag it into Applications, then open it. You will be prompted to grant camera access and accessibility permissions. The accessibility permission is required so the app can simulate mouse events on your behalf. Without it, the cursor moves but clicks do not register. This is a macOS security restriction, not an app bug. First launch takes about thirty seconds of calibration. The app asks you to look at a series of crosshairs positioned around the screen while it builds a personal gaze model for your eyes. This step matters more than most people realize. Skipping it or rushing through it leads to persistent drift. The calibration should take roughly two minutes if you are paying attention. Do not look away from the crosshairs while they are on screen. Once calibration completes, you are in the main interface. There are three toggleable modes: gaze-click, scroll, and a custom hotkey mode that lets you remap certain eye movements to keyboard commands. The default configuration works for basic navigation. Power users should spend time in the settings panel adjusting dwell time, sensitivity, and smoothing parameters. The defaults are conservative, which means the cursor feels sluggish at first. Dialing the sensitivity up by about thirty percent and reducing the dwell time to 300 milliseconds made the experience feel responsive without increasing accidental clicks significantly.
What The Benchmarks Actually Mean
There are published accuracy figures for gaze estimation models in this space, and they look impressive on paper. Under controlled laboratory lighting with a fixed head position, dwell-time classification error rates sit somewhere in the low single-digit percentage range. Real-world conditions are worse. I measured my own effective accuracy over a week of daily use at roughly 88 to 92 percent depending on lighting and head movement. That number drops further when multitasking between the eye tracker and a physical keyboard because the app does not automatically suppress gaze input when it detects keystrokes. You have to manage that suppression manually or accept the occasional double-input glitch. The scroll function is the weakest link. It works by detecting rapid saccadic eye movements and interpreting direction based on the velocity vector. In practice this means scrolling behaves inconsistently. I found it reliable for page-by-page navigation in a browser but unreliable for precise tasks like adjusting a scrollbar to an exact pixel position. For that, I reverted to a trackpad. The app lets you run both simultaneously, which is the intended design.
Performance And Hardware Notes
The app runs on CPU alone. It does not require an Apple Silicon GPU acceleration path, though performance is noticeably better on M-series chips. On an Intel MacBook Pro from 2019, I saw CPU usage hover around 45 percent with the camera feed at 30 fps. On an M2 MacBook Air, the same workload sat at about 12 percent. The frame rate automatically scales down when the system is under load, which prevents the cursor from stuttering during heavy operations but introduces a slight latency feel. Expect roughly 50 to 80 milliseconds of input delay under normal conditions. That is acceptable for browsing and document editing. It is not acceptable for anything requiring precision aiming. One thing the app does not handle well is glasses with heavy anti-reflective coating. The camera struggles to distinguish the pupil from the glare pattern on the lens surface. I tested this myself with two different pairs of glasses. One pair caused frequent track loss. The other was fine. There is no software fix for this. If you wear glasses and tracking is unstable, try removing them or switching to a pair with less reflective treatment.

When This Tool Fails Completely
Eye-tracking via webcam simply does not work for everyone. People with certain eye conditions, significant nystagmus, or limited eye mobility will find the accuracy too low for practical use. The model is trained on a broad population dataset, but it has not been validated against clinical populations. If you are considering this for accessibility purposes beyond temporary wrist relief, you should test it thoroughly before relying on it. A dedicated hardware eye tracker like a Tobii or Pupil Labs setup remains the only reliable option for serious assistive technology use cases. The Mouse on the Moon is a compelling proof of concept, not a replacement for clinical-grade equipment. The app also does not support Linux or Windows. It is macOS-only, and there are no announced plans for cross-platform support. If you are on another operating system, you are out of luck unless you want to attempt a port, which requires significant familiarity with the underlying PyTorch pipeline and OpenCV preprocessing steps.
My Recommendation
Use it if you need temporary relief from repetitive strain, work primarily on a single built-in display, and have reasonable control over your lighting environment. The setup takes about five minutes once you have the app installed. Daily operation is mostly unattended after the initial calibration. Factor in fifteen to twenty minutes per week for recalibration, since your eye positioning shifts slightly day to day. Do not use it if you rely on a multi-monitor setup, work in variable lighting, or need precision input for design or development work. The limitations are real and they compound quickly in those scenarios. For those cases, stick with a standard input device or invest in dedicated hardware if accessibility is the goal.