MultiFunPlayer synchronizes your devices with video files using scripts. The player has the ability to synchronize multiple devices with multiple scripts at the same time enabling enhanced experience.
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 https://www.patreon.com/yoooi
Patreon only features
Support for DeoVR SLR Interactive script streaming (requires SLR subscription)
Support for DeoVR haptics toggle gestures
Support for streaming scripts from sites supporting HereSphere library view
C# plugin system for custom behaviours and integrations
Supports multiple concurrent outputs of the same type
Supports TCode v0.2 and TCode v0.3 devices with advanced customization
Auto detection and connection to any supported video player and output
Flexible keyboard/mouse/gamepad shortcut system with many configurable actions
Seek, open and play/pause video from MultiFunPlayer
Real time script smoothing using pchip or makima interpolation
Configurable per axis speed limit and auto-home
Smart limit to limit axis range or speed based on another axis
Soft start sync feature to prevent unwanted motion
Script libraries to allow loading scripts not located next to the video file
Supports matching multiple script files to single axis with ability to switch between them
Ability to link unscripted axes to scripted axes
Ability to generate additional motion or fill script gaps using random, script, pattern or custom curve motion providers
Customizable theme color with dark mode
Supports single file multi-axis scripts
Script heatmap with range and heat visualization
Supports script bookmarks and chapters
True portable app, no files are created/edited outside of the executable folder
How To
To synchronize with videos:
Add desired video player via the top-right “plus” button
Configure if needed by expanding settings with the “arrow” button on the right side
Click connect (NOTE: DeoVR, Whirligig and HereSphere require you to enable remote server/control support in their settings)
Add desired output via the bottom-right “plus” button
Configure by expanding settings with the “arrow” button on the right side
Click connect
Once your video player and output are connected, scripts can be loaded in several ways:
Manually, by dragging script file or files from windows explorer and dropping it on the desired axis tab.
Manually, by using the Script->Load menu in the axis settings toolbar (requires a video to be playing).
Automatically, based on the currently played video file name if the scripts are named correctly:
Common
Axis
Description
Valid file names
L0
Up/Down
<video name>.funscript
L1
Forward/Backward
<video name>.surge.funscript
L2
Left/Right
<video name>.sway.funscript
R0
Twist
<video name>.twist.funscript
R1
Roll
<video name>.roll.funscript
R2
Pitch
<video name>.pitch.funscript
TCode v0.2
Axis
Description
Valid file names
V0
Vibrate
<video name>.vib.funscript
V1
Pump
<video name>.lube.funscript
L3
Suction
<video name>.suck.funscript
TCode v0.3
Axis
Description
Valid file names
V0
Vibrate
<video name>.vib.funscript
A0
Valve
<video name>.valve.funscript
A1
Suction
<video name>.suck.funscript
A2
Lube
<video name>.lube.funscript
<video name> is the name of the currently played video file without its extension.
The above file names are standard and recommended, other supported script names can be seen and configured in “Device” settings.
The above file names are matched in all script libraries and in the currently playing video directory.
MultiFunPlayer matches script files that start with <video name>, so additional text can be added after <video name> in the above file name formats.
For example, if the currently played video file is MyVideo.mp4, valid script file names for the L0 axis would be MyVideo.funscript, MyVideo.slow.funscript, MyVideo [fast].funscript etc., and MyVideo.twist.funscript, MyVideo.slow.twist.funscript, MyVideo [fast].twist.funscript etc. for R0 axis.
Prerequisites
MultiFunPlayer will prompt you to download prerequisites if they are not detected
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.
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.
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.
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?
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.
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.
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.
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.
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
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.
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.
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.
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.