System audio → calibrated force in real time. One signal engine, two clients, parity-locked in CI — not a slider toy bolted onto a BLE chat.
| Version | v1.5.0 |
| Clients | Windows (Rust · egui) · Android (Kotlin · Compose) |
| Devices | Lovense BLE · Buttplug / Intiface (desktop) |
| Sister app | ChloeVR — XR cinema + stage (shares this engine’s beat DNA) |
| Author | Ash Airfoil |
┌──────────────────────┐ ┌──────────────────────┐
│ WINDOWS │ │ ANDROID │
│ WASAPI loopback │ │ Visualizer / mic │
│ Buttplug · Intiface │ │ Direct Lovense BLE │
│ FIND BOOM tuner │ │ Same engine (port) │
└──────────┬───────────┘ └──────────┬───────────┘
│ │
└──────────┬─────────────────┘
v
fixed signal chain
FFT → gate → beat → ADSR → out
v
device 0…20
Play music. ChloeVibes listens to the system mix, finds the punch (kick, hat, pad…), and drives a haptic device with a musical envelope — not a raw loudness follower unless you ask for one.
Default path = Bass Drum boom: instant peak, long musical decay, near-zero floor. Press FIND BOOM once to auto-tune band / gate / trigger / envelope to whatever is playing.
Safety. This commands a physical device on a body. Desktop has a dead-man watchdog, panic-stop, and verified stop-all. Android does not yet have a watchdog. You own the ceiling. Red Stop all devices is always the right move.
Docs show the console UI only — no device photography, no adult media. The product is adult haptic software; the surfaces below are pro-audio style controls.

Desktop console — output level and envelope tracking live system audio (Advanced FFT + ADSR).

Windows — transport, gate, spectrum, envelope, presets, device panel.

Android — signal chain (left) and optional Climax engine (right).
- Open the latest release
- Download:
- Windows:
ChloeVibes-windows-x64.exe - Android:
ChloeVibes-android.apk(debug, sideload)
- Windows:
- Windows: run the exe. Prefer Intiface Central on
ws://127.0.0.1:12345; if nothing is listening, the app starts an embedded Buttplug server. - Android: sideload the APK, grant mic / nearby devices as prompted (Visualizer needs
RECORD_AUDIOeven for system audio).
Stable rolling links (same binaries as the versioned Latest when kept in sync):
| Platform | URL |
|---|---|
| Windows | https://github.com/coldbricks/Chloe-Vibes/releases/latest/download/ChloeVibes-windows-x64.exe |
| Android | https://github.com/coldbricks/Chloe-Vibes/releases/latest/download/ChloeVibes-android.apk |
| Step | What to do |
|---|---|
| 1 | Connect the device (scan → enable) |
| 2 | Play a track with a clear kick |
| 3 | Press FIND BOOM (desktop) or pick Bass Drum / a BOOM tempo macro |
| 4 | Raise volume / multiplier only as far as you mean to |
| 5 | Stop all devices when done |
Expert knobs (trigger shape, slew, curves) live under OVERRIDE — the main surface is presets + FIND BOOM.
| Area | Change |
|---|---|
| FIND BOOM | Max-dynamic bass-drum tuner (UI name for AUTO-LOCK) |
| Bass Drum default | Kick-only natural BOOM path |
| Domi hang fix | Pluck/boom release to true zero; device rest floors; motors actually stop |
| UI declutter | Expert controls collapsed; auto-scan on connect |
| Crash hardening | WASAPI capture panic recovery; session heartbeat log |
Order never changes on either client:
SYSTEM AUDIO
→ Spectral (2048-pt FFT, 8 bands)
→ Gate (hysteresis · optional auto)
→ Beat (onset · tempo · 76 ms pre-fire)
→ ADSR (A/D/S/R · curves · overshoot)
→ Climax (optional · off by default)
→ Output map (0…20 · asymmetric slew)
→ BLE / Buttplug
Desktop can switch to Original Chloe Vibes (RMS) loudness mode. Android always runs the advanced chain.
Deep dive (parity, protocols, limitations, build): docs/TECHNICAL_REFERENCE.md
Design notes: docs/AUTO_LOCK_DESIGN.md · docs/TEMPORAL_ARCHITECTURE.md
| Windows | Android | |
|---|---|---|
| Transport | Buttplug 9 → Intiface (or embedded) | Direct Lovense BLE (NUS) |
| Reach | Anything the server exposes | Lovense over BLE |
| Dual-motor | Per actuator index | Edge / Edge 2 only (fixture-verified) |
# Desktop
cargo build --release
cargo test
cargo test --test parity
# Android
cd android && ./gradlew assembleDebug testDebugUnitTest| Desktop package | chloe-vibes (Cargo) |
| Android applicationId | com.ashairfoil.chloevibes |
| Android SDK | min 26 · target / compile 35 |
| Version | 1.5.0 · versionCode 5 |
CI: fmt · clippy -D warnings · release build · Rust + Kotlin parity golden.
Windows Android
─────── ───────
eframe / egui console Jetpack Compose UI
WASAPI capture thread Visualizer / mic
src/audio.rs ──────── parity ─→ Kotlin engine port
src/auto_lock.rs (FIND BOOM) (presets mirrored)
Buttplug client BleDeviceManager
| Version | Notes |
|---|---|
| v1.5.0 | FIND BOOM · Domi hang · UI declutter · crash hardening |
| v1.4.0 | AUTO-LOCK beat lock + punch |
| v1.3.0 | Reliability · safety · first AUTO-LOCK |
Always prefer the latest release.
Actively developed on real hardware (Domi / Edge). Desktop is the FIND BOOM + safety reference; Android tracks the same engine via parity CI.
Ash Airfoil — product, signal taste, hardware QA
Stack: Rust · egui · Buttplug · Kotlin Compose · Lovense BLE
ChloeVibes is a local control surface. It does not host media or device catalogs.
You provide the audio and the hardware. Adult-oriented product; repository screenshots are UI-only.
