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!
# Chrome height is auto-detected via JavaScript
button = await page.select("button.submit")
await human.click_nodriver_element(button, page)
# For maximum reliability in complex scenarios, use CDP click
await human.click_nodriver_element(button, page, use_cdp_click=True)
# Fill input fields (uses triple-click for targeted selection)
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.
Metadata
Release files for nothingtoseehere 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nothingtoseehere-1.2.0.tar.gz | 31.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nothingtoseehere-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 58.6 kB
Release files / nothingtoseehere-1.2.0.tar.gz
| Download URL | nothingtoseehere-1.2.0.tar.gz |
|---|---|
| Size | 31.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f575ce04546e98a4c5109fc61837907345e4b2ae81e1ead05b23c406a256c8d5
|
|
BLAKE2b-256 checksum How to use checksums |
845664f180b11923d89e2c95a90f9b42ee301b22232361a8cf0ec2a1ff66ed46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 21, 2026.
Transparency logRelease files / nothingtoseehere-1.2.0-py3-none-any.whl
| Download URL | nothingtoseehere-1.2.0-py3-none-any.whl |
|---|---|
| Size | 27.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a3fea07ac80a4195daeb7252e307546ec80bfd5c2d032d3f0d1f9bfcc81b904d
|
|
BLAKE2b-256 checksum How to use checksums |
bc8215764448edb0de219253022c335b57c471d70a7d56d9c68d1dd7f18e294b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 21, 2026.
Transparency log