A macOS menubar app for StreamDeck Dual Control - control multiple computers with a single StreamDeck.
- 🎮 Menubar Control: Simple menubar interface for StreamDeck management
- 🔄 Auto-Start: Launches automatically on login
- 🖥️ Dual Computer Support: Control laptop and desktop from one StreamDeck
- 🎯 Multiple Modes: Terminal, Simulator, and Fork (Git) modes
- 🔧 Easy Reload: Restart the controller without quitting the app
- 📊 Status Monitoring: See connection status in the menubar
- macOS 10.15 or later
- Python 3.8+
- StreamDeck hardware
- python-streamdeck library
- rumps for menubar functionality
- Clone the repository:
git clone https://github.com/yourusername/vibestick.git
cd vibestick- Install dependencies:
pip install -r requirements.txt- Build the app:
./build_app.sh- Install the app:
./install.shDownload the latest release from the Releases page and drag Vibestick.app to your Applications folder.
Once installed, Vibestick will:
- Start automatically when you log in
- Show a joystick icon in your menubar
- Run the StreamDeck controller in the background
- Status: Shows current connection status
- Reload: Restarts the StreamDeck controller
- Show Logs: Opens Console.app for debugging
- Quit: Stops Vibestick and the controller
The app looks for configuration files in the config/ directory within the app location.
Important: Before first run, create a config/mode.json file:
cd /path/to/vibestick
cp config/terminal-mode.json config/mode.jsonAvailable mode templates:
terminal-mode.json- Terminal/development commandssimulator-mode.json- iOS Simulator controlsfork-mode.json- Fork git client shortcutsoverview.json- Overview/navigation mode
Configuration files:
config/
├── mode.json # Current mode (create from template)
├── computers.json # Computer connection settings
├── terminal-mode.json # Terminal mode template
├── simulator-mode.json # Simulator mode template
├── fork-mode.json # Fork mode template
└── overview.json # Overview mode template
Edit computers.json to set up your computers:
{
"laptop": {
"address": "192.168.0.5",
"betterTouchToolSharedSecret": "your-secret-here",
"betterTouchToolPort": 61708
},
"desktop": {
"address": "192.168.0.6",
"betterTouchToolSharedSecret": "your-secret-here",
"betterTouchToolPort": 61708
}
}- Python 3.8+
- py2app
- All dependencies from requirements.txt
- Install build dependencies:
pip install py2app- Run the build script:
./build_app.sh- The app will be created in
dist/Vibestick.app
python vibestick.pyvibestick/
├── vibestick.py # Main menubar app
├── setup.py # py2app configuration
├── build_app.sh # Build script
├── install.sh # Installation script
├── uninstall.sh # Uninstall script
├── com.rossthedev.vibestick.plist # LaunchAgent config
├── assets/
│ └── vibestick-icon.png # Menubar icon
└── requirements.txt # Python dependencies
- Check Console.app for error messages
- Ensure StreamDeck is connected
- Verify Python dependencies are installed
- Check USB connection
- Install HIDapi:
brew install hidapi - Grant necessary permissions in System Preferences
Logs are written to:
/tmp/vibestick.out- Standard output/tmp/vibestick.err- Error output
Run the uninstall script:
./uninstall.shOr manually:
- Remove from Applications:
rm -rf /Applications/Vibestick.app - Remove LaunchAgent:
rm ~/Library/LaunchAgents/com.rossthedev.vibestick.plist - Remove support files:
rm -rf ~/Library/Application Support/Vibestick
MIT License - see LICENSE file for details
- Built with rumps
- StreamDeck control via python-elgato-streamdeck
- Part of the StreamDeck Dual Control project
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request