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

Is this DeoVR on PC or Quest? Can you DM me the full trace log?

The key miss match reset happens when DeoVR resets the Haptics thing internally. This should happen after 4s of no response from the client/MFP.
The key miss match ignore I think happens because there are sometimes somehow two Haptics threads running in DeoVR.

So I think one thread is grabbing the key responses, but for some reason not handling the script request, while the other timesout and sends a reset. And it gets messy from there. I had this happen on PC DeoVR but ignoring one of the responses would fix it before.
Its possible that in v15 they changed something, I need to test. Some users downgraded to v14 and it started to work again.

In general the whole Haptics implementation in DeoVR is very unstable. I don’t know how it is even possible that it works with a phone app.
I would like to ignore it in the future and stream the scripts directly like how DeoVR does, this would mean no more firewall and this Haptics issues.

Yup, that’s what I did, downgraded to v14. But I wonder if we can disable auto-updates.

1 Like

Also not recieving streamed scripts to mfp from deovr. And the trick to disable/renable remote control and haptics doesnt fix it. Seems the new deovr update has a lot of bugs, will try to go back to earlier version

Hey. i just have a quick question. I am noticing that the script is slightly out of sync, is there a way to adjust this in the app? Looking at the script in openfunscripter, it seems perfect synced, but when i play the video in multifunplayer it seems like the script is a tiny bit behind the “action” I thought it was the “offset” thing, but since there are two places you can adjust the offset, i dont realy understand what the offset is.

The offset field under the video if a global script offset, the offset field under the axis tabs is per axis offset. You probably want to use the global offset.

1 Like

@jojo321 @jrokzz @mural_1snag

I did some investigation and it seems that in the latest deovr update (steam v15.1) the script support for Haptics Connect is purposefully disabled, DeoVR now only sends move commands directly to BLE devices. So even if MFP connects to Haptics Connect, the script wont work.

Will have to see if this is their long term plan, if it is they will probably remove script downloads from sexlikereal in the future and transition to an api similar to The Handy. I’m assuming this is in preparation for their own device release.

Solution for now is to use v14 as long as you can or downgrade from v15.
I’ll see if I can update MFP to still work with v15 or later.

2 Likes

Quote doublevr:
“mfp might be a problem as we moved to secure scripts streaming so they are no longer available to sniff.”

At the moment it looks like they want to control the whole eco system, no heads-up from them for this upcoming (breaking) change, and sadly it looks like their own support team didn’t know this was changed at first.

edit 9/9/2025 support is still clueless of this, and will start a trouble shooting session.

Sounds about the usual SLR remove features then gaslight their users.

Probably overdue cancelling my sub to be honest, already have a lot of scenes and scripts in my XBVR library, and I’m not going to randomly remove my access to that.

4 Likes

They are redirecting users reporting this issue to their support, and the reaction of support is just, ‘dev’s are looking into it’, I guess that looks better from the outside. Didn’t get a clear answer yet.

And this is why streaming scripts and video was never going to be the ‘future’ of funscripts. “Just completely rely and depend on a service that changes its terms and functions, it’ll always work.”

yep looks like it was on purpose and we are officially loosing mfp support with slr :frowning: someone just asked on the other forum if they will fix it and replied “we do not find a way to have advanced scripts security and mfp support”"

You think you’ll be able to update MFP to workaround? Or has SLR ruined Jacking Off With A Fancy Robot forever? :pensive_face:

1 Like

According to doublevr we are less than 0.1% of the SLR sex toy userbase, so insignificant to them.

doublevr: “no toys disabled rather then corner cases affecting less than 0,1% of SLR sex toy users”

Yeah, I figured part of it is we’re a small percentage. I thought it was cool they even had OSR/SR6 integration. It’s still bullshit to take it away for no reason. The argument is we’re insignificant but it’s also like… Exactly, we’re insignificant. Why would you wanna screw us over like a bunch of us are causing problems?

They are claiming it’s to combat script piracy, but I haven’t seen their scripts online anywhere.
I think they just want total control, end to end security that can’t be bypassed and then they can make all the rules.

