Skip to main content

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)
  • libX11 and libXext system 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)

Table of built distributions (wheels) for motion-cues 0.2.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.2.0 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page