Stash auto-tag multi-axis scripts

Has anyone found a reliable way to automatically tag multi-axis scenes in stash?
I always download 2.0 spec scripts so filename based tagging is not an option.

StashInteractiveTools but it doesn’t seem to pick up and split 2.0 scripts for me :smiling_face_with_tear: maybe i’ll submit a PR for that sometime

Yeah that’s the plugin I use as well but I guess 2.0 not supported yet

Sir.. what is this 2.0 spec you speak of.. And what is expected use case here… also just hit me up on discord :stuck_out_tongue:

I’ll DM you on discord as well

Yeah I have mine setup that way, I use the auto tagging feature in stash to pull from organized folders.

I set my root folder to /path/to/xxx/Scripted/

So all my videos get auto tagged with Scripted, but I could back up a directory and pull my unscripted scenes as well and they would get auto tagged β€˜unscripted’.

Right underneath Scripted I have Scripted/Multi-Axis and Scripted/Single-Axis so all my videos can be organized with these tags. From there I just started adding tags and moving videos around that I thought would be useful for filtering.

I tried not to add tags that can be pulled other ways, like len0-2, len2-5 etc. because making a plugin that queries graphql for duration of a scene and adding the corresponding tags is easy. Instead I wanted to add tags that would be hard to pull about a scene.

I also use serechops plugins/scrapers that can bulk add performers/studios and created some scripts that create text files for those bulk import plugins based on this directory.

It’s a shitload of work initially, but not too bad to keep up with once you’re done.

Examples

/* = funscripts, videos, and supporting files

Library
└── {Tag}
    └── {Tag}
        └── {Tag}
            β”œβ”€β”€ {Franchise / Studio}
            β”‚   β”œβ”€β”€ {Character / Performer}
            β”‚   β”‚   β”œβ”€β”€ {Video 1}/*
            β”‚   β”‚   β”œβ”€β”€ {Video 2}/*
            β”‚   β”‚   └── {Video 3}/*
            β”‚   β”‚
            β”‚   └── {Character / Performer}
            β”‚       β”œβ”€β”€ {Video 1}/*
            β”‚       └── {Video 2}/*
            β”‚
            └── {Franchise / Studio}
                └── {Character / Performer}
                    β”œβ”€β”€ {Video 1}/*
                    └── {Video 2}/*
Multi-Axis
└── SFM
    └── Animation
        └── 3D
            β”œβ”€β”€ Cyberpunk 2077
            β”‚   β”œβ”€β”€ Judy Alvarez
            β”‚   β”‚   └── {Videos...}/*
            β”‚   └── V
            β”‚       └── {Videos...}/*
            β”‚
            └── Overwatch
                β”œβ”€β”€ Ashe
                β”‚   └── {Videos...}/*
                β”œβ”€β”€ Dva
                β”‚   └── {Videos...}/*
                β”œβ”€β”€ Kiriko
                β”‚   └── {Videos...}/*
                └── Mercy
                    └── {Videos...}/*



Multi-Axis
└── VR
    └── Normal
        β”œβ”€β”€ BaDoinkVR
        β”‚   β”œβ”€β”€ Adria Rae
        β”‚   β”‚   └── {Video}/*
        β”‚   β”œβ”€β”€ Dakota Tyler
        β”‚   β”‚   └── {Video}/*
        β”‚   └── Katrina Moreno
        β”‚       └── {Video}/*
        β”‚
        └── VRBangers
            β”œβ”€β”€ Angela White
            β”‚   └── {Video}/*'
            └── Luna Star
                └── {Video}/*'

I initially wanted {tag}/{tag}/{franchise/studio}/{performer/character}/{position/scene content}/{video1}, {video2}, etc. but never got around to doing it. But if you want to try this and build from scratch, auto tagging BJ/HJ/Doggy/Missionary scenes would be helpful.

Also as a side note for StashInteractiveTools, you can customize the name of the tag for letting it pick up script variants. So I have Multi-Axis to denote scripts with multiple axes, and multi-script to denote variant single axis. It also let’s you choose which variant to serve, so as long as you get it to pick up variations, you can serve multiple 2.0 multi-axis merges.

I take advantage of this with a plugin that creates merges automatically, so a directory like this

example
--{videoTitle}/
-----videoTitle.mp4
-----videoTitle.funscript
-----videoTitle.roll.funscript
-----videoTitle.pitch.funscript
-----videoTitle.twist.funscript
-----videoTitleNOVIBES/Alternate.funscript

will wind up looking like this


--{videoTitle}/
-----videoTitle.mp4
-----videoTitle.funscript (2.0)
-----videoTitleNOVIBES/Alternate.funscript (2.0)
-----originalFunscripts/
---------------videoTitle.funscript (1.0)
---------------videoTitle.roll.funscript (1.0)
---------------videoTitle.pitch.funscript (1.0)
---------------videoTitle.twist.funscript (1.0)
---------------videoTitleNOVIBES/Alternate.funscript (1.0)

2.0 is a merge file for multi-axis funscripts where the positional data is separated by a channels object into axis specific arrays. So .roll.funscript, .pitch.funscript etc. can be merged into a single .funscript file without losing positional data or metadata.

there’s also a 1.1 merge that adds an ID into the positional data directly, but it’s not as clean imo. The channels object really helps when you need to collapse and view a single axis.

Version 1.1 (Multi-Axis with axes array)
{
  "version": "1.1",
  "actions": [{ "at": 0, "pos": 50 }],
  "axes": [
    { "id": "R1", "actions": [{ "at": 0, "pos": 50 }] }
  ]
}
Version 2.0 (Multi-Axis with channels object)
{
  "version": "2.0",
  "actions": [{ "at": 0, "pos": 50 }],
  "channels": {
    "roll": { "actions": [{ "at": 0, "pos": 50 }] }
  }
}

You can read more about how they work here Eroscripts/funlib

Thanks, will give that link a look.