A lightweight macro recording and playback tool for Windows and macOS.
- Full Input Recording - Captures keyboard presses, mouse clicks, movement, scrolling, and right-click dragging in real-time
- Playback Control - Replay at adjustable speed with configurable loop count and interval timing
- Custom Hotkeys - Bind any key to start/stop recording and playback (default: F1 / F2); hold to pause instead of stopping
- Event Editing - Add, copy (Ctrl+C), and paste (Ctrl+V) inputs; use Insert After preview to place new inputs precisely
- Loop Above - Insert a Loop Above event to loop a subset of inputs within a sequence without re-recording
- Mouse Movement - Linear or Humanoid movement modes with configurable move duration and set-position support
- Right-Click Dragging - Records and replays right-click drag actions using raw hardware input for accurate delta-based playback
- Webhook Support - Trigger Discord or HTTP webhooks during playback for notifications and integrations
- Auto-Save - Your last session is automatically saved and restored on next launch
- Save / Load Macros - Export and import macros as
.mmrfiles; share and reuse across sessions - macOS Support - Full macOS compatibility with the same feature set as Windows
- Cross-Platform Input - Runs on Windows and macOS using native OS APIs for reliable, low-level input simulation
- OS: Windows 7 or later (64-bit recommended), macOS
- Python: 3.10 or higher
- Dependencies: PySide6, pynput, requests
git clone https://github.com/m0r1s/macro-maker.git
cd macro-maker
pip install PySide6 pynput requests
python src/macro_maker/main.pyDownload the latest release from the Releases page and run the .exe - no Python required.
python is not recognized
- Reinstall Python and check "Add Python to PATH" during setup
No module named 'PySide6'
- Run:
pip install PySide6 pynput requests
pynput fails to install
- Install Visual C++ Build Tools, then retry
- Press F1 to start recording
- Perform your actions - mouse movements, clicks, scrolling, typing
- Press F1 again to stop
- Your macro is auto-saved
- Press F2 to play
- Press F2 again to stop early
- Adjust speed in the UI (e.g. 0.5x for slower, 2x for faster)
- Set loop count, change hotkeys, add Loop Above events, copy/paste inputs, use Linear or Humanoid mouse movement, and hook into Discord
- Browser automation (clicking, form filling, navigation)
- In-Game Repetitive Task Automation
- Data entry and repetitive typing tasks
- UI testing and workflow replay
- Custom shortcut sequences
- Coordinate-based - mouse positions are absolute; changing screen resolution affects playback
- No conditional logic - macros run the same way every time
- Anti-cheat - games with anti-cheat systems may rarely block input simulation
- Full keyboard and mouse recording
- Adjustable playback speed
- Loop count and loop interval
- Custom hotkeys
- Discord webhook events
- Auto-save and
.mmrfile format - macOS support
- Loop Above, Linear/Humanoid mouse movement
- Right-click dragging recording
- Macro scheduling (run at a specific time)
- Conditional event logic
- Debug Mode - step-by-step playback
- Multi-macro scheduling
src/macro_maker/
├── main.py Entry point
├── recorder.py Keyboard and mouse listener
├── player.py Playback engine (PlayWorker)
├── ui/
│ ├── main_window.py Main window and dialogs
│ ├── widgets.py UI components
│ └── styles.py Qt stylesheets
└── utils/
├── constants.py App-wide constants and defaults
├── serialization.py Save/load and webhook logic
└── platform_helpers.py Windows API wrappers
This project is licensed under the MORIS UNIVERSAL LICENSE (MUL) - see LICENSE.md for full terms.
Summary:
- Personal, non-commercial use only
- Attribution to the original author is required
- Commercial use and redistribution without the license are prohibited
- Discord: discord.com/invite/2fraBuhe3m
- Issues: Open a GitHub issue with your Windows version, Python version, and steps to reproduce/.mmr file
When reporting a bug, include:
- Windows version
- Python version (
python --version) - Steps to reproduce or .mmr file
- Error message or screenshot
If m³ saves you time, consider starring the repo on GitHub and/or join the Discord - it helps others find the project.
Made with ♡ by moris and tim