I have identified and fixed the issue with #1. The scripts are generating an error while generating heatmap which pointed me to the version field. It is a double instead of a string:
"version":1.0
vs
"version":"1.0"
Swapping them to the proper string format and regenerating fixes it.
For #2, I have put the chrome console output from loading the scene (works), swapping to the (simple) funscript (doesn’t work), then swapping back to default script (doesn’t work) which starts outputting the generator.next error. Still a bit new to the site and its formatting so I may have to edit the code block if it is too messy. Tried this on multiple scenes as well.
In other news I started to work on some of the feature requests while the Stash PR is getting reviewed (to be able to add more devices support with iface/buttplug.io/bluetooth) . Here you can see that all features are now moved to its own tab. I also added a similar setup that https://beta.funscript.io/ has which allows you to modify scripts and save them as presets. I’m still working on building out the ui (it wont be a 1:1 to beta.funscript.io but close enough for now).
Yes, that pair of scripts from Haiya is the one I was testing for the console output I posted. (Pic of folder and naming scheme)
I have ran into this error on all scenes with multiple scripts I have tried. I have not been able to switch scripts successfully using the drop down box at all.
As an aside, that preview looks great. How hard would it be to draw up info from the scripts (i.e. the metadata creator field) or allow the renaming of default script? Thanks for the help so far
Ok tested out the script with and seems to be switching out just fine no error messages like you had. So I have a few questions on your setup:
Do you happen to have this option enabled?
As an aside, that preview looks great. How hard would it be to draw up info from the scripts (i.e. the metadata creator field) or allow the renaming of default script? Thanks for the help so far
I can add a feature to read the metadata info. As for renaming the default script are you meaning you would like to be able to break away from the strict naming format to link differently named scripts to a video ? I ask it this way because thats one of the features I wanted to offer. Being able to just drag/drop and link scripts to your video without having following the current naming format.
Yeah, I have had serve funscripts directly enabled as it is much faster and I just prefer the idea of it. I just tried with it turned off and it worked, just takes like 5x as long to upload. Is that a known/intentional requirement for the multiscript stuff?
Yes, I can access that url and it is the text of the funscript.
Yeah, breaking away from the strict naming format would be great and fulfill what I want from it. The main reason I would like it is to have the scripts be identified easily in stash so I can determine the creator without having to open the script directly. Accessing the description or type metadata could also be useful, but not as important since most script makers don’t follow a universal format for those and I would have to manually normalize them anyways.
For now yes, its a known issue. I have to see if there is a way around this.
This is possible to show when you open the scene itself. I have this same need and resorted to creating tags/groups for each scripter. So there is an issue if say you wanted to search against this metadata since its not stored within stash main db and I’m not to sure if I can add that field manually so you can say use the stash filters to search by “script:developer” for example.
Also would you want to be able to edit the metadata within stash as well? or just view ?
Thanks, I will just turn it off as a workaround when I need it for now then.
I wouldn’t mind both, but that is probably a bigger undertaking. I would be happy with just being able to view it as I could easily tag/group it from the scene viewer then. I tend to edit the metadata in notepad before I rename it and add to stash so I don’t lose track of which one it is anyways.
I think I will try your suggestion of tagging for it as I add scripts. I just did a test group (I haven’t used the group system before) and it seems pretty good for this use.
Thanks for all the help. Let me know if you have a ko-fi or something for making this plugin.
Well, I know it’s been a long time, but I finally had motivation to work on this and it seems most of what I need is actually in the current code. The current format is a bit messy, since it shows .pitch, .roll, etc as a separate script for each version.
I think it would make sense to hide those in the UI, but keep them in the scripts list returned by graphql, because that’s what I’m using to grab the script variations.
I’ll consider submitting a pull request the next time I have a chance to mess with it.
Only a little bit of tidying up in the code, make it a bit more configurable, and it’ll be ready to release for testing.
I appreciate the work @xtc It makes the multi-axis TCode script much cleaner and more portable, but your addon will be a requirement for it.
Edit: It also seems both sliders are broken on Firefox. I hadn’t tried to use them before and I was thinking about the possibility of hooking into those for the multi-axis control.
NEW VERSION : 1.1.0-next.2
Added the ability to modify funscripts (not token scripts.. more below ). This mimics some features found funscript.io. Shouts out to @defucilis, I leveraged the modifications he had but re-wrote the framework that applies the changes.
Also IVDB.io tokens are now supported in Stash. To enable you still need to have the video locally and then input the url of the video on ivdb.io as one of the scripts urls
Let me know how it works, there may be some breakage with other features but wanted to get this out as its been wanted for a while.
cc: @Raptor0815
This is great, thank you! Would it be possible to add a feature where you can change to manual mode and/or certain presets and back to the script while watching? That would be great for edging and to control the movements during the orgasm.
Hey @xtc, I’ve installed version 1.1.0-next.2 (and removed the main version before). But after reloading the plugins, the funscripts are not working anymore, at all. Neither the token scripts from IVDB, nor the regular ones.
Is there anything special I need to bear in mind?
Couple of possible issues.. what stash version are you running? I tested with v0.28.1-93-g14be3c24. Another is missing deps. I would check the stash logs to see what error is being thrown. If its dep you can navigate to “Tasks” in stash settings and find the “Install” task for the plugin. If neither of these fix the issue just let me know what you see in the logs
@zala77 thats pretty interesting , I’ll see what I can come up with . But I do want to ask what you mean “certain presets” . You should be able to load up a preset in the middle (I havn’t really tested this so lmk if it doesn’t work).
I’m getting the same issue with the new version (stash v0.28.1 (cc6917f2)) and the log shows the following errors:
025-08-18 11:43:19Error [Plugin / Stash Interactive Tools] gpsoauth 1.1.1 requires urllib3<2.0, but you have urllib3 2.5.0 which is incompatible.
2025-08-18 11:43:19Error [Plugin / Stash Interactive Tools] ERROR: pip’s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
Yeah, I was just trying that:
pip install --target=automatic_dependencies/ stashapp-tools==0.2.58
Collecting stashapp-tools==0.2.58
Using cached stashapp_tools-0.2.58-py3-none-any.whl.metadata (1.4 kB)
Collecting requests (from stashapp-tools==0.2.58)
Using cached requests-2.32.4-py3-none-any.whl.metadata (4.9 kB)
Collecting charset_normalizer<4,>=2 (from requests->stashapp-tools==0.2.58)
Using cached charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (36 kB)
Collecting idna<4,>=2.5 (from requests->stashapp-tools==0.2.58)
Using cached idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting urllib3<3,>=1.21.1 (from requests->stashapp-tools==0.2.58)
Using cached urllib3-2.5.0-py3-none-any.whl.metadata (6.5 kB)
Collecting certifi>=2017.4.17 (from requests->stashapp-tools==0.2.58)
Using cached certifi-2025.8.3-py3-none-any.whl.metadata (2.4 kB)
Using cached stashapp_tools-0.2.58-py3-none-any.whl (34 kB)
Using cached requests-2.32.4-py3-none-any.whl (64 kB)
Using cached charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (152 kB)
Using cached idna-3.10-py3-none-any.whl (70 kB)
Using cached urllib3-2.5.0-py3-none-any.whl (129 kB)
Using cached certifi-2025.8.3-py3-none-any.whl (161 kB)
Installing collected packages: urllib3, idna, charset_normalizer, certifi, requests, stashapp-tools
ERROR: pip’s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
gpsoauth 1.1.1 requires urllib3<2.0, but you have urllib3 2.5.0 which is incompatible.
Successfully installed certifi-2025.8.3 charset_normalizer-3.4.3 idna-3.10 requests-2.32.4 stashapp-tools-0.2.58 urllib3-2.5.0
It seems that stashapp-tools requirements shouldn’t have urllib3<3,>=1.21.1, but urllib3<2,>=1.21.1.
I manually ran pip install --target=automatic_dependencies/ urllib3==1.21.1 stashapp-tools==0.2.58 and the install completes. I also tried with urllib3==1.26.20 The plugin still doesn’t appear to be working, though. It looks like issues with the urllib3 version. I assume the plugin is using something that needs a version greater than 2.
Weird, is it conflicting with system packages maybe? I notice this isn’t using a venv.
Yeah, that was a red herring. Uninstalling gpso on the system python installation caused that error to go away, but the plugin still isn’t showing up on any video page and no errors in the log.
All the nevermind. It is working now. That video wasn’t picking up the scripts in stash even. It doesn’t auto switch to the Interactive Tab now, though, so that is confusing.
So seems to be an issue with another plugin, yeah it sucks that stash doesn’t have a way to support venvs per plugin.. maybe one day.
As for the sliders I’ll check it out in Firefox, I havent used that browser in some time but I know I have some webkit css selectors on that may be causing your problem.
Also what do you mean “it doesn’t switch to the interactive tab”?
It’s been broken since the beginning, but I don’t honestly use the sliders, as my script handles that. I was considering hooking into them, though.
On the old version when I loaded a video with an interactive script the dropdown and sliders were already open. Now I have to manually click the Interactive Tab.
Thanks for the update. I had a question as I have been playing around with my stash + mfp. I believe MFP gets the script from [ipaddress]/scene/[sceneID]/funscript. Am I correct that it is only able to serve the primary funscript, and there is no way to get it to update with the multi script dropdown until your planned changes come in hopefully with the next stash update?
Incidentally, I am pretty sure I also have the issue with all scripts breaking and not loading for the Handy in the update (was trying to see if the served script updated with a Handy actually connected). It isn’t an urgent issue as I have been using MFP with Stash not the Stash Handy integration, but figured I would note it.
I have a script that ties in with this plugin to support multiaxis. It doesn’t use MFP, though. I’ll release it soon once I polish the edges a bit more. I was just doing some updates and making sure it worked with the most recent release today.