MultiFunPlayer v1.22.0 - Multi axis funscript player - Now with SLR Interactive support

MultiFunPlayer

About

MultiFunPlayer is a simple app to synchronize your devices (e.g. OSR or buttplug.io supported devices) with any video using funscripts. Supported video players are DeoVR, MPV, MPC-HC/BE, HereSphere and Whirligig.
The player’s main feature is the ability to play multiple funscripts at the same time, allowing for greater movement fidelity.

The project is hosted on github so any issues/feature requests should preferably be posted there, but you can of course always do that here too. Under the “actions” tab you can find development/beta builds with not yet released features.

If you are interested you can also find my other OSR/VaM/TCode projects on my github profile.
If you like what I’m doing, please consider supporting me on my Patreon :slight_smile:

Download

Patreon only features

  • Support for DeoVR SLR Interactive script streaming (requires SLR subscription)

Main features

  • Supports DeoVR, MPV, MPC-HC/BE, HereSphere and Whirligig video players
  • Internal player to play scripts without video files
  • Supports buttplug.io, network TCP/UDP, websockets, namedpipes, serial, file and The Handy outputs
  • Supports multiple outputs of the same type working concurrently
  • Supports TCode v0.2 and TCode v0.3 devices
  • Auto detection and connection to any supported video player and output
  • Bind keyboard/mouse/gamepad input to almost any customizable action (150+ available actions)
  • Seek and play/pause video from MultiFunPlayer
  • Supports multiple concurrent outputs
  • Real time script smoothing using pchip or makima interpolation
  • Per axis speed limit
  • Auto-home when axis is idle for specified time
  • Smart limit to limit axis output range or speed based on position of another axis with fully customizable curve
  • Supports local, DLNA, web and unc video paths
  • Soft start sync feature to prevent unwanted motion
  • Script libraries to organize funscripts in different folders and load funscripts not located next to the video file
  • Ability to link unscripted axes to scripted axes
  • Ability to generate additional motion or fill script gaps using random, script or pattern motion providers
  • Customizable color theme
  • Multi funscript heatmap with stroke length visualization
  • True portable app, no files are created/edited outside of the executable folder

How To

To synchronize with videos, start your desired video player and wait for automatic connection or click on the connect button to connect manually (NOTE: DeoVR, Whirligig and HereSphere require you to enable remote support in their settings). Once connected, the funscripts can be loaded in several ways:

  • Manually, by dragging a funscript file from windows explorer and dropping it on the desired axis File text box.
  • Manually, by using the Script->Load menu in the axis settings toolbar.
  • Automatically, based on the currently played video file name if the funscripts are named correctly:
Common | Axis | Description | Valid file names | |-|-|-| | L0 | Up/Down | **`
TCode v0.2 | Axis | Description | Valid file names | |-|-|-| | V0 | Vibrate | **`
TCode v0.3 | Axis | Description | Valid file names | |-|-|-| | V0 | Vibrate | **`

Names in bold are commonly used used and are preferred

The above file names are matched in all script libraries and in the currently playing video directory.

Prerequisites

Changelog

36 Likes

Yes, there is the table above with correct names, all currently shared multi axis scripts will work fine, although “suck” was/is sometimes “valve”, I’ll add compatibility for suction to handle “suck” too.

Darn, I took question down after I opened my eyes. You too fast with the reply!

1 Like

MultiFunPlayer v1.12.0:

Download:

  • Add real time script smoothing using pchip (shape preserving) or makima (slight overshoot) interpolation. This can be changed per axis via the axis settings toolbar.
    interpolation
  • Add auto-home feature, when video is paused the axis will smoothly move to its default value after the configured delay. This can be changed per axis via the axis settings toolbar.
  • Add HereSphere as a video source
  • UI/UX tweaks
    • Move script invert toggle to toolbar
    • Reset sync when changing invert toggle
    • Show if the script is a “RAW” script, “RAW” scripts have smoothing disabled
    • Add auto-connect toggle to each video source
    • Change status when video source is trying to auto-connect
  • Add “lube” alias for V1 axis and add “valve” alias for L3 axis
  • Fix script not resetting when using link axis with priority and no link target selected
  • Fix DeoVR localhost process check when connecting

If you like what I’m doing, please consider supporting me on Patreon

1 Like

This looks simple and elegant.

Quick question, if you just needed to use OSR manually, (without funscript), is there any software available able to handle this? perhaps using a gamepad? It appears that all OSR softwares available are primarily for playing funscripts.

I am cross-referencing HandyControl where you are able to use the Xbox controller’s dpad to increase/decrease speed and stroke length as needed live on the Handy. Any such capability with OSR?

Thanks in advance.

I cant think of any app for OSR that just has manual user controlled motion, but it shouldn’t be hard to make one. Some allow you to use a gamepad/keyboard for in app shortcuts.

I read somewhere that Tempest himself is creating a random stroker app but unsure if he will add gamepad support.

If you consider adding the functionality to your app, please consider using the dpad - left/right for speed increase and up/down for stroke length increase. Also, a way to pause- perhaps the start button.

I think OSR has a lot of potential, and per a lot of testimonials here, better than the handy, but for people who prefer to not use scripts, it is a little limited.

I cant thank all of you enough that literally share your programming expertise for all of us to enjoy through these apps. You are doing gods work.

1 Like

There are a few random strokers available on the OSR discord, none have gamepad support iirc. I also have a random stroker app in plans. And you could also technically use my other app LiveSense just by adding the tips manually, it allows you to simply program additional motions, but has some built in.

speed increase - there is not speed with OSR, it just accepts live positions, you can just use video playback speed to have similar effect
pause - unnecessary as MFP pauses when you pause the video
stroke length - i guess the only that would be useful, but it gets complicated with all the available axes

So i think for now im not planning on adding shortcuts.

Got you.

I guess I was sort of doing an (uneducated) direct comparison of OSR and theHandy, but it looks like it is literal apples and oranges!

Should I decide to go get an OSR as a second device, it looks like it would just easy to get a random script and use the available players, such as yours.

MultiFunPlayer v1.13.0:

  • Extend buttplug.io device mapping to all supported linear/rotate/vibrate commands of your devices.
    MultiFunPlayer_2021-05-22_16-10-17
  • Add open/close toggle to video and script sections. This enables MultiFunPlayer to work in “compact” mode.
    MultiFunPlayer_2021-05-22_01-23-08
  • Allow starting and stopping of buttplug.io device scan. Before the scan was only ran once for 5 seconds after connection.
  • Add auto home duration slider
  • Add endpoint settings to whirligig source
  • Implement output target auto connect
  • Fix multiple spaces between TCode commands
  • Fix settings loading when window is visible causing the controls to update
  • Fix visual jitter of axis value bar when using interpolation
  • Fix rare race condition crash when closing MultiFunPlayer

  • Breaking changes:
  • Rename smoothing to interpolation, setting will reset to default Pchip
  • Rename IsValuesPanelExpanded to ValuesContentVisible, setting will reset to default false

If you like what I’m doing, please consider supporting me on Patreon

MultiFunPlayer v1.13.1:

Download:

  • Fix TCode not appending new line
  • Fix serial target axes never getting dirty causing no data to be sent
  • Fix network target not saving protocol type
  • Fix spaces in TCode commands in UPD network target

If you like what I’m doing, please consider supporting me on Patreon

1 Like

MultiFunPlayer v1.14.0:

Download:

  • Add shortcuts feature that allows binding keyboard/mouse/gamepad input to almost any setting or value (there are 900+ possible actions). Shortcut settings can be accessed via a button on the window title bar.
    2021-06-27_13-37-37
  • Show window minimize button (#10)
  • Fix rare value stutter by resetting sync before setting new position
  • Fix position error correction causing micro stutters, now smoothly adjusts time scale
  • Fix output target range sliders visual jitter
  • Fix serial autoconnect working after device is disconnected (#11)
  • Fix auto home not working in certain situations
  • Fix repeated valid index search before script first keyframe
  • Fix message spam from DeoVR and HereSphere
  • Fix TCode commands beginning with a space character
  • Fix video changed message getting ignored when playing a video file with the same name but in different path

If you like what I’m doing, please consider supporting me on Patreon

1 Like

There is big difference betwen xtplayer and multifunplayer ?

Never used XTPlayer much but I think most notable differences would be:

  • No built in player, for 2D videos uses MPV
  • On the fly script interpolation
  • Buttplug integration
  • Can output to multiple targets at the same time (ex. buttplug + osr serial, or osr serial + vam udp plugin)

and probably many other things. I guess just try it and let me know your thoughts.

Okay, to use osr I just have to plug it and it will find it ?

You have to manually specify the osr port once under the serial tab, then if you enable auto connect it will always try to connect to that port, if it cant find osr it will retry until you connect it.

This is awesome - thank you for the hard work.

Just getting to know the software since I got my OSR2+ the other week. Is there a hotkey setting to reduce the script intensity, either travel distance or stroke cadence? Something to help with edging without the blunt instrument “on/off” setting of the power bus switch.

Thanks!

I think best action to use would be Serial::L0::Range::Size::Value::Plus5% and Serial::L0::Range::Size::Value::Minus5%.
You can filter the list with serial l0 range size.

This will basically move your maximum and minimum stroke range value closer/further together.
You can also manually edit those values via the L0 output range slider under serial settings.

edit:
I guess you could also use Serial::L0::Range::Minimum and Serial::L0::Range::Maximum actions to have more control over top/bottom stroke position.

Got it, will give it a shot.

If I’m understanding correctly though, there is a chance that I “overshoot” my tuned limits and risk smashing my wang? So I’d have to keep track of how many “clicks” I reduce by, and then reverse the same number of clicks when I wanted to get back to the original action?

Yea, I guess you would have to do that. I have my limits set at about 5%-95% so there is not really much to overshoot.

I could easily add new actions to adjust a “multiplier” that would go from 0-100% where 100% would always be the value that you have set on the slider. But that is a lot of new actions. Its the first iteration of shortcuts so time will tell what changes/additions have to be made.