Use Velvet toys with Intiface

Intiface Central is the free hub app behind Buttplug.io, the open-source toy-control project. Hundreds of games, VR mods, video and script players and hobby projects talk to toys through it. With one small file, every Velvet toy works there too: no Velvet key, no code.

ToyIn Intiface today
Pixie and the other single-motor toysVibration, full strength range
AuroraSuction (its motor), full strength range
EmberVibration (heat isn't available in Intiface yet)
EclipseThe outer motor (the insertable motor isn't available in Intiface yet)

Tested on 18 Oct 2026 with Intiface Central 3.2.2. Official Velvet support in Buttplug is on its way, with Eclipse's second motor, Ember's heat, battery and the real model names. Once it's released, this file won't be needed.

Set it up (5 minutes)

  1. Install Intiface Central from intiface.com/central (Windows, macOS, Linux, Android, iOS). Open it once, allow Bluetooth, then quit it.

  2. Download buttplug-user-device-config-v5.json. Keep the file name exactly as it is.

  3. Put it in Intiface's config folder, next to the file buttplug-device-config-v5.json:

    • macOS: in Finder, choose Go → Go to Folder… and paste ~/Library/Containers/com.nonpolynomial.intifacecentral/Data/Library/Application Support/com.nonpolynomial.intifacecentral/config
    • Windows and Linux: search your computer for buttplug-device-config-v5.json and put the download in the same folder.

    If a buttplug-user-device-config-v5.json is already there, you've customised devices in Intiface before: see Already have a user config? instead of replacing it.

  4. Open Intiface Central, press the play button at the top to start the server, go to Devices and press Start Scanning.

  5. Switch your Velvet toy on. It shows up as Cupido Device. Open it and move the vibrate slider to try it. Any Intiface app can now use it.

Close the Velvet app on your phone first: a toy talks to one app at a time.

Why it works

Velvet toys share their firmware family with toys Buttplug already supports as Cupido: the same motor command (B0 03 … AA). Intiface just doesn't know Velvet's Bluetooth name (VR-…) and service yet. The file tells it: toys named VR-* with Velvet's service speak Cupido. It's Intiface's own user device config format.

Already have a user config?

Add this entry to the user_configs.protocols object in your existing file (keep what's there):

"cupido": {
  "communication": [
    {
      "btle": {
        "names": ["VR-*"],
        "services": {
          "53306c9a-0b82-4faa-9686-06a720c3b175": {
            "tx": "8b3c35a4-1d6f-4d15-bb3d-8a8b7b41b4f1",
            "rx": "e2a371f4-77f1-4bfc-b1aa-128d6478e395"
          }
        }
      }
    }
  ]
}

Developers on macOS can also run install.py from the SDK repository's integrations/intiface folder, which merges the entry and keeps a backup.

Intiface or the Velvet SDK?

Intiface (Buttplug)Velvet Toy SDK
Best forGames, VR, desktop and script players that already support ButtplugWeb apps, cam sites (Velvet Live), stories and media sync
Toy connectionThe Intiface app on the user's deviceThe browser, over Web Bluetooth
Velvet keyNot neededNeeded (free test key)
Safety limitsIntiface'sVelvet's: duration caps, auto-stop, stop on hide and close
All featuresNot yet (see the table above)Yes: both Eclipse motors, heat, presets, tracks

If your users already run Intiface, use it. For anything on the web, or with Velvet's safety limits built in, use the SDK.

Last updated 18 Oct 2026