clickmate


Nameclickmate JSON
Version 0.1.1 PyPI version JSON
download
home_pageNone
SummaryAdd your description here
upload_time2025-09-11 00:48:17
maintainerNone
docs_urlNone
authorivand890
requires_python>=3.11
licenseMIT License Copyright (c) 2025 ivand890 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords autoclicker clickmate automation macos quartz mouse cli
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Clickmate

Clickmate is a macOS-friendly Python autoclicker. It prefers native Quartz CoreGraphics events on macOS (when available) and falls back to `pynput` or `pyautogui`. It features randomized delays, adjustable hold time (“pressure”), and a clean single-line status UI.

## Features

- Start/Pause with `s`
- Randomized delay per click (0.5×–1.5× of base)
- Adjust speed with `+` (faster) / `-` (slower)
- Adjust hold time with `]` (increase) / `[` (decrease)
- Toggle click engine with `m` (`pynput` → `quartz` → `pyautogui`)
- Single test click with `c`
- Optional jitter movement `j` and debug logs `d`
- Global hotkey to lock/unlock local keys: `Ctrl+Alt+K`

Defaults: delay `0.50s`, hold `0.10s`, method `quartz` (if available), jitter off.

## Install and run (uv)

Requires Python `>=3.11` and `uv`.

- Quick, no install:
   ```bash
   uvx clickmate --help
   uvx clickmate --version
   uvx clickmate
   ```

- Install as a tool:
   ```bash
   uv tool install clickmate
   # then
   clickmate
   ```

- From a local checkout:
   ```bash
   # run with a fresh, isolated env and pick up local changes
   uv tool run --from . --refresh clickmate
   # or install locally as a tool
   uv tool install .
   ```

Development:
```bash
uv sync
uv run clickmate --help
uv run clickmate
# or run the module entrypoint
uv run -m autoclicker --help
```

Tip: If `uv tool run --from . clickmate` doesn’t reflect local changes, add `--refresh` (above). Alternatively, bump the version in `pyproject.toml` or uninstall/reinstall the tool:
```bash
uv tool uninstall clickmate
uv tool install .
```

## Usage

1) Run the program (see above). 2) Move the mouse to your target. 3) Press `s` to start; press `s` again to pause. Use `+`/`-` to change speed and `]`/`[` to change hold time. Use `m` to switch engines when needed. Press `Ctrl+Alt+K` anytime to lock/unlock local hotkeys (safety). Exit with `Ctrl+C`.

### Hotkeys

- `s` — start/pause
- `+` / `-` — faster / slower
- `]` / `[` — increase / decrease hold time
- `m` — toggle engine (`pynput` → `quartz` → `pyautogui`)
- `c` — single test click
- `j` — toggle jitter
- `d` — toggle debug logs
- `Ctrl+Alt+K` — global lock/unlock local keys

## Status line

