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

Your question is a bit confusing, do you want to connect MFP to JoyFunScripter or Whirligig?
MFP cant connect to JoyFunScripter, and for Whirligig it looks for running whirligig.exe.
I think demo version of whirligig has different executable name, but iirc it doesnt implement the api MFP uses so it wont work anyway.

1 Like

Oh ok thank you. I wanted to connect MFP to JoyFunScripter. So is live test mode not possible at all with serial devices?

Its possible but with OpenFunScripter (“OFS” in MFP), I dont think JoyFunScripter allows anything to connect to it.

First I would like to say thank you so much creating this player, sharing it with us, answering questions, and being so active in its development. I’ve really enjoyed all these great features and using it with my SR1.

I’ve been making an effort to read through this entire thread so I don’t bug you with too many questions, but one thing I would like to bring up is an issue I’m having with the gap filler. Basically it’s not always engaging. The issue is most obvious with certain Cock Hero scripts. Let’s say there’s a two minute break between Round 1 and Round 2. If the last point of Round 1 is at 100 and the first point of Round 2 is 0, MFP treats this as an extremely slow stroke and won’t fill the gap. The “Fill at least _seconds” doesn’t seem to have any impact on this behavior. The default is 5 seconds, but I’m still getting zero gap filler movement even with gaps that are 30, 60, 120… seconds long.

I’m also not able to get the Auto-skip to work. Maybe it has something to do with the problem I’m having with the gap filler, but for instance I have yet to get it to play a nonstop action Cock Hero by auto skipping all the gaps. Everything just plays normal regardless if it’s toggled on or off.

1 Like

I mean how would you know if the slow stroke is a gap or not?
This is a script issue, if there is no action then the script should be flat.

Auto-skip only skips to script start, its using the same method so the script needs to be flat in the beginning or have its first action after video start.

Yeah, I agree it’s tricky because technically it’s not a gap. Of course my dumb dick doesn’t seem to care when I try to explain that. :rofl:

I’m not a software developer, nor am I smart enough to have any skills in this field, so I can’t say exactly how ScriptPlayer goes about solving this problem. What I can say is that in the settings under “Gaps” it says “A ‘gap’ is whenever two script actions are more than 10 seconds apart.” Then lower down on the page it has a slider called “Spacing before/after gap [ms]” and the range is from 0 to 20000.

FunExpander also has the ability to solve this problem of strokes that are so slow that they’re indistinguishable from gaps, but its interface doesn’t say exactly how it identifies a gap. It has a box where you can enter a time in ms for “Spacing before/after gap,” but this only tells it when to start the gap filler once a gap is detected.

For the sake of reproducing the issue, here’s a script that engages the gap filler in ScriptPlayer and FunExpander but not in MFP. When the gap filler is turned off and auto-skip is on, ScriptPlayer will also play this with only the action so it goes from round to round without any breaks. The shortest gap in this script is 3 minutes long, and the longest gap is 9 minutes long, so gap filler or auto-skip is a huge benefit for enjoying it.
https://discuss.eroscripts.com/t/cock-hero-cum-hero-perfect-4/4528

I really hope I’m not coming across as rude by bringing up other people’s projects. My intent is only to improve this great piece of software. Unlike when I was 18 years old, I no longer have the hormones to maintain a 100% rock hard erection for 30 seconds or longer without any kind of stimulation. It’s frustrating to either go completely soft while waiting for something to happen, or lose just 10% percent of wood and then have the sleeve go flying off when the script suddenly jumps from 0 to 100. :face_exhaling: If there’s any way you could implement this functionality in a future release, it would be a huge quality of life improvement for us older guys, the guys that want to enjoy a bit of stimulation during breaks in the action, and of course the guys that suffer from ED. :pray:

1 Like

I see a lot of people getting help here so I was wondering if anyone has solved the issue I’m having.

