MultiFunPlayer v1.32.0 - Multi axis funscript player - Now with SLR script streaming

First press the settings Icon on the very top of the app to go into the settings menu, then press the “Shortcut” tab.

Now choose “Button press” in the Shortcut dropdown menu at the top of that tab.

Press the grey-ish “Start Capturing” button, next to the “Gesture” dropdown, and then press the key on your keyboard you would like to map, and wait for the capturing process to finish.

Now press the “Gesture” dropdown and choose the key you just pressed, and then press the green plus sign to create your new shortcut.

It will appear in the shortcuts list down below.

Select your new shortcut in the list, and then unfold the “Actions/Settings” menu at the bottom of the app.

In the list of actions, scroll down until you find Serial/0::Axis::Range::Maximum::Offset and press the plus sign to the right of the name.

It will appear in your list of Actions.

Press the edit icon (the wrench), set “Target axis” to L0, the value offset to how much you want it to change per step, and the value limit to you maximum allowed value.

Set the value offset to a negative number for your down arrow.

And that should be it!

2 Likes

Wow that was very clear and easy to understand. Thanks!

I’ve got it set up now so that I can increase and decrease the top range in 5% increments by clicking the up/down arrows. I would also like to be able to hold down the button and have it just slide up and down until I release it. Do you know if that’s possible?

1 Like

No problem!

No, I don´t know, but looking at the availible settings I don´t think so

1 Like

Select the shortcut and switch from “Actions” tab to “Settings” tab and check “Handle repeating”.

1 Like

Thanks that works perfectly! I feel like I’ve just unlocked a whole new level of this player!

MultiFunPlayer v1.31.0:

Download: timed patreon only exclusive
Patreon build: https://www.patreon.com/posts/111620548

Additional patreon only changelog:

  • Add HereSphere script repository - allows loading scripts from sites that support heresphere api (library view)

Changelog:

  • Add support for updated HereSpere api - this fixes Stash/XBVR script repository not working with HereSphere
  • Add support for VLC 4 (#183)
  • Add back MatchAllUseFirst option to XBVR repository to allow matching scripts with mismatched video and script file name
    CdiSL2FiTD
  • Allow invoking button hold shortcut while holding instead only on release
    TwwTauTzdY
  • Fix slider interval when using arrow keys
  • Fix inverted Y axis in preview controls
  • Fix axis value getting set to 0 under some conditions
  • Fix keyframes heatmap range and heat not aligning to actual control width
  • Fix keyframes heatmap heat calculation ignoring steep actions
  • Differentiate between left and right shift/control/alt keyboard buttons
  • Don’t set timeout when manually connecting sources or targets
  • Encrypt api key properties when saving settings
  • Simplify plugin #r assembly reference format
  • Set custom default auto-home settings for V0-V9 vibe axes
  • Show remaining capture time when adding shortcuts
  • Disable elapsed time offload in outputs by default due to increasing number of custom TCode devices/firmwares
2 Likes

Hello everyone,

Does MFP still support oscillating devices?

Weird issue here, Intiface connects to Hismith tabletop 2.0 well, (then multifunplayers connects to Intiface without any problem, at this point intifaces says MFP is connected, and in connected device tab I see the Hismith and can control is with the oscillating parameter, but in MFP, in buttplug tab, it doesn’t find the HISMITH (scanning and scanning again).

I’ve tried also with intiface mobile app, and MFP, same problem.

Maybe device recognition problem in MFP? Just bought the machine never tried with older versions.

Edit: it was indeed seeing the machine, the app works perfectly, I had to expand the buttplug window using the arrow … thank to Yoooi and BlackSphereFollower for troubleshooting my kinda dumb user error, I leave the post if someone has the same problem.

1 Like

Hey everyone,

I don’t know if this is an issue with VLC 3.0.20 or with MFP v1.30.2.

Currently I am using an SR6 with MFP and VLC for my funscript enjoyment. Connection works fine generally speaking, except:

Every video I have to adjust the Offset for the scripts over time. Meaning: at 00:00 it is enough to have 0.2s delay or 0.1s delay depending on the script. But after 30 seconds or so I have to increase the delay by atleast 0.2s to 0.4s so it matches the movement or the audio. Doesn’t actually matter if the script is actionbased or audiobased.

Settingswise for the SR6 I have these settings for the connection in MFP:
image

I tried to play around with those settings and thought maybe the switch for “Offload elapsed time” was the issue, but it still keeps happening, regardless of the settings I use for the connection. Seems to me it is an issue with MFP as VLC should probably not be the issue here, I think?

If someone could explain this issue or have a solution it would be greatly appreciated. I didn’t test other players for now, so if it is an issue with VLC I would switch, but generally I like VLC.

This was just discussed a few posts above, for some reason VLC3 api time is drifting over time. You can even see it when you look at the current video position in VLC interface that its not updating evenly. Its not MFP issue but I might try some tricks to make the time more consistent.

v1.31.0 added support for VLC4 which is perfectly synced.

2 Likes

Sry that I didnt read above. Thank you Yoooi.

1 Like

Hi !

Has anyone managed to get MFP working with Bottles?
I am getting this message: The application to execute does not exist: ‘Z:\run\user\1000\doc\9cb4145b\MultiFunPlayer.dll’

Thanks for your help :wink:

The problem is that VLC reports the media length rounded to the nearest second, and the progress in the file as a float between 0-1. Therefore, the best possible error when using the VLC API is 0.5 seconds and this error is most noticeable towards the end of the file.

In Restim, I fixed this by querying the local filesystem for the actual length of the file.

Ok, I can get MFP running on linux with Bottles, but no serial port…Any idea ?

Yes, but I also think the progress is not updating smoothly.

I don’t want to read the file in MFP so there is no real fix for this.

Serial port detection depends on wmi which is windows only. You can check the logs and it will show an error that its not implemented iirc.
A lot of versions ago MFP used to just use SeriaPort.GetPortNames() which would probably work in bottles.
I think your only solution is to use UDP.

Is MFP Supposed to work with Stash out of the box?

I want to be able to Launch Stash on Google chrome → Play a scene → Have MFP follow along with the scene playing in chrome. But playing a video doesn’t seem to load anything on MFP. I can’t find any resources on how the connection is supposed to work, but I guess It’s supposed to work, otherwise it’d weird to have stash as an option if it wouldn’t be able to do that? (What would be the benefit in having it as a script repo etc)

I’m a software eng, feel like I should be able to debug/figure things out. Just need a nudge in the right direction, how is it supposed to work?

Thanks for creating the software - I’ve subbed to patreon to support :slight_smile:

1 Like

Since stash is not a video player it can only work as a script repository, meaning when a file hosted by stash is played in one of the supported video players, MFP detects the url format and is able to query the stash api for the script.

To do what you want the browser video player would have to send playback data to MFP. I think there is a browser extension that does that, but I dont want to add support for 3rd party solutions.

I think there also is an extension that allows you to launch videos in mpv/vlc directly from stash web ui, so you would have to do that.

Yoooi what about fillers others mention its possible in other players. Any plans for that?

I’m trying to use a shortcut key to temporarily move the L0 axis to the bottom end.

I want to bypass the script with the down arrow key and move to the bottom end, and resume the script with the right arrow key, but when I press the down arrow, it stops at the 50% position. After that, it moves to the bottom end when the video stops or the next script is loaded from the playlist.

When it’s stopped at 50%, the bar in the AXIS VALUES ​​column is dark, and when it moves to the bottom end it changes to lighter.

Maybe I have the shortcut settings wrong?
I would like to know how to solve this problem.
The current shortcuts are as follows.

Down Arrow:
Axis::SpeedLimitEnable::Set [L0, True]
Axis::Value::Set [L0, 0%, 3.00s]
Axis::Bypass::MotionProvider::Set [L0, True]
Axis::Bypass::Script::Set [L0, True]

Down Arrow (I also tried this order):
Axis::SpeedLimitEnable::Set [L0, True]
Axis::Bypass::MotionProvider::Set [L0, True]
Axis::Bypass::Script::Set [L0, True]
Axis::Value::Set [L0, 0%, 3.00s]

Right Arrow:
Axis::SpeedLimitEnable::Set [L0, False]
Axis::Bypass::All::Set [L0, False]

The MFP version is 1.30.2, running on a Win11 VM.

Not sure what you mean by fillers, gap fill is already a thing in motion providers if thats what you mean.

So due to the complexity of having script + motion provider + manual transition working at the same time, manual transitions (like Axis::Value::Set) require no script and no motion provider to be running on the axis. I have this issue added on todo but don’t know how to handle that yet.

But it seems like I forgot to take into account bypass settings, so that will be fixed in v1.31.1.

Actions I used after the fix:

Axis::Bypass::Script::Set [L0, True]
Axis::Bypass::MotionProvider::Set [L0, True]
Axis::AutoHomeEnabled::Set [L0, False]
Axis::Value::Set [L0, 0%, 3.00s]
Axis::Sync [L0]
Axis::Bypass::All::Set [L0, False]
Axis::AutoHomeEnabled::Set [L0, True]

You can also make this a toggle using one button.
For example using Button Click shortcuts, first one with Click count set to 1, second set to 2. So one click to enable, double click to disable.
Or you could use Shortcut::Enabled::Set action and have two shortcuts on same button release, each shortcut has actions to disable self and enable the other shortcut.

2 Likes

I understand. I will wait for the update.
The one-button solution is also very helpful. Thank you.