Funscript Trimmer | trim funscripts + videos to save you much needed data space | No app, no upload, your browser, all private! | (v1.10 - Updated: 9/8/2026)

Funscript Trimmer

Current version: v1.10 - Crossfade added to Dead-section Cut - Updated 9/8/2026

First of all, this is a vibe-coded project using Claude. Just wanted to make a quick tool that people could benefit from. I will make adjustments as needed but don’t expect crazy new additions.

Good day my fellow gooners! Welcome to my first tool that has the goal in mind to reduce hefty video sizes to get you directly into the action that our wonderful scriptors have made for us.

I’ve created a two tools in one HTML file that let’s you trim dead space (no funscript movement) off the front and back, or also remove every dead section from the middle of your funscript(s) / video / .srt files!

We’ve all been there where you have a 5gb VR video that is 30 minutes long, but there is only about 5 minutes of funscript action associated with it. Well this will let you trim off that boring, no stroking part of the video and get you directly into the action you are seeking while also reducing the file size of said video to something like 1gb. Data hoarding gooners REJOICE!

The nice thing about this tool is that it is a quick download HTML file that you just open in one of your browsers. It’s local only with no uploading, meaning it’s private. Downside is that it cannot do video processing through the browser but it provides a .bat/.sh that will complete the video trimming.

There are two types of trimming available with this tool (dead space = no funscript movement):

  • Front + Back Trim: removes the dead space from the beginning and the end of the script/video with a couple seconds of time padding.

    • This is the faster of the 2 options by a mile, almost instant! Just won’t reduce file sizes as much as option below.
  • Dead-section Cut: removes the dead space from the front and back (like previous option) as well as any spots throughout the script/video that have extended dead space that you can adjust.

    • This is the slower option that requires re-encoding the video. Depending on video size + resolution, this can take a SIGNIFICANT amount of time. But more space saved!

As an example of the two trimming operations, here is a comparison between the two where the orange square in the script preview is what will be trimmed:

↓ Front + Back Trim ↓


vs


↑ Dead-section Cut ↑

And the comparison of the size after the trim is done using the same funscript:

↓ Front + Back Trim ↓


vs

↑ Dead-section Cut ↑

Finally, this is the file size comparison of the script shown above:

Tool is made to trim the following files:

  • Single Funcripts
  • Multi-axis Funscripts
    • Merged
    • Unmerged
  • SRT (captions)
  • Video files supported by ffmpeg

Requirements

  • ffmpeg
  • Making ffmpeg a PATH environment variable.
    1. Download and extract ffmpeg, then drop the folder in your C: drive.
    2. Click Start, search Environment Variable, and click “Edit the system environment variables”.
    3. On the Advanced tab, click Environment Variables.
    4. Find “Path” in the top box, click Edit, then New.
    5. Enter the path to the ffmpeg bin folder, this should be C:\ffmpeg\bin\ if you put it in the C: drive.
    6. Open Command Prompt and type ffmpeg. If it lists the version and details, you’re good to go.

Download

image or image


Full Page Preview - v1.10


Detailed Instructions
Section 01: Load Funscript

Section 01: Load Funscript

Drag-and-drop a funscript or a whole folder into the section.

  • Depending on your browser, drag-and-drop may not work for folders. If so, click to browse or use the “Browse for a folder instead” button.

In the example image below, I loaded my Multi-axis Funscripts folder which brings up a picker to choose which funscript to start trimming.

The folder picker has a few handy features. From left to right:

Filename Funscript Preview Trimmable % Associated Files Found
Name of the funscript file (shocker). Heatmap preview of the primary funscript. Percentage of the script that can be trimmed. Displays if there are any associated multi-axis funscripts, video file, or .srt captions available for this funscript.
image

With that said, there are filters available that can help you in your hunt to trim some funscripts:

  • Show:
    • trim % (head+tail): changes the Trimmable % to reflect percentage that Front + Back Trim can remove.
    • dead-cut %: changes the Trimmable % to reflect percentage that Dead-section Cut can remove.
  • Yellow and Red %: this changes what color the Trimmable % shows depending on the thresholds set at.
    image
  • Sort:
    • name (A-Z): orders the list alphabetically by Filename.
    • % high→low: orders the list by Trimmable % from largest percent to lowest.
    • % low→high: orders the list by Trimmable % from lowest percent to highest.
  • Filter by name: allows you to directly search for a funscript by filename.

I will be using CJVR-016-E.Yumika Saeki_Honoka Tsuji.funscript as the example for the remainder of the detailed instructions.

Once you have selected your funscript, it will show you which one you are working on, details such as amount of actions and first + last action time, as well as a better heatmap preview of the funscript + associated multi-axis scripts:

If you happen to load a single funscript file that does have multi-axis scripts available, below the script preview is a section that allows you to load the additional multi-axis funscripts to make sure they are associated and helps with trimming:

Section 02: Identify The Video

Section 02: Identify The Video

This is where you associate the video + .srt to the selected funscript. If you did it via the folder picker as demonstrated above, it will already associate these files but only if the files have the same filename as the selected funscript.

If you went the route of selecting a single funscript in section 01 or the video / .srt files are either in a separate folder or differently named from main funscript, you can select them here if you want them trimmed equally.

Important Note: the filename + extension for the video in the DETECTED VIDEO NAME field must match the videos so that the .bat/.sh script can locate it!

Section 03: Choose Operation

Section 03: Choose Operation

This is the meat of the tool and why you are here! As mentioned above the two operations that this tool can complete are as follows:

  • Front + Back Trim: removes the dead space from the beginning and the end of the script/video with a couple seconds of time padding.

  • Dead-section Cut: removes the dead space from the front and back (like previous option) as well as any spots throughout the script/video that have extended dead space that you can adjust.

We will be starting with Front + Back Trim:

You have two options for the Front + Back trim where it can either Auto (first action) or be Manual offset.

Auto (first action) will trim the front of the funscript(s) to the first movement that it finds within any of the associated funscript(s), so that it doesn’t accidentally trim any multi-axis movements that aren’t the main stroke.

Manual offset gives you the controls to trim the funscript(s) to whatever time that you are willing to choose. It opens the Offset field shown in the screenshot above and you manually select the time that the front trim will go to. Some funscripts may have a small movement that you may just want to skip to further trim the video size, so this is where the benefit of manually doing it is!

Example below, orange squares in preview are what will be trimmed:

Auto (first action)


vs


Manual offset

Padding: this is time added before the first and last action to make it so the video doesn’t abruptly cut either into action or out of it.

Here is how section 03 displays the funscript when Front + Back Trim: Auto (first action) is selected:

Notable items that can be seen in the screenshot:

  • Result Preview:

    • Cutting From: where the funscript will be first trimmed to.
    • Duration: displays the original time of the funscript and what it’s new time will be in green.
    • Actions Kept: how many actions from the funscript will be kept after the trimming.
    • Reduced: percentage of the funscript that will be removed.
  • Funscript timeline trimming preview:

    • Before: original length of time of the script.
    • Original funscript timeline heatmap showing the sections that will be trimmed in orange squares.
    • After: the new length of time of the script.
    • New funscript timeline heatmap that is scaled against the original above it for better size comparison.
  • Download trimmed funscript + srt button: this downloads the newly trimmed funscript(s) + .srt. If you don’t do it here, there is another button in section 04 that does it as well but also includes the .bat/.sh that will trim the video.

Now it’s time to go over the fun that is Dead-section Cut:

It gives you 3 options to to adjust to let you further trim as you want:

  • Min Dead Length: the minimum length of time between actions in the funscript before classifying it as dead space.
  • Padding Each Side: time padded onto the sides of the trimmed section to give you some fade in, fade out cushion for actions.
  • Movement Threshold: sometimes a funscript might have some jitter or small random movements that trigger the auto detection to see it as “movement”. This helps reduce that if it is happens.

↓ Added with v1.10 - Updated 9/8/2026 ↓

Now the Dead-section Cut has the ability to crossfade scenes, so it is no longer a hard cut!

  • Crossfade between cuts: enabling this will let your scenes have a transition to reduce jarring cuts that may occur with the Dead-section Cut. Much better experience!

Crossfade Length: amount of time that the crossfade transition will take. A longer amount of time will make for a smoother transition but be aware that this setting eats the padding on each side. The max amount of crossfade length is equal to that of the padding each side!

↑ End of v1.10 Addition ↑

  • Result Preview:
    • Dead Sections Cut: amount of sections found in the script that will be trimmed.
    • Time Removed: total amount of time that will be cut from the original timeline.
    • Actions Kept: how many actions from the funscript will be kept after the trimming.
    • Duration: displays the original time of the funscript and what it’s new time will be in green.
    • Reduced: percentage of the funscript that will be removed.

Sections Being Removed (Original Timeline): All the dead space sections found in the funscript that will be removed and tells you the exact timings of such.

  • Funscript timeline trimming preview:

    • Before: original length of time of the script.
    • Original funscript timeline heatmap showing the sections that will be trimmed in orange squares, corresponds to the Sections Being Removed from the previous screenshot.
    • After: the new length of time of the script.
    • New funscript timeline heatmap that is scaled against the original above it for better size comparison.
  • Download trimmed funscript + srt button: this downloads the newly trimmed funscript(s) + .srt. If you don’t do it here, there is another button in section 04 that does it as well but also includes the .bat/.sh that will trim the video.

Important Note: Depending on what operation you complete in Section 03, it will change what is appended on the filename as shown below:

  • Front + Back Trim: it will append _trimmed onto the files, i.e. filename_trimmed.funscript
  • Dead-section Cut: it will append _deadcut onto the files, i.e. filename_deadcut.funscript
Section 04: Get The Video Script

Section 04: Get The Video Script

Last step before greatness!

Important Note: there are limitations on processing video files through browser and I wanted to make a tool that was simplistic while also not being it’s own application. So running a .bat/.sh will be necessary to trim the video file using ffmpeg.

Here is where you can choose which type of script you want to download and run. Windows uses .bat while Mac/Linux use .sh.

Depending on what operation was chosen in section 03, you may have the option to change the Cut Accuracy:

  • Front + Back Trim: gives you the option for Fast (stream copy) or Frame-exact (re-encode).
    • Fast (stream copy): nearly instant trimming of video file, HIGHLY RECOMMENDED.
    • Frame-exact (re-encode): slower process but more accurate, not recommended for Front + Back trim.
  • Dead-section Cut: no options provided for Cut Accuracy! It will always be Frame-exact (re-encode).

Delete the script after it finishes successfully: just a quick cleanup of the .bat/.sh after the video has been trimmed successfully.

Script Preview: shows you exactly what’s going to be in the .bat/.sh script that you download or let’s you manually copy it so you can make the script file yourself.

Download run-script button: just downloads the .bat/.sh file.
Download script + funscript + srt: downloads all the trimmed funscript(s), .srt file, and the .bat/.sh script.

Final Step

Final Step: Glory to Gooners

You will copy all the files that were downloaded to the folder that contains the original video and run the .bat/.sh script.

As mentioned many times, depending on the operation chosen in section 03, will determine how fast things will be done.

Front + Back Trim → Fast (stream copy) = :chequered_flag::man_running: :dashing_away: _________
Front + Back Trim → Frame-exact (re-encode) = :chequered_flag: _________ :turtle:
Dead-section Cut = :chequered_flag: _________ :turtle:

Re-encoding a 8k, 15gb VR video = :chequered_flag: :volcano: :mount_fuji: :mountain_snow: :mountain: :turtle:
(prepare to let your PC be running that overnight or more)

But the end goal is the most important part! If you need to scrape back those extra gigabytes to make room for more videos, this can definitely be worth it.

If you read this far, you’re a beautiful person!


