MultiFunPlayer v1.33.3 - Multi-axis funscript player with SLR & FapTap support

without the motion provider it is impossible to invert the axis automatically on a given value

Love the work you’ve done with this! :heart: I have a few requests to consider or perhaps questions on how to do things I may have overlooked.

As I’m getting into scripting, I really like seeing the detailed waveform of the script playing in Script Player. I’ve noticed you can see this in MultiFunPlayer when you hover your mouse over the heatmap, but is there anyway to pin this up to always show and track along with what’s playing?

I suppose I could just play the media in OpenFunScripter(OFS) with MultiFunPlayer, but then there’s no playlist support.

While I’ve seen people mention use of VirtualDesktop, everything I’ve found is just using this as a bridge for a Quest to then get to HereSphere or other player. I really like the video player in Virtual Desktop itself. I find it really useful to play in VirtualDesktop and then manage and search for files in the Windows desktop w/o needing to take off the headset. I can imagine it would be really useful when testing and adjusting scripts to do it all in VirtualDesktop so I could have both OFS up on my display with the video in the background.

Is it possible to connect MultiFunPlayer to VirtualDesktop’s video player? Is Virtual Desktop piggybacking on something else I need to hook MultiFunPlayer into? Does Virtual Desktop’s video player not support any remote connections for MultiFunPlayer to hook into? I’m not sure what the situation is here.

1 Like

No way to pin it, if I would add a way to pin it it would be the height of the heatmap itself, so pretty useless. This could be made as an easy plugin in the next version tho.

I have no idea as I never used it, if there is an api that you can connect to then I can add it as video player to MFP. But looking at it there most likely is no api. You would have to make a feature request. The api has to send video path, duration, current position, play/pause state, playback rate (optional).

But since this is a virtual desktop you can also probably use mpv, vlc or mpc-hc.

1 Like

Thanks, I got it working with stash-vr. The filename still displays as ‘stream’ but it’s picking up the funscripts now.

image

Hi, I’ve finally decided to look into this side of things, and I’m just a little confused. In order to get the valve to open on the way down and close on the way up, do I need both A0 and A1 activated for an SR6? And what would my settings be? Thanks

You only use either A0 or A1, cant use both at the same time. In your case I think you can just enable a custom curve motion provider on A1 and set it to a flat line at 100%. And that should fully close the valve on the way up and fully open on the way down. I’m not sure if you need to constantly send A1 commands, if it stops working then you can disable “send dirty axes only” option on the output.
It also can depend on the firmware you have.

1 Like

Thanks for the help, I’ll give it a go!

Hi @Yoooi, is it possible to set the range for the L0 output of a serial device using a custom plugin? I’ve made a plugin but I cant figure out how to write the range to the device. Thanks for the help!

Yes, call:

InvokeAction<DeviceAxis, double>("Serial/0::Axis::Range::Minimum::Set", DeviceAxis.Parse("L0"), value);

there is also ::Maximum::Set, ::Middle::Set and ::Size::Set.
The actions are the same as for the shortcuts.

1 Like

Much appreciated!

Not sure if it’s just me but on the Patreon and public release I’m experiencing a bug.

When random motion is turned on for R1 and R2 AND invert is also on for R1 and R2, Roll and Pitch axis values from scripts do not get read (and therefore sent to the device).

Anyone else?

Final question :). Is it possible to listen for deovr haptic button events? It would be great if I could register an event listener or something

This will be fixed in the next release, tho the invert option will only invert the script, it will not invert motion providers because thats the source of the bug.

You can’t directly listen for input events, but you can register a shortcut action:

RegisterAction("Plugin::Test", () => {
    // handle action
});

And then you just create a normal shortcut with your plugin action.
Note that there is an issue with current version where the plugin action will be removed from the shortcut on restart because the plugin is not yet loaded when launching MFP, this is fixed in next version.

It would be nice to allow plugins to just listen for input gestures but it currently would require exposing like half of the classes from the input system to the plugins. I’ll see if it can be added in some reasonable way.

Cool, thanks! Should be fine for now, but will be looking forward to the next version then :slight_smile:

Got it, good to know it’s in the works! I

yeah it’s just a QoL thing where one would have to toggle the random motion on and off when switching between media that has and doesn’t have roll and pitch scripted.

Not looking to invert the random motion as it’ll just be as random haha :joy:

@Yoooi recently started using your free player, and i use osr2 connected via serial, and quest3 connected wirelessly, with deovr option as i use slr site on it. All works good but problem im having is lets say i take my quest3 off my head for a minute or 2, multifunplayer will disconnect from deovr. than i have to put my quest3 on my head and than click connect on multifunplayer for it to reconnect, which is annoying. Any way to have the player stay connected to deovr, even if i take my headset off?

There is auto-connect button next to the connect button, toggle it on and MFP will try to connect automatically every few seconds.
That disconnect is probably some quest3 behavior I cant control.

MultiFunPlayer v1.32.0:

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

Additional patreon only changelog:

  • Support SLR login using login code
    MultiFunPlayer_eFKZISyfLM
  • Allow connecting DeoVR even when SLR login fails or credentials are empty
  • Don’t use cached session if username is different
  • Fix “wrong password” error when logging in to SLR
  • Fix SLR api sending local scripts causing double sync

Changelog:

  • Rework and simplify plugin system
    devenv_uEsUsCvzOg
    • Allow placing plugins in subfolders
    • Expose available actions and properties to plugins
    • Allow plugins to create their own UI
    • Improve performance of creating assembly references for plugins
    • Register missing properties for plugins where possible to match registered actions
    • Sample plugins: MultiFunPlayer Sample Plugins · GitHub
  • Update to .net 9 (performance improvements)
  • Allow assigned actions to be in disabled state instead of getting removed from shortcuts if plugin or output target action is unregistered (#88)
    P4FSRlLpSY
  • Add support for auto-home and speed limit when using PolledUpdate (#180)
  • Fix unable to place breakpoints in plugins due to plugin assembly embedded source not including BOM
  • Fix nested dialogs getting stuck invisible in certain situations
  • Fix custom curve motion provider tiling when using makima interpolation
  • Fix manual axis transitions loosing steps with shortcuts in relative mode
  • Fix axis value flipping repeatedly with invert option enabled by reverting it to invert script only
  • Fix auto-home taking shorter time to complete than configured
  • Fix SyncOnMediaResourceChanged not having any effect when set to false
  • Fix MotionProvider::Custom Curve::Points::Set actions not updating display name
  • Fix MotionProvider::Custom Curve::Points::Set actions adding additional point on each launch

If you like what I’m doing, please consider supporting me on Patreon
https://www.patreon.com/yoooi

3 Likes

did some testing, with auto-connect button on, it still disconnects, but helps it reconnect after putting back the headset on. But forgot to mention another bad thing about when it disconnects is it looses the loaded script, so have to reload script in player whenever it disconnects. Pretty sure its disconnecting beacuse headset goes to auto sleep, can increase that time but ofcourse that drains battery. Before it lost slr support, I used to use joyfunplayer connected to slr and it never disconnected even with the headset off for long period of time, so perhaps some way to get it to stay connected is possible dunno.

edit: Or at least if could make it so player doesnt loose the script when disconnects would also be an improvement
besides that all perfect loving the player and its awesome flexibility/functionality

Thanks

The actual issue might be that if you first start a SLR video+script in DeoVR and only after that connect MFP it wont load the script.
The disconnect/reconnect due to auto sleep should not matter as MFP receives new state on connect.
Or it also might be a bug in DeoVR where you need to set the script again for the api to reset inside DeoVR.