Funscript - Batch Reduce/Increase Speed - Stroke Length Extend/Reduce, Roll/Twist, Inversion, Sloppy Toppy Enhancement, etc. - Python Automation Script (Taking Script Modification Request))

Update 11/21/23
Added usability improvements - now you can just run it using a command.

Note that the roll script generation is good for the Syncbot, but current the twist script generation is a bit glitchy to use. More updates to come!

How to use the tool after installing Python:

In order to run the tool, you must install python (read down below).
Then, you should go to the folder on your computer with the python script downloaded.
Then, click at the top that has the file path, and erase it and just type in cmd. Then hit enter.

Then you should be in one of these windows:

To run the code, you will run it like this:
python .\

To help you with your commands, here is an explanation of what each command does.
Reference this, and then see the EXAMPLES at the bottom.
You piece together the commands like a puzzle.

--folder <folder_name>
Type in your folder name here in quotes.
--folder "C:\Users\hl69\Desktop\FunscriptStuff"

--increase_factor <decimal>
Use a value that you want to use to alter the speed of your scripts. Think of it as a multiplier. 0.5 will make the script 50% as long stroke-wise. 1.2 will make it 120% as long, or 20% longer.
The default value is 0.5, so it’ll be reducing the script stroke lengths by half
--increase_factor 1.2

--bias <top or bottom>
Here, the program will attempt to keep the strokes staying near the top or the bottom during the enhancement process. Top can shorten an exaggerated BJ script for example, and keep it as a good sloppy toppy.
The possibly values are top or bottom.
By default, no bias is used, so a script will be expanded or contracted around the middle.
--bias top
--bias bottom

This can be used instead of the increase_factor in order to set a desired target_speed. This will override the increase_factor value, so if you try to use both, only the target_speed is considered.
This uses my built-in system for calculating the speed, which is a bit lower of a value compared to for speed calculations. My estimate is more accurate, though.
--target_speed 120

--output_type <1 or 2>
The possibly options are:
0 for enhance. This is the default option, so it’s not required to use --output_type 0 here. This is what you use for increasing or decreasing your script sizes
1 to generate a roll script. A roll script will decrease suction on the way down, and increase suction on the way up. This doesn’t get combined with any of the enhancements, and it’s a separate functionality.
Currently the twist script for the suction needs improvements, so don’t use it unless specified in the thread.
2 to generate an inversed script. This also doesn’t get combined with any of the enhancements, and it’s a separate functionality.
--output_type 1

--sex_type <blowjob or anal or vaginal>
This is a multiplier specifically for roll scripts. Blowjob is the default power, anal is increased by 10%, and vaginal is decreased by 10%.
The vaginal multiplier also effects the suction. Currently the twist script for the suction needs improvements, so don’t use it unless specified in the thread.

--timestamp_list and --powerlevels
These both go together, and if you use one of these commands, you must use the other.

--timestamp_list - the command should be followed by timestamps in the HH:MM:SS format.
You can mutliply the power of roll script up to this point, using the corresponding powerlevel multiplier.
--timestamp_list 00:05:00 00:10:00 --powerlevels 1.0 1.5
What this will do is: For the first 5 minutes, the powerlevel will be 1.0. From 5 minutes to 10 minutes, the powerlevel will be 1.5.
Currently, the way the code works is you should have a timestamp that is past the ending of the video.
So, if your video is 9:30 long, make sure that the last timestamp is at like 00:10:00.
I have to improve the code to check for bugs otherwise.

Running the Program: Full Command Examples:
Here are some examples of using the tool:

Make some sloppy toppy scripts:
python .\ --folder "C:\Users\hl69\Desktop\FunscriptStuff" --increase_factor 0.7 --bias top

Make some deepthroat scripts
python .\ --folder "C:\Users\hl69\Desktop\FunscriptStuff" --increase_factor 1.2 --bias bottom

Equalize the speed of a folder of scripts:
python .\ --folder "C:\Users\hl69\Desktop\FunscriptStuff" --target_speed 130

Equalize the speed of a folder of scripts with a bias towards the top for soft BJ scripts:
python .\ --folder "C:\Users\hl69\Desktop\FunscriptStuff" --target_speed 110 --bias top

Make some roll scripts:
python .\ --folder "C:\Users\hl69\Desktop\FunscriptStuff" --output_type 1

Make some inverted scripts:
python .\ --folder "C:\Users\hl69\Desktop\FunscriptStuff" --output_type 2

Powerlevels example:

python .\ --folder "C:\Users\hl69\Documents\Desktop\FunscriptStuff" --output_type 1 --sex_type vaginal --timestamp_list 00:05:00 00:10:00  --powerlevels 1.0 1.5
This will make the first 5 mins of the video 1.0x roll, and minutes 5-10 be at 1.5x roll power. Any roll past 100% is just capped at 100%.

What this script really does:
So basically, say you’ve got a script that’s at like a 400 speed and you want it at 300 speed, I can reduce the overall stroke length by 25%, and either do top-bias stroke (top 75% range) or bottom-bias strokes (bottom 75% range).
If you want to request some scripts to be worked on, I can generate them until I write up a better way to use my code - either turning it into a program, or writing a guide someday.

My recommendations for changes are usually:
a. reduce the ranges and speeds of PMVs slightly to make them more longlasting
b. extend or reduce blowjob scripts to your preference, while keeping the range locked to the top or the bottom of the range if you want a delicate sloppy toppy or a deepthroat. (ex. If strokes go from 100 → 60, we can make them go from 100->40 via a 50% range/speed increase, for a deeper sloppy toppy).

Python Script info:
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 (optional for modifying the code):

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.


Thanks for the code,

User error issues from a windows user that uses python.exe

  1. Was getting the module loguru missing error, cleared when I installed the module.
    Installing Python Modules — Python 3.12.1 documentation
    Overview — loguru documentation

  2. Received a list of errors trying to target a specific file (I probably misread your instructions) I tried it with a target folder and success.

1 Like

Thank you for the contribution @hentaiprodigy69 and the detailed explanation. I’m surprised this didn’t get much attention as too intense scripts are something I’m often struggling with, but I’m too lazy to adjust all scripts manually, so in the end I usually just limit the range in the player, so automated more refined adjustments are something I wanted to code by myself one day. You already did, thanks.

Would you mind sharing your code in Github (or similar) and accepting pull requests? I would eventually contribute some functionalities like prevention of very fast long strokes or smoothing the jerky movements. One more really simple idea that can make big difference for repetetive motions like some cock hero scripts is to make increase factor not fixed number, but range to (semi) randomly choose from, maybe also based on movement speed (eg. slower strokes would be increased more than fast ones).

BTW to have default path as C:\Users\hl69\Documents\FunscriptVidsLocalTesting\Testing is bit :man_facepalming:, no offence. :smile:

1 Like

Nah, because they need phone verification and I have 1 account.
If you want to put it up somewhere and credit me here, be my guest.

BTW to have default path as C:\Users\hl69\Documents\FunscriptVidsLocalTesting\Testing is bit :man_facepalming:, no offence. :smile:
It’s a semi-fake path, but basically in the parent folder I had all these videos with scripts I wanted to try, and then it got cluttered so I made a subfolder with very apt naming LMAO

The purpose of the git would be the collaboration and you having a control over it. But okay, first I should develop something … :wink:

Regarding the path, “Testing\Testing” is not the issue, but your local user path, so the script as is works only for Windows users called “hl69”, which is not many… :sweat_smile: Simple relative path would have fixed that.

1 Like

You just override the path with the arguments that you pass anyway. It was left over default path from a previous version of the code. :slight_smile: