Automatically convert hardcore funscripts to Handy (while preserving sync)

I want to reduce the amount of work I must do in order to use a new funscript. I present here a Python script that can be ran against a funscript and:

  • Delete all actions points when the interval between points is under a specified time
  • Attempts to detect and replace vibration patterns
  • Reduces all movements to under a specified speed

My use case is that I use the Handy in Bluetooth mode and many great funscripts appear to lose sync on my device due to hardware and software limitations. My aim is to take some of the experience I now have at manually converting funscripts to make them a more compatible experience with the Handy and automate some/all of that work. I believe I have succeeded at creating converter of sorts that others might also find useful. It can be used either as-is to convert funscripts which were designed for more powerful hardware or, maybe someone would find it useful as a starting point to modify funscripts manually (similar to how Iā€™ve used https://funscript.io).

Examples

Before:


After:

Before:


After:

Iā€™ve put thought into preserving sync and only changing things which are incompatible. Further improvements can be made and if I do that, Iā€™ll post them here.

Usage:
python handy_BT_limiter.py <file>.funscript <speed_threshold>
Example: python handy_BT_limiter.py howgood.funscript 495

Or: python handy_BT_limiter.py howgood.funscript which defaults tp a speed of 500

$ python handy_BT_limiter.py 'Sunfanart - Dress up Darling - Marin riding Gojo.funscript'
    Usage: 'python handy_BT_limiter.py <file>.funscript <speed_threshold>'  (defaults to 500)
  Example usage: python handy_BT_limiter.py myScript.funscript

Example output:
==================
No speed indicated, so defaulting to 500
664 action points removed
423 action points modified to vibrate
0 action points modified to reduce speed
Creating backup: Sunfanart - Dress up Darling - Marin riding Gojo.funscript.bak
Writing modification to: Sunfanart - Dress up Darling - Marin riding Gojo.funscript
Done

Iā€™ve tested a number of scripts with the Handy in BT mode and Iā€™m pretty happy with the results. I now have this script running with my video player frontend (Kodi) so all scripts are checked before video playback. From reading other posts, Iā€™d guess that other devices like the Keon might also benefit (some of the numbers in the script would likely need to be tweaked).

Tested with Python 3 (rename .txt to .py).
v1.0: handy_BT_limiter.py.txt (8.4 KB)
v1.01: handy_BT_limiter.py.txt (8.5 KB) - (Fixed an index out of range error)
v1.02: handy_BT_limiter.py.txt (8.7 KB) - (Fixed a height bug where values went negative)

15 Likes

This sounds pretty dope to deal with scripts with excess vibrations. Iā€™ll have to check it out.

2 Likes

Thanks for this! Was trying to muddle my way through to make a script mod like this, but since I have zero real programming experience, it was going poorly. :sweat_smile:

2 Likes

You mean any vibration? I donā€™t know what people get out of it other than a feeling that the lifespan of their handy is decreasing.

2 Likes

I think vibrations add a lot for slower scenes. Iā€™ve had my Handy for three years and the performance hasnā€™t changed as far as I can tell (not that I always seek tons of vibration). Not sure how long the hardware is expected to last.

To me, one could also say that using the Handy less often will also save wear-and-tear, but it seems like more of a personal preference.

Also, to be clear, Iā€™ve written the script to only replace vibrations which were already there. Itā€™s pretty easy to disable the replace_vibe function part of the script is you want its other features. Youā€™ll get a smoothed movement average instead.

1 Like

Itā€™s not quite as horrible on the Syncbot but itā€™s pretty bad when the strokes are already fast. It reduces the smoothness feeling of the script.
Still, certain scripters refuse to remove it so Iā€™m interested in cleaning up some automatically with this tool.

I feel like low movement high speed vibrations donā€™t even make any functional sense though, and the handy is so jerky with handling it to begin with. When itā€™s a bottoming out motion and it goes from 0% to 30% in a loop at around 200 speed,
itā€™s pretty decent and I like to add it to scripting. [quote=ā€œbigcheater2, post:4, topic:221539, full:trueā€]
You mean any vibration? I donā€™t know what people get out of it other than a feeling that the lifespan of their handy is decreasing.
[/quote]

If anyone has tried the py script, please let me know if it worked and what you thought of it, especially if you happened to compare the result to the original script which had a lot of vibration in it.

Overall Iā€™m liking the tool so far. I tested it on a few vids. It should help make them less jerky feeling.

1 Like

since Iā€™m a noob Iā€™m just drag and dropping scripts to the python file, I guess that will work?

Maybe, but it doesnā€™t seem to work that way for me in Windows (I just tried it).

If not, you could try:

  • Download the stable Python release for Windows here
  • Install Python
  • Reboot
  • Put python handy_BT_limiter.py in the same directory as your script
  • Open a Windows command prompt (cmd.exe)
  • Make sure your in the directory where the script is (Downloads folder in the example below)
    cd %homepath%\downloads
  • Process the script
    python handy_BT_limiter.py myscript.funscript

I previously looked at converting a Python script to a standalone executable, but there seem to be drawbacks (file size, distribution and security challenges).

but it does work drag and drop


need to test more, I understand
min_interval = 60 # Action points closer than this (in ms) are removed. Values higher than 134 will disable vibration mods

so the higher I do that number, the more vibrations will be removed, but what this one do?
vibe_amount = 10 # Vibration starting amplitude (1-100)

My handy has easily lasted over 2 years, while i used quite a bit of vibration scripts with it. As long as you make sure to lubricate the device often enough, it can manage it for quite a long time.
The handy has a speed limiter built in. What is being scripted rarely gets played as is and this does protect your handy quite well.

Also, for some people its not a problem if they need to replace their ā‚¬200 device once every 2 years, or even just every year. ā‚¬100 per year for good orgasms almost daily is far cheaper than any hooker can ever provide.

Just because you think its a waste doesnt mean others think the same. Some people spend $1000 on a sex doll, and replace it every year. Its just whatever people want.

Sure, its not good for global waste, but plenty of people dont care about it anyway since rich people are generaly far worse (their private boats pollute more than what most people will do in their lifetime).

So if people like vibrations, let them. You might care about your device and save money there, but you cant realy tell others how to use the device. Sex is a very personal thing, so what you like, they might not, and vice versa.

And having made a vibrations plugin myself, i wouldnt have minded making a script trying the inverse, but as i see its already being attempted, im just going to wait this one out. Although in my case it would have been limited to OFS.

Also, as my plugin has a fade in/out portion of code that effectively also smooths vibrations, maybe the algorithm i used there could help. I have no problems if that code gets reused for this (no need to credit it), and it could potentialy help.

for me itā€™s not about the lifespan, I just donā€™t like vibrations, donā€™t like how they feel, donā€™t like how they sound and I think it removes the grease faster than running normal

ok, I noticed something weird so I tried doing it with cmd (btw your instructions for myscript.funscript is wrong, you said myscript.py)

Iā€™ve noticed all the funscripts Iā€™m creating have no instructions for the handy, the script is messed, hereā€™s an example

converted:
NoodleDude - The Succubus Apprentice.funscript (26.1 KB)

original:
NoodleDude - The Succubus Apprentice.funscript (30.6 KB)

From the example command output you showed, it looks like it worked, to me. I opened the scripts that you provided in OpenFunscripter, and they have valid data points. What do you mean there are are ā€˜no instructions for the handyā€™?

Orig

Modded

(I also fixed the example command above that you mentioned)

Right. vibe_amount is the up-down travel used to replace the old sections of vibration. Lower numbers = less vibration added back in.

canā€™t do more tests, my handy is refusing to download scripts now for some reason

the problem is when I open the script on scriptplayer, the bar at the bottom shows no movements
converted:
image

original:
image

can somebody with scriptplayer confirm or deny he has the same problem? what other players are there I can try?

found the problem, why are some ā€œposā€:-10} ?

removed all -10 pos and replaced them by 10 just for testing and now the script works
not sure what should that -10 be replaced with

hope that helps to find why thereā€™s a negative position

Thanks for that! Iā€™m able to reproduce it, so Iā€™ll post the fix when available.

1 Like

Iā€™m liking a lot having this control over the funscripts, I wish this was implemented on some script player so I can configure the values real time,

whatā€™s the speed threshold value for? the one that defaults to 500
could you please also add it as a variable? I guess I could edit " speed_threshold = 500.0 # 500 is ā€˜Handyā€™ limit"

itā€™s because Iā€™ll keep using the drag and drop method

could you please show examples of what vibe_amount does? I still donā€™t understand, maybe Iā€™ll understand better after I test more