Funscript Stroke Length Extender/Shrinker - Python Automation Script (Works with a folder of scripts)

This script is more for people who can sort of program. I haven’t written this to accept user arguments at this point, as I just use it for personal use. I wanted to release it, in case there’s interest or another person who wants to develop it.

What the code does:
This code will increase or decrease the stroke lengths of all funscript files in the specified folder (the my_folder variable). It will not modify the original funscript file, and will create new files in a subfolder called “Output” within the specified folder. It takes maybe 3-10 seconds to create most funscripts.

The code download:


Download and Install Python:

Probably you’ll want to select this to install:
Windows installer (64-bit)

Download and Install VSCode:

Press Ctrl+F5 to run the code from VSCode once you’ve made your modifications.
It’ll run a bunch of debugging stuff at the bottom of the screen in the Terminal, never really cleaned it up the logs :slight_smile:

You might have to install some packages like loguru:
You can type in the Terminal at the bottom:

pip install loguru

Or type that into a command prompt Window after installing Python.

Edit the code here so it matches your configurations:

    my_folder = r"C:\Users\JohnSmith\Desktop\FunscriptVidsLocalTesting\Testing"

Change this to your desired folder with Funscripts.


my_folder = r"C:\Users\hentailover69\Desktop\ScriptsToFix\"

Note that you should keep the r" part of my code here, as including the r" will let you use spaces in your file directories.

The funscripts will be output to a subfolder following that folder.

Modifying the values:
See this code:

            increase_factor = 1.9  #note that this gets overrided by the target_speed below
            bias = "top"

bias = “top” or bias = “bottom” can be used here.
A bias towards the top means that the strokes start at the very top and are locked there while they are decreased. This means if you have a script that has 100 to 0 strokes, and you reduce it by 40%, then they will become 100 to 60 strokes. This would be best suited for “sloppy toppy” scenes.
A bias towards the bottom does the opposite, and would be best suited for deepthroat scenes.

The increase_factor is a multiplier off the original speed.
1.2 would multiply it by 1.2x, or increase the stroke lengths by 20%.
0.8x would decrease the stroke lengths by 20%.

Another value I created is called target_speed

            target_speed = 0

target_speed uses my internal speed calculation system, where I actually averaged out the speed movements throughout the entire script. It’s slightly different from how calculates it, and’s calculations are about 28% higher than mine.

I suggest seeing the speed of your script from first.
ex. If the speed is 250 on for a blowjob scene, it’s probably 195% by my calculation.
If it’s a top-heavy BJ scene, and you feel like it’s too exaggerated, then maybe you’ll aim for a 130 speed.

            target_speed = 130

When you set target_speed to a value other than 0, this will override the increase_factor value we set earlier, and use the target_speed instead of the speed_factor.

I programmed this as a lot of functions with some different ideas down the road, but I figured the best use is just to batch increase/decrease the stroke lengths of scripts.

Generally this works pretty well, so long as you’re not reducing a script by more than 50%. (ex. if you take it from 400 speed to 200, it’ll be fine, but if you take it to 130, it might become pretty bad or inaccurate). Same goes for doubling it.

As for how I made this… I was really bored and wanted to create it some months back. I wrote code to parse the funscript files and figure out how they worked, and then figured outt how to adjust every stroke within a script, while keeping in context the preceding and following strokes, in order to avoid file corruptions, negative values or values over 100, and other glitches. There are going to be cases where in a script reduction, there is still a fast stroke included. This can happen if a scene quickly goes from a blowjob to a low handjob, and so the stroke position moves from like 100->80->100 → 30->0->30, as the way the calculations are done will not bring all the strokes closer together in these scenarios.

If someone would like to write a GUI for this that changes the few variables and then runs the commands, that would be great. Never really felt like doing it in Python, been too busy or uninterested in doing it lately.