The app renders one continuously updated status line with fixed-width fields and a spinner 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
```

Key fields:
- `delay` base delay; actual delays are randomized within `rng` (0.5×–1.5×)
- `hold` button press duration (“pressure”)
- `meth` engine: `QTZ` (Quartz), `PNP` (pynput), `PGA` (pyautogui)
- `lock` `yes` when local keys are locked (only `Ctrl+Alt+K` works)
- `fb:N` fallback count when switching engines was required

Notes: colors when TTY; ephemeral messages fade after ~2.5s; no extra newlines.

## macOS permissions

Grant permissions to your terminal app (Terminal/iTerm/VS Code):
1. System Settings → Privacy & Security → Accessibility → add your terminal
2. System Settings → Privacy & Security → Input Monitoring → add your terminal
3. Restart the terminal

Quartz clicks need the `Quartz` module (PyObjC). If unavailable, Clickmate automatically uses `pynput`.

## Troubleshooting

- Keys don’t work or clicks are blocked: re-check Accessibility and Input Monitoring permissions.
- App ignores clicks: press `m` to switch engines (prefer `quartz` on macOS), enable jitter `j`, or increase hold time `]` to ~0.02–0.05s.
- Output looks noisy: run in a normal terminal to get the single-line status.

## CI/CD and releases

- CI (`.github/workflows/ci.yml`): `uv sync`, `ruff`, and `pytest` on Python 3.11–3.13.
- Release (`.github/workflows/release.yml`): pushing a tag like `v1.2.3` triggers a build (`uv build --no-sources`) and publish via PyPI Trusted Publishing (OIDC). The package version is derived from the tag and injected during the build. TestPyPI publishing is not used.

## Contributing and community

- See `CONTRIBUTING.md` for development and PR guidelines.
- See `CODE_OF_CONDUCT.md` for community expectations.
- Security: see `SECURITY.md`.

## License

MIT — see `LICENSE`.

## Dependencies

- `pyautogui` — automation
- `pynput` — input handling and alternative click path
- Optional: `pyobjc` (provides `Quartz`) — enables Quartz engine on macOS
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "clickmate",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "autoclicker, clickmate, automation, macos, quartz, mouse, cli",
    "author": "ivand890",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/c2/00/335664ddac055256a54a8f407fd97079e311313a3d6f96f3a8212d7df3d9/clickmate-0.1.1.tar.gz",
    "platform": null,
    "description": "# Clickmate\n\nClickmate is a macOS-friendly Python autoclicker. It prefers native Quartz CoreGraphics events on macOS (when available) and falls back to `pynput` or `pyautogui`. It features randomized delays, adjustable hold time (\u201cpressure\u201d), and a clean single-line status UI.\n\n## Features\n\n- Start/Pause with `s`\n- Randomized delay per click (0.5\u00d7\u20131.5\u00d7 of base)\n- Adjust speed with `+` (faster) / `-` (slower)\n- Adjust hold time with `]` (increase) / `[` (decrease)\n- Toggle click engine with `m` (`pynput` \u2192 `quartz` \u2192 `pyautogui`)\n- Single test click with `c`\n- Optional jitter movement `j` and debug logs `d`\n- Global hotkey to lock/unlock local keys: `Ctrl+Alt+K`\n\nDefaults: delay `0.50s`, hold `0.10s`, method `quartz` (if available), jitter off.\n\n## Install and run (uv)\n\nRequires Python `>=3.11` and `uv`.\n\n- Quick, no install:\n   ```bash\n   uvx clickmate --help\n   uvx clickmate --version\n   uvx clickmate\n   ```\n\n- Install as a tool:\n   ```bash\n   uv tool install clickmate\n   # then\n   clickmate\n   ```\n\n- From a local checkout:\n   ```bash\n   # run with a fresh, isolated env and pick up local changes\n   uv tool run --from . --refresh clickmate\n   # or install locally as a tool\n   uv tool install .\n   ```\n\nDevelopment:\n```bash\nuv sync\nuv run clickmate --help\nuv run clickmate\n# or run the module entrypoint\nuv run -m autoclicker --help\n```\n\nTip: If `uv tool run --from . clickmate` doesn\u2019t reflect local changes, add `--refresh` (above). Alternatively, bump the version in `pyproject.toml` or uninstall/reinstall the tool:\n```bash\nuv tool uninstall clickmate\nuv tool install .\n```\n\n## Usage\n\n1) Run the program (see above). 2) Move the mouse to your target. 3) Press `s` to start; press `s` again to pause. Use `+`/`-` to change speed and `]`/`[` to change hold time. Use `m` to switch engines when needed. Press `Ctrl+Alt+K` anytime to lock/unlock local hotkeys (safety). Exit with `Ctrl+C`.\n\n### Hotkeys\n\n- `s` \u2014 start/pause\n- `+` / `-` \u2014 faster / slower\n- `]` / `[` \u2014 increase / decrease hold time\n- `m` \u2014 toggle engine (`pynput` \u2192 `quartz` \u2192 `pyautogui`)\n- `c` \u2014 single test click\n- `j` \u2014 toggle jitter\n- `d` \u2014 toggle debug logs\n- `Ctrl+Alt+K` \u2014 global lock/unlock local keys\n\n## Status line\n\nThe app renders one continuously updated status line with fixed-width fields and a spinner while clicking.\n\nExample:\n```\n\u25b6 | delay: 0.50s | rng: 0.25\u20130.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\n```\n\nKey fields:\n- `delay` base delay; actual delays are randomized within `rng` (0.5\u00d7\u20131.5\u00d7)\n- `hold` button press duration (\u201cpressure\u201d)\n- `meth` engine: `QTZ` (Quartz), `PNP` (pynput), `PGA` (pyautogui)\n- `lock` `yes` when local keys are locked (only `Ctrl+Alt+K` works)\n- `fb:N` fallback count when switching engines was required\n\nNotes: colors when TTY; ephemeral messages fade after ~2.5s; no extra newlines.\n\n## macOS permissions\n\nGrant permissions to your terminal app (Terminal/iTerm/VS Code):\n1. System Settings \u2192 Privacy & Security \u2192 Accessibility \u2192 add your terminal\n2. System Settings \u2192 Privacy & Security \u2192 Input Monitoring \u2192 add your terminal\n3. Restart the terminal\n\nQuartz clicks need the `Quartz` module (PyObjC). If unavailable, Clickmate automatically uses `pynput`.\n\n## Troubleshooting\n\n- Keys don\u2019t work or clicks are blocked: re-check Accessibility and Input Monitoring permissions.\n- App ignores clicks: press `m` to switch engines (prefer `quartz` on macOS), enable jitter `j`, or increase hold time `]` to ~0.02\u20130.05s.\n- Output looks noisy: run in a normal terminal to get the single-line status.\n\n## CI/CD and releases\n\n- CI (`.github/workflows/ci.yml`): `uv sync`, `ruff`, and `pytest` on Python 3.11\u20133.13.\n- Release (`.github/workflows/release.yml`): pushing a tag like `v1.2.3` triggers a build (`uv build --no-sources`) and publish via PyPI Trusted Publishing (OIDC). The package version is derived from the tag and injected during the build. TestPyPI publishing is not used.\n\n## Contributing and community\n\n- See `CONTRIBUTING.md` for development and PR guidelines.\n- See `CODE_OF_CONDUCT.md` for community expectations.\n- Security: see `SECURITY.md`.\n\n## License\n\nMIT \u2014 see `LICENSE`.\n\n## Dependencies\n\n- `pyautogui` \u2014 automation\n- `pynput` \u2014 input handling and alternative click path\n- Optional: `pyobjc` (provides `Quartz`) \u2014 enables Quartz engine on macOS",
    "bugtrack_url": null,
    "license": "MIT License  Copyright (c) 2025 ivand890  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
    "summary": "Add your description here",
    "version": "0.1.1",
    "project_urls": {
        "Changelog": "https://github.com/ivand890/autoclicker/releases",
        "Homepage": "https://github.com/ivand890/autoclicker",
        "Issues": "https://github.com/ivand890/autoclicker/issues",
        "Repository": "https://github.com/ivand890/autoclicker"
    },
    "split_keywords": [
        "autoclicker",
        " clickmate",
        " automation",
        " macos",
        " quartz",
        " mouse",
        " cli"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a878625cd2bce4e377dc47e3ead0def21802dbd71170735c7315f0171ecd4325",
                "md5": "b3f141cc08580769075cef271d782255",
                "sha256": "b6292b2b9b9435d0fe3740ba7a83b920315fbe0a3467d51319133248da8b285d"
            },
            "downloads": -1,
            "filename": "clickmate-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b3f141cc08580769075cef271d782255",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 10712,
            "upload_time": "2025-09-11T00:48:16",
            "upload_time_iso_8601": "2025-09-11T00:48:16.893630Z",
            "url": "https://files.pythonhosted.org/packages/a8/78/625cd2bce4e377dc47e3ead0def21802dbd71170735c7315f0171ecd4325/clickmate-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c200335664ddac055256a54a8f407fd97079e311313a3d6f96f3a8212d7df3d9",
                "md5": "217affd00788d3dedd02357568e53981",
                "sha256": "a06b4d29f84be599344bb3e025521cfb493c070d698802b778af6f01c6cdfe8a"
            },
            "downloads": -1,
            "filename": "clickmate-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "217affd00788d3dedd02357568e53981",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 9432,
            "upload_time": "2025-09-11T00:48:17",
            "upload_time_iso_8601": "2025-09-11T00:48:17.652472Z",
            "url": "https://files.pythonhosted.org/packages/c2/00/335664ddac055256a54a8f407fd97079e311313a3d6f96f3a8212d7df3d9/clickmate-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-11 00:48:17",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ivand890",
    "github_project": "autoclicker",
    "github_not_found": true,
    "lcname": "clickmate"
}
        
Elapsed time: 1.66067s