Human-like mouse and keyboard input simulation based on neuromotor research. Nothing to see here. 🐭
Project description
nothingtoseehere
A python package that is certainly only for human mouse movement and keyboard input. 🐭
Built on neurophysiology research (Fitts' Law, minimum jerk trajectories, signal-dependent noise) to produce mouse movements and keyboard input that pass behavioral biometric detection.
Key Statistics (see RESEARCH.md for full details):
| Human Trait | Our Implementation |
|---|---|
| Throughput < 12 bits/s | ✓ Enforced |
| Peak velocity at 38-45% | ✓ 42% default |
| Straightness 0.80-0.95 | ✓ ~0.91 |
| 8-12 Hz tremor | ✓ 10 Hz |
| Log-normal clicks ~100ms | ✓ |
Installation
pip install nothingtoseehere
For browser automation with nodriver:
pip install nothingtoseehere[browser]
Quick Start
import asyncio
from nothingtoseehere import NeuromotorInput
async def main():
human = NeuromotorInput()
# Move mouse with human-like kinematics and click
await human.mouse.move_to(500, 300, target_width=100, click=True)
# Type with realistic timing
await human.keyboard.type_text("Hello, world!")
asyncio.run(main())
API Overview
Mouse Methods
await human.mouse.move_to(x, y, target_width=50, click=True)
await human.mouse.hover(x, y) # Move without clicking
await human.mouse.click() # Click at current position
await human.mouse.double_click(x, y) # Double-click
await human.mouse.right_click(x, y) # Right-click
await human.mouse.triple_click(x, y) # Select paragraph
await human.mouse.drag_to(x, y) # Drag and drop
await human.mouse.scroll(-5) # Scroll down
await human.mouse.move_relative(dx, dy) # Move by offset
Keyboard Methods
await human.keyboard.type_text("Hello!", with_typos=True)
await human.keyboard.press_key("enter")
await human.keyboard.hotkey("ctrl", "c") # Or "command" on macOS
nodriver Integration
import nodriver as uc
from nothingtoseehere import NeuromotorInput
async def main():
human = NeuromotorInput()
browser = await uc.start()
page = await browser.get("https://example.com")
# Click elements directly - no manual coordinate conversion!
button = await page.select("button.submit")
await human.click_nodriver_element(button, page)
# Fill input fields
search = await page.select("input[name='q']")
await human.fill_nodriver_input(search, page, "search query")
Demos
Try the interactive demos:
# Simple mouse movement demo (no browser needed)
python examples/mouse_demo.py
# Browser automation demo with Wikipedia
python examples/wikipedia_demo.py
Documentation
See nothingtoseehere/README.md for detailed documentation on the neuromotor models and configuration options.
Future Improvements
The following features are planned for future releases:
Persona Presets
Pre-configured profiles for different user types:
# Coming soon!
human = NeuromotorInput.gamer() # Fast reactions, high precision
human = NeuromotorInput.elderly() # Slower, more careful movements
human = NeuromotorInput.mobile() # Touch-screen patterns
human = NeuromotorInput.novice() # Hesitant, meandering paths
Device Profiles
- Trackpad simulation (different movement patterns)
- Touch screen gestures
- Gaming mouse profiles
Recording & Replay
- Record real human movements for analysis
- Replay recorded patterns with variation
Development
To contribute to this library, first checkout the code. Then create a new virtual environment:
cd nothingtoseehere
python -m venv venv
source venv/bin/activate
Now install the dependencies and test dependencies:
pip install -e ".[dev]"
To run the tests:
python -m pytest
License
Apache 2.0 - See LICENSE for details.
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 nothingtoseehere-1.0.0.tar.gz.
File metadata
- Download URL: nothingtoseehere-1.0.0.tar.gz
- Upload date:
- Size: 28.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33c5fcd3d63a88553804b432f42c2d99e0244f648bcd0dbab7c434794fe0bbb8
|
|
| MD5 |
edd9764732edf61139ec87c097090584
|
|
| BLAKE2b-256 |
212c381faf85d167732ccbf8a33cc4afe30e72e7c50af1d47212f4195bfcf81d
|
Provenance
The following attestation bundles were made for nothingtoseehere-1.0.0.tar.gz:
Publisher:
publish.yml on Super-44/nothingtoseehere
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nothingtoseehere-1.0.0.tar.gz -
Subject digest:
33c5fcd3d63a88553804b432f42c2d99e0244f648bcd0dbab7c434794fe0bbb8 - Sigstore transparency entry: 820375908
- Sigstore integration time:
-
Permalink:
Super-44/nothingtoseehere@5481f57c29424376558818e1c86ef45b067bc61a -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/Super-44
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5481f57c29424376558818e1c86ef45b067bc61a -
Trigger Event:
release
-
Statement type:
File details
Details for the file nothingtoseehere-1.0.0-py3-none-any.whl.
File metadata
- Download URL: nothingtoseehere-1.0.0-py3-none-any.whl
- Upload date:
- Size: 24.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0ed24e296623ed1d6ac7f2efc99fb59d065550281cf5d4675a30521c4054e71
|
|
| MD5 |
dc158f0f79907b930b566d0988983802
|
|
| BLAKE2b-256 |
c44204fe3d9e6aee54f4622eae002f8c11444782121a5c723e3b5a15c5e8d442
|
Provenance
The following attestation bundles were made for nothingtoseehere-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on Super-44/nothingtoseehere
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nothingtoseehere-1.0.0-py3-none-any.whl -
Subject digest:
f0ed24e296623ed1d6ac7f2efc99fb59d065550281cf5d4675a30521c4054e71 - Sigstore transparency entry: 820375924
- Sigstore integration time:
-
Permalink:
Super-44/nothingtoseehere@5481f57c29424376558818e1c86ef45b067bc61a -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/Super-44
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5481f57c29424376558818e1c86ef45b067bc61a -
Trigger Event:
release
-
Statement type: