Add your description here
Project description
Clickmate
Clickmate is a Python autoclicker with a macOS-friendly multi-engine click system. It prefers native Quartz CoreGraphics events on macOS (when available) for best compatibility, and falls back to pynput or pyautogui if needed. Randomized delays, adjustable “pressure” (hold time), and a single-line status display are built in.
Features
- Start/Pause with
s - Random delay per click (0.5×–1.5× of the base delay)
- Adjust click speed on the fly with
+(faster) and-(slower) - Adjust click “pressure” (hold duration) with
](increase) and[(decrease) - Toggle click method with
m(cycles:pynput→quartz→pyautogui) - One-off test click with
c - Optional debug logs with
d - Optional tiny jitter movement before each click (
j) to improve acceptance in some apps - Global hotkey to lock/unlock local keys:
Ctrl+Alt+K(works system-wide)
Defaults
- Base delay:
0.50s - Hold time (pressure):
0.10s - Click method:
quartzif Quartz/PyObjC is available; otherwisepynput - Jitter: disabled by default
Installation & CLI usage (uv)
Requires Python >=3.11 and uv installed.
-
One-off run without installation (preferred for quick use):
uvx clickmate --help uvx clickmate --version uvx clickmate
-
Install globally as a persistent tool (adds
autoclickerto yourPATH):uv tool install clickmate # then simply: clickmate
-
Run from a local checkout without publishing:
# ephemeral run from the current workspace # NOTE: `uv tool run` uses a cached, isolated env. Add `--refresh` to # pick up local source changes if you haven't bumped the version. uv tool run --from . --refresh clickmate # or install the local project as a tool uv tool install .
Development workflow (recommended):
-
Set up the project environment and run the packaged script:
uv sync # see flags uv run clickmate --help uv run clickmate --version # run the console script uv run clickmate # or run the module directly uv run -m autoclicker --help
Tip: If uv tool run --from . autoclicker dont reflect your local changes,
it's likely using a previously cached tool environment. Fix it by either:
-
adding
--refresh(recommended for local dev):uv tool run --from . --refresh clickmate --help uv tool run --from . --refresh clickmate --version
-
or bumping the package
versioninpyproject.toml(forces a new cache key) -
or pruning caches:
uv cache clean autoclicker
Usage
-
Run the program (any of the methods above):
-
Move your mouse to the desired click position.
-
Press
sto start; presssagain to pause. -
Use
+/-to change speed; use]/[to change hold time. -
Use
mto switch engines if your app ignores clicks;quartzgenerally works best on macOS. -
Use
Ctrl+Alt+Kanytime to lock/unlock local keys (prevents accidental hotkey presses). This does not start/pause clicking; it only enables/disables local hotkeys. -
Press
Ctrl+Cto exit.
Hotkeys (summary)
s— start/pause+/-— faster / slower]/[— increase / decrease hold time (pressure)m— toggle click method (pynput→quartz→pyautogui)c— single test clickj— toggle jitter movementd— toggle debug logsCtrl+Alt+K— global lock/unlock local keys (works system-wide)
Status line
When running, the app renders a single, continuously-updated status line. It uses fixed-width fields and stays on one terminal line (no log spam). A small spinner animates while clicking.
Example:
▶ | delay: 0.50s | rng: 0.25–0.75 | hold: 0.10s | meth: QTZ | jitter: - | debug: - | lock: no | clicks: 000042 | last: 0.18s | next: 0.43s | cps: 3.5 | fb:1 | method quartz
Field notes:
delay— base delay; each actual delay is randomized withinrng(0.5×–1.5×)hold— how long the button is held down per click (the “pressure”)meth— click engine:QTZ(Quartz),PNP(pynput),PGA(pyautogui)jitter—Jwhen enabled, otherwise-debug—Dwhen debug logging is on, otherwise-lock—yeswhen local keys are locked (onlyCtrl+Alt+Kworks);nootherwiseclicks— total clicks since startlast— time since the last clicknext— the next randomized delay (shown while waiting)cps— average clicks per second since startfb:N— shown when a click had to fall back to another engine- trailing message — brief, ephemeral messages (e.g., when switching method)
Notes:
- Colors are used when the output is a TTY;
lock:yesis highlighted. - Messages are inline and fade after ~2.5s; no extra newlines are printed.
macOS permissions
For keyboard and mouse automation to work, macOS must trust your terminal:
- System Settings → Privacy & Security → Accessibility → add your terminal (Terminal, iTerm, or VS Code)
- System Settings → Privacy & Security → Input Monitoring → add your terminal
- Restart the terminal and run again
Quartz (CoreGraphics) clicks require the Quartz Python module (PyObjC). If it’s not installed, the app will automatically use pynput. You don’t need to install PyObjC unless you specifically want Quartz.
Troubleshooting
- Keys don’t work or clicks are blocked: verify Accessibility and Input Monitoring permissions (see above).
- Clicks ignored by the target app:
- Press
mto switch engines; tryquartzfirst on macOS - Enable jitter with
j(adds a subtle 1px move before click) - Increase hold time with
]to ~0.02–0.05s
- Press
- Terminal output looks noisy: that’s likely not a TTY; run in a normal terminal to see the single-line status, or consider adding flags later to reduce output.
CI/CD (GitHub Actions + uv)
This repo uses GitHub Actions with uv for linting, testing, building, and publishing:
- CI (
.github/workflows/ci.yml): runs on pushes/PRs, installs withuv sync, lints withruff, and runspytestacross Python 3.11–3.13. - Release (
.github/workflows/release.yml): on tags likev0.1.0, builds viauv build --no-sourcesand publishes viauv publishusing PyPI Trusted Publishing (OIDC).
To publish:
- Configure a Trusted Publisher for the PyPI project
autoclicker(and optionally TestPyPI). - Push a tag
vX.Y.Zto trigger the release workflow. - Pre-release tags containing
rcwill also publish to TestPyPI.
Contributing and community
- Please see
CONTRIBUTING.mdfor how to set up your environment and submit PRs. - See
CODE_OF_CONDUCT.mdfor expected community behavior. - Security reports: see
SECURITY.md.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Dependencies
pyautogui— automationpynput— input handling and alternative click path- Optional:
pyobjc(provides theQuartzmodule) — enables the Quartz click engine on macOS
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 clickmate-0.1.0.tar.gz.
File metadata
- Download URL: clickmate-0.1.0.tar.gz
- Upload date:
- Size: 10.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.8.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75e5db411cc0c6df3c460223adc0fa9ad1654c203ed8036782632dbf0c4cff65
|
|
| MD5 |
b97a7079fd1a017651b10e5e08d84079
|
|
| BLAKE2b-256 |
9866bef057eca845d943642a2e3f9df05675d5860ccbe14c7e6814138f4d3ab4
|
File details
Details for the file clickmate-0.1.0-py3-none-any.whl.
File metadata
- Download URL: clickmate-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.8.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9910ff5fc709bff042025e6b9c557e5a569f36eae4edb15ba18ec0cb8ef1d55a
|
|
| MD5 |
9989a8ccda4163410e39bd9282d2855f
|
|
| BLAKE2b-256 |
08e95502220c847296598e0dc6f1524278b9c3250655e91c3529e25d1cced7f8
|