spank
Slap your MacBook, it yells back.
"this is the most amazing thing i've ever seen" — @kenwheeler
"I just ran sexy mode with my wife sitting next to me...We died laughing" — @duncanthedev
"peak engineering" — @tylertaewook
Uses the Apple Silicon accelerometer (Bosch BMI286 IMU via IOKit HID) to detect physical hits on your laptop and plays audio responses. Single binary, no dependencies.
Requirements
- macOS on Apple Silicon (M2+)
sudo(for IOKit HID accelerometer access)
Install
Download from the latest release.
Or build from source:
go install github.com/taigrr/spank@latest
Usage
# Normal mode — says "ow!" when slapped
sudo spank
# Sexy mode — escalating responses based on slap frequency
sudo spank --sexy
# Halo mode — plays Halo death sounds when slapped
sudo spank --halo
Modes
Pain mode (default): Randomly plays from 10 pain/protest audio clips when a slap is detected.
Sexy mode (--sexy): Tracks slaps within a rolling 5-minute window. The more you slap, the more intense the audio response. 60 levels of escalation.
Halo mode (--halo): Randomly plays from death sound effects from the Halo video game series when a slap is detected.
Running as a Service
To have spank start automatically at boot, create a launchd plist. Pick your mode:
Pain mode (default)
sudo tee /Library/LaunchDaemons/com.taigrr.spank.plist > /dev/null << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.taigrr.spank</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/spank</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/spank.log</string>
<key>StandardErrorPath</key>
<string>/tmp/spank.err</string>
</dict>
</plist>
EOF
Sexy mode
sudo tee /Library/LaunchDaemons/com.taigrr.spank.plist > /dev/null << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.taigrr.spank</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/spank</string>
<string>--sexy</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/spank.log</string>
<key>StandardErrorPath</key>
<string>/tmp/spank.err</string>
</dict>
</plist>
EOF
Halo mode
sudo tee /Library/LaunchDaemons/com.taigrr.spank.plist > /dev/null << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.taigrr.spank</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/spank</string>
<string>--halo</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/spank.log</string>
<key>StandardErrorPath</key>
<string>/tmp/spank.err</string>
</dict>
</plist>
EOF
Note: Update the path to
spankif you installed it elsewhere (e.g.~/go/bin/spank).
Load and start the service:
sudo launchctl load /Library/LaunchDaemons/com.taigrr.spank.plist
Since the plist lives in /Library/LaunchDaemons and no UserName key is set, launchd runs it as root — no sudo needed.
To stop or unload:
sudo launchctl unload /Library/LaunchDaemons/com.taigrr.spank.plist
How it works
- Reads raw accelerometer data directly via IOKit HID (Apple SPU sensor)
- Runs vibration detection (STA/LTA, CUSUM, kurtosis, peak/MAD)
- When a significant impact is detected, plays an embedded MP3 response
- 500ms cooldown between responses to prevent rapid-fire
Credits
Sensor reading and vibration detection ported from olvvier/apple-silicon-accelerometer.
License
MIT