Buttplug (Sex Toy Control Library) Hits v1 Milestone
nonpolynomial.com
nonpolynomial.com
In all seriousness, many of the devices in this space are woefully insecure - this is just a library to control them using whatever native protocols they expose.
I suspect that engineering of any kind has more perverse or pervertible terms than any sex toy industry.
Edit to add: a thread of sequential puns and then..
(It's as sfw as a sex toy hacking site can be)
I wonder what the difference is, maybe just a more mature audience? Nerdier jokes?
on the other hand the potential damage is not that high (unless the motors could be overheated quickly)
Blowjob Injection Attack - https://news.ycombinator.com/item?id=24702282
https://mascherari.press/oniondildonics/
She's now running the Open Privacy project, which is doing great work on general anonymized communication:
> Someone is going to fuck this.
I love this project.
That said, there are some security/privacy features built into the architecture to reduce metadata dissemination, I'll be outlining those in the developer guide at some point.
As for talking to people about the project, I've been a public face for the field of sex tech since like 2005, so by this point I'm pretty used to it. It's on my resume, I have academic publications and book chapters on the subject, I've spoken about it at all sorts of conferences around the world, so I've kinda settled into being "The Buttplug Guy".
It took a ton of hard work and image building to get here though, so it's a cliff I don't really recommend anyone else try to climb without realizing how much work it is.
Openness about sex really is one way to improve the health of the societal zeitgeist.
As an example, one of the things I was working on right before COVID-19 hit was a book chapter on digital proxemics, i.e. how we map and relate personal space in digital realms. This project and how it's been utilized to augment online intimacy was a big part of that, and I turned in the book chapter to the publisher the week COVID-19 lockdowns started to hit in the US (still no pub date tho :( ), so it's been a lot of seeing how those ideas play out in large scale since.
There's a dichotomy in this project that's difficult to resolve:
- Community wants sex toy access because there isn't much else out there that does this.
- I wanna learn new stuff and also have a weird "LET'S PUT DOOM ON IT" mentality of having the library support everywhere.
So we end up with support for lots of toys, but it's on top of a complicated, violently async rust library that is in some cases compiled to WASM, which is a whole stack of technologies not a lot of people are familiar with.
To torture another metaphor, I've ended up building the hulking game engine for sex toys, when a lot of people would be fine with some Atari 2600 games that vibrate. Lots of people are going to have 1 toy they want to control with 1 simple interface, where my interest lies in "how does someone release a game on Steam that seamlessly supports whatever the user shows up with".
The updated developer guide (https://buttplug-developer-guide.docs.buttplug.io) is my first crack at trying to cater to all audiences, but it's got a long way to go, and the only way to test documentation is to hopefully wait for feedback from people who read it.
But that's why try to I keep both the protocol and reverse engineering documentation up to date. I don't want people to have to go and reimplement things, but if it has to happen, I want to make it as easy on them as possible.
Otherwise, could you tell us about where is/was the 80% effort to build what the library does, and what would be the next 20% / last mile to consider it "done"?
Everything that v1 rust does right now, our C#/JS versions did before, so the technical work there was mostly fitting it from gc'd runtime'd languages into Rust. I'm much better at Rust now though!
The majority of the work technically AND design-wise (for me at least) is the haptics abstraction. Our protocol is built on a system of "verbs" at the moment, i.e. "vibrate", "rotate", "stroke" (though we call it linear because it only goes one direction at a time), etc... I'm writing a larger blog post on this, but to summarize, it's REALLY hard to build a language around this that's general. For instance, the Lovense Max (a onahole style toy) has an air bladder that inflates/deflates. It's about the only thing that has that. So do I just make a new verb called "inflate"? Do I try to match it to other toys with constriction like systems and call it "constrict"? Does it even matter?
But, that's an ongoing problem. In terms of "done", I think the next big milestone will be mobile app support. We work on mobile web browsers in a couple of different ways, but Buttplug still needs app support, both native and for things like cordova/react native/etc... The biggest issue there at the moment lies in our bluetooth library (btleplug, https://github.com/deviceplug/btleplug), because getting the FFI via JNI to android is going to suck (even though I can crib off Servo's WebBluetooth impl, which worked on Android).
- Phil Karlton
Otherwise, I am always really interested in ways people build for themselves that they're willing to share with others. So the answer to this question tends to be "my dream ideas are the stuff I can't possibly dream of" :)
We'll see if I get any invites. Seems like a very BLFC kinda panel.
There's a TON of financial gain to be had, and I am incredibly bad at actually harnessing that because I'm too obsessed with silly details rather than user wants/needs. But it's a balance of keeping myself happy/learning and having cash, and I'm OK enough on cash that I do this to keep myself happy and learning.
Adoption is... decent? One of the interesting parts of this is that I will really never know how many people are using it because a lot of people will take the project, implement something, but definitely not post it to somewhere like github. And really, that's fine. There are games using the library on Steam right now, a few commercial systems that use it, and I get lots of reports from independent developers doing different things with it, so that'd good enough for me.
You know I leave the in-depth yiff stories for twitter. :|
Your interface is pretty generic. Vibrating and rotating at a certain amplitude it seems? Are there toys out there where you can also set both amplitude and frequency?
It’s a big forum of various companies (mine included) discussing different issues facing haptics companies. Has been around since March 2020, is a really neat place.
As for actuators, it’s either ERMs or incredibly odd things like friction/pressure systems (some with fairly off kinematics, for instance https://patreon.com/tempestvr) and electrostimulation. No LRAs yet, that’s why I’m trying to get to supporting the nintendo joycon and vr controllers, to start thinking about how signal generation should work in that context.
And yeah the top level library is incredibly generic, mostly to just get people using the library at all. I don’t know how long that’ll last, due to the complexity of actuators we’ll be dealing with, but I’ve got some strategies to grow that out a bit. Happy to go into those if you’re interested.
For a library that deals with hardware and aims for compatibility, C seems like the obvious choice. Most languages have C bindings, and most hardware-oriented libraries have a C interface. Rust looks like a nice language and could be used for all the internal logic, but expose C interfaces to the outside world for compatibility (I think Rust can do that).
It's not C/C++ because I loathe C/C++, and if I never write C/C++ again, it will be too soon. The reasons for these feelings are borne out of decades of experience with them.
Of course, I'm currently an embedded engineer again at the moment, so "never" is actually "every day" unfortunately. Luckily embedded Rust is really looking good these days, and I've been using it a bit lately.
I don't really care about what other libraries do, and really, Buttplug isn't your normal "hardware driver" library. Either way, other libraries made their choices, I made mine. I hate C/C++ enough that I'd never spend my free time on it, and this is basically my back yard shed project that also happens to be a business, so it gets done with technologies I'm comfortable in.
As for exposing things, I mention that C/C++ FFI is coming in the post, mostly for Unreal Engine support. I currently have Rust exposing cdecl calls for the FFI, but it's bottlenecked to be as few calls as possible, mostly flinging protobufs back and forth because that's easy. The main thing holding up C/C++ FFI is figuring out how to translate some of the async paradigms I use to C/C++ in a way that will be generally useful.
https://www.metafetish.com/2006/02/17/je-joue-part-2-my-god-...
Presenting something like this library directly to the user will end up in product death. What I'm building is a tool for developers to refine that end product interface specifically so the user (who is usually horny and does not care about technological details) can have something they can work while in that state.
But it's gonna take a while to get there.
We do have our CLI server compiling for RPi0W if you're interested, though I need to update that soon. This is well into the "no so documented" part of the project tho, so it's not super easy to use yet.
To elaborate on the setup, it could manage four or five toys at the same time; all controlled by the nanoKontrol. I could even record custom loops and patterns for each "track" to have more fun.
Yeah, 4-5 toys sounds about right. I've managed to get 6 running simultaneously on one radio (BTLE spec I believe says 2 at most?), but there was massive dropout.
Perhaps some picture with components and relations between them would be helpful?
But there's some explanation too:
https://buttplug-developer-guide.docs.buttplug.io/intro/intr...
:D
Amazing. Nice to see people dedicated to the fine arts of buttplug manipulation.
Just FYI:
> August 2017 - Kyle incorperates Nonpolynomial
But yes I do run a startup on this software! Mostly for consulting for larger product manufacturers, though there may be some services work happening in the future. I've been poking at some ideas around containerizing teledildonics services, but there's a whole host of social and legal issues around the idea that will take a while to iron out.
Being a single developer project that's open source but also a company and yet I already have multiple lawyers, I really can't afford to be a test case for that.
> 2013 - First Python implementation, known as “Fuck Everything”.
> Buttplug v1.0.0 is available in the following flavors:
> Rust – Crates.io, Github
> C# – Nuget, Github
> JS/Typescript (via WASM, Web-only currently) – NPM, Github
I expect we'll see some interesting issues posted there eventually
Technically I think btleplug might already work for iOS (I haven't tested this but I've heard the corebluetooth calls stay the same?), and I've gotten the library to compile for iPhone, but I still need to build Swift FFI bindings.
The web version currently "works" via the WebBLE browser that's a available in the app store, which is just the webview polyfilled for WebBluetooth: https://apps.apple.com/us/app/webble/id1193531073
But I wouldn't call that a great experience.
The hope is to support both android and iOS for apps soon though!
Just don’t call the app “buttplug”. :)
I was looking through the docs and the only useful thing seemed to be the low-level code if I wanted o make my own applications on top of it.
The reverse engineering work is important, but the tooling/UI needed work. I actually want to contribute to this to help, but it's a bit far down on the backlog of life.
In fact, that's exactly what xtoys has done:
They're just using the reversed protocols my project documented, while building outside of my admittedly complicated library interface. It's been a great project to watch grow, because while I'm kinda hyperfocused on platform and hardware support, they're going breadth-first with user focused features on a WebRTC platform.
You have to hone your expectations for free projects. Native or native-like UI toolkits are expensive on time. Time is the biggest problem with making free software for people. Now if this were a commercial product - yes I agree with the criticism. There's no reason at that point that they couldn't do GTK3, QT, flutter, etc.