Vehicle Motion Cues for Windows — transparent overlay with animated reference dots to reduce motion sickness in vehicles. Built by KeepSimple.io
Vehicle Motion Cues for Windows | Built by KeepSimple.io
MotionEase draws subtle, animated reference dots around your screen edges to help reduce motion sickness when using a laptop in a moving vehicle. Inspired by Apple’s Vehicle Motion Cues, reimagined as a lightweight, portable Windows desktop app.
Motion sickness occurs when your eyes and inner ear disagree about movement. MotionEase places peripheral visual anchors around your screen that sway at 0.2 Hz – the exact frequency band where motion sickness peaks (Diels & Howarth, 2013). These dots give your visual system a stable reference frame, reducing the sensory conflict without interrupting your work.
The overlay is fully transparent and click-through – you work normally while the dots do their job in your peripheral vision.
MotionEase.exe – single portable file, no installation required.
Double-click and go. No Python, no dependencies, no setup.
| Requirement | Details |
|---|---|
| OS | Windows 10 (1809+) / Windows 11 |
| Architecture | x86-64 |
| Display | Single monitor (primary) |
| Permissions | No admin rights required |
| Size | ~16 MB |
| Mode | Key | Description |
|---|---|---|
| Drift (default) | Ctrl+Alt+3 |
Dots sway automatically at scientifically-relevant frequencies, simulating vehicle motion cues |
| Static | Ctrl+Alt+1 |
Dots stay fixed with a gentle breathing animation – simple peripheral anchors |
| Keyboard | Ctrl+Alt+2 |
Arrow keys manually control dot movement – useful for testing or fine-tuning |
| Sensor | Ctrl+Alt+4 |
Real motion from a USB IMU drives the dots — optional, requires a ~$27 IMU sensor — see Sensor Mode below |
| Shortcut | Action |
|---|---|
Ctrl+Alt+1 / Ctrl+Alt+2 / Ctrl+Alt+3 / Ctrl+Alt+4 |
Switch mode (static / keyboard / drift / sensor) |
Ctrl+Alt+4 (in sensor mode) |
Recalibrate gravity reference |
Ctrl+~ |
Toggle dot color (light / dark) |
Ctrl+H |
Hide / show dots |
Ctrl+Up/Down |
Increase / decrease dot size |
Ctrl+Left/Right |
Increase / decrease motion sensitivity |
Arrow keys |
Simulate motion (keyboard mode only) |
Ctrl+Esc |
Quit |
You can also right-click the system tray icon for Instructions or Quit.
If you prefer to run from source or want to modify the code:
# Install dependencies
pip install pygame-ce pywin32
# Optional: only needed for Sensor mode (Ctrl+Alt+4)
pip install pyserial
# Run
python motionease.py
Requires Python 3.10+.
To run the unit tests for the sensor parser (no hardware required):
python -m unittest test_sensor_reader.py -v
pip install pyinstaller pyserial
pyinstaller --onefile --noconsole --name MotionEase ^
--hidden-import=serial --hidden-import=serial.tools.list_ports ^
motionease.py
Output: dist/MotionEase.exe
(--hidden-import flags are needed because pyserial is loaded lazily inside
sensor_reader.start(). Omit them only if you want a build that intentionally
disables sensor mode.)
MotionEase is grounded in motion sickness research:
Sensor mode (Ctrl+Alt+4) drives the dots from real vehicle motion using a USB IMU — the same kind of acceleration/turn-rate data Apple’s iOS implementation uses.
Optional — MotionEase works great without any hardware (drift mode). Sensor mode adds real-time vehicle tracking for a more precise experience.
Currently supported: UeeKKoo RP2350 Development Board (~$27 on Amazon) — a compact IMU (Inertial Measurement Unit) combining an accelerometer and gyroscope on a single board. The factory firmware streams 6-axis IMU data over USB CDC at ~5 Hz; no flashing required. Just plug it in with a USB-C data cable (charge-only cables won’t work).
Ctrl+Alt+4. MotionEase auto-detects the device by USB VID/PID (2E8A:0009), opens the COM port, and asserts DTR — the firmware only streams once a real terminal is listening.motionease_sensor_calibration.json next to the exe.Ctrl+Alt+4 again. Fresh calibration overwrites the saved file.Sensor mode shares the global sensitivity slider — Ctrl+Left / Ctrl+Right adjusts in 0.2 steps from 0.2 to 3.0 (default 1.0). At the default, ~0.2 g of sustained acceleration saturates the dot displacement; gentle road motion produces visible response, hard turns/brakes hit the cue clamp. The current sensitivity is logged to console on every entry into sensor mode.
Ctrl+Alt+4 shows a tray balloon with the cause and stays in your previous mode. Modes 1/2/3 keep working exactly as before — sensor support is purely additive.motionease_error.log.sensor_reader.py is self-contained. To support a different IMU board, change DEVICE_VID/DEVICE_PID and adjust the regexes in _RE_ACC / _RE_GYRO to match its serial output format. The unit tests in test_sensor_reader.py cover the parser and orientation math without hardware.
MIT License. See LICENSE.
Built with care by the KeepSimple.io team.