Skip to content

About

Open-source Android remote for Lovense toys over direct Bluetooth LE — no app, no account. Multi-toy, one-hand XY pad, PIN-protected remote sharing (LAN + internet), FR/EN/ES.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Lovense Remote: one remote for 800+ toys

Lovense Remote

Unofficial, community project. Not affiliated with or endorsed by Lovense. LOVENSE is a trademark of its owner.

One free remote for 800+ toys from 120+ brands

Lovense, Satisfyer, We-Vibe, Svakom, Lelo, Kiiroo, Magic Motion, JoyHub, Hismith, Vorze… controlled straight from your Android phone over Bluetooth — no vendor app, no account, no cloud.

English · Français

803 models 120+ brands GPLv3 Android 8+ AOSP i18n CI Release

   

⬇️ Download the APK · 🧸 Is my toy supported?

🌐 Website & toy search · ⭐ Useful? Star the repo — it's how other people find it.


💡 In short

  • One app instead of ten. Stop installing a different app (and creating a different account) for every brand: this app speaks the Bluetooth protocol of 803 toy models from 127 brand families.
  • Several toys at the same time. Connect up to 5 toys — even from different brands — and drive them one by one or all together.
  • The screen adapts to your toy. A vibrator gets a vibration slider, a rotating toy gets a direction button, a heated toy gets a heat switch, a stroker gets a speed control… you only see what your toy can do.
  • Private by design. Everything stays on your phone. No sign-up, no tracking, no Google services. Sharing with a partner is optional and locked behind a PIN and your approval.

🧸 Supported toys — 803 models, 127 brand families

The full, searchable list (model by model, with each toy's functions) is in docs/SUPPORTED_TOYS.md. The biggest families:

Brand Models Brand Models
JoyHub 159 Sexverse 22
Galaku 97 Honey Play Box 21
Satisfyer 84 Hismith 20
Svakom 51 Lelo 15
Lovense ✅ 36 Libo 14
Kiiroo 31 Sistalk MonsterPub 13
Magic Motion 29 Sensee 12
Foreo 26 Love Distance 9
We-Vibe 23 MysteryVibe · Vorze 8 · 7

…plus Vibio, VibCrafter, Fluffer, Motorbunny, OSSM, Lioness, Aneros, Je Joue, Lovehoney, Picobong, Pink Punch, Amorelie, Adrien Lastic, F-Machine, Nexus, Utimi, Zalo, TryFun, Umove and ~80 more.

What those toys can do in the app:

Function Toys How you control it
📳 Vibration 743 Slider per motor; one-thumb XY pad for two-motor toys
🔄 Rotation 59 Slider + direction flip button
↕️ Thrusting 130 Speed slider
💨 Suction / pump 51 Level slider
🔥 Heating 21 On/off switch, or a temperature slider in °C
🎚️ Strokers 19 Speed slider — the app generates the strokes
💡 Lights 2 On/off switch or brightness
💧 Lube pump 2 Spray button
🔋 Battery 200+ Shown next to the toy's name

✅ Tested vs 🧪 experimental. Lovense is tested on real hardware. Every other brand uses protocols reverse‑engineered by the Buttplug community and is marked experimental in the app: it should work, but hasn't been checked on a real toy by this project. Reports (it works / it doesn't) are very welcome in the issues!

🚫 Not supported yet: The Handy, KGoal Boost, Muse, Cueme, SayberX, Kiiroo V1, Libo Karen, Twerking Butt. They show up greyed out in the scan.

🚀 Quick start

  1. Install the APK from the latest release (Android 8.0+).
  2. Turn your toy on — and make sure its official app is closed, since a toy only accepts one connection at a time.
  3. Open the app. It searches for nearby toys on its own; yours appears with its brand and model name. Tap it to connect (tap others to add more toys).
  4. Play. Use the sliders, the XY pad, presets or patterns. STOP ALL (also available as a quick-settings tile) stops everything instantly.

A few toys need an extra pairing step, and the app tells you when: press the power button on Lelo toys, enter PIN 6496 on Lioness.

✨ All features

🔵 Direct Bluetooth Scan, connect and control from your phone; automatic reconnection.
🧸 Multi-toy Up to 5 toys at once, mixed brands; drive one or all.
🎚 Adaptive controls One control per function of the toy (see table above).
👍 One-hand XY pad One thumb drives both motors of two-motor toys.
🎛 Patterns Built-in patterns, Lovense .ta import, random Tease mode, record mode (play → save as a pattern).
🔗 Remote control by link A partner controls your toys from the same Wi-Fi or over the internet / 4G (see below).
🌙 Background Keeps working with the app closed; quick-settings STOP tile.
🌍 Languages & themes English / French / Spanish, dark & light.
🟢 100 % AOSP No Google Play Services — works on GrapheneOS, LineageOS…