Oh, definitely exclusivity for their own device and devices they have affiliation with. If it was about script piracy rather than devices why not create their own secure script player for any device? (Which I think is basically what Haptics was, and they nuked that.)

No es eso realmente lo que quieren todos? ganar el máximo dinero con su producto?. Yo lo veo normal, que sea una mierda o no, es otro cosa.

De momento mi subscripción se va. Adiós SLR.

MultiFunPlayer v1.33.9:

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

1.33.9

Additional patreon only changelog:

  • Convert SLR support from Haptics Connect to a script repository


    This is initial implementation so there are some drawbacks compared to Haptics Connect:

    • It currently does not support script switching, the repository only selects the latest user made script and falls back to latest ai script if it cannot find one. The script switching will come in later MFP versions but it requires big internal changes.
    • Heatmap in MFP will load in chunks, but there is a full one visible in DeoVR.
    • Only stroke axis works for multi-axis scripts (SLR limitation)
    • DeoVR haptics toggle gestures don’t work since they require Haptics Connect
    • Scripts stored on VR headset will not be detected by MFP since they require Haptics Connect

    If you had problems with SLR scripts not working on Quest due to firewall/VPN when using the old way then this fixes all of those issues.

Changelog:

  • Block plugins from accessing secure script resources
  • Add ability to toggle InPrivate mode in Web source
  • Add ability to export/import (copy/paste) shortcuts and shortcut actions (#195)
  • Add support for multi-axis funscript format
  • Support script scale when using PolledUpdate (#215)
  • Allow triggering multi key gestures without having to release all keys
  • Fix sync on script resource changed setting not being respected in some cases
  • Fix crash when invoking motion provider actions with axis set to null
  • Fix DeoVR and HereSphere MediaResetMessage spam when no video is loaded
  • Fix possible crash when opening error dialog from snackbar
  • Fix speed limit when using PolledUpdate

1.33.8

  • Fix possible crash when using LinkAxis::Set actions
  • Fix LinkAxis::Set action allowing circular links
  • Fix possible crash when window is restored after logging in into windows
  • Add ScriptChangingMessage to allow plugins to modify scripts before they are applied
  • Use PasswordBox for all api key fields

1.33.7

  • Fix possible deadlock when using Web media source
  • Fix possible duplicate items in Serial/Plex/Emby/Jellyfin selection box

1.33.6

  • Add ability to toggle script heat normalization
    • In previous versions script heat was always normalized, meaning the fastest section of the script was always red no matter how fast that section is, this version disables normalization by default and adds ability to enable/disable it. With normalization disabled script sections are only marked red if they are at or above 500 units/s.
  • Fix MPC source not responding correctly to play state changes causing no motion from scripts
  • Fix MPC source not resetting state when media file is closed
  • Fix XBVR/Stash not working in some cases due to endpoint check not resolving host names
  • Fix possible deadlock by compiling plugins only after the window is loaded
  • Fix missing maximize button in Web window
  • Fix main window padding when maximized
  • Limit number of heatmap preview updates caused by DynamicKeyframeCollection

1.33.5

  • Fix possible crash when using null to target all axes
  • Fix duplicate axis clear/reload actions
  • Fix Script::SkipGap action ignoring target axis
  • Fix Axis::Script::Reload and Axis::LinkAxis::Set actions not blocking until script reload is finished
  • Fire PostScriptSearchMessage before applying the scripts to allow plugins to modify the result

1.33.4

  • Support script invert and media playback speed when using PolledUpdate
  • Add ability to disable assigned shortcut actions without having to remove them
  • Add ability to search for local scripts from plugins
  • Add ability to load scripts from shortcuts actions
  • Improve randomness of random motion generation
  • Improve performance of heatmap generation
  • Change default Serial and UDP output settings to improve smoothness by adding some “additional elapsed time”
  • Fallback to default device when selected device has no axes
  • Remove CreateView from plugins and only load view from .xaml files
  • Fix Buttplug output PolledUpdate ignoring axis settings Enabled state
  • Fix broken interpolation preview
  • Fix exception when trying to schedule shortcut actions after disposing
  • Fix crash when disposing a plugin with registered actions
  • Fix crash when plugin throws exception during initializing or disposing
  • Fix crash when selected device is not found
  • Fix Axis::InvertValue actions migration
  • Fix cloned items in UI when using “move up”/“move down” buttons
  • Fix ability to set device axis name longer than 2 characters

1.33.3

  • Fix TCode commands sent without new line when using additional elapsed time
  • Disable Control-flow Enforcement Technology (CET) Shadow Stack, it was enabled by default in .net 9 but causes crashes on some systems

1.33.2

Additional patreon only changelog:

  • Fix FapTap repository not loading scripts for some videos

Changelog:

  • Add ability to stretch TCode move duration, can help with micro stutters caused by jitter
  • Add RawInput/XInput logging toggles
  • Add draggable separator between assigned actions and action search
  • Add ability to invoke shortcuts from plugins
  • Allow script file drag-drop on axis tabs
  • Allow drag-dropping multiple script files
  • Fix script out of sync when using PotPlayer
  • Fix PotPlayer media path containing garbage data in some cases

1.33.1

  • Improve Web window UI
  • Add support for F11 and video fullscreen in Web window
  • Close Web window if initialization fails
  • Show WebView2 runtime download dialog if it’s not installed
  • Allow changing playback speed of Web window player from MFP
  • Fix instant device movement due to invalid PolledUpdate events
  • Fix Web source start page not allowing urls with custom ports
  • Fix crash when calculating heatmap with negative keyframe positions
  • Fix crash when receiving messages in UDP output after disposing
  • Add FixedUpdate and PolledUpdate helpers for plugins
  • Add dynamic KeyframeCollection which allows live streaming of keyframes

1.33.0

Additional patreon only changelog:

  • Add FapTap script repository - works with Web media source
  • Fix scripts stored on VR headset not loading via SLR interactive api
  • Fix SLR login code not opening browser

Changelog:

  • Add Web media source - opens a custom Edge browser which sends playback information to MFP from a video element on the page
  • Add option to split axes in heatmap preview (#198)
  • Add ability to configure main thread update rate (#176) - can be used to lower CPU usage
  • Add support for reading and writing PotPlayer playback speed - requires 2501xx beta or later
  • Make looping optional in script motion provider
  • Aggregate plugin file watcher events and queue compile only once
  • Optimize axis state locking
  • Fix unable to receive data from auto-started PotPlayer
  • Fix OFS source PathAndQuery not set after changing ip or port (#203)
  • Fix first plugin #r reference not found if source file contains BOM

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

Having an issue, it keeps telling me to install NET even though it’s up to date.

I am getting crashes on v1.33.9 with Potplayer, which was working fine with v1.33.8.
With speed limit enabled, MFP would crash with the log below when Potplayer loads a second video that has a associated funscript file (first video and videos with no script will not crash).

Things I have tried:

  • changing videos with no script (no crash)
  • using MPV (no crash)

Is there a link to download v1.33.8? I have overwritten it with v1.33.9

2025-09-15 18:33:45.2038|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Set L0 script to [Name: “A.funscript”, Source: “Z:\handy”]
2025-09-15 18:33:45.2038|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPlayingChangedMessage [IsPlaying: True]
2025-09-15 18:33:45.2038|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaDurationChangedMessage [Duration: 00:01:47.9130000]
2025-09-15 18:33:45.2038|FATAL|MultiFunPlayer|System.ArithmeticException: Function does not accept floating point Not-a-Number values.
at System.Math.Sign(Double value)
at MultiFunPlayer.Common.DeviceAxisSpeedLimitedEvent..ctor(DeviceAxisValueEvent PreviousEvent, DeviceAxisFromValueEvent CurrentEvent, Double SpeedLimitUnitsPerSecond)
at MultiFunPlayer.UI.Controls.ViewModels.AxisStateUpdateContext.BroadcastEvents()
at MultiFunPlayer.UI.Controls.ViewModels.AxisStateUpdateContext.EndUpdate(Double deltaTime)
at MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel.<>c__DisplayClass128_0.g__UpdateValues|2()
at MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel.UpdateThread(CancellationToken token)
at MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel.<.ctor>b__127_7()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
— End of stack trace from previous location —
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)