Hi! Welcome to the Buttplug C# App Suite 0.1.0 tutorial.
You’re probably wondering why this isn’t on the buttplug.io website.
Well, truth is, the website kinda sucks to edit right now and I’m running WAY behind, so we’re just gonna have this on the message board for the moment. This information will be migrating to the website as I figure out layouts and stuff, but until that’s done, I’ll keep it updated here.
First off, if you haven’t yet, it’s probably useful for you to actually download Buttplug C#. If you haven’t yet, it’s at the link below:
We currently support the following hardware:
- Vibrating Toys/Hardware
- XInput gamepads
- Lovense Toys (All)
- Vibratissimo Toys (All?)
- Magic Motion Toys (All?)
- Stroking/Rotation Hardware
- Fleshlight Launch
- Vorze Interactive A10 Cyclone
A couple of notes on the platform:
- If you are on Windows 7-10, you can at least use XInput (XBox) gamepads with this.
- If you are on Windows 10 build 15063 (Creators Update), then you canuse bluetooth LE. To check this, run the “System Information” program and see what’s in the “Version” field. You’ll need a Bluetooth 4 Adapter for whatever machine you’re on.
What’s In the Buttplug C# Installer
When you install Buttplug C#, you’ll get two applications:
- Buttplug Websocket Server
- This will be the software you’ll probably use the most. It opens a local websocket server on your machine, that other applications and websites can talk to in order to control the sex toys available on your system. It does feature SSL via a self-signed certificate. For more info on this, see the SSL section below.
- Kiiroo Platform Emulator
- Emulates Kiiroo old toy control software, for use with certain legacy content.
But qDot, why didn’t you X/don’t you have X/why isn’t there X/etc
So the answer most likely is “Because there’s a grand total of 3 of us working on this project, and we’re doing it in our spare time for no pay (though we accept donations)”. But just in case, here’s a few answers for these types of questions.
Why does Buttplug only support bluetooth on Windows 10 15063?
That’s due to Microsoft. They only added ways to use BLE in the way we do as of that version, and they aren’t planning to backport it.
Why doesn’t Buttplug support other platforms like Mac, Linux, or phone OSs?
Yes, right now, this only runs on Windows. I realize this will probably not work for a lot of interested people, and we’re working on fixing that. See aforementioned tiny development team.
We went with windows first for 2 reasons. First off, most of the demand from people we were talking to was there. Also, we’re really interested in integrating this with game engines, and that’s the first platform of choice. Finally, there’s a good chance we can use the C# code with some extra additions and port to Xamarin for Android/iOS, giving us a foothold on some mobile development.
If you’re on Mac/Linux/Android/ChromeOS, we’ll be supporting those platforms first via Chrome WebBluetooth. Watch this bug for more info. Now that the C# is done, I’m going to be working on this full time so we can at least make web apps that talk to toys easily.
As for iOS, well, we’re still figuring that out. Navigating the app store with this stuff can be challenging, but we’ve got some plans.
In terms of native implementations for the above platforms, we’re hoping to do a completely cross platform implementation in Rust soon. See the buttplug-rs project for more details.
Why are all of the examples here straight porn? I thought this project was supposed to be inclusive?
We’re all for getting a variety of content, but there’s not a ton of free stuff out there right now. We’re trying to add some of our own encodings for things, but there’s only so much time in the day. If/when we figure out more content sources we’ll update this. Also, if you’re motivated enough to want to make your own encodings for videos, we’ve included instructions below on how to do that.
Why does it seem like the only thing there is to do with Buttplug is watch videos with toy sync?
We’re building a new platform here, one that hasn’t really existed in the open source space before. That means we’re having to ramp up content by ourselves too, and that requires balancing development work and content creation. We really do want to see games and webpages and all sorts of crazy shit made with this, it’s just going to take time.
However, my personal request: I really want a haptic game based in the twine engine. Just saying.
Why doesn’t Buttplug support [unsupported toy] yet?
Once again, developer resources more than anything. We have a HUGE list of toys left to reverse and support, and we’re doing our damnedest to add them as we can. If you’re really interested in getting a certain toy working, please post in our device support request thread and we’ll see what we can do.
If Buttplug is open source, how can I develop for it?
Well we would love for you to develop for buttplug. There’s… just not a lot of documentation yet. See the end of this document for what information I do have available right now.
If you want to ask questions, our slack is the best place to get ahold of developers. More information on getting an invite is available in this thread.
Using the Websocket Server
The Websocket Server is the easiest way to access Buttplug capable hardware and features. This application will be how many applications written for Buttplug will access the server, so it will be the one that (hopefully) sees the most use.
On running the websocket server, you will be presented with the server configuration screen. By default, the server runs on http://localhost:12345. There are options available to host it on all external interfaces (for instance, to be able to access the server from a mobile device), and to use the server via SSL.
There are times when access the Buttplug websocket server via SSL is needed.
- When you want to be more secure in general (like pretty much always)
- When accessing the server from secure context (translation: a website running over https)
In this case, you’ll want to:
- Stop the server
- Check the “SSL/TLS” box
- Start the server
This generates a new self-signed certificate, specific to this installation of Buttplug. In order to use this from a browser, you’ll need to first go to the url of your websocket server from the browser and accept the certificate exception.
Syncydink is a web based movie player for Buttplug. It can play 2D videos as well as 180SBS VR movies (though that requires a browser that can support WebVR, like Firefox 55, experimental Chromium builds, or Android Chrome), using multiple haptics file formats.
The latest version of Syncydink is hosted at http://buttplug.world/syncydink.
ScriptPlayer is a C# based movie player that supports direct connect to the Launch, as well as connection via Buttplug. More information on ScriptPlayer is available at
Scripts for Syncydink/ScriptPlayer
Scripts for movies for these two players are available at:
Also, for Syncydink, VirtualRealPorn haptics files (.ini files in the videos/config directory of VirtualRealPlayer) work.
Using the Kiiroo Emulator
Before the days of FeelMe, Kiiroo used to distribute their own node.js based software platform that worked as a webserver to talk to their Onyx/Pearl toys. Applications like Flicker.tv movies and VirtualRealPorn’s VirtualRealPlayer use this protocol. With our emulator, you can let those applications talk to any toy that Buttplug can communicate with.
We doubt that the Kiiroo Emulator will be seeing much continued usage, as commercial companies are no longer developing for it. However, we’ve kept it in our installer so that people can get more mileage out of players like VRP for now.
To use the Kiiroo Emulator:
- Start the program. We start the server automatically on boot. Note that it will be listening on http://localhost:6969, a local but unsecured port. This is how the original Kiiroo Platform Server ran, and what applications expect to talk to.
- You’ll be presented with the Kiiroo Emulator tab. The big box is your device list, which will populate when you scan for devices.
- Hit the Start Scanning button. This will cause the application to scan XInput for gamepads, and on Bluetooth LE capable machines, will start a Bluetooth LE scan.
- Once the device(s) you want to use show up in the list, hit stop scanning.
- To let the program know which devices you want to use, select them in the list.
Once you’ve got the devices you want selected, it’s time to use a program!
Flicker.tv was a site put up by Kiiroo a long time ago, and I think they forgot about it. Lucky for Buttplug users, they left 3 videos up for free download, with full haptics capabilities. To use a Flicker.tv video:
- Download one of the free videos with the zip file
- Unzip the file
- Run the Kiiroo Emulator, scan for/select your devices
- Open the PLAY.html in your favorite modern web browser (Firefox/Chrome/Edge)
- If the video is not showing the ability to play, that means it can’t connect to the emulator
- If the video can play, you’re ready to go.
Note that the videos here aren’t real fantastic quality in terms of haptics, but they’re free, so there ya go.
VirtualRealPlayer is the VR movie player put out by VirtualRealPorn. It’s just a simple Unity 180SBS player with some extra settings.
Note: To get haptics to work with VirtualRealPlayer, you need to either have an active account with VRP, or be able to set up mitmproxy to send the correct JSON back to fool the player.
To use VRP with the Kiiroo Emulator:
- Start the Kiiroo Emulator
- Scan, pick toys
- Before bringing up VRP, go to the VRPorn/Gay/Trans/Etc website and make sure the video you want to play supports Kiiroo. We do not currently support Lovense haptics
- Bring up VRP
- Log into your account. If you do not log in, even if you have the haptics file, haptics will not work
- Play movie
Making Your Own Movie Encodings
If you’d like to make your own encodings to work with Syncydink or ScriptPlayer, there are instructions on using Blender for encoding at
There’s also some support messages about this in the following RealTouchScripts forum thread:
We are working on our own dedicated movie encoders, and will make updates when these are ready for use.