🔗 Remote control by link

  1. Tap Share: you get a Same Wi-Fi link. The Internet link is optional: it is only created after you accept that traffic goes through the third-party relay localhost.run.
  2. Send the link to your partner, and tell them the 6-digit PIN separately.
  3. When they open it, you approve them on your phone. Only then can they drive your toys, from any browser — no app needed on their side.
  4. Stop sharing whenever you want; it also expires on its own after 30 minutes. When control stops (share stopped or expired, controller gone or kicked, STOP tile), your toys are stopped too.

🔒 Security & privacy

Read the full privacy policy.

Knowing the link is never enough to control your toys:

  • Secret link — 128-bit random id, new on every share; old links die at once.
  • 6-digit PIN — never in the URL, checked in constant time; 5 wrong codes stop the share.
  • Your approval, per person — you accept (or kick) each controller individually.
  • Hardened web page — strict CSP, anti-framing, Origin check against cross-site WebSocket hijacking, small frames, rate limiting, max 3 sockets, 10 s to authenticate.
  • Minimal network surface — listens only on 127.0.0.1 and the Wi-Fi IP, never on mobile data / VPN interfaces.
  • Pinned relay key — nobody can impersonate the internet relay.
  • No backups of app data; deep links are validated and need your OK.
  • Discreet — screenshots blocked, hidden in Recents, neutral notification on the lock screen.

Limits you should know: same-Wi-Fi sharing is plain HTTP (use a Wi-Fi you trust). Internet sharing goes through localhost.run, a third party that can see the control traffic — the PIN and your approval remain the gate. If you use a firewall app, allow network access for this app or sharing can't start.

❓ FAQ

My toy isn't in the scan.

Make sure it's switched on, not connected to its official app or another phone, and that Bluetooth and location/nearby-devices permissions are granted. Then check the list: if it's not there, open an issue with the name the toy shows in a BLE scanner app.

What does "experimental" mean? Can it damage my toy?

It means the commands come from community documentation and haven't been tried on that model by this project. The app only sends the same kind of commands the official apps send, and only to the channels that model is known to use.

Why is it called "Lovense Remote" if it supports other brands?

It started as a Lovense-only remote; multi-brand support came later. It is not affiliated with, endorsed by or sponsored by Lovense or any other brand; brand names are only used to say which toys are compatible.

TODO (maintainer): the app name reuses the name of Lovense's official app. A rename (e.g. "Edge2 Remote", matching the package id) is planned but not decided yet; it would touch the app label, store listings, F-Droid metadata and the repository name.

🛠 For developers

ANDROID_HOME=~/Android/Sdk ./gradlew :app:assembleDebug   # build
./gradlew :app:testDebugUnitTest                           # unit tests

Kotlin + Jetpack Compose · minSdk 26 · target/compile SDK 35. See CONTRIBUTING.md, CHANGELOG.md and SECURITY.md.

🧩 Architecture
  • ble/ — scan and identification (ToyManager), one ToyConnection per toy (GATT with named endpoints, serialized operations, coalesced writes, keepalive, stroke generator, battery, reconnection).
  • ble/db/ — the device database (assets/devices.json, generated from the Buttplug device config by tools/gen_devices.py).
  • ble/proto/ — one ProtocolHandler per protocol (~128), ported from Buttplug: handshakes, encryption, checksums, per-function commands. See docs/research/other-brands.md and docs/research/lovense-ble-protocol.md.
  • RemoteEngine — process-wide core (BLE + server + tunnel + state), so control survives the app being closed.
  • remote/ — embedded HTTP + WebSocket server, web control page, internet tunnel (SshTunnel).

Regenerate the supported-toys list after updating the database: python3 tools/gen_supported.py.

⚖️ License & credits

GPLv3. Not affiliated with, or endorsed by, Lovense or any other brand listed here.

The device database and protocol implementations come from Buttplug (BSD-3-Clause, © Nonpolynomial Labs) — see THIRD_PARTY_NOTICES.md. Huge thanks to the Buttplug / Intiface community for years of reverse engineering.

🤖 Vibe coded — this app was largely written with an AI coding assistant, then reviewed and tested by hand. Read the code (and the security section) before trusting it with anything that matters.


⭐ Star history

Star history chart

About

Open-source Android remote for Lovense toys over direct Bluetooth LE — no app, no account. Multi-toy, one-hand XY pad, PIN-protected remote sharing (LAN + internet), FR/EN/ES.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages