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

Received Stash api response ""

The response from stash is empty, not sure what to do with that tbh, maybe you have to set the stash api key in MFP?

edit:
Oh wait, that will be in v1.30.0, you have to use this build: nightly.link | Repository Yoooi0/MultiFunPlayer | Run #8840721452

1 Like

Oh that worked wonderfully! IT WORKS NOW. Thank you so much! You are greatly appreciated!

Is there anyway I can help log this process for others once the build is live?

1 Like

What do you mean by log the process?

like create a guide for troubleshooting or for few you to add to a F.A.Q.

I mean sure go ahead if you want, tho there is no official FAQ. There will be one when I finish writing documentation, or if I finish.

1 Like

MultiFunPlayer v1.30.2:

Download: Release MultiFunPlayer v1.30.2 · Yoooi0/MultiFunPlayer · GitHub
Patreon build: https://www.patreon.com/posts/106378846

1.30.2:

  • Fix crash when creating XInput axis gestures at min/max position

1.30.1:

  • Fix RawInput settings not getting saved
  • Fix crash when creating XInput axis gestures
  • Fix custom curve motion provider overflowing when tiling linear curve

1.30.0:

Additional patreon only changelog:

  • Add support for DeoVR haptics buttons (Return to base, Pause script, Manual mode, Edging mode) to be used with shortcuts

Changelog:

  • Add input processor settings (#153)
    MultiFunPlayer_NnD6SV6QxP
  • Add ability to show errors in a snackbar instead of dialog (#168)
    MultiFunPlayer_EVy657zFOb
  • Add ability to load additional scripts with the same base name in internal source
    MultiFunPlayer_rsfr22GI2F
  • Add ability to lock a script to an axis
    MultiFunPlayer_vhQDk0BRMA
  • Match funscripts in order of configured funscript names, “Load unnamed script” is replaced with “*”
  • Allow enabling/disabling device axes on default devices without having to clone a device
    MultiFunPlayer_5x698rsXaT
  • Automatically tile looping custom curve motion provider curve
    MultiFunPlayer_EEfmQRhlQN
  • Add DecodeMediaPathModifier
    MultiFunPlayer_qGmOlfWQVd
  • Add support for async shortcut actions (#158), long running actions like connecting an output will fully complete before executing the next action
  • Add api key support to stash repository (#162)
  • Remove raw from L0 funscript names
  • Show a dialog when starting mpv source with no executable set for easier mpv download on inital setup
  • Only match to currently playing video file when using XBVR repository instead all files attached to the scene
  • Only match to primary media file when using Stash repository instead all files attached to the scene
  • Use all media path modifiers when processing media resource path instead of only the first matching
  • When possible try to read custom device names from Jellyfin/Emby media source
  • Improve behaviour of media source/output target auto-connect
  • Check if MFP has permissions to save files in current directory on startup to prevent settings loss
  • Disable packet buffering in Tcp output target
  • Auto stop buttplug.io device scan
  • Show which axis preview is selected in heatmap tooltip
  • Try to find existing mpv executable in known paths without having to manually set it
  • Fix XBVR repository not working with HereSphere (requires XBVR v0.4.27 or later)
  • Fix possible crash when receiving data from UDP or Serial output target
  • Fix some settings not getting saved when set to null (#166)
  • Fix axis matching scripts ending in funscript name without a dot
  • Fix parsing of media uri with file scheme
  • Fix possibility of auto-connect retrying with no delay after disconnecting output target or media source
  • Fix disabled mpv auto-start setting having no effect
  • Fix sudden unwanted motion when media changes while auto-homing
  • Fix possible crash when trying to manually load a script with a file dialog
4 Likes

This is one of the bigger updates so I’m trying the timed patreon exclusive thing and the public release will be probably in a couple/few weeks.

Crashes after any controller (xbox) input. Seems like some great features being added, hopefully gets sorted out soon.
AMD 6950xt
13th Gen Intel(R) Core™ i5-13600K
Windows 11

I would need the log file with the crash, there were no changes to xbox input system.

2024-06-17 21:24:12.8269|DEBUG|MultiFunPlayer|Bootstrapper Configure
2024-06-17 21:24:12.8578|INFO|MultiFunPlayer.Settings.SettingsHelper|Reading settings from “MultiFunPlayer.config.json”
2024-06-17 21:24:12.9287|INFO|MultiFunPlayer|Environment [OSVersion: Microsoft Windows NT 10.0.22631.0, CLRVersion: 8.0.6]
2024-06-17 21:24:12.9287|INFO|MultiFunPlayer|Assembly [Version: 1.30.0-patreon-master.1+98.Branch.patreon-master.Sha.df4211d35dc495f815d16e4203975c9f2eb570f5]
2024-06-17 21:24:12.9287|INFO|MultiFunPlayer|Config [Version: 41]
2024-06-17 21:24:12.9287|INFO|MultiFunPlayer|Timer [IsHighResolution: True, Frequency: 10000000]
2024-06-17 21:24:12.9287|INFO|MultiFunPlayer|Set working directory to “C:\Users\cpazo\OneDrive\Pictures\MultiFunPlayer”
2024-06-17 21:24:12.9952|INFO|MultiFunPlayer.Settings.SettingsHelper|Reading settings from “MultiFunPlayer.config.json”
2024-06-17 21:24:21.6536|FATAL|MultiFunPlayer|System.ArgumentException: ‘1’ cannot be greater than 0.
at System.Math.ThrowMinMaxException[T](T min, T max)
at MultiFunPlayer.Input.XInput.XInputProcessor.g__CreateAxisGestureShort|9_0(Int16 last, Int16 current, Double deadZone, GamepadAxis axis, <>c__DisplayClass9_0&)
at MultiFunPlayer.Input.XInput.XInputProcessor.ParseStateGestures(Int32 userIndex, Gamepad& last, Gamepad& current, Double elapsed)
at MultiFunPlayer.Input.XInput.XInputProcessor.Update(CancellationToken token)
at MultiFunPlayer.Input.XInput.XInputProcessor.<.ctor>b__6_0()
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)

Well, love me some typo errors when trying to make the code look nicer.
Fixed, will be in 1.30.1, ill release it tomorrow most likely.
Thanks for reporting.

1 Like

Keep up the great work! Looking forward to the fix.

1 Like

If I understand correctly this should mean then that as a result it should be possible to load in two different versions of a video and not have the scripts unload if they are locked in? E.g. load video “railing someone clothed” → loads scripts → lock them → load video “railing someone naked” → scripts don’t unload.

I don’t think I understand what this means unless your referring to say slow and fast versions of the L0 script? (unless that’s what the matching funscripts is for?)

Additional script is mostly different name like “with fillers” so those can be loaded to the movie? If yes, would love to have those loaded automatically. The exact match and then the scripts where the first 20 characters match or so. Would be great without fiddling without file system.

Feature request I asked you on discord but presenting to public is option to skip parts without motion within the movie. Just the same option you have at the beginning of the movie. Would skip all anatomical examination without motion.

Yoooi now has annual patreon with discount, just saying. Get it and drop it and you are patreon for a year without the never ending loop.

That should work yea.
If an axis is locked and has no script loaded it will allow the next one to load.
If an axis is locked and has a script loaded it will not allow other scripts to load until unlocked.

No, so internal source always loads the single script you want to play to L0, so even if you want to play “test.pitch.funscript” it will load to it L0.
With that option checked it will try to load all other scripts with the same base name, so for example “test.funscript”, “test.roll.funscript” etc., and load them all to their corresponding axis.
So its basically a multi axis script support for internal source.

Loading different versions of scripts is technically in todo, but that is a different thing.

Not sure what you mean exactly.

Its in todo, will probably be in 1.31.0, 1.30.0 was getting too big.

2 Likes

Well scripters sometimes put out different scripts for the same flic. Would nice if you could load those just because the name matches partly. The MFP user could quickly switch between them.

Oh what your asking for is similar to my example thing E.g. load video “railing someone clothed” → loads scripts → lock them → load video “railing someone naked” → scripts don’t unload. I said above except an easier way to swap between them except instead of loading a different video you have an list or an easier way to swap from “railing someone.L0.funscript” as it shows you the other versions of that you have to choose from/swap to “railing someone smooth.L0.funscript” , “railing someone hardcore.L0.funscript” , “railing someone half speed.L0.funscript” , “railing someone full speed.L0.funscript”
Correct?

If so then @Yoooi 's answer fits then I think of

So not yet but on the laundry list.

BTW a think the way to implement that you would have to have it so the program looks for any files that start with the full video name except after a prefix like ~ (as then after that you can have the “clothed” and “naked” bits for different video types) and match that to any scripts that start with the same matching name. (Would probably require a way of indexing/storing the stuff though so if it’s looking through a massive folder it doesn’t lag a ton more than once like Handycontrol does) So quite a bit of work yep in my mind.

Love the new update. Thanks!

One feature request:
Can we get an option to show the user-firendly names for each axis in the main UI window (UP/Down, Roll, etc…), instead of just the short codes (L0, R1, etc…)?

I use both a SR6 and a NimbleStroker through MFP at the same time, which means it’s controlling 11 different control axis (axes?) right now, and I often forget which is which.

While I’m asking, where did you get the list of names for each axis? For example, you have V1 as pump, but I’ve never seen any docs explaining what it’s supposed to be pumping, and it’s using a V code, which i though was only for vibration.

@roa @Ratattack15
The idea I have is to support a format like this:
<video name>.<pack name>.<funscript name>.funscript
or
<video name>.<funscript name>.<pack name>.funscript

So you would be able to have

video.pitch.funscript
video.fast.pitch.funscript
video.slow.pitch.funscript

With ability to switch between default, fast and slow pack from UI or shortcuts.

No idea when/if this would be implemented as I think this is rather niche feature.

Its shown on the right side when you select an axis tab.

Why do you need 11 axes?

Go to device tab in the application settings at the top of the window, there you can see/configure the axes. They are also listed in a table in the first post.

V1 was used by the first lube addon for the OSR2, that was before TCode v0.3 which added A axes for such things. So when using TCode v0.2 for multi axis scripts V0 is the vibe (vib.funscript), V1 is lube pump (lube.funscript). In TCode v0.3 the lube pump was moved to A2.

If you are using SR6 you should be using TCode v0.3, or if you have custom device definition in MFP then you can just change precision to 4.

2 Likes

Released v1.30.1, should be fixed.