## Major Changes ### Build System - Replace requirements.txt with pyproject.toml for modern dependency management - Support for uv package manager alongside pip - Update PyInstaller spec files for new dependencies and structure ### Desktop GUI (Tkinter → PySide6) - Complete rewrite of UI using PySide6/Qt6 - New modular structure in gui/ directory: - main_window.py: Main application window - macro_editor.py: Macro creation/editing dialog - command_builder.py: Visual command sequence builder - Modern dark theme with consistent styling - System tray integration ### Web Server (Flask → FastAPI) - Migrate from Flask/Waitress to FastAPI/Uvicorn - Add WebSocket support for real-time updates - Full CRUD API for macro management - Image upload endpoint ### Web Interface → PWA - New web/ directory with standalone static files - PWA manifest and service worker for installability - Offline caching support - Full macro editing from web interface - Responsive mobile-first design - Command builder UI matching desktop functionality ### Macro System Enhancement - New command sequence model replacing simple text/app types - Command types: text, key, hotkey, wait, app - Support for delays between commands (wait in ms) - Support for key presses between commands (enter, tab, etc.) - Automatic migration of existing macros to new format - Backward compatibility maintained ### Files Added - pyproject.toml - gui/__init__.py, main_window.py, macro_editor.py, command_builder.py - gui/widgets/__init__.py - web/index.html, manifest.json, service-worker.js - web/css/styles.css, web/js/app.js - web/icons/icon-192.png, icon-512.png ### Files Removed - requirements.txt (replaced by pyproject.toml) - ui_components.py (replaced by gui/ modules) - web_templates.py (replaced by web/ static files) - main.spec (consolidated into platform-specific specs) ### Files Modified - main.py: Simplified entry point for PySide6 - macro_manager.py: Command sequence model and migration - web_server.py: FastAPI implementation - config.py: Version bump to 0.9.0 - All .spec files: Updated for PySide6 and new structure - README.md: Complete rewrite for v0.9.0 - .gitea/workflows/release.yml: Disabled pending build testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
262 lines
6.5 KiB
Markdown
262 lines
6.5 KiB
Markdown
# MacroPad Server
|
|
|
|
A cross-platform macro management application with desktop and web interfaces. Create powerful command sequences with delays, key presses, and text input - accessible locally or remotely via a PWA-enabled web interface.
|
|
|
|
## Features
|
|
|
|
### Macro Capabilities
|
|
- **Command Sequences**: Build multi-step macros with:
|
|
- **Text**: Type text strings
|
|
- **Keys**: Press individual keys (Enter, Tab, Escape, etc.)
|
|
- **Hotkeys**: Key combinations (Ctrl+C, Alt+Tab, etc.)
|
|
- **Wait**: Insert delays between commands (in milliseconds)
|
|
- **App**: Launch applications or scripts
|
|
- **Custom Images**: Assign images to macros for easy identification
|
|
- **Category Management**: Organize macros into custom tabs
|
|
|
|
### Interfaces
|
|
- **Desktop GUI**: Modern PySide6/Qt interface with visual command builder
|
|
- **Web Interface**: PWA-enabled for installation on any device
|
|
- **System Tray**: Minimize to tray, always accessible
|
|
|
|
### Additional Features
|
|
- **QR Code Generation**: Quickly connect mobile devices
|
|
- **Real-time Sync**: WebSocket updates across all connected devices
|
|
- **Offline Support**: PWA caches for offline macro viewing
|
|
- **Dark Theme**: Modern dark interface throughout
|
|
- **Auto-Migration**: Existing macros automatically upgraded to new format
|
|
|
|
## Requirements
|
|
|
|
- Python 3.11+
|
|
- Dependencies managed via `pyproject.toml`
|
|
|
|
### Core Dependencies
|
|
- PySide6 (Desktop GUI)
|
|
- FastAPI + Uvicorn (Web server)
|
|
- PyAutoGUI (Keyboard automation)
|
|
- Pillow (Image processing)
|
|
- pystray (System tray)
|
|
- netifaces (Network detection)
|
|
- qrcode (QR code generation)
|
|
|
|
## Installation
|
|
|
|
### Method 1: Using uv (Recommended)
|
|
|
|
```bash
|
|
# Install uv if not already installed
|
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
|
|
# Clone and install
|
|
git clone https://repo.anhonesthost.net/MacroPad/MP-Server.git
|
|
cd MP-Server
|
|
uv sync
|
|
```
|
|
|
|
### Method 2: Using pip
|
|
|
|
```bash
|
|
git clone https://repo.anhonesthost.net/MacroPad/MP-Server.git
|
|
cd MP-Server
|
|
pip install -e .
|
|
```
|
|
|
|
### Method 3: Pre-built Executables
|
|
|
|
1. Go to the [Releases](https://repo.anhonesthost.net/MacroPad/MP-Server/releases) page
|
|
2. Download for your operating system:
|
|
- Windows: `macropad.exe`
|
|
- Linux: `macropad`
|
|
- macOS: `MacroPad Server.app`
|
|
3. Run the downloaded file
|
|
|
|
> [!IMPORTANT]
|
|
> Executables are unsigned and may trigger security warnings. You may need to:
|
|
> - Windows: Click "More info" → "Run anyway" in SmartScreen
|
|
> - Linux: Run `chmod +x macropad` before executing
|
|
> - macOS: Right-click → Open, or adjust Gatekeeper settings
|
|
|
|
## Usage
|
|
|
|
### Running the Application
|
|
|
|
```bash
|
|
# If installed with uv
|
|
uv run python main.py
|
|
|
|
# If installed with pip
|
|
python main.py
|
|
```
|
|
|
|
### Creating a Macro
|
|
|
|
1. Click **+ Add Macro** in the toolbar
|
|
2. Enter a **Name** and optional **Category**
|
|
3. Build your command sequence using the buttons:
|
|
- **+ Text**: Add text to type
|
|
- **+ Key**: Add a key press (enter, tab, escape, etc.)
|
|
- **+ Hotkey**: Add a key combination (ctrl+c, alt+tab)
|
|
- **+ Wait**: Add a delay in milliseconds
|
|
- **+ App**: Add an application to launch
|
|
4. Reorder commands with **Up/Down** buttons
|
|
5. Click **Save**
|
|
|
|
### Example: Login Macro
|
|
|
|
A macro that types a username, waits, presses Tab, types a password, and presses Enter:
|
|
|
|
```
|
|
[TEXT] myusername
|
|
[WAIT] 200ms
|
|
[KEY] tab
|
|
[TEXT] mypassword
|
|
[KEY] enter
|
|
```
|
|
|
|
### Web Interface (PWA)
|
|
|
|
1. Start the application (web server starts automatically on port 40000)
|
|
2. Note the URL shown in the toolbar (e.g., `http://192.168.1.100:40000`)
|
|
3. Open this URL on any device on your network
|
|
4. **Install as PWA**:
|
|
- Mobile: Tap browser menu → "Add to Home Screen"
|
|
- Desktop: Click install icon in address bar
|
|
|
|
The web interface provides full macro management:
|
|
- View and execute macros
|
|
- Create and edit macros with command builder
|
|
- Organize into categories
|
|
- Real-time sync across devices
|
|
|
|
### System Tray
|
|
|
|
- Minimize window → App continues in tray
|
|
- Right-click tray icon:
|
|
- **Show**: Restore window
|
|
- **Quit**: Exit application
|
|
|
|
## Command Types Reference
|
|
|
|
| Type | Description | Parameters |
|
|
|------|-------------|------------|
|
|
| `text` | Types a text string | `value`: The text to type |
|
|
| `key` | Presses a single key | `value`: Key name (enter, tab, escape, f1-f12, etc.) |
|
|
| `hotkey` | Presses key combination | `keys`: List of keys (e.g., ["ctrl", "c"]) |
|
|
| `wait` | Delays execution | `ms`: Milliseconds to wait |
|
|
| `app` | Launches application | `command`: Shell command to execute |
|
|
|
|
## Example Application Commands
|
|
|
|
### Windows
|
|
```bash
|
|
# Steam game
|
|
"C:\Program Files (x86)\Steam\steam.exe" steam://rungameid/2767030
|
|
|
|
# Chrome to website
|
|
"C:\Program Files\Google\Chrome\Application\chrome.exe" https://example.com
|
|
|
|
# Open folder
|
|
explorer.exe "C:\Users\YourUsername\Documents"
|
|
```
|
|
|
|
### Linux
|
|
```bash
|
|
# Firefox
|
|
firefox https://example.com
|
|
|
|
# Steam game
|
|
steam steam://rungameid/2767030
|
|
|
|
# Terminal
|
|
gnome-terminal
|
|
```
|
|
|
|
### macOS
|
|
```bash
|
|
# Safari
|
|
open -a Safari https://example.com
|
|
|
|
# VS Code
|
|
open -a "Visual Studio Code"
|
|
|
|
# Folder
|
|
open ~/Documents
|
|
```
|
|
|
|
## Building Executables
|
|
|
|
Build platform-specific executables using PyInstaller:
|
|
|
|
```bash
|
|
# Install PyInstaller
|
|
pip install pyinstaller
|
|
|
|
# Windows (run on Windows)
|
|
pyinstaller macropad.spec
|
|
|
|
# Linux (run on Linux)
|
|
pyinstaller macropad_linux.spec
|
|
|
|
# macOS (run on macOS)
|
|
pyinstaller macropad_macos.spec
|
|
```
|
|
|
|
> [!NOTE]
|
|
> PyInstaller cannot cross-compile. You must build on the target platform.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
MP-Server/
|
|
├── main.py # Application entry point
|
|
├── config.py # Configuration constants
|
|
├── macro_manager.py # Macro storage and execution
|
|
├── web_server.py # FastAPI web server
|
|
├── pyproject.toml # Dependencies and build config
|
|
├── gui/ # PySide6 desktop interface
|
|
│ ├── main_window.py
|
|
│ ├── macro_editor.py
|
|
│ └── command_builder.py
|
|
├── web/ # PWA web interface
|
|
│ ├── index.html
|
|
│ ├── manifest.json
|
|
│ ├── service-worker.js
|
|
│ ├── css/styles.css
|
|
│ ├── js/app.js
|
|
│ └── icons/
|
|
└── macros.json # Macro storage (auto-created)
|
|
```
|
|
|
|
## Migrating from v0.8.x
|
|
|
|
Existing macros are automatically migrated on first run. The old format:
|
|
|
|
```json
|
|
{
|
|
"type": "text",
|
|
"command": "Hello",
|
|
"modifiers": {"enter": true}
|
|
}
|
|
```
|
|
|
|
Becomes the new command sequence format:
|
|
|
|
```json
|
|
{
|
|
"type": "sequence",
|
|
"commands": [
|
|
{"type": "text", "value": "Hello"},
|
|
{"type": "key", "value": "enter"}
|
|
]
|
|
}
|
|
```
|
|
|
|
## License
|
|
|
|
MIT License
|
|
|
|
## Acknowledgments
|
|
|
|
Special thanks to CatArgent_ on Twitch for proofreading and providing valuable feedback.
|