Attck's Merge Tool - Combines videos and funcscripts

Finally converted to a proper app.

Release and Install instructions can be found in my github:
GitHub - attckdog/AttcksMergeTool: Merges videos and funcscripts, make your own compliations or combine small animations to make a longer video. · GitHub

Attck’s Funscript & Video Merger

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

  1. Download AttcksMergeTool.exe from the latest release.
  2. Put it in a folder of its own. Its Input folder, settings and output are created next to it.
  3. 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
  1. Added options panel with persistent settings
  2. Completely replaced old method of script smoothing between transitions.
  3. Added configurable:
    • Encoding quality settings
    • Resolution
    • Frame Rate
    • Scene(aka video) transition settings
    • video extensions
    • Behavior for handling missing funscript for video
  4. Added ordering controls in app, also Random and Alphabetic buttons
  5. Added display of video length, and if a matched funscript was detected and if it’s axis count
  6. Added way better reporting of problems like Desync
  7. 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
  8. 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

Screenshots

10 Likes

Nice! Watching this now! I’ll probably be making some stamina videos with this!

1 Like

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.

combined everything into 1 powershell script and added NVEC support for nvidia gpus GREATLY improving speed of encoding in most cases

1 Like

Fixed spaces in file names breaking the script. idk how i didn’t run into this until today.

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.

1 Like
  • 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.
  • Fixed Chapter problems on videos
1 Like

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

1 Like

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.

1 Like

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.

5 Likes

I got a this error

Make sure you’ve extracted the files someplace accessible, like a new folder on the c drive.

Also make sure you have matching funscript files for each video

Update: Release GUI_2026-08-24 · attckdog/AttcksMergeTool · GitHub

I’m open sourcing the .NET desktop app.

Changes:

  • 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

Update: Release GUI_2026-08-24 · attckdog/AttcksMergeTool · GitHub

I’m open sourcing the .NET desktop app.

Changes:

  • 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

Working on a smart scene transition based on speed limit so it doesn’t over compensate or rip your dick off.

Fixes

  • 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.

Download the release here:

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.