EroScripts is a community for scripts that sync up interactive sex toys with porn. Learn more.

To discover, download, and help choose what gets scripted, create an account.


FunHalver 0.3.0 - Make any funscript half-speed without losing sync or stroke length

Note! FunHalver is now obsolete! Its functionality (and more!) is now contained in my new site

You can read about here

:brain: Concept

FunHalver halves the intensity of .funscripts by changing every up and down stroke into a single direction. This makes the script twice as easy to last through without sacrificing stroke-length or video-synchronization.

Main use-cases:

  • Cock Hero and PMV
  • VR and other full-length, intense videos
  • Converting Handy/OSR2 videos for use with Launch
  • Marathon sessions


:inbox_tray: Download v0.3.0 (13th February 2021)

:rainbow: Features

  • Works on any funscript
  • Maintains stroke timing
  • Maintains stroke positions (generally)
  • Respects pauses
  • Heatmap preview (thanks @Lucifie!)
  • Funscript actions preview
  • No internet connection required

:information_source: Instructions

  • Drag any .funscript onto the main window to load it in
  • Preview your script by moving your mouse over either of the heatmap previews
  • For cock hero, PMV and other music-based scripts, check the ‘Match First Downstroke’ box

:stars: Planned Features:

  • Respect speed modulations for intermediate funscript actions
  • Mac + Linux support…maybe

This project is open-sourced on GitHub!

:hourglass_flowing_sand: ChangeLog


Download v0.3.0 from GitHub

  • Added

    • FunHalver can now function in command-line mode! See below for more information
    • User can now ensure that the first downstroke in a group will be respected - very important for Cock Hero and PMV style scripts
    • User can now ensure that the position of the Slider matches the original script’s intended position at the end of each group
    • Added tooltips to each option to provide more information
  • Known Bugs

    • In some situations, the half-speed script will be full-speed
    • In some situations, the half-speed script will just stop moving for a number of actions

Download v0.2.0 from GitHub

  • Added

    • User can now choose whether they’d like the position to reset after pauses
    • User can now choose to remove small pauses in the script, making everything smoother
    • Average intensity is now displayed in each script’s metadata, rather than action count
  • Fixed

    • Added a small offset to the pink script preview line - In situations where the original and converted scripts share a number of actions, the pink line would obscure the white line
    • For slow actions, or for high zoom levels, lines would be cut off if one of their actions fell outside the preview window. This has been fixed
  • Known Bugs

    • In some situations, the half-speed script will be full-speed
    • In some situations, the half-speed script will just stop moving for a number of actions

Download v0.1.0 from GitHub

  • Features

    • Works on any funscript
    • Maintains stroke timing
    • Maintains stroke positions (generally)
    • Respects pauses
    • Heatmap preview (thanks @Lucifie!)
    • Funscript shape preview - pink is the half-speed script, white is the original script
    • No internet connection required
  • Planned Features

    • User-configurable options to fine-tune
    • Respect speed modulations for intermediate funscript actions
    • Mac + Linux support…maybe

To be clear, I haven’t tried out the program yet, but just reading about it: AMAZING and beyond useful. :muscle:
Since I got into funscripts I’ve been wondering all the time about why nobody programmed this exact feature into one of the countless apps here.

Thank you so much for this, @defucilis!


THANK YOU!! @defucilis


1 Like

Nice, you did it :slight_smile:

I am just thinking loud…

Do you think it’s possible to call this tool by command line or an other way so I could include your feature to HandyControl. I could pass a parameter with source and target location and your app does the conversion. Or can you create a .dll without the GUI? Will it still be 120mb? If not I could also just link a button to your app to pass over a file. Currently this is not supported. If I drop a file on the app icon the app opens but does not load the file.

You could also use HandyControl command line support to open the script in HandyControl after the conversion (user presses a button). So you can test how it runs.

Looks like you have the same problem than me when I did the Half to Full Speed conversion feature. Depending on how a section starts, the stroke directions gets inverted. Fixing this would mean to analyse and identify the beat patterns and gaps which would require more time than I would like to spend on this so I left this as it is and blame the script creator instead :wink:. The problem is that there are so many pattern types that you can’t build them all correctly.

It would be much easier if a CockHero script section always starts in the same direction so the first stroke always goes down.

Left inverted - Right not inverted

It happens every time when a white gap line changes direction.

Bug or script type not supported?

The white line is missing in this section.

Cock Hero Crescendo.funscript (361.8 KB)


tl;dr if you’re not Lucifie - version 0.2.0 is now available with some bugfixes and improvements I was too sleepy to put in last night - download link in the original post :slight_smile:

Hmm…maybe? It would have to be written in node.js, so anyone using HandyControl would have to have node.js installed on their machine (kind of like if it was a python script). But it definitely looks like it wouldn’t be too hard.

That said, the script that actually turns a .funscript JSON object into a half-speed one is only 120 lines long so I think it would be much easier to just recreate it in HandyControl directly.

Ah yeah - The way I’m currently doing it is that each group of strokes starts ‘up’ - since that ensure that cock hero beat patterns never end up getting ‘flipped’. I basically flipped a coin whether I wanted the first action to be sourceActions[0].pos or just 100, but yeah now that you mention it it’s pretty important that it starts at the same to avoid being half-a-beat off. I’ve added it as a user-configurable option, turned off by default.

Just checked this out- they’re not missing, they’re just hidden by the pink lines! I added a 2px offset to the pink lines so that you can see when there’s a white line behind them. It’s definitely a bug that the script is being reduced in that section though - that particular script you linked has revealed a bunch of bugs that I’m looking into now!

In .NET it’s quite simple to include command line parameters in the app without being a command line app itself. You just have to anylyse the parameter afterwards and do something. This way you can load a file for example when you drop it on the application or just doubleclick it if the file extension is linked to the app.

I am not sure if its right to just copy your code to HandyControl. Linking the apps some way seems to be better so you can expand and update your app independant.

One example how to load a script to HandyControl.
…\HandyControl.exe /load “C:\filename.funscript”

In the apps misc settings is a button that shows all available commands.

I made it open-source because I want people to copy it :stuck_out_tongue: Although I suppose I see your point in that it would be good if HandyControl could benefit when I make improvements to the core algorithm, rather than it needing you to go through and update the .NET port…

I just took a moment to look into it and it seems that I can get command-line arguments passed into my app. Although I’m not sure that I can make the app release control of the terminal, so it might be necessary to add a manual 3-second wait timer or something and then close it from your end.

I’ll make sure version 0.3.0 can be run from the command line with options for input file path, output file path, all user-configurable options and perhaps a ‘verbose’ mode.

1 Like

Any way to modify this app to also provide a stroke-length and position offset to keep the movement the same, just shorter-length strokes?

You can do this in HandyControl afterwards.

Version 0.3.0 is done! The main changes are a few new options, including the all-important (for Cock Hero and PMV videos) “Match First Downstroke” option - this will stop your half-speed script from being half-a-beat out of sync!

Download links are in the opening post in this topic.

@Lucifie, this version has command-line support, the GitHub release page for v0.3.0 has more detail in regards to the command line params and whatnot :slight_smile:


Would it be possible to add the functionality to DOUBLE (not Half) the speed of strokes, for those with fast servos and a slowly written script?