Generate 100% human-realistic Mouse Trajectories with Timings.
Project description
📐 Cursory
Cursory - Mouse Trajectory Factory. Generate 100% human-realistic Mouse Trajectories with Timings.
Install it from PyPI
pip install cursory
Basic Usage
from cursory import generate_trajectory
trajectory: list[tuple[float, float]]
timings: list[int]
trajectory, timings = generate_trajectory(target_start=..., target_end=...)
Example Trajectories
| Random Points | Same Points | Points / Velocity |
|---|---|---|
Methodology
Cursory generates Mouse Trajectories following these steps:
- Find a close matching human Trajectory: Cursory has a database of thousands of Trajectories recorded from real humans. It finds the closest matching Trajectory to the target Points with some amount of randomization.
- Morph the Trajectory: The Trajectory is morphed to fit the target Points exactly, while keeping the overall shape as close to the original as possible.
- Add Noise: The Trajectory is jittered and knotted, to alter positions slightly to avoid fingerprinting by hash-fingerprinting.
- Regenerating with Timings: The Trajectory is regenerated using the Trajectory Frequency, with some noise added to the timings to avoid.
- Re-Add Noise: The Trajectory is jittered and knotted, to alter positions slightly to avoid fingerprinting by hash-fingerprinting.
- Morph the Trajectory: The Trajectory is morphed to fit the target Points exactly, while keeping the overall shape to the original as possible.
[!WARNING]
Theoretically, it is possible to detect/fingerprint Mouse Trajectories generated by Cursory. But this would require an amount of compute power which is unfeasible. A greater risk of detection would be bad Trajectories, which is mitigated by the advanced algorithms used by Cursory.
Copyright and License
(Commercial Usage is allowed, but source, license and copyright has to made available. Cursory does not provide and Liability or Warranty)
Thanks to
Pointergeist (For helping me understand Mouse Trajectories better).
sameelarif (For his awesome work on Scribe)
Margit Antal, Norbert Fejer, Krisztian Buza (For their work on SapiMouse)
MIMIC-LOGICS (For their Mouse-Synthesizer)
Disclaimer
This repository is provided for educational purposes only.
No warranties are provided regarding accuracy, completeness, or suitability for any purpose. Use at your own risk—the authors and maintainers assume no liability for any damages, legal issues, or warranty breaches resulting from use, modification, or distribution of this code.
Any misuse or legal violations are the sole responsibility of the user.
Project details
Release history Release notifications | RSS feed
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 cursory-1.1.0.tar.gz.
File metadata
- Download URL: cursory-1.1.0.tar.gz
- Upload date:
- Size: 665.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac19fe95f977735bc422b41c99d9c6e8919408b022396f9048fda7dc8eaa3133
|
|
| MD5 |
47e7c6080c2ad157316fea7eeb0a440c
|
|
| BLAKE2b-256 |
ee527a1e34cc7cba2fb96957ed1e3814d8328d57e693abfb4049744367c6d37b
|
Provenance
The following attestation bundles were made for cursory-1.1.0.tar.gz:
Publisher:
publish.yml on Vinyzu/cursory
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cursory-1.1.0.tar.gz -
Subject digest:
ac19fe95f977735bc422b41c99d9c6e8919408b022396f9048fda7dc8eaa3133 - Sigstore transparency entry: 1253729618
- Sigstore integration time:
-
Permalink:
Vinyzu/cursory@2b34d0c29fe987d446895f36e66517b08239f3c5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Vinyzu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2b34d0c29fe987d446895f36e66517b08239f3c5 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file cursory-1.1.0-py3-none-any.whl.
File metadata
- Download URL: cursory-1.1.0-py3-none-any.whl
- Upload date:
- Size: 660.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f20cd25920bf11ae147da5484e4971163f9e0630eaeb38e5df619e7f3f15358
|
|
| MD5 |
0d83793ec5cad97e01dbea1f79279b5b
|
|
| BLAKE2b-256 |
9686ec4fbc27b2dcf4abf896a43ca90361870b5921c52d884913b1a4cc8ec4dd
|
Provenance
The following attestation bundles were made for cursory-1.1.0-py3-none-any.whl:
Publisher:
publish.yml on Vinyzu/cursory
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cursory-1.1.0-py3-none-any.whl -
Subject digest:
4f20cd25920bf11ae147da5484e4971163f9e0630eaeb38e5df619e7f3f15358 - Sigstore transparency entry: 1253729727
- Sigstore integration time:
-
Permalink:
Vinyzu/cursory@2b34d0c29fe987d446895f36e66517b08239f3c5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Vinyzu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2b34d0c29fe987d446895f36e66517b08239f3c5 -
Trigger Event:
workflow_dispatch
-
Statement type: