Yes, please. Thanks @hugecat
k added it
Fixed a stupid bug where I moved files, instead of copying, to the %appdata% vault.
So, when generating a file, the file was created and then moved immediately to the vault. So, it seems to disappear.
Oups. Fixed in 1.0.1.
How to setup as a scripter
- Download & extract the tool somewhere (for example, C:\Tools\FunscriptToolbox)
- Double-click on --FSTB-Installation.bat.
- This will also create a few ‘use-case’ folders.
The one that is needed for this use case is “FSTB-PrepareScriptForRelease".
You can leave the folders there, or move them somewhere else, the script inside will still work if they are moved.
Notes:
If there is interest, I might expand the tool with commands that could be added to the PrepareForRelease batch file, like adding your default metadata, creating the heatmap image, downloading all images found on the video url, etc).
The tool might not work well with video with music since it’s trying to match similar audio sections. With music, there might be a lot of sections with almost identical audio.
After that, each time you create a script
- Move new-scene.mp4 and new-scene.funscript to the folder ScriptToRelease.
- Start “–FSTB-PrepareScriptForRelease.1.0.bat”.
- Wait for the application to inject the audio signature.
- Release your .funscript, with an embedded audio signature.
Your job is done.
In theory, you should not have to synchronize your script with all versions that exist on the internet.
“Consumers” should be able to do that themselves.
How to setup as a consumer
- Download & extract the tool somewhere (for example, C:\Tools\FunscriptToolbox)
- Double-click on --FSTB-Installation.bat.
- This will also create a few ‘use-case’ folders.
The one that is needed for this use case is “FSTB-VerifyDownloadedScripts".
You can leave the folders there, or move them somewhere else, the script inside will still work if they are moved.
After that, each time you have to synchronize a script to your own video version
- Move scene.funscript, scene.asig (if .funscript doesn’t include audiosignature) and scene.mp4 to the folder ScriptsToValidate.
- Make sure all the files have the same names.
- Start “–FSTB-VerifyDownloadedScripts.version.bat”.
- If your video version is same as the scripter’s version, you’ll see something like this:
- If your version is different, you’ll see this and a synchronized version script will have been created for you:
How to setup
- Download & extract the tool somewhere (for example, C:\Tools\FunscriptToolbox). Link to download
- Double-click on --FSTB-Installation.bat.
- This will also create a few ‘use-case’ folders.
The one that is needed for this use case is “FSTB-VerifyDownloadedScripts".
You can leave the folders there, or move them somewhere else, the script inside will still work if they are moved.
How to create synchronized .funscript for a remastered video
If you have access to scene.funscript, scene.mp4 and new-remastered-scene.mp4 (and scene.asig, if the scene.funscript doesn’t include an audio signature), the easiest way to create a synchronized funscript for the remastered scene is to:
- Move all the files to the folder “FSTB-VerifyDownloadedScripts".
- Start “–FSTB-GenericCmd.1.1.bat”. This will open a ‘command prompt’.
- In the command prompt type:
FunscriptToolbox.exe as.cfs -i scene.funscript -o new-remastered-scene.mp4
It can also synchronize from one video to multiple videos (or vice versa). For example, if you want to synchronize a JAV scene then you can place wildcard ‘*’ in the name of the files (input and/or output).
The following command would take the funscript from a scene in a single video and synchronize it to multiple segmented videos (i.e. Segmented-SIVR-100-A.mp4, Segmented-SIVR-100-B.mp4, …).
FunscriptToolbox.exe as.cfs -i FullJAV-SIVR-100.funscript -o Segmented-SIVR-100-*.mp4
Good tool!
Also it works fine on Linux with wine, which is nice
For the last few weeks, I have been working on an OFS plugin to speed up scripting, tied to new features in FunscriptToolbox. It should be finished in a week or two but it’s already usable.
Any scripters that would like to beta test it?
Send me a message if you are interested.
Ooh I’d like to help out for sure
Thanks @shamona_heehee, I’ll send you a DM in a few days. I still have a few things I need to prepare first.
Updated the tool to 1.2.5.
- Fixed some verbs that didn’t download ffmpeg (ex. as.cfs). If you tried that verb first after installation, it would fail with an error “cannot find ffmpeg”.
- Fixed script “–FSTB-GenericCmd.1.1.bat” (which contained my local path, instead of the path on your machine).
- AudioSync verbs: Rewrote “audiosync.createfunscript” verb to be more flexible. You can now use multiple inputs and/or multiple outputs. The tool will “virtually” merge the inputs and output for the comparison and then unmerge them to create the final funscript/srt file. It also synchronizes all .funscript / .srt linked to the file (ex. .funscript, .roll.funscript, .pitch.funscript, .srt, .jp.srt, etc).
For example, you can use a pattern * in the filename like this:
FunscriptToolbox as.cfs -i 3DSVR-0628-*.mp4 -o 19512.mp4
This will load and merge all .funscript / .srt linked to files “3DSVR-0628-A.mp4”, “3DSVR-0628->B.mp4”, etc and create .funscript / .srt synced to the file 19512.mp4.
It also works with one input and multiple outputs, or with multiple inputs and outputs.
The files can also be listed individually, separated by “;”.
For example,FunscriptToolbox as.cfs -i 3DSVR-0628-A.mp4;3DSVR-0628-B.mp4;3DSVR-0628-C.mp4 -o 19512.mp4
Hi if you happen to be following still.
Did you get it to work with just mono or did you use wine?
I tried with just mono, but can’t figure out how to override the ‘%appdata%\’ path for ffprobe
When I ls the for full path it errors on, I do see it
‘/install/path/%appdata%\FunscriptToolbox/ffmpeg/ffprobe’
I’m not sure what to add to FunscriptToolbox.exe.config
If that is where I set it, there is only logging paths there.
TIA
If it helps, I just created a new version. I added a parameter in the .exe.config file to specify the ‘AppDataFolder’ (1.2.6).
You might have to let FunscriptToolbox download a version of ffmpeg (and fail if it’s not compatible on your platform), replace ffmpeg.exe with a version that works on your platform, and re-run.
Thank you. That seemed to have worked.
For anyone else trying this for linux.
Install mono
Download 1.2.6 +
edit FunscriptToolbox.exe.config
* note _installed_path in example should be your actual full path
set the Application path to something like:
<applicationSettings>
<FunscriptToolbox.Properties.Settings>
<setting name="AppDataSettings" serializeAs="String">
<value>_installled_path_/FunscriptToolbox/bin</value>
</setting>
</FunscriptToolbox.Properties.Settings>
</applicationSettings>
Run
mono FunscriptToolbox.exe installation
Replace ffmpeg ffprobe in the _installed_path/bin/ffmpeg/
Directory with ones for your system
FunscriptToolbox should work with
mono FunscriptToolbox.exe <verb> parameters
*assuming in your path
I am using wine, good to know that it works with mono too.
This is amazing. Thank you so much!
thank you for your tool to synchronize the funscript with remasters! I have used it with great success.
I was trying to remember the name of this plugin forever as I stupidly forgot to bookmark it. I’m going to try to use it now for some Naughty America Remasters.
Edit: I see it logs the offsets to the console. Is there a flag that will save these results, or, even better, output to something like a CSV? I’d like to capture this in an effort to write a simple tool to modify some cuepoints (aka bookmarks). XBVR and HereSphere (and probably DeoVR) use cuepoints, which can be synced from timestamp.trade, but often I run into problems where I have the cuepoints for the original scene but not the remaster. Since your program is already doing the hard work, and cuepoints can usually be edited in simple JSON (XBVR) and something similar with Stash, I am hoping it would be somewhat trivial to shift the cuepoints as well. If this isn’t something that you would want to include in your app, I imagine that I could at least take the offset info and whip up a quick python script to query XBVR or Stash and generate a new set of cuepoints for the remaster.
This is a fantastic tool!
Right now, no, there isn’t any option to save the offsets into a structured file (but it should be possible to parse the log file). It wouldn’t be too hard to add an option like that thought. I’ll see what I can do when I have some time.
And, sure, I wouldn’t mind adding the option to ‘transform’ Xbvr/HereSphere if you find out the file format. From what I remember, Heresphere is using a binary format though so it might be a bit harder to do if it’s not documented.
Yes to heresphere using binary, but it also imports from XBVR and Stash so you don’t really have to mess with the binary ever if you are using either.
Here’s an example using timestamp.trade and the XBVR (and I think Stash) format. Note that HereSphere itself is able to use cuepoints that have a duration, so advanced formats will show the beginning and end.
Title: Bye Bye Babysitter
Studio: WankzVR
Human-Readable Cuepoints: Cuepoints
XBVR Cuepoints: Import in JSON format
I realize that I can just pipe the output into a text file and then parse the text but I thought it would probably be better to dump the output via an easy-to-add option. Unfortunately I don’t know any C# so I can’t contribute a PR.
Here is an example of a different scene where the XBVR output that has multiple tracks for the cuepoints. The cuepoints also have start and end times. The tracks are used for things like adding position (sitting, standing, etc), adding which actresses are involved at which times (in MFF+ scenes), etc.
In the example below, track 0 is the “normal” cuepoint describing the action, and track 1 describes the camera position (important for VR).
{
"scene_id": "povr-2383253",
"cuepoints": [
{
"time_start": 783.629,
"time_end": 1013.016,
"track": 0,
"name": "cowgirl",
"rating": 0
},
{
"time_start": 1052.922,
"time_end": 1384.325,
"track": 0,
"name": "reverse cowgirl",
"rating": 0
},
{
"time_start": 1561.593,
"time_end": 1587.289,
"track": 0,
"name": "cumshot",
"rating": 0
},
{
"time_start": 233.189,
"time_end": 644.2,
"track": 1,
"name": "sitting",
"rating": 0
},
{
"time_start": 1482.288,
"time_end": 1561.593,
"track": 0,
"name": "Hand Job",
"rating": 0
},
{
"time_start": 319.243,
"time_end": 644.241,
"track": 0,
"name": "Blow Job",
"rating": 0
},
{
"time_start": 644.419,
"time_end": 779.917,
"track": 0,
"name": "Blow Job",
"rating": 0
},
{
"time_start": 1013.016,
"time_end": 1052.922,
"track": 0,
"name": "Blow Job",
"rating": 0
},
{
"time_start": 1384.325,
"time_end": 1482.288,
"track": 0,
"name": "Blow Job",
"rating": 0
},
{
"time_start": 644.4,
"time_end": 1611,
"track": 1,
"name": "lying",
"rating": 0
}
]
},