Skip to main content

WindMouse

codecov PyPI - Version License: GPLv3 Documentation Status security: bandit

WindMouse is a Python library that generates human-like mouse movements to avoid bot detection in automation scripts. It implements the WindMouse algorithm, which creates realistic, non-linear trajectories with variable speed—mimicking natural human mouse behavior.

Why WindMouse?

Traditional automation tools move the mouse in straight lines at constant speeds, making them easy to detect. WindMouse solves this by:

  • ✨ Generating curved, natural-looking paths instead of straight lines
  • ⚡ Varying movement speed dynamically throughout the trajectory
  • 🎯 Supporting multiple backends: AutoHotkey (Windows) and PyAutoGUI (cross-platform)
  • 🧩 Offering fine-grained control over movement physics (gravity, wind, damping)

Perfect for web scraping, game automation, UI testing, or any scenario where you need to simulate realistic human interaction.


Demo

Demo Animation

Demonstration of the WindMouse algorithm in action.


Installation

Standard Installation

pip install windmouse

Modern Alternative (using uv)

uv add windmouse

Optional Dependencies

WindMouse supports multiple backends. Choose the one that fits your needs:

For PyAutoGUI (cross-platform):

pip install windmouse[pyautogui]
# or with uv:
uv add "windmouse[pyautogui]"

For AutoHotkey (Windows only):

pip install windmouse[ahk]
# or with uv:
uv add "windmouse[ahk]"

Install all backends:

pip install windmouse[all]
# or with uv:
uv add "windmouse[all]"

Note for Windows + AHK users: You must have AutoHotkey installed on your system to use the ahk backend.


Quick Start

Using PyAutoGUI (Cross-Platform)

from windmouse.pyautogui_controller import PyautoguiMouseController
from windmouse import Coordinate

# Initialize the controller
mouse = PyautoguiMouseController()

# Set destination coordinates
mouse.dest_position = (Coordinate(800), Coordinate(600))

# Move the mouse using WindMouse algorithm
mouse.move_to_target(
    tick_delay=0.005,      # Small delay between steps
    step_duration=0.1      # Duration of each movement step
)

Using AutoHotkey (Windows Only)

from ahk import AHK
from windmouse.ahk_controller import AHKMouseController
from windmouse import Coordinate

# Initialize AHK and controller
ahk = AHK()
mouse = AHKMouseController(ahk)

# Set destination coordinates
mouse.dest_position = (Coordinate(800), Coordinate(600))

# Move the mouse using WindMouse algorithm
mouse.move_to_target(
    tick_delay=0.005,
    step_duration=0.1
)

Advanced: Fine-Tuning the Algorithm

You can customize the physics of the mouse movement:

from windmouse.pyautogui_controller import PyautoguiMouseController
from windmouse import Coordinate

mouse = PyautoguiMouseController(
    gravity_magnitude=9,    # Strength of attraction to target (default: 9)
    wind_magnitude=3,       # Randomness/curvature of path (default: 3)
    max_step=15,            # Maximum speed (default: 15)
    damped_distance=12      # Distance where movement starts to slow (default: 12)
)

mouse.dest_position = (Coordinate(1000), Coordinate(500))
mouse.move_to_target()

Drag and Drop

Hold a mouse button while moving (useful for drag-and-drop operations):

from windmouse import HoldMouseButton

mouse.dest_position = (Coordinate(500), Coordinate(300))
mouse.move_to_target(hold_button=HoldMouseButton.LEFT)

Documentation

📖 Read the Full Documentation on ReadTheDocs

The documentation includes:

  • Detailed algorithm explanation and mathematical background
  • API reference for all classes and methods
  • Advanced usage examples and best practices
  • Performance tuning guide

Contributing

Contributions are welcome! Whether it's bug reports, feature requests, or pull requests—your input helps make WindMouse better.

To contribute:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'feat: Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Please ensure your code follows the project's style guidelines and includes appropriate tests.


License

This project is licensed under the GNU General Public License v3.0 (GPLv3).

Portions of this software are derived from the WindMouse reference implementation by Ben Land and have been refactored and modified.

Original work: https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/

See the LICENSE file for details.


Acknowledgments

The WindMouse algorithm is inspired by research on human-computer interaction and originally designed to prevent bot detection in automation scenarios. This implementation brings that algorithm to the Python ecosystem with a clean, extensible API.

Metadata

Release files for windmouse 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for windmouse 1.0.2
File Size Uploaded
windmouse-1.0.2.tar.gz 26.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for windmouse 1.0.2
File Interpreter ABI Platform
windmouse-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 47.3 kB

Release files / windmouse-1.0.2.tar.gz

Download URL windmouse-1.0.2.tar.gz
Size 26.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7877f9e8bf0a4511d996e0bd7a80e7a1f66fed1ec9b3487c0caf837e2df8d92c
BLAKE2b-256 checksum
How to use checksums
3fc23ae355a81d97e97b9fc0ec9b215fc6ace498353077341cba239040ef7a46
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 Jan 18, 2026.

Transparency log

Release files / windmouse-1.0.2-py3-none-any.whl

Download URL windmouse-1.0.2-py3-none-any.whl
Size 20.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c0d7dd4734f7a474b9a8bfa4595b38bd7028d4c02c71bdb74be1a4cec15ad5ff
BLAKE2b-256 checksum
How to use checksums
b1025036b53673d14752385e1ab71d5d00f71a3f8edb98711303acd9a75ecd28
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 Jan 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

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