StashApp/Stash-Vr Enhancements - StashInteractiveTools

oh wow,you explained it so well i thought i had crazy imagination but your reply tells me it can be done with root access level. Anyway, it’s a great plugin, its able to read. I just would have love it to have heatmap and that was the main reason i was looking for a way

New Alpha Version : 1.2.0-alpha.9

Added in Bluetooth support finally, should work with initface-central . Check out guide here

What’s the difference between Main, Alpha & Next?

Main works fine for me & have not tested Next, Alpha doesn’t seem to work for me. Pressing the button in the top right shows Handy is Ready but once playing a scene & script nothing happens.

Mostly just more features/bug fixes and experiments. Are you using Handy 1 or 2. Also in the plugin settings are you using the default handy interface or HW v4 (should be in the alpha build). Also any errors in the browser console?

I have Handy 2 Pro,

This is how I have it configured

Pictures of Plugin & interface settings

When opening a scene with Handy Off I get “Error connecting to Handy: Method not implemented.”

image

If I turn it on I will get “Ready”

image

Above is the Alpha Variant.

on Main it will first show an Orange lamp ion the scene and say “Uploading Script” before “Ready”

I couldn’t find any errors in the browser console or logs, but I am not so versed in this.

Go to the plugins section and switch to FW4 . I ran into that exact error .. Go to the plugins and switch to “Handy FW4”

I need to spend some time on seeing if the recent update has broken anything. Let me know if switching to FW4 fixes anything

Thanks,

Changing to FW4 seems to have resolved it, that’s a miss on me. Also seems like my pictures didn’t come out in the previous post :sweat_smile:

After

  1. Changing to “Handy FW4”
  2. Disable the use of the Haptic Interfac

After a few seconds both will revert back to it’s original state & I will again get the same error when trying to play an interactive scene, this seemns like a bug

The Handy Button in the top right seems to not show in the Refract theme. Which would be a Theme issue I suppose so something I will check with them.

Funscript 2.0 Support/tagging

So just saw a post by @VladTheImplier about auto tagging for multi-axis scripts here Stash auto-tag multi-axis scripts. Spent some time talking with him and wanted to get a bit more input on this before the full buildout.

Using this video as an example https://discuss.eroscripts.com/t/aisha-bunny-i-always-wanted-to-taste-a-big-white-cock-naughty-step-sister-gives-me-the-best-blowjob-now-with-twist-axis/61690

To start off the first go at this will NOT include multi-axis controlling but more to build the foundation to help manage multi-axis scripts and the 2.0 spec

Here are some things that I have in mind

  • Allow users break away from the strict filename naming for scripts (Drag/drop/browser mapping)
  • When scanning a video allow mapping metadata to stash tags(ability to auto create/skip if not found)
  • detection for channels which will tag a video as userdefined tag (same as funscript metdata)
  • All tagging will support include/exclude mapping via bare strings or regex

The first version out will be the tagging support then I’ll move over to allowing users to map to any named scripts. Here is a rough version of the UI to handle funscript metadata->tags mapping

@dtt I saw you where saying “it doesn’t seem to pick up and split 2.0 scripts”. If i’m not mistaking this statement is to add the ability to send all axis to a device (tcode??) Or something else.

I just have a handy so need to understand what the ask here is, I may need to bring in a few other device libraries to support this but lmk what should happen next if SIT was able to split the multiple scripts from the single funscript file?

1 Like

I was referring to right now I have a lot of multi axis scripts which use the format where the axes are all in one file instead of being split into files like .pitch, .roll, etc and those aren’t being picked up by the plugin.

So multi axis heatmaps aren’t being generated and they aren’t being tagged as multi axis either. Ideally I’d want these to be handled just like any other multi axis script.

Having a batch command to split them into the separate files could work, but its kinda nice having them just one file for management.

Also by the way, the remap command didn’t work for me out of the box because its trying to generate an image to a /tmp folder path which I don’t think exists on Windows, I had AI patch it and change it to use some temp dir python package and then it worked.

Can you check out alpha.12.. applied a change to hopefully fix the /tmp issue

1 Like
INFO[2026-08-12 13:41:45] [Plugin / Stash Interactive Tools] H:\ya\Hentai\[MMD]  Hai Phut Hon by Ngon (Loop).funscript is a duplicate of one of the other funscripts processed so far
INFO[2026-08-12 13:41:45] [Plugin / Stash Interactive Tools] H:\ya\Hentai\\u3010MMD\u3011Blue Archive AFTER PARTY.raw.funscript is a duplicate of one of the other funscripts processed so far
ERRO[2026-08-12 13:41:45] Plugin returned error: Error running task 'remap' $Traceback (most recent call last):
  File "H:\ya\Stash\plugins\StashInteractiveTools/StashInteractiveTools.py", line 22, in main
    task.run(config)
  File "H:\ya\Stash\plugins\StashInteractiveTools\tasks\remap.py", line 514, in run
    remap_scenes()
  File "H:\ya\Stash\plugins\StashInteractiveTools\tasks\remap.py", line 507, in remap_scenes
    remap_scene(scene, funscripts, genpath, remapconfig)
  File "H:\ya\Stash\plugins\StashInteractiveTools\tasks\remap.py", line 278, in remap_scene
    if fun_data['actions'][0]["at"] == 66 and fun_data['actions'][1]["pos"] in [83,84]:
       ~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

