A CLI tool I created to solve the headache of managing large collections of videos and funscripts that don’t quite match up. Since I don’t really have as much time as I used to, I usually just catch up by downloading things that I enjoy, which often leaves me with a folder of files and funscripts that don’t usually match. That’s why I created the Script…
What Does It Do?
At its core, FunForge does one thing really well: it looks at your videos and funscripts, trying to figure out which ones belong together (even when their names aren’t exactly the same), and renames them to match.
The Cool Stuff
Smart Matching: Uses fuzzy matching to pair files even when names aren’t exact matches
Bulk Processing: Handles entire folders of files at once
Archive Support: Can extract and process ZIP/RAR archives automatically
Safe Testing: Includes a “dry run” mode so you can see what would happen before making any changes
Multi-Axis Support: Properly handles all types of funscript files (.funscript, .pitch.funscript, etc.)
Other Features
Support for multiple video formats (mp4, mkv, avi, mov, etc.)
Subtitle file handling (.srt, .ass, .ssa, .vtt)
Video resolution detection and optional tagging
Recursive directory scanning
Automatic cleanup of empty folders after file operations
Directory Structure
After processing, files are organized as follows:
YourDirectory/
├── FunForge/
│ ├── Already Same Name/ # Files that already had exact matches
│ ├── Changed/ # Successfully renamed files
│ └── Not Changed/ # Files without matches
Do you mean when you tag filenames with resolution information?
It just grabs the resolution with a third party library called “pymediainfo” and then tags the files accordingly if you want.
If you enable tagging with resolution, it adds the resolution to the filename, like this:
How does it handle multiple scripts for the same video?
Example: awesome_video.mp4 awesome_script_version_a.funscript awesome_script_version_b.funscript
In this case, the script would only select one of the examples because they don’t have multi-axis file extensions.
It will probably change it to something like this:
as it’s the most descriptive…
Adding support for multiple versions of scripts for one media type is definitely something I’ll add in the future when I have time.
I’m so glad to hear that you’re enjoying the script! I’ve been testing it for about a month now, and it’s been a total lifesaver, saving me so much time.
At first, I thought about keeping it to myself because what if it wasn’t useful for anyone else?
But I guess it was a good decision to share it.
It’s not perfect, but it does its job pretty well.
Already lost several hours of trying to make my own with the bad choice of ChatGPT in only made it worse and it started deleting or rnaming files to … (1) and making it such a pain for me. But ur fr a livesaver thanks to that!!!
One Last Problem i encounter, some of my funscripts don’t have any mp4 bc idk why.
Is it possible to make a script which automatically searches and download the missing mp4 or video file?
bc i have to search for idk? over 400 missing videos for these lonely funscripts.
Creating a script to automatically search for and download videos to match your .funscript files would be a very challenging and complex task. The biggest issue is that .funscript files don’t contain reliable metadata to identify the correct video.
Even if the script guesses the right video, automating online searches is difficult because every website has a different structure, and many block bots with CAPTCHAs or rate limits. Downloading videos programmatically is even harder because many platforms use DRM or restrict downloads, and doing this without permission could violate terms of service or copyright laws.
If you use FunForge, I’d suggest that you do so with a small Directory of Files first, and then move on to a Bigger collection that’s not fully matched.