The setup I have is Stash App for a script repository, which also connects to stash-vr, which I use to connect and sync with HereSphere. MFP works great whenever I am watching videos in HereSphere that have scripts, as long as I am not using the functionality of stash-vr. That is, I have been struggling to relay the funscripts to MFP whenever I am watching a video through the stash-vr site that it creates. This is the first time I’ve ever run into an issue using MFP as it works fine playing files directly from a drive in HereSphere, or playing stash URLs in mpv.

I tried to go through the logs to see if I could find anything useful, but I’m a bit lost. As an example, here is the logs surrounds the successful playing of a video in HereSphere via navigating to the video file & funscript folder (I just removed the names as they are long and unimportant I presume):

2024-08-19 00:46:06.3360|INFO|MultiFunPlayer.MediaSource.ViewModels.HereSphereMediaSource|Connecting to HereSphere at "127.0.0.1:23554"
2024-08-19 00:48:42.0530|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPathChangedMessage [Source: "Z:/stash/scripts/VideoFolder" Name: "VideoName.mp4"]
2024-08-19 00:48:42.0530|INFO|MultiFunPlayer.Script.Repository.ViewModels.ScriptRepositoryManager|Trying to match scripts to resource [Name: VideoName.mp4, Source: Z:/stash/scripts/VideoFolder]
2024-08-19 00:48:42.1281|INFO|MultiFunPlayer.Script.Repository.ViewModels.ScriptRepositoryManager|Matched L0 script to "VideoName.funscript"
2024-08-19 00:48:42.1281|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Set L0 script to "VideoName.funscript" from "Z:\stash\scripts\VideoFolder"
2024-08-19 00:48:43.6664|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPlayingChangedMessage [IsPlaying: True]
2024-08-19 00:48:43.6664|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaDurationChangedMessage [Duration: 00:40:26.8657226]
2024-08-19 00:48:44.6718|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Skipping to script start at 351.352s
2024-08-19 00:48:46.7158|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPlayingChangedMessage [IsPlaying: False]
2024-08-19 00:51:40.0332|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPlayingChangedMessage [IsPlaying: True]

And now here is the unsuccessful playing of the same video via HereSphere and stash-vr:

2024-08-19 01:09:03.6940|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPathChangedMessage [Source: "" Name: "VideoName.mp4"]
2024-08-19 01:09:03.6940|INFO|MultiFunPlayer.Script.Repository.ViewModels.ScriptRepositoryManager|Trying to match scripts to resource [Name: VideoName.mp4, Source: ]
2024-08-19 01:09:05.3053|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPlayingChangedMessage [IsPlaying: True]
2024-08-19 01:09:05.3053|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaDurationChangedMessage [Duration: 00:40:26.8657226]
2024-08-19 01:09:14.4338|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPlayingChangedMessage [IsPlaying: False]
2024-08-19 01:09:18.4771|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPlayingChangedMessage [IsPlaying: True]
2024-08-19 01:09:23.6078|INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPlayingChangedMessage [IsPlaying: False]

It seems as if the main difference is the lack of a source? But I’m not well versed enough in any of the involved programs to speak to say what that means.

The reason why I am asking here instead of a stash-vr forum is simply because I have used stash-vr and HS separate from MFP (with a Handy) and had no issues playing the funscripts as HS natively handled the Handy’s connection. I understand that this is a niche issue within a niche community so I don’t have high hopes for finding a remedy but if anyone has solved/worked around this issue or can offer troubleshooting tips, I’d appreciate it.

@burtreynolds
I’ll add a configurable “treat actions longer than … as gaps” as a feature request.
But no promises when/if it will be added.

@yikesr
Yes the source needs to be in correct format for stash repository to be able to look up the script from stash server.

There was an issue in HereSphere before v0.11 where HereSphere was sending scene title instead of the file url to MFP, thats why source is empty.
That was fixed in HereSphere but requires MFP update. So HereSphere should work with Stash/XBVR in the next MFP update.

You should be able to use DeoVR in the mean time.

2 Likes

I guess if that stash plugin always sets the title to the actual file name on you hdd, then you can also add a script library in local repository and point it to Z:/stash/scripts/.
Then MFP will be able to find script locally instead via stash and HereSphere will work.

Thank you. I really appreciate that, and I hope it can get implemented.

Can I ask you for some more information about using the Auto-skip? I understand what you said here so I’m not asking about gaps that are essentially a very long stroke.

I just haven’t been able to get it to work for any of my scripts including the ones that I know for certain have flat spots. I can’t even get it to skip the very beginning. In order for the auto-skip in ScriptPlayer to work, I would have to turn the gap filler off so I tried that in MFP, and some other similar settings, but it still won’t auto-skip. I’m sure I’ve got something selected that I don’t fully understand that’s breaking it, but I don’t know what else to try anymore.

Can you post a script that doesnt work with auto skip but you think it should?
Basically when video gets loaded MFP will find the first action in the script and seek video to that position. If you have multiple scripts loaded on different axes then the earliest time from all of the scripts is used.

I have it always on and never had it not auto skip, tho it wont work if script start is not flat. Maybe it should be tweaked too to ignore a couple strokes at the start of the script if there is a big flat gap right after.

You know what, I think I’m completely wrong about that. I just found a few scripts where the auto-skip works at the start. I think I must have been trying scripts that would arbitrarily place a point at 0 at the very beginning with the first point of actual action somewhere else. Sorry about that.

It would be nice if the auto-skip could also have an adjustable setting for “treat actions longer than x as gaps.” Aside from skipping the intros and skipping cock hero breaks, this would also be useful for when she’s too chatty during a blowjob. Sometimes I like it when it’s no talk and all suck, and a wildly manic blowjob can be a lot of fun.

1 Like

Thanks for the quick reply! I was curious about the update so I tried out the Patreon release to see if it solved the issue, but HS still seems to fail. I tried the two main stash vr integrations: previously mentioned stash-vr and stash vr companion. It works in deovr flawlessly on both, but on HS I can’t get either to work.

I went through the logs again but this time with debug on and here is what I get:

INFO|MultiFunPlayer.Script.Repository.ScriptRepositoryManager|Trying to match scripts to media [Name: "videoName", Source: ""]
DEBUG|MultiFunPlayer.Script.Repository.ScriptRepositoryManager|Searching for scripts in Local repository
INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPlayingChangedMessage [IsPlaying: True]
DEBUG|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Resetting sync [Axes: L0, L1, L2, R0, R1, R2]
DEBUG|MultiFunPlayer.Script.Repository.ViewModels.LocalScriptRepository|Searching library "Z:\stash\scripts"
INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaDurationChangedMessage [Duration: 00:54:01.6853027]
DEBUG|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Detected seek: -2.3233422850907957
DEBUG|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Resetting sync [Axes: L0, L1, L2, R0, R1, R2]
INFO|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Received MediaPlayingChangedMessage [IsPlaying: False]
DEBUG|MultiFunPlayer.UI.Controls.ViewModels.ScriptViewModel|Resetting sync [Axes: L0, L1, L2, R0, R1, R2]
DEBUG|MultiFunPlayer.Script.Repository.ViewModels.LocalScriptRepository|Searching library "D:\scripted"
DEBUG|MultiFunPlayer.Script.Repository.ViewModels.LocalScriptRepository|Found 0 scripts matching "videoName"
DEBUG|MultiFunPlayer.Script.Repository.ScriptRepositoryManager|Searching for scripts in Stash repository
DEBUG|MultiFunPlayer.Script.Repository.ViewModels.StashScriptRepository|Found scene id [Id: ]

So, what I have learned from testing a few videos is that it doesn’t seem to matter what integration I use, the output I get is not the actual file name, but rather the scene name, which can be changed independently through stashapp. If the scene name and filename line up, MFP gets the script by finding it in a local directory. Otherwise, nothing happens.

