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

Can you check the logs if it crashes?
If it does post the latest log file with the crash.

Hey there! First of all thanks for all the work you’ve put into the player. I have three problems that I hope you’ll be able to help me with.

I’ve got my osr2+ last week and got your latest Patreon version the second the package arrived. The first setup (Quest3, MFP, DeoVR/SLR) was a breeze and everything worked perfectly. However, starting today I can’t seem to log in into SLR anymore using MFP.

Connecting to DeoVR without SLR credentials still works, but as soon as I put in my credentials I’m hit the following message:

DeoVR failed with exception|System.Exception: SLR Interactive login failed! [Session: ]
at MultiFunPlayer.MediaSource.ViewModels.DeoVRMediaSource.SlrInteractiveManager.RunAsync(CancellationToken token)
at MultiFunPlayer.Common.ExceptionExtensions.Throw(Exception e)
at MultiFunPlayer.Common.TaskExtensions.ThrowIfFaulted(Task task)
at MultiFunPlayer.MediaSource.ViewModels.DeoVRMediaSource.RunAsync(ConnectionType connectionType, CancellationToken token)

I’ve restarted the pc, the quest and changed my SLR password to see if there is a problem with the account, but nothing changed (SLR in the browser works perfectly fine and the account has script access). I also deactivated the firewall during testing. Do you have any idea what the issue could be?

The second issue is regarding my workaround using Heresphere and xbvr. I’ve started xbvr and connected MFP with Heresphere using the Heresphere IP as the endpoint. The connection works, but when I now open Heresphere on the quest and start a video MFP doesn’t seem to react at all. I’ve tried setting up a Script repository and pointed it towards the script directory of my xbvr but that too didn’t help. Have I missed something here?

Then I thought about using MPV to play local files, which works, but I’m not sure how I can connect MFP/MPV with the quest. Is there perchance a tutorial for that?

Thanks in advance and sorry for the text wall!

1 Like

the same for me

I’m also getting the “System.Exception: SLR Interactive login failed! [Session: ]” error. I’ve tried on two different PC’s and two different versions of Multifun player. I have confirmed my SLR subscription is still active.

I must say seeing that I’m not the only one makes me feel a tad better

this is from v1.29.4

2024-09-26 19:16:05.5978|FATAL|MultiFunPlayer|System.ArgumentException: An item with the same key has already been added. Key:
at System.Collections.Generic.Dictionary2.TryInsert(TKey key, TValue value, InsertionBehavior behavior) at System.Collections.Generic.Dictionary2.Add(TKey key, TValue value)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](List1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer)
at System.Collections.Frozen.FrozenDictionary.ToFrozenDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer)
at MultiFunPlayer.Common.DeviceAxis.LoadSettings(JObject settings, JsonSerializer serializer)
at MultiFunPlayer.Bootstrapper.ConfigureDevice(JObject settings)
at MultiFunPlayer.Bootstrapper.Configure()
at Stylet.BootstrapperBase.Start(String args)
at Stylet.BootstrapperBase.b__9_0(Object o, StartupEventArgs e)
at System.Windows.Application.<.ctor>b__1_0(Object unused)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
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)
at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at MultiFunPlayer.App.Main()

@_toast @Spektrus @Fentx

Seems like SLR changed login behavior, I have a fix internally, should be released this weekend after I do some more tests.

You have to enable XBVR repository and enter the correct ip of your XBVR server. Then you have to open the same ip:port in HereSphere web browser on your quest. It will show you a library view of your XBVR. Once you play videos from that view MFP will be able to get the scripts from XBVR server or your local script libraries.

Seems like you somehow have a device that has two axes with the same name. Can you also send me your config file?

1 Like

Found the issue; I placed the v1.29.3 MultiFunPlayer.config.json in the v.1.30.2 folder to avoid rewriting of the config, removed it and the program starts. I rewrote the config.json and everything works. Up to v.1.29.3 just copying the old config file worked.

Its still works, but maybe there was a bug when migrating config to newer version.
Do you still have the config that was crashing? I would like to take a look.

here it is

MultiFunPlayer.config.json (58.8 KB)

So your RESTIM Alltracks device has multiple axes with empty name, I need to ignore duplicate/empty axes when loading so it does not crash.

But what you are saying is that this config works in v1.29.3 but does not work in v1.29.4?
Is this config after you updated to v1.29.3/v1.29.4? What version did you use before the update?

I can’t get MFP to connect to my SLR account.
This is the error message that I get when I attempt to connect:

DeoVR failed with exception:

System.Exception: SLR Interactive login failed! [Session: ]
at MultiFunPlayer.MediaSource.ViewModels.DeoVRMediaSource.SlrInteractiveManager.RunAsync(CancellationToken token)
at MultiFunPlayer.Common.ExceptionExtensions.Throw(Exception e)
at MultiFunPlayer.Common.TaskExtensions.ThrowIfFaulted(Task task)
at MultiFunPlayer.MediaSource.ViewModels.DeoVRMediaSource.RunAsync(ConnectionType connectionType, CancellationToken token)
at MultiFunPlayer.MediaSource.ViewModels.DeoVRMediaSource.RunAsync(ConnectionType connectionType, CancellationToken token)
at MultiFunPlayer.MediaSource.ViewModels.DeoVRMediaSource.RunAsync(ConnectionType connectionType, CancellationToken token)

Yoooi said a few posts above that this will probably be fixed by next week

Thanks for the heads up _toast…
This is my first DL of the patreon verison of MFP, is there a work-around for the time being? Maybe an older version is confirmed to be working this bug appeared?

Or are all versions of MFP now not working with SLR because of something that SLR changed on their backend?

Its not a bug, SLR changed login behavior and I have to make a change in MFP.
All patreon versions currently wont login to SLR.

The fix should hopefully be released tomorrow.

Thanks for the heads up.
Cheers to the quick fix! Cause us pervs need our fix! LOL
Luckily, I have a collection of local vids+scripts I can use til the fix is implemented haha

[quote=“Yoooi, post:1059, topic:23006, full:true”

But what you are saying is that this config works in v1.29.3 but does not work in v1.29.4?
Is this config after you updated to v1.29.3/v1.29.4?
What version did you use before the update?
[/quote]

Yes
Yes
I started using v1.28.3 then updated to v1.29.3 with no problems, when I tried v1.29.4 and v1.30.2 it did not work

Btw for the MPV argument, where can i find the list of argument that i can enter to it? i remember there is one that loop the video and keep the MPV launcher open, but i don’t remember the line

If migration from v1.28.3 to v1.29.3 worked, then v1.29.4 has to work too because there were no changes in loading devices. v1.29.3 and v1.29.4 use the same code, so you must have just configured one of your devices incorrectly as they had empty axis names. I have no other explanation for why it would crash on v1.29.4.

You can add those either in MFP arguments list or to mpv.conf file located next to mpv.exe (but without -- and each option on new line)

MultiFunPlayer v1.31.2:

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

1.31.2

Additional patreon only changelog:

  • Fix unable to log in to SLR
  • Reuse SLR session to prevent rate limit error when logging in

Changelog:

  • Support matching XBVR files not matched to any scene using local repository
  • Fix crash when selected device has multiple axes with the same name
  • Only load axes with name in ‘[A-Z][0-9]’ format

1.31.1

  • Fix VLC 3 time drift by recalculating media duration on each update (#184) - on seek from MultiFunPlayer (like auto-skip) the duration gets updated to the exact value
  • Fix Emby and Jellyfin source not working (#187)
  • Fix speed limit offset actions not allowing negative values (#186)
  • Fix unit conversion in speed limit SecondsPerUnit offset action (#186)
  • Fix path plugin references not loading the assembly (#185)
  • Fix plugin settings saving only after they finish executing (#188)
  • Fix output target and media source logger names

1.31.0

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

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