Human-like mouse movement simulation using recorded patterns
Project description
HumanMouse 🖱️
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 coordinatesmove_along_path(points, pause_range=(0.3, 0.8), callback=None)- Move through multiple pointsgenerate_path(start_x, start_y, target_x, target_y)- Generate path without movingget_current_position()- Get current mouse positionset_position(x, y)- Set mouse position instantlyget_available_directions(distance)- Get available movement directionsget_available_distances()- Get all distance bucketsget_stats()- Get movement data statistics
Utility Functions
create_mover(**kwargs)- Convenience function to create a SmartMousegenerate_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.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40bc8f72f532b7ea9e25caefd52d89cc3ff9c4bdc161ce65fae0b1897ab9cdd5
|
|
| MD5 |
2973192c2fddc83c71faab34a0a66d33
|
|
| BLAKE2b-256 |
b187d14ff4d0ba7ff1bf0cc8e15cc4c76d5288f3a5477853ee7c45b5dd3d66bb
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
825d8073073ea99676143c88a51c3dc7617c402390857d7b67680e778c05b5b7
|
|
| MD5 |
46fde6c64be980f05c17d2a2141c3b72
|
|
| BLAKE2b-256 |
2bd4e21e1ba95b4a2bc11f395bdc1c78df171df103c4d187df72fc1fb0b028db
|