KAC is an open-source input automation tool for accessibility, repetitive work, and software testing.
Set it up once. Save it as a preset. Share it with everyone else.
Download · Presets · Features · Design notes · Contributing
Repetitive input is a genuine accessibility barrier. People with RSI, tremors, or limited hand mobility struggle with interfaces that assume fast, repeated clicking. The same mechanism solves ordinary problems too: stepping through hundreds of data-entry rows, or stress-testing a button in QA.
Most auto clickers are closed-source binaries of unclear provenance that ask you to trust them. This one is readable, tested, and shareable: every setup can be saved as a preset, and every preset shows you exactly what it will change before it changes anything.
![]() |
![]() |
| Four controls. That's the whole default view. | Light theme, one click away. |
The interface stays out of your way. Interval, button, key, and go — everything else lives behind More options until you ask for it.
![]() |
![]() |
| Targeting, humanization and a warning when saved points no longer match your screen. | Record what you do, then replay it. |
Windows .exe and macOS builds are produced automatically by GitHub Actions,
and only after the test suite passes.
| Platform | File |
|---|---|
| Windows | KenansAutoClicker.exe |
| macOS | KenansAutoClicker-macOS.zip |
No release yet? Open the Actions tab → newest run → Artifacts.
Windows shows "Windows protected your PC" for any new unsigned app. Click More info → Run anyway. Code-signing certificates cost hundreds of dollars a year, which isn't practical for a free tool.
macOS — right-click → Open the first time, then allow the app under System Settings → Privacy & Security → Accessibility so it can send input.
The feature that makes this more than another auto clicker.
A preset is a complete setup (interval, button, key, humanization) packaged so someone else can use it in one click.
![]() |
![]() |
| Search and filter the library. | See every change before it happens. |
| Category | Presets |
|---|---|
| Accessibility | Assisted Click · Dwell Click · Key Repeat Assist · Hold to Aim · Slow Reading Scroll |
| Productivity | Form Filler · Keep Screen Awake · Bulk Confirm |
| Testing | UI Stress Test · Repeatable QA Run · Human-like Clicking |
Press Browse community to load presets other people have contributed, sorted by how many people actually installed them. Your username appears on your preset's card, so contributors get credit too.
The library is hosted rather than kept in this repository, because reviewing a
pull request per preset does not scale past a few dozen. Presets are submitted
from inside the app, land in a moderation queue, and appear once approved. The
presets/ folder here holds the small curated set that ships built in.
Browsing works offline: the last library you loaded is cached, and the built-in presets never need a network at all.
Share yours: Save current as preset → Submit to library, or open a pull request for the curated set. See CONTRIBUTING.md and supabase/README.md.
This matters, because a preset can come from the internet.
- Allow-listed. A preset may only change how clicking and typing behave. It cannot touch your hotkeys, theme, window settings, or statistics — anything else is stripped out during validation.
- Never executed. A preset is data, not code. Nothing in it is ever run.
- Offline by default. The app makes no network request until you press Browse community. Not on startup, not ever otherwise.
- Previewed first. You see the exact diff, old value to new value, and choose whether to apply it.
There are tests asserting each of these, including one that feeds the validator a hostile preset trying to rebind hotkeys.
Presets for games are welcome, but be aware:
Automating input in competitive online games usually breaks their terms of service and can get your account permanently banned.
Presets tagged competitive display that warning on their card:
Single-player, idle and AFK presets don't need the tag.
Auto clicker. Left, right or middle button, single or double, intervals from milliseconds to minutes. Click at the cursor, at a fixed point, or cycle through a sequence of points you pick on screen. Action switches between Click, Hold (keeps the button down, always released on stop) and Dwell.
Macro recorder. Record what you actually do, clicks, keys, scrolls and their timing, then replay it at any speed, any number of times. Saved as readable JSON you can edit or share. Anything it pressed is released when playback ends, even if the recording stopped mid-drag.
Real dwell clicking. Clicks when the pointer genuinely stops moving, not on a timer. Moving re-arms the next click, so resting your hand does not fire a stream of clicks. Built for people who cannot press a mouse button.
Coordinates that survive a display change. Saved points remember the screen they were captured on. Change resolution or unplug a monitor and the app says so and offers to rescale, instead of silently clicking into empty space.
Auto scroll. Scroll up or down on a timer, with an adjustable number of notches per scroll. Useful for reading long pages hands-free.
Auto key presser. A single key, a held key, a sequence (q w e r), a combo
(ctrl+shift+a), or repeatedly typed text.
Humanization. Jitter, randomized intervals, variable hold time, smooth eased movement, and burst mode, so the input isn't a dead metronome.
Control. Global F6 start/stop and F9 panic stop that work even when the window isn't focused, both rebindable. Toggle or hold-to-run. Auto-stop after a number of actions or seconds, with an optional countdown.
Quality of life. Live CPS counter, all-time stats, save/load profiles, always-on-top, light and dark themes.
git clone https://github.com/KenanSab/KenansAutoClicker.git
cd KenansAutoClicker
pip install -r requirements.txt
python KenansAutoClicker.pypip install pyinstaller
# Windows
pyinstaller --onefile --windowed --icon docs/icon.ico --name "KenansAutoClicker" KenansAutoClicker.py
# macOS
pyinstaller --onefile --windowed --icon docs/icon.icns --name "KenansAutoClicker" KenansAutoClicker.pyThe icon itself is generated, not hand-drawn in an editor:
python3 tools/make_icon.py # writes docs/icon.png, .icns and .icopip install pytest
python -m pytest tests/ -q170 tests covering preset validation and hostile input, the input engine, key parsing, persistence, and interface behavior. CI runs them on every push, and nothing is built unless they pass.
./ship.sh "what changed" # test, commit, push
./ship.sh "what changed" --release 2.1.0 # ...and cut a versioned release
./ship.sh --dry # just run the testsThe script refuses to commit or push if the tests fail. Once pushed, GitHub builds both platforms and refreshes the rolling latest download on its own. Tagging is only needed for a permanent versioned release.
Python, tkinter and pynput. One dependency.
kenansautoclicker/
├── app.py window, state, hotkeys, start/stop wiring
├── engine.py timing, humanization, the click/key loops
├── presets.py preset model, validation, community fetching
├── ui_base.py cards, rows, scrolling, theming
├── ui_home.py Home page
├── ui_presets.py Presets page
├── ui_settings.py Settings page
├── widgets.py switches, segmented pickers, disclosures, icon buttons
├── icons.py Lucide icons + an SVG path renderer
├── cloud.py the hosted community library client
├── recorder.py macro capture, playback and macro files
├── screens.py display-change detection for saved coordinates
├── keys.py key naming, serialization, sequence/combo parsing
├── storage.py config and profile persistence
└── theme.py color palettes
Icons are drawn, not bundled. There's no image library here. icons.py
contains a small SVG path renderer (cubic-bézier and elliptical-arc flattening)
that draws Lucide's real path data straight onto a canvas.
The icons stay crisp at any size, follow the theme automatically, and the
dependency list stays at exactly one package.
Presets are validated, not trusted. Community presets arrive as JSON from
the internet, so clean_preset() treats every field as hostile: keys are
allow-listed, strings are length-capped, and nothing is ever evaluated. The
worst a malicious preset can do is change your click interval.
Presets are the easiest and most useful contribution — see CONTRIBUTING.md for the format and the PR flow.
Bug reports and code are welcome too. If you're fixing a bug, a test that fails before your fix is the most valuable thing you can include.
Created by Kenan — github.com/KenanSab
Icons by Lucide (ISC License).
Licensed under the MIT License: free to use, modify, and share, including commercially, as long as the copyright notice is kept.
Use responsibly, and only where automated input is permitted.