Quick Instructions: if you already reviewed the Detailed Instructions above and need a refresher.
  1. Open Funscript Trimmer HTML in browser of choice.
  2. Load funscript by either dropping the folder or funscript into section 01.
    • Certain browser do not let you drop folders into them, please use the “Browse for a folder instead”.
  3. Select the funscript to trim from picker list (skipped if you loaded funscript).
  4. In section 02, identify the video / .srt file associated to the funscript, necessary for .bat/.sh to find it for trimming.
    • If funscript was chosen from the folder picker, it will automatically associate files if it has the same filename as the funscript.
  5. Choose the trimming operation in section 03 to complete and download trimmed funscript(s) + .srt:
    • Front + Back trim
      • Auto (first action): will trim to first found funscript movement.
      • Manual offset: choose where to trim the beginning of the script to.
      • Padding: amount of time to add onto the front and back of the script so you don’t get jumpscared from immediate movement.
    • Dead-section cut
      • Min Dead Length: if dead space is this amount of time or longer, it will be trimmed.
      • Padding Each Side: amount of time added to the edges of movement so you don’t get abruptly jumpscared into another scene with different movement.
      • Movement Threshold: sometimes a funscript may have small jitter that comes off as movement, this adjustment allows you to factor that in for trimming.
      • Crossfade between cuts: enable this to give scenes a smoother transition.
        • Crossfade Length: amount of time for the crossfade transition to occur, eats up padding time.
  6. Download the .bat (Windows) or .sh (Mac / Linux) + trimmed funscript(s) + trimmed .srt here if you didn’t get them from previous step.
    • Fast (stream copy): only available for Front + Back trim, almost instant trimming of associated video.
    • Frame-exact (re-encode): available to both trim operations but required by Dead-section cut, slower process overall and may require PC to run it overnight.
      • Both of these options shoot for visually-lossless quality.
    • Delete the script after it finishes successfully: self-explained but this is for those that don’t want to manually delete the .bat/.sh after it completes.
  7. Copy the .bat/.sh + funscript(s) + .srt that was downloaded with either the _trimmed or _deadcut added to filename and place in folder where the original files are located.
  8. Run the .bat/.sh that will trim the original video.
    • If Fast was chosen in step 6, it will be almost immediately completed. Otherwise, re-encoding will take some time to process, so LET IT RIDE!
  9. Optional: delete the original files and the .bat/.sh if you didn’t check that prior option, and enjoy the space you are now saving! … or download even more files to maximize the goon :woozy_face:

Changelog
v1.10 - Crossfade added to Dead-section Cut Added crossfade transitions for dead-section cuts.

Added

  • Crossfade between cuts: Dead-section cut can now blend across each interior cut instead of hard-cutting, with an adjustable crossfade length. The generated ffmpeg uses xfade/acrossfade, and the funscript, every axis, and subtitles are re-timed to stay in sync with the (slightly shorter) crossfaded video.
v1.00 (initial release) Initial versioned release: a single self-contained HTML tool for trimming funscripts, their videos, and matching subtitles entirely in the browser.

Added

  • Front + Back trim: Cuts dead video before the first action and after the last action, keeping 5s padding on each end. Uses fast ffmpeg stream-copy.
  • Dead-section cut: On top of the head/tail trim, removes long still stretches from the middle of the script (threshold and padding are adjustable). Re-encodes the video.
  • Folder picker: Drop a folder of hundreds of sets to browse them in a filterable, sortable list that pairs each funscript with its matching video and SRT by name.
  • Dead-space % with color coding: Each set shows how much of its timeline is dead, colored by user-set thresholds, switchable between dead-cut % and trim % and sortable.
  • Funscript preview: A waveform preview (height = motion, color = speed, dark = gaps) in section 1, tiny heatmap thumbnails in the picker, and a proportional before/after view in section 3.
  • SRT subtitle sync: A matching .srt caption file is re-timed with the same edit as the video and funscript, so captions stay in sync.
  • Multi-axis support: Handles both layouts: separate axis files sharing a base name (surge, sway, twist, roll, pitch, valve, etc.) and merged files with an embedded “axes” array (T-Code ids like L1, R2). Axes are marked with a MULTI tag, a section is only trimmed where every axis is simultaneously still so no motion is ever cut, all axes are shifted and saved together (separate files keep the operation suffix before the axis name, e.g. name_trimmed.pitch.funscript), and section 1 and 3 preview each axis with its trimmable regions.
  • One-click run scripts: Generates a ready-to-run .bat or .sh that runs ffmpeg with everything filled in, optionally deleting itself after a successful run.
  • Adjustable page width: A slider widens the layout to fill the screen; the setting persists per-browser and can be baked into the file.
2 Likes

v1.10 - Crossfade added to Dead-section Cut - Updated: 9/8/2026

Added

  • Crossfade between cuts: Dead-section cut can now blend across each interior cut instead of hard-cutting, with an adjustable crossfade length. The generated ffmpeg uses xfade/acrossfade, and the funscript, every axis, and subtitles are re-timed to stay in sync with the (slightly shorter) crossfaded video.

Fungen can do that now too, export chapters with their funscripts as one video. Have not tested it yet.

There probably are a few apps that do such but this is just made to be simple and do its one purpose quickly. Just a single HTML file that you can bookmark in your browser!

1 Like

Added a full page preview of what this looks like below the download section, in the dropdown section Full Page Preview.