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.1.0.tar.gz (29.4 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.1.0-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for nothingtoseehere-1.1.0.tar.gz
Algorithm Hash digest
SHA256 1e71f759a39153592becc0435371738f45d574e8e0f4ee488e4a66526ad53e7f
MD5 91876348062c1f31a2fca06915007373
BLAKE2b-256 d0b920cb60d15e89537140e466ba66e3359e769bb5df9093460079240ec0bfdf

See more details on using hashes here.

Provenance

The following attestation bundles were made for nothingtoseehere-1.1.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.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nothingtoseehere-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b5dfb3e74456e6a5d50bbd3652c38cba5c7096e63d52e6e451f1d6ac9ff4911a
MD5 a701f7d052edc2812d10a5902058a6c3
BLAKE2b-256 2253622b3f67c28ff90ad01744f854414ce64d105acbe7f8be1ac3579c7ddea7

See more details on using hashes here.

Provenance

The following attestation bundles were made for nothingtoseehere-1.1.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