The tmp directory error is fixed but now theres this out of range error. I did also get this fixed with AI before but I dont remember what the fix was sorry.

By the way, is there a way to change the bg color of the heatmaps? I kinda like the Stash default of it being transparent.

Hey @xtc,

I’ve switched from Handy 1 to Handy 2 Pro and therefore need to switch the Connection Key. This was working well with bare Stash (without the plugin activated).

But after I activated the plugin for the IVDB scripts, it was not working anymore.

I then removed the plugin, deleting the plugin folder and installed it again. But that doesn’t help.

I then tried the different versions, next, alpha and I also switched back to Handy 1, but it was also not working for this anymore. I also tried the handy and fw4 version.

My experiences:

  • With Alpha version, the scripts are not working anymore at all. IVDB is giving error: Method not implemented.
  • Sometimes I got it working with “real” scripts, but the strokes were absolutly random.
  • With next version, the “real” scripts are working, the IVDB scripts are working sometimes.

When using the alpha version of the plugin, I get the following error in the logs:

runPluginOperation: input: runPluginOperation Error running task 'init' $Traceback (most recent call last):
  File "/root/.stash/plugins/StashInteractiveTools/StashInteractiveTools.py", line 19, in main
    task = config.get_task(config.mode)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.stash/plugins/StashInteractiveTools/config.py", line 84, in get_task
    task.init(self)
  File "/root/.stash/plugins/StashInteractiveTools/tasks/init.py", line 240, in init
    Funscript = c.Funscript()
                ^^^^^^^^^^^^^
  File "/root/.stash/plugins/StashInteractiveTools/config.py", line 70, in Funscript
    return Config.ensure_db().Funscript
           ^^^^^^^^^^^^^^^^^^
  File "/root/.stash/plugins/StashInteractiveTools/config.py", line 61, in ensure_db
    mod = importlib.import_module('db')
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 999, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/root/.stash/plugins/StashInteractiveTools/db.py", line 4, in <module>
    from peewee import *
ModuleNotFoundError: No module named 'peewee'

I also have two examples for IVDB tokens:

  • This one is working: IVDB
  • This one is not working: IVDB

Do you have any idea on how to solve this? And furthermore, is there any documentation on how to use the alpha version? I have seen, that a new Icon is appearing in the top right of the screen. But I don’t know what that means and if this needs to be orange or white…

Thanks in advance!

BR

So go to the plugin section and run the “install” task and make sure that no errors happen. The plugin was suppose to try to auto recovery if a error of this type isn’t found and provide a button on the video page showing “Install” and an error message. I guess that isn’t working for call cases. This should fix the missing “peewee” error.

The second error it seems like some reason certain stash versions have been updated to a different default handy lib which throws the error “Method not implemented” I thought it was just my local dev and not a real issue.. Anyways for switch to using the FW4 interactive client within the plugin configs.

Let me know if its still broken after this. I had another use on discord mention the same error and they had to move to the FW4 version (may make that the default now) .

I’ll have to check the IVDB issue because I’ve been having problems even with the xhamster setup, but works with IVE ,which I use their library for the FW4, so lmk if switching to FW4 fixes the ivdb issue for you or not.

I tried it now with another fresh installation. And here are my steps (with corresponding log message):

  1. Installation of Stash Interactive Tools (1.2.0-alpha.12)
26-10-01 23:25:12 Info    Installing package StashInteractiveTools
26-10-01 23:25:12 Info    Finished installing packages
  1. Initial settings of the plugin (it seems the config is stored outside the plugin folder, since I’ve deleted the folder before reinstallation):
  2. Going to a video, the tab Interactive shows: “Setup failed. Please check your configuration.”
26-10-01 23:28:38 Error   runPluginOperation: input: runPluginOperation Error running task 'init' $Traceback (most recent call last):
  File "/root/.stash/plugins/StashInteractiveTools/StashInteractiveTools.py", line 19, in main
    task = config.get_task(config.mode)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.stash/plugins/StashInteractiveTools/config.py", line 84, in get_task
    task.init(self)
  File "/root/.stash/plugins/StashInteractiveTools/tasks/init.py", line 240, in init
    Funscript = c.Funscript()
                ^^^^^^^^^^^^^
  File "/root/.stash/plugins/StashInteractiveTools/config.py", line 70, in Funscript
    return Config.ensure_db().Funscript
           ^^^^^^^^^^^^^^^^^^
  File "/root/.stash/plugins/StashInteractiveTools/config.py", line 61, in ensure_db
    mod = importlib.import_module('db')
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 999, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/root/.stash/plugins/StashInteractiveTools/db.py", line 4, in <module>
    from peewee import *
