[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74620":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":13,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":15,"starSnapshotCount":15,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},74620,"spank","taigrr\u002Fspank","taigrr","Slap your MacBook, it yells back. Uses Apple Silicon accelerometer via IOKit HID.",null,"Go",4767,258,19,3,0,36,125,57,107.24,"MIT License",false,"master",true,[25,26,27,28,29,30],"accelerometer","apple-silicon","fun","go","iokit","macos","2026-06-12 04:01:15","\u003Cp align=\"center\">\n  \u003Cimg src=\"doc\u002Flogo.png\" alt=\"spank logo\" width=\"200\">\n\u003C\u002Fp>\n\n# spank\n\n**English** | [简体中文][readme-zh-link]\n\nSlap your MacBook, it yells back.\n\n> \"this is the most amazing thing i've ever seen\" — [@kenwheeler](https:\u002F\u002Fx.com\u002Fkenwheeler)\n\n> \"I just ran sexy mode with my wife sitting next to me...We died laughing\" — [@duncanthedev](https:\u002F\u002Fx.com\u002Fduncanthedev)\n\n> \"peak engineering\" — [@tylertaewook](https:\u002F\u002Fx.com\u002Ftylertaewook)\n\nUses 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.\n\n## Requirements\n\n- macOS on Apple Silicon (any M-series chip M2 or greater, or the M1 Pro SKU specifically, no other M1\u002FA-series chips!)\n- `sudo` (for IOKit HID accelerometer access)\n- Go 1.26+ (if building from source)\n\n## Install\n\nDownload from the [latest release](https:\u002F\u002Fgithub.com\u002Ftaigrr\u002Fspank\u002Freleases\u002Flatest).\n\nOr build from source:\n\n```bash\ngo install github.com\u002Ftaigrr\u002Fspank@latest\n```\n\n> **Note:** `go install` places the binary in `$GOBIN` (if set) or `$(go env GOPATH)\u002Fbin` (which defaults to `~\u002Fgo\u002Fbin`). Copy it to a system path so `sudo spank` works. For example, with the default Go settings:\n>\n> ```bash\n> sudo cp \"$(go env GOPATH)\u002Fbin\u002Fspank\" \u002Fusr\u002Flocal\u002Fbin\u002Fspank\n> ```\n\n## Usage\n\n```bash\n# Normal mode — says \"ow!\" when slapped\nsudo spank\n\n# Sexy mode — escalating responses based on slap frequency\nsudo spank --sexy\n\n# Halo mode — plays Halo death sounds when slapped\nsudo spank --halo\n\n# Fast mode — faster polling and shorter cooldown\nsudo spank --fast\nsudo spank --sexy --fast\n\n# Custom mode — plays your own MP3 files from a directory\nsudo spank --custom \u002Fpath\u002Fto\u002Fmp3s\n\n# Adjust sensitivity with amplitude threshold (lower = more sensitive)\nsudo spank --min-amplitude 0.1   # more sensitive\nsudo spank --min-amplitude 0.25  # less sensitive\nsudo spank --sexy --min-amplitude 0.2\n\n# Set cooldown period in millisecond (default: 750)\nsudo spank --cooldown 600\n\n# Set playback speed multiplier (default: 1.0)\nsudo spank --speed 0.7   # slower and deeper\nsudo spank --speed 1.5   # faster\nsudo spank --sexy --speed 0.6\n```\n\n### Modes\n\n**Pain mode** (default): Randomly plays from 10 pain\u002Fprotest audio clips when a slap is detected.\n\n**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.\n\n**Halo mode** (`--halo`): Randomly plays from death sound effects from the Halo video game series when a slap is detected.\n\n**Custom mode** (`--custom`): Randomly plays MP3 files from a custom directory you specify.\n\n### Detection tuning\n\nUse `--fast` for a more responsive profile with faster polling (4ms vs 10ms), shorter cooldown (350ms vs 750ms), higher sensitivity (0.18 vs 0.05 threshold), and larger sample batch (320 vs 200).\n\nYou can still override individual values with `--min-amplitude` and `--cooldown` when needed.\n\n### Sensitivity\n\nControl detection sensitivity with `--min-amplitude` (default: `0.05`):\n\n- Lower values (e.g., 0.05-0.10): Very sensitive, detects light taps\n- Medium values (e.g., 0.15-0.30): Balanced sensitivity\n- Higher values (e.g., 0.30-0.50): Only strong impacts trigger sounds\n\nThe value represents the minimum acceleration amplitude (in g-force) required to trigger a sound.\n\n## Running as a Service\n\nTo have spank start automatically at boot, create a launchd plist. Pick your mode:\n\n\u003Cdetails>\n\u003Csummary>Pain mode (default)\u003C\u002Fsummary>\n\n```bash\nsudo tee \u002FLibrary\u002FLaunchDaemons\u002Fcom.taigrr.spank.plist > \u002Fdev\u002Fnull \u003C\u003C 'EOF'\n\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\"\n  \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n\u003Cplist version=\"1.0\">\n\u003Cdict>\n    \u003Ckey>Label\u003C\u002Fkey>\n    \u003Cstring>com.taigrr.spank\u003C\u002Fstring>\n    \u003Ckey>ProgramArguments\u003C\u002Fkey>\n    \u003Carray>\n        \u003Cstring>\u002Fusr\u002Flocal\u002Fbin\u002Fspank\u003C\u002Fstring>\n    \u003C\u002Farray>\n    \u003Ckey>RunAtLoad\u003C\u002Fkey>\n    \u003Ctrue\u002F>\n    \u003Ckey>KeepAlive\u003C\u002Fkey>\n    \u003Ctrue\u002F>\n    \u003Ckey>StandardOutPath\u003C\u002Fkey>\n    \u003Cstring>\u002Ftmp\u002Fspank.log\u003C\u002Fstring>\n    \u003Ckey>StandardErrorPath\u003C\u002Fkey>\n    \u003Cstring>\u002Ftmp\u002Fspank.err\u003C\u002Fstring>\n\u003C\u002Fdict>\n\u003C\u002Fplist>\nEOF\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>Sexy mode\u003C\u002Fsummary>\n\n```bash\nsudo tee \u002FLibrary\u002FLaunchDaemons\u002Fcom.taigrr.spank.plist > \u002Fdev\u002Fnull \u003C\u003C 'EOF'\n\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\"\n  \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n\u003Cplist version=\"1.0\">\n\u003Cdict>\n    \u003Ckey>Label\u003C\u002Fkey>\n    \u003Cstring>com.taigrr.spank\u003C\u002Fstring>\n    \u003Ckey>ProgramArguments\u003C\u002Fkey>\n    \u003Carray>\n        \u003Cstring>\u002Fusr\u002Flocal\u002Fbin\u002Fspank\u003C\u002Fstring>\n        \u003Cstring>--sexy\u003C\u002Fstring>\n    \u003C\u002Farray>\n    \u003Ckey>RunAtLoad\u003C\u002Fkey>\n    \u003Ctrue\u002F>\n    \u003Ckey>KeepAlive\u003C\u002Fkey>\n    \u003Ctrue\u002F>\n    \u003Ckey>StandardOutPath\u003C\u002Fkey>\n    \u003Cstring>\u002Ftmp\u002Fspank.log\u003C\u002Fstring>\n    \u003Ckey>StandardErrorPath\u003C\u002Fkey>\n    \u003Cstring>\u002Ftmp\u002Fspank.err\u003C\u002Fstring>\n\u003C\u002Fdict>\n\u003C\u002Fplist>\nEOF\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>Halo mode\u003C\u002Fsummary>\n\n```bash\nsudo tee \u002FLibrary\u002FLaunchDaemons\u002Fcom.taigrr.spank.plist > \u002Fdev\u002Fnull \u003C\u003C 'EOF'\n\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\"\n  \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n\u003Cplist version=\"1.0\">\n\u003Cdict>\n    \u003Ckey>Label\u003C\u002Fkey>\n    \u003Cstring>com.taigrr.spank\u003C\u002Fstring>\n    \u003Ckey>ProgramArguments\u003C\u002Fkey>\n    \u003Carray>\n        \u003Cstring>\u002Fusr\u002Flocal\u002Fbin\u002Fspank\u003C\u002Fstring>\n        \u003Cstring>--halo\u003C\u002Fstring>\n    \u003C\u002Farray>\n    \u003Ckey>RunAtLoad\u003C\u002Fkey>\n    \u003Ctrue\u002F>\n    \u003Ckey>KeepAlive\u003C\u002Fkey>\n    \u003Ctrue\u002F>\n    \u003Ckey>StandardOutPath\u003C\u002Fkey>\n    \u003Cstring>\u002Ftmp\u002Fspank.log\u003C\u002Fstring>\n    \u003Ckey>StandardErrorPath\u003C\u002Fkey>\n    \u003Cstring>\u002Ftmp\u002Fspank.err\u003C\u002Fstring>\n\u003C\u002Fdict>\n\u003C\u002Fplist>\nEOF\n```\n\n\u003C\u002Fdetails>\n\n> **Note:** Update the path to `spank` if you installed it elsewhere (e.g. `~\u002Fgo\u002Fbin\u002Fspank`).\n\nLoad and start the service:\n\n```bash\nsudo launchctl load \u002FLibrary\u002FLaunchDaemons\u002Fcom.taigrr.spank.plist\n```\n\nSince the plist lives in `\u002FLibrary\u002FLaunchDaemons` and no `UserName` key is set, launchd runs it as root — no `sudo` needed.\n\nTo stop or unload:\n\n```bash\nsudo launchctl unload \u002FLibrary\u002FLaunchDaemons\u002Fcom.taigrr.spank.plist\n```\n\n## How it works\n\n1. Reads raw accelerometer data directly via IOKit HID (Apple SPU sensor)\n2. Runs vibration detection (STA\u002FLTA, CUSUM, kurtosis, peak\u002FMAD)\n3. When a significant impact is detected, plays an embedded MP3 response\n4. **Optional volume scaling** (`--volume-scaling`) — light taps play quietly, hard slaps play at full volume\n5. **Optional speed control** (`--speed`) — adjusts playback speed and pitch (0.5 = half speed, 2.0 = double speed)\n6. 750ms cooldown between responses to prevent rapid-fire, adjustable with `--cooldown`\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=taigrr\u002Fspank&type=date&legend=top-left)](https:\u002F\u002Fwww.star-history.com\u002F#taigrr\u002Fspank&type=date&legend=top-left)\n\n## Credits\n\nSensor reading and vibration detection ported from [olvvier\u002Fapple-silicon-accelerometer](https:\u002F\u002Fgithub.com\u002Folvvier\u002Fapple-silicon-accelerometer).\n\n## License\n\nMIT\n\n\u003C!-- Links -->\n[readme-zh-link]: .\u002FREADME-zh.md\n","spank 是一个有趣的 macOS 应用程序，它能够检测到你拍打 MacBook 的动作并通过播放音频回应。该项目利用了 Apple Silicon 芯片中的加速度计（通过 IOKit HID 接口访问）来实现这一功能，无需额外依赖即可运行。其核心功能包括多种模式下的音频响应，如默认的“疼痛模式”、基于频率变化的“性感模式”以及可自定义音频文件的“自定义模式”。此外，用户还可以调整灵敏度和冷却时间等参数以适应不同需求。spank 适用于希望为自己的 Mac 增添一些趣味性互动体验的用户，尤其适合喜欢探索新技术或寻找独特娱乐方式的人群。",2,"2026-06-11 03:50:10","high_star"]