macOS
Python/Tkinter setup, and the two permissions TIGHC needs to actually see your keystrokes.
TIGHC runs on macOS as either the standalone
TIGHC-macos-* executable from the
Releases page or from source. CI builds and
smoke-tests the executable on every tagged release, but macOS gets
far less real-world mileage than Windows/Linux — if you hit
something this guide doesn't cover, please
open an issue.
For everything not covered here (profiles, the GUI, global
settings, cover art), the
main README
applies exactly as written.
1. Python and Tkinter (running from source only)
Skip this section if you're using the standalone executable — it already bundles everything it needs.
The installer from
python.org
includes Tk, so gui.py works right after installing it.
Homebrew's python formula does not
bundle Tk — if you installed Python that way, add it separately:
brew install python-tk
Either way, confirm Tkinter actually imports before going further:
python3 -c "import tkinter"
Clone the repo and install dependencies:
git clone https://github.com/TIGHC/Engine.git
cd Engine
python3 -m pip install -r requirements.txt
2. Grant Accessibility and Input Monitoring permissions
TIGHC needs two things macOS treats as sensitive: reading global
keyboard/mouse input (via pynput), and detecting which
window currently has focus (so it knows which profile to switch
to). Both require explicit permission grants in System
Settings → Privacy & Security:
- Accessibility — add and enable Terminal (if
you're running
python3 gui.pyfrom one) or theTIGHCapp itself (if you're using the standalone executable). - Input Monitoring — same entry, same toggle.
macOS doesn't always prompt for these automatically the first time a Python script tries to use them the way a signed .app does — if TIGHC starts but nothing happens when you press a key in-game, add it under both panes yourself rather than waiting for a prompt. After granting, fully quit and reopen Terminal (or TIGHC, if you granted the .app directly) - the permission doesn't take effect for a process already running.
3. Install Intiface Central
Intiface Central — the app that actually talks to your Bluetooth toy over the Buttplug protocol — ships a native macOS build. Install it, pair your toy through macOS's own Bluetooth settings first if it isn't already paired, then scan for it from Intiface Central's device list the same way you would on Windows or Linux.
4. Run TIGHC
From source:
python3 gui.py
Or double-click the downloaded TIGHC executable. The
first time you open it, Gatekeeper will likely block it with
"Apple could not verify ... is free of malware" — it isn't
code-signed or notarized (a paid Apple Developer account is needed
for that, which this project doesn't have). Two ways past it:
- Right-click (or Control-click) the app → Open → confirm Open in the dialog that appears - this only needs doing once.
- Or open System Settings → Privacy & Security, scroll down, and click Open Anyway next to the message about TIGHC being blocked.
It still shows the 18+ age-gate exactly as on Windows and Linux.
Troubleshooting
- TIGHC opens fine but haptics never trigger. Almost always a missing Accessibility/Input Monitoring grant - see step 2. Double-check both panes, not just one; each covers a different capability TIGHC needs.
- "TIGHC is damaged and can't be opened" / opens then
instantly quits. Usually a stricter Gatekeeper quarantine
flag than the right-click → Open flow clears, typically from
downloading via a browser that quarantines the file. Clear it
directly from Terminal:
xattr -d com.apple.quarantine /path/to/TIGHC - A specific game's profile never matches.
Confirm the game's window title actually matches what's in that
profile's
window_titles- this isn't macOS-specific, but is worth checking first regardless of platform. - Bluetooth pairing issues in Intiface Central. This is a Buttplug/Intiface-level concern, not a TIGHC one - check Intiface Central's own docs/Discord if your toy won't pair; TIGHC only talks to devices through Intiface Central's WebSocket connection, it never touches Bluetooth directly.
Still stuck?
Open an issue on GitHub with what you've tried and what happened - macOS-specific reports are especially useful given the more limited testing above.