Skip to main content

Generate and quantify human-fidelity pointer movement — your mouse's signature, captured locally.

Project description

Silphe

Your mouse has a signature as personal as your handwriting. Silphe learns it — and shows you how it moves, holds, hunts, and drifts over time.

Silphe (σίλφη — Ancient Greek for the small creature that runs in the dark) is a tiny, fully local instrument for your own visuomotor signature: how you, specifically, move a pointer. Not whether you hit the target — how you miss it on the way there: the overshoot, the correction, the tremor, the chase.

It has two halves:

  • a library that generates human-fidelity pointer movement and quantifies the movement you record, and
  • a game that captures your movement while you play.

It began as a mouse-calibration chore and turned into something more interesting.

Why it's interesting

  • Everyone clones voices; nobody clones movement. Your pointer path is as individual as a fingerprint — and far less guarded.
  • Predictive vs. reactive. Track a smooth target and you ride it with ~zero lag. Chase an evasive one and you're ~200 ms behind — pure human reaction time. Silphe measures both, separately.
  • It drifts. Reaction, accuracy, tremor, tracking — they shift with the time of day, fatigue, a new medication, and the years. Silphe plots the arc.
  • Your data never leaves your machine. Local capture, local model, local analysis. No cloud, no telemetry. Your silly walk is nobody's business but yours.

Install

pip install silphe

Pure standard library — no third-party runtime dependencies. Generating and analyzing movement works on any OS; driving the real OS cursor (silphe.cursor) is Windows-only.

Use the library

Generate a human-fidelity path — overshoot, corrections, tremor, dwell — on any platform:

import random
from silphe import MovementModel

model = MovementModel(rng=random.Random(0))     # seed for reproducibility
path = model.plan(0, 0, 400, 250)               # -> [(x, y, dt), ...]

Drive the real cursor with a trusted OS click (Windows):

from silphe import HumanCursor
HumanCursor().click(960, 540)

Quantify a recorded session into an aggregate signature:

from silphe import load_recordings, session_signature

trials, _ = load_recordings()                   # ~/.silphe/recordings by default
sig = session_signature(trials)
print(sig["acquire"]["fitts"], sig["hold"]["tremor_hz"], sig["track"]["lag_ms"])

See the session schema.

Play (calibration in a clown costume)

A green-garden field with four tasks:

  • Acquire — hit the small gold target (Fitts's law: distance × size)
  • Track — follow a slowly drifting dot (smooth pursuit)
  • Hold — keep dead still on a single red pixel (tremor)
  • Andvari — hunt the roach through the maze: it runs the dark, hides under silver cells, and you switch tools (swatter → pick, press T) to flush it out and finish it
silphe-play            # play (mouse)
silphe-play trackpad   # tag the session as a trackpad

Then see yourself:

silphe-analyze   # this session's aggregate signature
silphe-lag       # are you late? temporal lag vs spatial offset vs noise
silphe-arc       # the longitudinal dashboard — your fingerprint over time
silphe-demo      # human vs robot cursor, side by side (Windows)

From a source checkout, the same modules run via python -m silphe.calibrate, python -m silphe.analyze, and so on.

The science, briefly

Fitts's law, corrective sub-movements, physiological tremor (4–12 Hz), smooth-pursuit lag, and the difference between getting faster and merely learning the board. See the science.

Privacy

Local-first, always — your movement never leaves your computer. See the privacy note.

License

Apache-2.0 — permissive, with a patent grant. Use it, fork it, build on it.

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

silphe-0.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.

silphe-0.1.0-py3-none-any.whl (33.0 kB view details)

Uploaded Python 3

File details

Details for the file silphe-0.1.0.tar.gz.

File metadata

  • Download URL: silphe-0.1.0.tar.gz
  • Upload date:
  • Size: 29.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for silphe-0.1.0.tar.gz
Algorithm Hash digest
SHA256 75f08ef0f65d4bf9671ba69ceb41d041ef7c955eca26d52aed5ba144891c82f6
MD5 41758d2d9db4708e06363aa8822f773a
BLAKE2b-256 3cf2a87797cc93b4a0a1ae66366cabe3e63036fb4baff1cd7d5e2116b9f35d3a

See more details on using hashes here.

File details

Details for the file silphe-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: silphe-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 33.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for silphe-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a00e3078765f8befc5bdb7d9f5c561f8cdbd5234f1b0ae9816c6fab13706964a
MD5 2a84c08f3717ef37bf3a5512271b50b4
BLAKE2b-256 091c2e10da5dd70ba387bf249b76618e4e9a14ff27bab21ac85cf05ad1553259

See more details on using hashes here.

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