ModuleNotFoundError: No module named 'peewee'
26-10-01 23:28:38 Error   runPluginOperation: input: runPluginOperation Error running task 'init' $Traceback (most recent call last):
  File "/root/.stash/plugins/StashInteractiveTools/StashInteractiveTools.py", line 19, in main
    task = config.get_task(config.mode)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.stash/plugins/StashInteractiveTools/config.py", line 84, in get_task
    task.init(self)
  File "/root/.stash/plugins/StashInteractiveTools/tasks/init.py", line 240, in init
    Funscript = c.Funscript()
                ^^^^^^^^^^^^^
  File "/root/.stash/plugins/StashInteractiveTools/config.py", line 70, in Funscript
    return Config.ensure_db().Funscript
           ^^^^^^^^^^^^^^^^^^
  File "/root/.stash/plugins/StashInteractiveTools/config.py", line 61, in ensure_db
    mod = importlib.import_module('db')
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 999, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/root/.stash/plugins/StashInteractiveTools/db.py", line 4, in <module>
    from peewee import *
ModuleNotFoundError: No module named 'peewee'
  1. Clicking Button Verify Installation (or something like that)
26-10-01 23:30:23 Warning  [Plugin / Stash Interactive Tools] Installing dependencies: stashapp-tools, pillow, peewee, pydantic
26-10-01 23:30:23 Warning  [Plugin / Stash Interactive Tools] This can take a while! If you install the dependencies manually you can avoid this step in the future
26-10-01 23:30:45 Warning  [Plugin / Stash Interactive Tools] Dependencies installed successfully into /root/.stash/plugins/StashInteractiveTools/automatic_dependencies
26-10-01 23:30:45 Warning  [Plugin / Stash Interactive Tools] All migrations completed successfully
  1. Refresh Browser, Video shows now “Error connecting to Handy: Method not implemented.” (Same in Settings → Interface → Handy Connection Status)
  2. Plugin config shows now Haptic Interface: Handy (default)
  3. Switching back to Handy FW4
  4. No change, so browser refresh
  5. Now The Handy Connection Status Panel is completly missing in Settings -->Interface
  6. But: Funscript is now working for a regular script (no IVDB).
  7. But: Only the first script works. The second script is playing random patterns. Even a refresh is not working here.
  8. Severall refreshs later and after some video-skipping it’s working again (again for one video, the next one plays again random patterns.

Now going to IVDB videos:
I have for all IVDB videos the token-script next to the video and additionally I’ve added the IVDB link to the urls.
Therefore, I have a dropdown with Default and Ivdb in the Interactive Tab.

  1. When starting the video with Default, the device plays random patterns, not fitting the video at all. In other cases it plays nothing.
  2. When switching to ivdb, it shows for a second “uploading script” but the dropdown still shows Default and the device is not reacting at all.
  3. When enabling the option " Handle funscript files that are handy tokens (no ivdb url needed)", it worked for another video when switching to ivdb in the dropdown (which still shows Default afterwards), but unfortunately only once. The next video was not working anymore.

When switching from alpha to next version, at least the “regular” script seem to work (but they also work with bare stash). But IVDB tokens are not working at all.

Thanks for this detailed breakdown, let me see what I can find. Can you let me know what version of stash you are running? As well as the python version?

Thank you in advance! :smiley:

I’m running stash version v0.31.1 and Python 3.12.13

Ok addressed the “Method not implemented” and install errors (havn’t pushed up an update just yet). Can you let me know what plugins you have installed. I’m not able to reproduce the Interactive tab no longer showing. My only thoughts is that it may not be flagging the video as interactive. Does is happen on ALL videos (ones with actual funscripts on disk) or ones that only have ivdb url?? Does it load the ivdb script when its only in the urls list and NOT on disk?

This is the list of my plugins:

  • Adulttime Interactive Downloader
  • CommunityScriptsUILibrary
  • Funscript Markers
  • Scene Marker Tags to Scene
  • Stash Interactive Tools (alpha)
  • Stash Performer Markers
  • 7dJx1qP’s Stash Userscript Library
  • Extended Stats
  • Timestamp Trade

I’m not sure what you mean by “missing Interactive tab”. The interactive tab was not missing. It was the “Handy Connection Status” which was missing in settings → Interface. But this is back now.

Interestingly, currently the scripts are working with the plugin enabled. I’ve checked a few IVDB token scripts, they seem to work now. I’ve also removed the script from the folder, doing a re-scan and tried it again, it’s still working.
Whats currently not working: When I’ve a local token + IVDB url provided, I do have a dropdown in the interactive tab of the video. But I’m not able to switch it, when I’m selecting IVDB, it’s still selecting Default. But thats not a big issue, since currently both are working.

I don’t know why it’s working now, but I will not complain :slight_smile:

lol well thats one crazy bug. I’m going to push up another version (1.2.0-alpha.13) should help with the “method not implemented” and install errors.

I’ll look into the local token+IVDB url setup.

1 Like