A system tool for optimizing input control and workflow efficiency. This application allows you to create and manage customizable input modulation profiles with support for multiple profile groups.
- Profile Management: Create and organize input modulation profiles into two configurable groups (Group A and Group B)
- Customizable Settings: Adjust X and Y compensation values for each profile
- Global Hotkey Support: Toggle input modulation on/off using F8 key globally
- System Tray Integration: Minimize to system tray and control from tray menu
- Persistent Storage: All profile settings are automatically saved to database
- Multi-threaded Architecture: Non-blocking modulation loop with safe threading
- Python 3.8+
- PySide6
- pynput
- psutil
- Clone or download this repository
- Install dependencies:
pip install PySide6 pynput psutil- Run the application:
python main.py- Select a profile from either Profiles A or Profiles B tab
- Adjust the X-Axis and Y-Axis values to your desired modulation parameters
- Click Save to store the settings
- Click Enable Input Modulation button, or
- Press F8 key globally to toggle modulation on/off
- When enabled, the application will apply the selected profile's settings during input
- Switch between different profiles on-the-fly
- Each profile remembers its own X and Y values
- Organize profiles across two groups for better workflow management
Profiles are stored in data/profiles.json:
{
"profiles": [
{
"name": "Profile 1",
"group": "A",
"x": 0.0,
"y": 0.0,
"icon": "icons/profile.png"
}
]
}Profile settings are persisted in settings.db using SQLite:
- Database automatically creates on first run
- Profile settings (name, x, y values) are stored in
profile_settingstable
- InputControlAssistant: Main UI window managing the application lifecycle
- modulation_loop(): Core threading loop that applies input modulation when active
- Profile Management: Database-backed persistence for all user settings
The modulation system applies compensating movements with:
- Configurable X and Y offsets per profile
- Natural jitter and randomization for organic feel
- Periodic rest intervals to prevent detection
- Multiple fallback methods for cross-platform compatibility
- F8: Toggle input modulation on/off globally
├── main.py # Main application code
├── data/
│ ├── profiles.json # Profile definitions
│ └── settings.db # SQLite database (auto-created)
├── icons/
│ └── profile.png # Default profile icon
├── logo.ico # Application icon
└── README.md # This file
All profile settings are automatically saved to the local database and persist across application restarts.
- Start Conservative: Begin with low X and Y values and adjust based on your workflow
- Profile Organization: Use Group A for frequently used profiles and Group B for less common ones
- Regular Breaks: The modulation includes built-in rest periods for natural operation
- Verify
data/profiles.jsonexists and is valid JSON - Check that
settings.dbfile is not corrupted (delete to reset)
- Ensure the application has focus or F8 is properly recognized
- Check system hotkey conflicts with other applications
- Verify left mouse button detection is working
- The application should auto-scale with your system DPI
- Resize the window to adjust layout
Edit data/profiles.json and add new profile objects to the profiles array:
{
"name": "Your Profile",
"group": "A",
"x": 5.0,
"y": 10.0,
"icon": "icons/profile.png"
}To create a standalone executable using PyInstaller:
pip install pyinstaller
pyinstaller --onefile --windowed --icon=logo.ico main.pyMIT License, Developed by Beshoy Riad.
Note: This tool requires appropriate permissions and should be used in accordance with applicable terms of service for any applications or systems where it's deployed.
