A Windows desktop app that joins a folder of videos and their funscripts into one video and one funscript, with chapters, bookmarks and multi-axis scripts kept in sync.
Drop your scenes into a folder, arrange them in the order you want, hit Start Merge, and you get a single video with a matching script that stays aligned from the first scene to the last.
Features
Video and script merged together: every scene is re-encoded to a common format and joined into one video. The merged script is placed against the real encoded lengths, so it stays in sync no matter how many scenes there are.
Chapters and bookmarks: each scene becomes a chapter in the video and a bookmark in the funscript, named after its file.
Multi-axis support: axes embedded in the main funscript and separate {scene}.{axis}.funscript files are both merged.
Transition gaps: an optional short stretch of black between scenes, just long enough for the device to travel from where one scene ends to where the next starts without going faster than a speed limit you set.
Merge order control: reorder scenes by hand, sort them alphabetically, or shuffle them.
Per-video trimming: cut the start or end off any video. Its script is trimmed to match.
Injected voice audio: mix random voice clips from your own audio packs over any video’s audio, with separate volumes for the voices and the original sound.
Hardware encoding: NVIDIA NVENC for AV1 or H.264, with software encoders as a fallback. Several scenes are encoded in parallel.
Metadata kept: creators, performers, tags and notes from every source script carry over into the merged one.
Requirements
Windows 10 or 11
FFmpeg (both ffmpeg and ffprobe). The easiest way to get it is to open a command prompt and run:
winget install Gyan.FFmpeg
If the app says it can’t find ffmpeg afterwards, restart your PC so the new PATH takes effect, or point the app straight at ffmpeg.exe and ffprobe.exe in Options.
An NVIDIA GPU is optional but strongly recommended. It makes encoding much faster.
Installation
Download AttcksMergeTool.exe from the latest release.
Put it in a folder of its own. Its Input folder, settings and output are created next to it.
Run it.
The release is a single self-contained executable, so you don’t need to install .NET.
Notes:
Multi-Axis files should use the convention of {SameFileNameAsVideo}{Axis}.funscript. example: TifaVideo.roll.funscript OR be embedded as axis in the main funscript.
If you get errors about ffmpeg not being found/recognized restart the machine after installing it. It’s likely not in the PATH, google how to fix that it’s simple.
Change History:
Click to see History
2025-12-04
Updated to handle separate files for the different axis. IE; .roll.funscript
Fixed a problem with desync caused by video and script length not being the same.
2025-12-06
combined everything into 1 powershell script.
Added support NVEC encoding
Added chapter/bookmark support
Added retaining of source funscript metadata where possible
Added video chapter support but it’s kind of buggy
Added loading bar for the encoding.
Added config in the script for resulting resolution, no up-scaling is done, Default: 1080p
2025-12-22
Fixed spaces in file names breaking the script. idk how i didn’t run into this yet.
2025-12-29
Added support for AV1, edit the script and set AV1 to true. False will use h.264 AV1 isn’t supported by all devices but it’s great for those that can use it.
2026-03-02
Added Script transition smoothing, Fixed Multi-Axis issues do to axis names, Fixed Chapter problems
2026-03-04
Converted to .Net 10 and WinForms
Added GUI
Added Option to Trim video inputs to a specific segment. will also split the funscript. Note: this could use some testing/feedback.
2026-08-24
Added options panel with persistent settings
Completely replaced old method of script smoothing between transitions.
Added configurable:
Encoding quality settings
Resolution
Frame Rate
Scene(aka video) transition settings
video extensions
Behavior for handling missing funscript for video
Added ordering controls in app, also Random and Alphabetic buttons
Added display of video length, and if a matched funscript was detected and if it’s axis count
Added way better reporting of problems like Desync
Fixed a bunch of possible desync issues:
script length longer/shorter than clip causing drift
missing video for funscript still being included (and options)
missing funscript not adding filler timeline to result
frame rate difference from original causing drift
Fixed a couple bugs in the chapter creation
2026-09-25
Added full .net source to github, updated readme
Fixed Audio drift bug
Fixed funscripts longer than scene video causing problems, now they are trimmed
Pushed a few updates, if you’re using this make sure you grab the updated version.
Changes:
2025-12-04
Updated to handle separate files for the different axis. IE; .roll.funscript - Fixed a problem with desync caused by video and script length not being the same.
Added AV1 support for the resulting encoding. Edit the script to Enable / Disable it.
Support for AV1 in modern devices is great but not quite universial like h.264 so I’ll default it off.
Added Script transition smoothing, configurable but defaults to 500ms. Idea is that it prevent massive instant swings 0-100 on transition from 1 funscript to the next.
Fixed Multi-Axis issues due to axis names
Fixed Multi-Axis to no longer care if it’s split into multiple files named by axis, partial combined, or all in one.
Awesome!! You should consider adding the ability to truncate videos as well so you can clip your favorite parts from several videos and smash them together
Finally pulled the trigger on converting to a .net app.
I’ll have something to share with others in a few days prolly. Got all the existing features from the powershell script in. I’ve added a stupid simple version of trimming to the app as well. It’s just a Start time and stop time to extract out of the original video to include in the merge.
Test Release of the GUI built in .NET 10 WinForms. Build should be self contained.
This also has trimming options, test it out and let me know how shite it is lol.
Audio drifting out of sync on long merges. Scenes whose audio was shorter than their video left small holes in the merged audio, and players closed them by playing the next scene’s audio early, so the offset grew with every scene. Each scene’s audio is now padded or cut to exactly its video length.
Whole scripts missing from the merged funscript. A script with stray keyframes past the end of its video caused every later scene’s keyframes to collapse onto a single timestamp. Keyframes past a video’s end are now dropped (with a warning in the log), and out-of-order scripts are sorted before merging.
New release is out, Fixed a few bugs, and toying with configurable audio injection.
Previous release was incorrectly .net framework dependent. This release isn’t.
What’s new
Voice audio injection. Mix random voice clips over any video’s own audio. Pick one or more folders from your voice packs for each video, then set how loud the voices and the original audio play and how long the gaps between clips are. Clips are always placed whole and don’t repeat until every clip in the chosen folders has played. The log lists each clip and when it starts. Put packs in the Audio folder next to the app.
Audio Sorting (Options > Audio Sorting). Sorts a voice pack by sound type instead of by performer, into folders like Female/Moaning/3-High, Male/Breathing/1-Low or Creature/Orc/Growls & Roars. It works from the pack’s folder and file names, covering voice, category (moaning, breathing, orgasm, oral, dialogue and more) and intensity (low to extreme). Preview shows the result before anything is written. The pack itself isn’t changed, and the sorted folder takes no extra disk space. Duplicate takes are left out, and _manifest.csv records where every clip went.
Voice pack credits. Options > Credits & License now credits the OpenNSFW Voice Pack and all 35 of its performers, with links to each. The same list is in CREDITS.md.
Fixes
Videos with no audio track are handled. They get a silent track, so every scene in the merge carries the same streams.
Getting voice clips
The app doesn’t include any voice clips. Download the free OpenNSFW Voice Pack and extract it so the OpenNSFW VA folder sits in Audio next to the app. Then, optionally, sort it in Options > Audio Sorting. The README has step-by-step instructions.
If you publish anything made with the pack, credit the pack and its performers, as the pack’s terms require. For example: [Character Moans]: @chiyo1000nights OpenNSFW VoicePack. The clips must not be used to train AI or imitate a performer’s voice.