Multifunplayer - TRANSFORM Single Axis Scripts into Multi-Axis

Jackie GIFs | Tenor

Hi all! Like many of us - the prospect of mutli axis scripts was mind blowing. However, when I finally got my OSR2+, I realized that there weren’t many multi axis scripts available. I found myself jacking off to videos I wasn’t even into simply because there were multi-axis scripts for them. Those were dark times.

I actually went back to my Handy for a while until I started reading about randomized motion through Multifunplayer. IMHO, it’s the best script player and heavily supported by @Yoooi with great user engagement and frequent updates (he is the real MVP).

I started playing around with adding randomized motion on the pitch and roll axises - and WOW. The experience was completely changed. I (and others who have also tried) feel that a single axis script with randomized multi-axis motion is 90% as good as dedicated multi-axis scripts. Moreover, it allows us to enjoy the TON of single axis scripts in new ways.

Here’s a quick tutorial on how to do it.

Prerequisites - You MUST have your pitch and roll axis limits tuned properly. If they are not, your dick may fall out and get smashed to smithereens. No one wants that.

When a single axis script is loaded into MFP, L0 is automatically activated (up/down). We want to enable R1 and R2 so we get some nice swerve motion.

  • Click on over to the R1 axis (roll).
  • Hit the “Link” button and set the target to L0 - now the Roll axis is activated when a script is loaded to L0
  • Leave priority unchecked - this will still allow multi-axis scripts to be loaded as usual and override the link to L0

Here we’ll be defining what type of motion will be used to make the OSR2+ roll.

  • We’ll set the motion provider to random (don’t worry, this won’t be wonky stupid random motion, we’ll define that in the next step)
  • Next, expand out the “common settings” pane

This is where we can do some fine tuning and blend the literal “up/down” action as a seed to blend with some random-ness to give it some flavor.

  • A good starting point for blend values is 50/50. If you set it 100% script, it will literally go “right” when the OSR goes “down”, and “left” when it goes “up”. Adding some randomness will prevent it from being too boring.
  • Check update when… " R1 axis has no script" and L0 axis is moving. This will prevent the roll/pitch axis from moving when there is no action and breaking immersion with weird movement.

  • Next, enable smart limit. This will adjust the additional axis in concert with L0. e.g. if you turn L0 travel limits down, it’ll also automatically turn down the other axis.

  • Next, enable auto-home. This will prevent your dick from being held in a funky angle if you stop the script or pause, etc. Delay is how long it’ll wait before sending your dick home. Duration is how long it’ll take to move back home - short delay will jerk it back home, while a long delay with move it more gently.

Lastly repeat the above for R2.