I went through and looked at HS updates since you mentioned it here and saw the update that included “fields ‘resource’ and ‘identifier’ to the timestamp server message” which I presume ought to contain the information needed. So, I went into “Trace” level logging to see if maybe this was being taken by the stash integrations, but MFP does receive this information:

lambda_method114|Received "{
	"path": "/videoName",
	"resource": "http://192.168.1.1:9999/scene/32327/stream",
	"identifier": "http://192.168.1.1:5000/heresphere/32327",
	"duration": 2396.4775390625,
	"currentTime": 0.8658750057220459,
	"playbackSpeed": 1,
	"playerState": 1
}" from "HereSphere"

“Resource” points to the stash video stream, and the identifier points to a json created by stash-vr-companion which has information like below (… for brevity):

{
    "access": 1,
    "dateAdded": "2024-06-25",
    "dateReleased": "2024-06-25",
    "description": "",
    "duration": 2396480,
    "eventServer": "http://192.168.1.1:5000/eventServer",
    "isFavorite": false,
    "media": [
	...
    ],
    "projection": "equirectangular",
    "rating": 0,
    "scripts": [
        {
            "name": "VideoFileName.funscript",
            "rating": 1,
            "url": "http://192.168.1.1:9999/scene/32327/funscript"
        }
    ],
    "stereo": "sbs",
    "tags": [
    ...
    ],
    "thumbnailImage": "http://192.168.1.1:5000/thumb/32327",
    "thumbnailVideo": "http://192.168.1.1:9999/scene/32327/preview",
    "title": "videoName",
    "writeFavorite": true,
    "writeHSP": true,
    "writeRating": true,
    "writeTags": true

I’ve yet to compare this to DeoVR but this is already a long post so I might follow up at a later time if this is still an issue. I don’t know how MFP takes these details and processes it into stash, but I guess that the issue lies here somewhere, between the details sent by stash-vr-companion, MFP processing it, and stash providing the funscript.

Regardless, thank you for keeping a project like this so active, I appreciate the work you’ve been doing.

1 Like

Yes, I meant that MFP needs an update to support the new resource and identifier fields from HersSphere, so that means v1.31.0.
Sorry if I confused you to getting a patreon version.
v1.31.0 is ready-ish, just have to get around releasing it.

I think one of those plugins has an option to set video titles to be the file names, if you enable that then local lookup will work.

It receives it but requires an update to use it.

Yup, in v1.31.0 there will be a patreon only feature that uses the identifier url and allows you to use MFP with sites like BadoinVR/NAVR/RealJamVR/CzechVR etc. if they allow funscript downloads.

That also means that there will be two ways to get scripts from stash, using resource (Stash repository), or using identifier (HereSphere repository).

DeoVR reports the actual video stream url in the path to MFP instead of just the title like HereSphere.
I talked with HereSphere dev to add resource and identifier fields so thats why MFP needs an update, it was not a thing before v0.11.

1 Like

So, I finally got around to screenshotting the error box. This is what pop ups when trying to connect MFP 1.30.2 to SLR. It does connect but only after multiple tries, but even when it does, it almost immediately cuts off when playing an SLR video.

When playing videos (with their funscript) that I directly added to my Quest 3 headset, everything works just fine.

Edit: I use the DeoVR app directly from my Quest 3

Can you open windows console and do ping -n 20 <ip of your quest> and then post the output.

Here’s the output, boss.

Edit: I clicked on Script Repositories on MFP and found XBVR off. Should that be on and if so, should I leave the Endpoint alone?

I would need you to change log level to trace via application settings at the top of the window. Then reproduce the problems (unable to connect and disconnect when playing SLR video) and DM me the latest log file.

Having trouble with the internal script player with Multi-axis scripts. It will only load 1 axis at a time so I can’t run multi-axis scripts with the internal player. Is there a fix for this that I’m missing?

Thats the “Load additional scripts” feature added in v1.30.0.
It only loads one script in previous versions.