2 releases

0.1.1 Sep 4, 2024
0.1.0 Sep 4, 2024

#496 in Algorithms

Download history 193/week @ 2024-08-31 28/week @ 2024-09-07 31/week @ 2024-09-14 15/week @ 2024-09-21 21/week @ 2024-09-28

114 downloads per month

MIT license

14KB
149 lines

WindMouse

WindMouse is a Rust implementation of the WindMouse algorithm, designed to generate realistic mouse movement paths. This library simulates mouse movements with consideration for gravity, wind, and randomness to create more human-like cursor trajectories.

See https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/ for more details on the original algorithm

Features

  • Generate realistic mouse movement paths between two points
  • Customizable parameters for fine-tuning movement behavior
  • Easy-to-use API with sensible defaults

Installation

Add this to your Cargo.toml:

[dependencies]
windmouse = "0.1.0"

Usage

use windmouse::{WindMouse, Coordinate};

fn main() {
    let wind_mouse = WindMouse::new_default();
    let start = Coordinate::new(0.0, 0.0);
    let end = Coordinate::new(100.0, 100.0);
    let points = wind_mouse.generate_points(start, end);

    for point in points {
        println!("x: {}, y: {}, wait: {}ms", point[0], point[1], point[2]);
    }
}

API

WindMouse

The main struct that holds the parameters for the mouse movement algorithm.

Methods

  • new(mouse_speed: f32, gravity: f32, wind: f32, min_wait: f32, max_wait: f32, max_step: f32, target_area: f32) -> Result<Self, WindMouseError>

    Creates a new WindMouse instance with the specified parameters.

  • new_default() -> Self

    Creates a new WindMouse instance with default values for all parameters.

  • generate_points(&self, start: Coordinate, end: Coordinate) -> Vec<[i32; 3]>

    Generates a series of points representing the mouse movement path from the start coordinate to the end coordinate.

Coordinate

A struct representing a 2D coordinate with floating-point precision.

Methods

  • new(x: f32, y: f32) -> Self

    Creates a new Coordinate instance.

  • as_i32(&self) -> [i32; 2]

    Converts the floating-point coordinate to integer values.

Configuration

You can customize the behavior of the WindMouse algorithm by adjusting the following parameters:

  • gravity: Influences how strongly the mouse is pulled towards the target.
  • wind: Determines the amount of randomness in the mouse's path.
  • min_wait: The minimum time (in milliseconds) to wait between mouse movements.
  • max_wait: The maximum time (in milliseconds) to wait between mouse movements.
  • max_step: The maximum distance the mouse can move in a single step.
  • target_area: The distance from the end point at which the algorithm starts to slow down and become more precise.
  • mouse_speed: A general speed factor for the mouse movement.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Dependencies

~1.2–1.8MB
~32K SLoC