Control your mouse with hand gestures through a webcam. Everything runs on your
own machine — no account, and no network access after the first run.
Downloads
Pick the installer for your system, or the portable build if you would rather
not install anything.
| System | Installer | Portable |
|---|---|---|
| Windows 10/11 (x86_64) | MotionKey-*-windows-x86_64-setup.exe |
MotionKey-*-windows-x86_64.zip |
| macOS (Apple silicon) | MotionKey-*-macos-arm64.dmg |
MotionKey-*-macos-arm64.tar.gz |
| Debian, Ubuntu, Mint | motionkey_*_amd64.deb |
MotionKey-*-linux-x86_64.tar.gz |
| Any other Linux | MotionKey-*-linux-x86_64.AppImage |
same file — it needs no install |
Python is bundled, so there is nothing to set up. The hand landmark model
(~8 MB) downloads on first launch and is cached afterwards.
There is no Intel Mac build: MediaPipe has published arm64-only macOS wheels
since 0.10.22, so there is no hand tracker to package. Intel Macs can still run
MotionKey from source against an older MediaPipe.
Verify a download against SHA256SUMS, and check an install at any time with
MotionKey --selftest, which loads every component and runs one inference.
Setup
Windows — run the setup and MotionKey lands in your Start menu. SmartScreen
will say the publisher is unknown, because these builds are not code signed;
choose More info → Run anyway, or check the SHA256 first. For the
command-line options use motionkey-cli.exe, since the windowed build has no
console to print to. The portable zip works the same way, minus the Start menu
entry.
macOS — open the .dmg and drag MotionKey to Applications. The build is
not notarised, so Gatekeeper refuses it on first launch: right-click the app
and choose Open, or clear the quarantine flag:
xattr -dr com.apple.quarantine /Applications/MotionKey.appmacOS will then ask for Camera access, and for Accessibility permission under
System Settings → Privacy & Security → Accessibility so the app can move
the pointer.
Debian, Ubuntu, Mint — sudo apt install ./motionkey_*_amd64.deb. This
installs the udev rule that grants access to /dev/uinput, which takes effect
at your next login, and adds MotionKey to your application menu.
Any other Linux — chmod +x MotionKey-*.AppImage and run it. If the app
reports the uinput backend as unavailable, grant access once:
echo 'KERNEL=="uinput", MODE="0660", GROUP="input", TAG+="uaccess"' \
| sudo tee /etc/udev/rules.d/60-motionkey-uinput.rules
sudo udevadm control --reload && sudo udevadm triggeruinput is how MotionKey moves the pointer, and the only method that works under
Wayland.
Gestures
| Pose | Action |
|---|---|
| Hand held up | Cursor follows your hand |
| Tap thumb + index | Left click |
| Pinch thumb + index and hold | Click and drag |
| Tap thumb + middle | Right click |
| Tap thumb + ring | Middle click |
| Raise index + middle, move hand | Scroll |
| Make a fist | Freeze the cursor |
| Hold that fist ~1.5 s | Pause / resume tracking |
Every gesture can be switched off, and pinch sensitivity, click/drag threshold
and scroll speed are all adjustable in the app.
If a gesture does not trigger reliably, run MotionKey --diagnose. It measures
your own hand against the thresholds and prints what it sees, which beats
guessing at the sliders.