Well, made an account here for script downloading and never thought I’d find myself actually posting, but I feel that I have info worth sharing so let’s do this.
So my first automated toy was The Handy, and after buying a few too many additional devices in search of “something better”, I feel like I can say that The Handy is still one of the most effective and versatile options available for the price.
That said, for my most recent purchase, I decided to go big to really see if I could find something on a different level. So I ordered a Nimblestroker, a “milking machine” style device starting at $1000 USD. A few weeks ago, it arrived, here are my thoughts.
tl;dr - The Nimblestroker is a very powerful device, but it might take some practice to get consistent sensations out of it via normal use. The device is functional with scripting and integrations, but there is very little content designed to work with the device. I do think there is a ton of integration potential with improved firmware and bespoke scripts, but as of right now, if you’re considering a purchase specifically for scripted content, I would probably hold off given the price.
So this post I guess will be part review and part information sharing about what the device is capable of, particularly in the context of integrations and scripted content. From the amount I’ve looked around, there is honestly very little information about the Nimblestroker itself, and even less so about connecting it to any integrations. In that regard, I hope that this post will help people who are interested in the device but don’t want to pull the trigger with how much it costs.
Part 1: Why Choose The Nimblestroker?
First things first, why did I choose to buy a Nimblestroker? In fact, before buying mine, I was weighing it against an SR series device, which even if I didn’t build it myself, would be substantially cheaper. So I’m sure many people here would be baffled by my decision, so here were my original reasons:
-
First, the “milking machine” style devices which the Nimblestroker belongs to seem to be touted as top-class in terms of the sensations they can produce.
And compared the similar Venus and Tremblr, the Nimblestroker just seemed like a straight upgrade, being capable of variable stroke length and built-in vibrations. -
Second, these style of devices reportedly run near silent, which for me is quite important as I share a floor with other people.
Even my Handy I don’t like to use when I know someone’s in an adjacent room, and I’ve heard that the SR series are quite the noisemakers. -
And finally, despite being pretty large and heavy, I felt that it would be easier to set up a Nimblestroker for a quick session, as I figured
I could just turn the device on and have it do its thing instead of having to strap into a convoluted hands free setup every time.
(Turns out I was way off the mark on this assumption, various factors do result in the setup still being pretty annoying, and the device is not
all that hands-free by default)
Part 2: Initial Experience - Manual Usage
Ordering the Device
Now of course, I could confirm none of these assumptions until I actually had the device, so how was my actual experience? So to start with, I put in a $200 deposit for the device in November 2023. The site had the estimated production date of April 2024 at the time. After the confirmation email, there were no further communications, which was kinda scary, but I was contacted to complete my order in mid March and received it a couple weeks later, not bad! Upon checking the site just now, they apparently aren’t doing it based on reservations any more, but their estimated delivery time is currently June 2024, so perhaps they have sped up their production a good deal.
So let’s start with a bit of how the device is to use normally. When you slip into the device and turn it on, the actuator (the very heavy pump unit) will pump air in and out of the receiver, which will expand and contract an inner sleeve, causing it to slide up and down due to air pressure differences or some sciency thing like that. Now the device comes with a handheld wired controller that you can use to change various parameters. First, you can change the speed, which will cause it to pump faster and thus stroke faster. Next, you can change the stroke length so it will move a greater distance up and down. Two other important controls are air-in and air-out, which lets you change the amount of air in the system. Pumping air into the system will decrease the level of suction, allowing the device to move more freely, while taking air out will increase the suction, making for a tighter fit, I might’ve gotten this backwards but you can figure it out probably. Anyways, if the device isn’t moving the way you want, fiddling with these can be useful. Just don’t overdo it as I hear overuse of these will strain the motor.
Finally, unique to the Nimblestroker, we also have vibrations we can control. There are 2 controls, one controlling the vibration strength and another that they call the vibration “nature”, which I think is kinda like frequency. These vibrations are pretty dang impressive. It’s all accomplished through the pump moving the air in a super fast pattern, and you can get anywhere from a pleasant buzz to shaking your house down.
How’s the Noise?
Speaking of shaking your house down, to report on the noise of the device, I will agree that for the most part, the device is more than quiet enough. While idle, the device does produce a very subtle high pitched whine, but it wouldn’t be audible outside the room you are in. At low speeds, the device doesn’t make much more noise than breathing deeply, and at medium speeds you’ll get a quiet thumping. Sometimes, depending on the amount of air in the device, there will be various suction sounds if the seal isn’t working quite right, but usually this will resolve itself when messing with the settings. Now if you wanted to max out the speed and vibrations, then we are actually gonna be in floor-shaking territory. The max settings can be a bit frightening, but I also think most people won’t find too much need to keep the device at that level for long.
So to conclude the general usage experience, how is it? Well, I have to say that it certainly is capable of feeling really really good. However, at least without a lot of experience using the device, I will say it seems pretty difficult to get consistent sensations. To give an example, the device is capable of performing nice long strokes when you first start it off on a low speed. But the moment you turn up the speed, those long, slow strokes turn into short, fast ones. And this is without actually adjusting the stroke-length. It’s not that the stroke length setting isn’t doing anything, it’s just that all the device knows how to do is move the air. And the movement of air doesn’t guarantee that the device will move the same distance every time. It just makes sense that, due to factors such as friction and air pressure, once you turn up the speed, the movement of the receiver can’t keep up. So often during a session, I would find myself having to manually move the device to start getting long strokes again, or constantly fiddle with the air amount to figure out how to make it move more on its own. Honestly, I would really get the best sensations when I would hold the device and help it move in its attempted pattern, but that is unfortunate because I was hoping it could be mostly hands-free.
As a quick tangent to that thought, I did notice that the receiver has a few small holes on the frame, potentially for mounting setups, so I did run some string through them and tie it to the arms of my chair to sorta keep it suspended, and that did help it move on its own; I bet there are some better ways to rig a good hands-free solution out there.
Overall, in general, the device is still really nice to use, but I personally still don’t feel like I’ve quite mastered it, and it would almost certainly benefit from a more advanced setup or, god forbid, a partner to use it on you.
If you’re curious by the way, in what types of sleeves and seals I went with, I did in fact order 3 sleeves and 2 seals. I think the combo I’m having the best experience with is my larger seal (size C) and a sleeve with ridges on the shaft end. Theoretically, I chose this sleeve to provide stimulation to the shaft during a climax while being gentle to the tip. Oddly, another one of my sleeves, which was completely smooth somehow triggered overstimulation on me far more (although I did choose the satin texture for that one which might be responsible for this). Of course, that could be a bit fun in its own right so I’ll keep that sleeve on standby in case I get bored. Also, the looser seal just lets the thing move more which I think is much better.
Part 3: Connectivity
Ok now finally for what you’re probably here for. How does the Nimblestroker work with connectivity?
So first things first, you will need to purchase the connectivity module alongside the main device for an additional $75.This is an extra box that plugs into the actuator in the place of the controller. After plugging into the actuator, you can plug the module into your PC via USB. Although the module replaces the handheld controller, there is then an extra port on the module to plug in the controller.
But here’s the thing about this module. It is still very much considered by the manufacturer to be a dev kit. Any connectivity between the Nimblestroker and any software is not officially supported.
If you have however, been following this device, then you are probably familiar with one particular firmware implementation. As of right now, the only piece of code really worth putting on the module is this one: GitHub - mnh86/NimbleTCodeSerial: Firmware that implements the Toy Code (T-Code) v0.3 protocol over USB/Serial Port for the Nimble Connectivity Module, an ESP32 controller for the NimbleStroker.
With this code flashed onto the module, the device can be connected to a few apps (notably Intiface Centeral and MultiFunPlayer) and receive T-Code commands.
Setting Things Up
Now before we get into how this performs, let me say that this setup isn’t the easiest, even as someone with a programming background. You will actually have to use git to clone the code into an IDE and build the code to the module. Still, all the info you do need is on the Github so it should be doable with enough patience. In case it saves anyone some time, my two sticking points were:
- I unnecessarily installed the Arduino IDE and setup the base project for the connectivity module.
This is just the base code for developing your own project so all of these steps that I found myself on shouldn’t be needed. - I spent so long trying to figure out how to “Upload” the program to my module.
Turns out once you install VSCode and PlatformIO, there is just an “Upload” button at the bottom of the screen and you can upload
to the device plugged into your USB port.
Connectivity Performance
Ok so let’s assume we managed to get the firmware installed, so how does it perform?
As mentioned, there are at least two things we can use this firmware with, Intiface Central and MultiFunPlayer. Possibly other applications can connect but these two are ones the developer has setup configurations for. So let’s start with one of the most common use cases, playing a video with a funscript. For all intents and purposes, the Nimblestroker is considered to be a linear-type device for funscripts. So when a script sends an “up” position, the device will attempt to move air in a way that the receiver slides up and vise versa. But recalling how the performance was in general use, I think you might be able to guess how this works in practice. If a funscript is just sending commands to rapidly move up and down, it’s quite likely that the device won’t produce much motion at all. Because as mentioned earlier, the device doesn’t actually know the position of the receiver, all it can do is move the air. And this will be reinforced by the fact that most funscripts just won’t be designed for this type of device. I’m sure with some work, scripts can be made that cater to the Nimblestroker’s strengths, but since the device isn’t widespread, there just isn’t much demand at the moment.
There is however, another factor that limits the Nimblestroker’s performance with scripts. With the main implementation of the firmware for the connectivity module, there is currently no way to control the device via the controller. Even though the controller plugs into the module, it won’t do anything unless there is code to support it. Technically that shouldn’t be a problem if we are just intending to have funscripts control all the device’s motions. However, there are a few controls that I think should be given to the user at all times, air-in and air-out. This way, the user could have slightly better control over the range of motion. Also, this could apply to the vibration settings, as your average script wouldn’t account for this, so letting the user play with it in real time would be appreciated. Now of course, all of the controls for the Nimblestroker can be sent as TCode values, so in theory, a multi-axis script written explicitly for the Nimblestroker could handle these all adjustments for you.
So once again, these shortcomings could be solved with a bit more work on the scripting end.
Making Some Modifications…
Or maybe…hold on. So to install the TCode firmware to the Nimblestroker, I had to open the actual code in the IDE and load it directly from there. And I do know how to program…
So hey, uh I just went and added controller connectivity to the firmware myself.
It was kinda really easy; the base implementation included variables for the controller (called the pendant in the code) and I just checked to see if I could read them. And so, I just managed to implement reading air in and out from the controller. After updating the code, I just uploaded the changed file, and now whenever the controller is plugged in, the air in and out commands will take precedence over any inputs from connected applications. So I think this is an improvement, although it’s a very hacky implementation. While I was at it, I tried my hand at adding vibration inputs. This was substantially trickier as I couldn’t for the life of me figure out how the vibration settings from the controller are encoded. I instead cheated and stole the stroke length input which wasn’t being used otherwise and set it to enable a fixed amount of vibrations. So if your stroke length is set to anything but 0, you can get some vibes and dial it back to 0 to disable. When I tested this with Intiface, I was able to enable some subtle vibrations with the controller, although it seems like it wasn’t actually working with MultiFunPlayer, so I suppose I didn’t really get it quite right yet. Even still, I feel like if I was able to implement this behavior in a few lines of code, someone out there can make a much more fleshed out implementation.
But if you really are interested in my code, I suppose I could post it here: Edit to NimbleTCode.h - Pastebin.com -link updated, see end of post for additional information about vibrations.
I don’t really want to publish it officially since it’s not really good quality, but at least the air part should work. If you have the original firmware installed and set up in VSCode, then all you gotta do is replace the contents of NimbleTCode.h with my file, then reupload to the device.
Alright, so with this updated code, how does the device perform with scripts now. Well, maybe a little better. Just giving us access to air-in and out still doesn’t solve the main issue of the device just not being able to keep up with normal scripts. So if you were to play a script on the Nimblestroker, if you want it to move with the script, you’d almost just have to take your own hand and move the device in sync with it. Wait…unless…
Multi-Device Sync!
The final thing I tried with the Nimblestroker was strapping it into my Handy and syncing both of them to the same script. Well at this rate, I kinda have only made my setup more complicated than it’s ever been, but will this work?
The answer, is that it sure will!
I did find that some scripts still work better than others with this setup. Scripts with high speeds and excessive pseudo-vibrations for the Handy will translate a bit weirdly to the Nimblestroker.
For the most part however, the two devices will sync up quite well. There is very little friction as the Nimblestroker will always be trying to move in the same direction as the Handy, but you can still certainly feel the extra squeezing and suction from the device. In addition to syncing up the two devices with MultiFunPlayer for playing funscripts, I was also able to connect them both to Intiface Central. With this connection, I even managed to get them working together with the awesome Easy Device Integration (EDI) which the fine folks in this community have been making game integrations with! Now, it might also be worth not even syncing up the two devices so you get some nice resistance; haven’t tried this yet.
Part 4: Conclusion
Potential Future Improvements
So that almost wraps up all the thoughts I have on the Nimblestroker so far. Before we get to conclusions, I do want to talk about what improvements could be potentially made to the device on the software side. First, I think a fully fleshed out manual control method for use with the connectivity module would help out a ton. This could just be re-enabling the pendant control, but also, what I think could be even neater would be a sort of control panel UI that you could run alongside whatever application you are connected to. The idea would be that your connected app could have control of the device, but at any time, you could override parameters from the panel. Kinda like when you have a Handy connected to something, you can adjust the stroke length manually on the machine. In addition to the default inputs, I would love to see an input for adding a delay to the stroker. I noticed that on Intiface Central and MFP, there didn’t seem to be an option to adjust the delays of individual devices.
But what I think would be perfect for the Nimblestroker would be a slight delay for use with another device like the Handy. This could potentially create some delightful resistance on the upstrokes.
And now I’m about to talk super advanced, and I don’t know if this would actually be possible, but it could revolutionize things if so. There just so happen to be some additional variables in the default Nimblestroker code that are not used by default. These variables are sensor data. We supposedly have access to certain feedback values such as how hard the device is working or something like that.
So now what if, and this is a big if, using the sensor data, someone could write code to adjust the device’s motion based on the feedback values. Maybe this would take a lot of sophisticated math, but what if it could be possible to have the stroker correct its position, possibly by changing the amount of air being moved, so that it could follow a more consistent stroke pattern. Anyways, that’s just my proposal, I doubt I’d be the one to figure it out, but if this device could be made to follow funscripts on its own power, I think it might just become the ultimate device!
Closing Thoughts
Well that was a lot longer than I expected. If for whatever reason you read all this then thanks I guess!
To actually draw some conclusions, I certainly feel like this device has a lot of potential, and most of it is on the software side. It is quite a steep purchase though, so if you are looking for the ultimate device for scripted content, you’re probably way better off with your SR series type machine. Really at the end of the day, I’ve just got myself a very fancy Handy attachment.
Which by the way, as a secret reward for reading this far, if you want to revolutionize your Handy experience for way cheaper, strap an Arcwave Ion in that bitch. The Ion’s an awesome device on its own (I like using it in the shower), but you give it the movement of the Handy and it goes absolutely crazy! Just limit the max stroke length to about 50-70% so the air pulses the device shoots out stay on you.
Ahem, anyways, I do hope that this post has at least provided some info to folks who were wondering about the Nimblestroker. I certainly found very little info about the device before buying one, so hopefully that won’t be a problem for anyone reading this! And if enough people take interest and more work goes into integration projects, there really could really be a bright future ahead for the device!
Update: Thank you to everyone for the positive responses on this thread! It’s really awesome to see a bunch of people taking an interest in this device that really didn’t have much discussion around it before! I’ve already gotten some useful info myself and have considerably upgraded my own setup! Oh, also the main reason I’m here is because I updated the post with nice headers to break it into more digestable sections, as it was a helluva text wall before. Enjoy!
Update 2: Updated the file for my modified tcode to handle manual vibrations better (updated the original link in the post but here it is again so you don’t have to find it: Edit to NimbleTCode.h - Pastebin.com). To add vibrations from the pendant now, you will now want to first activate the pendant (hold dial and both buttons) and then set a stroke length to turn on vibrations. When the pendant is activated, only your input will turn on and off the vibrations. If you deactivate the pendant, the vibrations instead will update from any incoming tcode values on the V0 axis, so now if you have any scripts or integrations that use this axis, you can take advantage of them! Oh also updated the a few of the global variables as suggested later in the thread to improve position and vibration performance.