Have fun - let me know how it goes and if you have any questions or corrections (I’m not 100% sure of exactly how everything works, but have had great luck with doing the above.

If you enjoy anything about MFP at all - PLEASE PLEASE PLEASE consider subscribing to Yoooi’s Patreon. He does great work helping enable our hobby. He’s def deserving of a few bucks.


This is great, thanks for the comprehensive explanation. I only just now realised that MFP also supports connecting over TCP/UDP (and much more) :sweat_smile: I’ll be giving MFP a try to see if I can get that “random” motion for unscripted axes even better than with my current setup.

Yeah it’s super feature rich. And soooo many of the features in there are in response to community feedback as well. I’m gonna make another tutorial on how I setup my hotkeys for edging.


Thank you for this :slight_smile:

Few notes from me:

  • The “link script” is pretty optional, I just use random motion provider without linking scripts and it works very good.
  • You are using rather old version of MultiFunPlayer, so for example “smart limit” is no longer a toggle and is fully configurable, this is current configuration to match the old toggle (points at (25, 100) and (90, 0)):

  • Auto-home duration is just how long it will take to home to default value

Oh, man, I just can’t wait for my SR6 to arrive in the mail so I can start trying these things out. Many thanks for this lucid and simple tutorial.

I would be keen to hear about what settings people enjoy for the blend value of random vs script and why.

I’m looking forward to the tutorial for how to set up your hotkeys for edging.

This is a great write up. Thanks for making this. Even if there weren’t any mult-axis scripts I was interested in, this function alone really makes me want an OSR.

1 Like

I noticed a lack of multi-axis too. Obviously I could not let that stand since almost all of my scripts are multi-axis. If you want a super easy way to add multi-axis to a single-axis script, I’d recommend using a Leapmotion controller with Recaxis. I added multi-axis to a couple of scripts that others have written. My multi-axis accuracy to the video is probably pretty poor, but it’s hardly noticeable. The main funscript is where accuracy is felt.

What does this mean, and how do I do it? I’m very confused by what’s happening in the “smart limits” tab.

1 Like

Click on the smart limits tab of the axis you want apply a limit to. In the graph, double click in the empty space to add a node. If you just add one node in the middle, you will limit the range of motion of that axis to 50% of it’s full output range no matter what position the input commands. But, if you move the one node over to the lower left corner and then add another node to the upper right corner, you will have defined a sliding scale for input vs output so that at the bottom of the range, the movement is constrained to zero, but at the top of the range, the movement is unconstrained so that 100% of the range is available. I use this for the pitch and roll axes which I link to the movement of the L0 axis, plus a little random movement. I want the movements to be larger at the tip, and more limited at the base so as not to bend my cock, so I set up the limits with a node about 30% from the left and about 30% up from the bottom, and then another node about 75% from the left and 100% to the top. This limits the pitch and roll to about 30% movement range from the very bottom up to about 1/3 of the way up, and from there their range of motion increases to 100% by the time L0 is at 80% to the top.


Great write up! I actually didn’t mess too much with mfps features besides running scripts but I was wrong. Nice!

The smart linking is still a bit confusing imo but I will tinker around with it :slight_smile:

1 Like

@StyleMavin Thanks for such a detailed explanation. It’s honestly a bit over my head at the moment, but I’ll read through this some more and hopefully with some trial and error I’ll understand it better.

Can you automate this function in future versions for us dumbdumbs?

Could you show it visually in your screenshots to make it clearer ?

Here is a screenshoot of my R2 smart limits. I have a node on the lower left that makes the R2 (pitch) value not exceed 50% when the L0 value is at zero. This means your cock won’t get bent too hard while you’re balls deep. Then in the middle I have node that limits the R2 value to not more than 76% when the L0 axis is at 24%, so there can be more pitch movment when the stroke is about a quarter of the way up from the base, but it’s still not at maximum. Finally, I have a node on the right that lets the R2 axis go to 100% of it’s value when the L0 value is at 72% or more. This alows full pitching moves towards the tip, like a girl twerking on your schlong, or a girl giving you a great BJ with lots of looking up at you while she sucks the tip, or tilting her chin down to her chest while sucking the tip so she can slither her tongue over the front underside and top of your cock to really make you squirm. Toys with tongues make those moves feel awesome. Let me know if this helps.


I feel like the R2 setting makes the biggest difference, but the way I use it with single axis scripts is to link the R2 axis to the L0 axis to created a multi-axis effect. I also use axis inversion, and keybind that setting to a controller button, on the R2 axis to control if the toy is toward or away from me on each stroke. The way I remember what the R2 axis values translate into movement is; imagin a girl giving you head, and as she rises up to the top, her pretty face turns up towards you to look at you as she sucks the tip. This a a positive experience! This a what positive pitch axis values give you! So as the L0 axis values increase from 0-100, so do the pitch axis input values before smart limiting. The inverse button makes it so that as the toy moves to the tip (imagine the girl sucking you) she tilts her chin down to her chest to slither tongue up the underside and over the tip of your dick. That is what negative pitch values cause. Honestly that’s also a poistive experience, but I digress. The smart limiting makes most of that movement happen at the top of the stroke and prevents big moves at the bottom of the stroke.
The R0 Twist setting is also important. See how I have the ouput range limited? I do that so the the toy doesn’t twist 360 degrees since that is not realisitic. I limit it’s range and then assign the set middle offset value to the arrow keys on my keyboard so that I can adjust the twist center position to get the alignment right, because sometimes once a toy is inserted it is twisted to left or right relative to what it’s “correct” position should be. I also use a similar smart limit setting on the R0 axis so that the twist actions are bigger or faster at the top of the L0 range. That’s a matter of personal taste. Keep in mind that I use this settings with random movement generators in mind. If there is a script for an axis, I might turn off these limits so I can see how the scripted values feel.
Start with the R2 axis smart limits and see what you like, then try adjusting the other axes.


I can’t seem to get twist or roll axis doing any automatic randomized movements.

It works for pitch though…I used the same settings to enabled the randomized motions but nothing happens with twist or roll… help?

edit: hmm idk nvm it started working for some reason. The script I had loaded did have pitch, roll, and twist axis scripts I had been working on, but I had set MFP to “bypass” them. This seemed to work fine for pitch but maybe something funky was going on with the other ones? I deleted the scripts and removed any bypass settings, reloaded the video and now they all do random stuff. Neat!


Hi @Yoooi! I’ve been trying to setup MFP with the randomized actions for Single Axis scripts. I have a few questions that I hope you can answer.

  1. In the guide, I saw that I had to set the pitch and roll limits set, does turning on Smart Limit accomplish this or would that be something I would have to wait for the OSR2+ to arrive before tuning? (I think I know the answer, but I just want to be sure before I mess around with more settings)
  2. Can you verify if these look right? My R1 and R2 have the exact same settings, everything pointing to L0.

Link Script
Smart Limit
Smart Home

Also, I noticed there’s a red dot in R1, not entirely sure why. Do you know the reason for that? Any help is appreciated!


1 Like

MFP by default enables random motion on R0/R1/R2 so you dont really need to do anything.

If you mean tuning the range then thats something you have to do with a device to see what works for you.
If you use small range limits for pitch/roll you dont have to use smart limit, you use it when you want to have full range at the bottom of the stroke, but a small range at the top.

Dunno what is right, it depends what you want. The defaults will give you random motion for R0/R1/R2, you used script link and non standard motion provider blend, so all linked axes will use the same script with some random offset added, it wont be fully random.

You can hover over the dots and it will show you what is what.
Red more or less means that one of the features will modify the playing script on that axis.

1 Like