Skip to main content

Human-like mouse and keyboard input simulation based on neuromotor research. Nothing to see here. 🐭

Project description

nothingtoseehere

PyPI Tests Changelog License

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.

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

nothingtoseehere-1.2.0.tar.gz (31.5 kB view details)

Uploaded Source

Built Distribution

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

nothingtoseehere-1.2.0-py3-none-any.whl (27.2 kB view details)

Uploaded Python 3

File details

Details for the file nothingtoseehere-1.2.0.tar.gz.

File metadata

  • Download URL: nothingtoseehere-1.2.0.tar.gz
  • Upload date:
  • Size: 31.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for nothingtoseehere-1.2.0.tar.gz
Algorithm Hash digest
SHA256 f575ce04546e98a4c5109fc61837907345e4b2ae81e1ead05b23c406a256c8d5
MD5 d651860cb7165af15cf486e0c6e187ed
BLAKE2b-256 845664f180b11923d89e2c95a90f9b42ee301b22232361a8cf0ec2a1ff66ed46

See more details on using hashes here.

Provenance

The following attestation bundles were made for nothingtoseehere-1.2.0.tar.gz:

Publisher: publish.yml on Super-44/nothingtoseehere

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nothingtoseehere-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nothingtoseehere-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a3fea07ac80a4195daeb7252e307546ec80bfd5c2d032d3f0d1f9bfcc81b904d
MD5 97db5996f19583e3d20e9d5292409a65
BLAKE2b-256 bc8215764448edb0de219253022c335b57c471d70a7d56d9c68d1dd7f18e294b

See more details on using hashes here.

Provenance

The following attestation bundles were made for nothingtoseehere-1.2.0-py3-none-any.whl:

Publisher: publish.yml on Super-44/nothingtoseehere

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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