Skip to main content

Human-like mouse movement simulation using recorded patterns

Project description

HumanMouse 🖱️

PyPI version Python versions License: MIT

HumanMouse is a Python package that simulates realistic, human-like mouse movements using recorded movement patterns from real users. Unlike simple linear interpolation or basic curves, HumanMouse uses actual human movement data to create authentic mouse trajectories with realistic timing.

🌟 Features

  • Authentic Human Movement: Uses real recorded mouse movement data
  • Multiple Movement Patterns: Different patterns for various distances and directions
  • Realistic Timing: Includes authentic pause and movement timing
  • Easy Integration: Simple API that works with existing automation tools
  • No External Data Required: Comes with built-in movement patterns
  • Customizable: Support for custom movement data and parameters
  • Cross-Platform: Works on Windows, macOS, and Linux

📦 Installation

Install HumanMouse using pip:

pip install smart-mouse

Or install from source:

git clone https://github.com/Bandit-HaxUnit/humanmouse.git
cd humanmouse
pip install -e .

🚀 Quick Start

Basic Usage

from smart_mouse import SmartMouse

# Create a mover instance (uses built-in movement data)
mover = SmartMouse()

# Move to a specific coordinate
mover.move_to(500, 300)

# Move through multiple points
points = [(100, 100), (300, 200), (500, 400)]
mover.move_along_path(points)

Simple API

from smart_mouse import create_mover

# Even simpler way to create a mover
mover = create_mover()
mover.move_to(800, 600)

Advanced Usage

from smart_mouse import SmartMouse, generate_random_points

# Create mover with custom settings
mover = SmartMouse(
    enable_mouse_control=True,  # Set to False for testing
    distance_thresholds=[10, 20, 50, 100, 200, 500]  # Custom distance categories
)

# Generate random test points
screen_width, screen_height = 1920, 1080
random_points = generate_random_points(5, screen_width, screen_height, padding=100)

# Move through random points with custom pause timing
mover.move_along_path(random_points, pause_range=(0.5, 1.2))

# Get information about available movement patterns
print("Available distances:", mover.get_available_distances())
print("Movement data stats:", mover.get_stats())

Custom Movement Data

# Use your own movement data file
mover = SmartMouse(mouse_data_file="my_custom_movements.json")

# Or provide movement data directly
custom_data = {
    "50": {  # Distance bucket
        "N": [  # Direction (North)
            [
                [0, 1, 1, 0],      # X offsets
                [1, 1, 0, -1],     # Y offsets  
                [8.3, 4.1, 6.2, 12.1]  # Timing (milliseconds)
            ]
        ]
    }
}
mover = SmartMouse(mouse_data=custom_data)

Callbacks and Monitoring

def movement_callback(x, y, step_index):
    print(f"Step {step_index}: Moving to ({x:.1f}, {y:.1f})")

# Move with callback to monitor progress
path = mover.move_to(400, 300, callback=movement_callback)
print(f"Movement completed with {len(path)} steps")

📖 API Reference

SmartMouse

The main class for generating human-like mouse movements.

Constructor

SmartMouse(
    mouse_data_file=None,     # Optional path to movement data file
    mouse_data=None,          # Optional movement data dict
    distance_thresholds=None, # Custom distance buckets
    enable_mouse_control=True # Whether to actually move the mouse
)

Methods

  • move_to(target_x, target_y, start_x=None, start_y=None, callback=None) - Move to coordinates
  • move_along_path(points, pause_range=(0.3, 0.8), callback=None) - Move through multiple points
  • generate_path(start_x, start_y, target_x, target_y) - Generate path without moving
  • get_current_position() - Get current mouse position
  • set_position(x, y) - Set mouse position instantly
  • get_available_directions(distance) - Get available movement directions
  • get_available_distances() - Get all distance buckets
  • get_stats() - Get movement data statistics

Utility Functions

  • create_mover(**kwargs) - Convenience function to create a SmartMouse
  • generate_random_points(num_points, screen_width, screen_height, padding=100) - Generate random coordinates

Movement Data Format

The movement data uses this JSON structure:

{
  "distance_bucket": {
    "direction": [
      [
        [x_offset_1, x_offset_2, ...],     // X coordinate offsets
        [y_offset_1, y_offset_2, ...],     // Y coordinate offsets  
        [time_1, time_2, ...]              // Timing in milliseconds
      ]
    ]
  }
}

Distance buckets are strings representing maximum pixel distances (e.g., "50", "100"). Directions are: "N", "NE", "E", "SE", "S", "SW", "W", "NW".

🔧 Development

Setting Up Development Environment

git clone https://github.com/Bandit-HaxUnit/humanmouse.git
cd humanmouse
pip install -e ".[dev]"

Running Tests

pytest tests/

Code Formatting

black humanmouse/
flake8 humanmouse/

Building and Publishing

# Build the package
python -m build

# Upload to PyPI (requires credentials)
python -m twine upload dist/*

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

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

📄 License

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

⚠️ Disclaimer

This package is intended for legitimate automation, testing, and accessibility purposes. Please ensure you comply with the terms of service of any applications you automate and respect user privacy and consent.

🙏 Acknowledgments

  • Thanks to all the users who contributed their mouse movement data
  • Inspired by the need for more realistic automation in testing and accessibility tools
  • Built with love for the Python automation community

Made with ❤️ by the HumanMouse Team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smart_mouse-1.0.3.tar.gz (59.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

smart_mouse-1.0.3-py3-none-any.whl (53.0 kB view details)

Uploaded Python 3

File details

Details for the file smart_mouse-1.0.3.tar.gz.

File metadata

  • Download URL: smart_mouse-1.0.3.tar.gz
  • Upload date:
  • Size: 59.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for smart_mouse-1.0.3.tar.gz
Algorithm Hash digest
SHA256 40bc8f72f532b7ea9e25caefd52d89cc3ff9c4bdc161ce65fae0b1897ab9cdd5
MD5 2973192c2fddc83c71faab34a0a66d33
BLAKE2b-256 b187d14ff4d0ba7ff1bf0cc8e15cc4c76d5288f3a5477853ee7c45b5dd3d66bb

See more details on using hashes here.

File details

Details for the file smart_mouse-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: smart_mouse-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 53.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for smart_mouse-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 825d8073073ea99676143c88a51c3dc7617c402390857d7b67680e778c05b5b7
MD5 46fde6c64be980f05c17d2a2141c3b72
BLAKE2b-256 2bd4e21e1ba95b4a2bc11f395bdc1c78df171df103c4d187df72fc1fb0b028db

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page