motion-cues
Animated peripheral dots that reduce motion/transport sickness while using a laptop in a vehicle — a Linux port of Apple's Vehicle Motion Cues (iOS 18 / macOS 15).
The overlay is fully click-through and focus-free: you see the dots at the screen edges and can keep working normally underneath.
How it works
Motion sickness occurs when the vestibular system (inner ear) detects vehicle motion but the eyes, focused on a static screen, do not. The dots appear in the peripheral visual field (~80 px from each edge) and drift to match vehicle motion, providing the optic-flow signal the peripheral visual system expects and collapsing the sensory conflict.
Dot direction mirrors Apple's convention:
| Vehicle motion | Dot direction |
|---|---|
| Accelerate | drift down |
| Brake | drift up |
| Turn left | drift right |
| Turn right | drift left |
Installation
pip install motion-cues
Requires Python ≥ 3.9, Linux + X11, and PyQt6 (pulled in automatically). Does not require a compositor.
Usage
motion-cues
Or run directly:
python -m motion_cues
A blue dot appears in the system tray. Right-click it to inject simulated motion impulses (useful when stationary) or to quit. Press Ctrl-C in the terminal to quit as well.
Requirements
- Linux with X11 (Wayland support is not yet implemented)
libX11andlibXextsystem libraries (present on any X11 system)- PyQt6 ≥ 6.0 (or PyQt5 ≥ 5.15 as fallback)
Technical notes
The overlay window uses X11 ShapeBounding (setMask) to cut the window to only the dot pixels, so there is no opaque background anywhere — no compositor required. Mouse events are discarded via X11 ShapeInput (empty region), so clicks always fall through to the desktop.
License
MIT
Metadata
Release files for motion-cues 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| motion_cues-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Release files / motion_cues-0.2.0-py3-none-any.whl
| Download URL | motion_cues-0.2.0-py3-none-any.whl |
|---|---|
| Size | 6.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b6e2163ddf563fadec90661ba1904475a10e1abcf3c20586177fde273633507c
|
|
BLAKE2b-256 checksum How to use checksums |
07085c62132ec95f77b3c35b4b4169b3cc78d61bbcce1b90c67f088b31240015
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 4, 2026.
Transparency log