Stash TV

Hello, i have a question/suggestion.
Let’s say we have a lot of markers.
Does this plugin allows to watch the samples set by those markers randomly, and without having to generate the video samples ?

To be clearer, i currently don’t use the markers because it generates a low res video sample for each marker.
Though i’m interrested by the time ranges that you can set with the marker fuctionnality (with a start and end time stamp).

I would use the markers to create a random compilation playlist, which would jump from video to video and show only the parts of the videos set by the markers.
The idea is to use the original videos, not samples of those videos, but just jump at the start time code and switch to the next video/part of the video when the end time code comes.

This is a feature that would work great with your plugin, you could create and watch in real time some best of / quick cut of all your favorite video parts.

Imho the real challenge is to be able to jump from one video part to another seamlessly, without cut or loading. That should include some kind of solid preload mechanics.

Did you try deleting the “app” and saving it again?

@mf35 Yes, it does let you watch markers even if you haven’t generated low res samples. It will just play that segment of the scene and only show that portion of the video of the video progress bar.

There is the option to show the low res sample instead (useful if your internet is bad) but that is not enabled by default.

To randomly jump between makers just make a saved maker filter in stash and that should let you play makers.

The initial loading isn’t always perfect. It will generally show the first frame of the full scene for a second and sometimes if the video is in a format that makes it hard for the browser to jump straight to the right place you might notice it flicking through earlier parts of the scene until it reaches the marker segment. That’s something I might be improve when I have time to look at improving preloading.

1 Like

That’s working nicely, thank you.
I can emit two suggestions if you allow me.

  • There are two transition effects, one is a sliding/swiping and one is a crt effect.
    Could you add the option for a simple cut transition too ?
    Because when the markers are short (like 3 or 4 seconds), the slide transition effect becomes kinda nauseous on desktop fullscreen.

  • My second suggestion is linked with my previous post.
    Would it be possible to make the plugin play random parts of random videos for a random (or a set) amount of time ? So it doesn’t rely on markers but choose randomly some sections of the videos. (Edit: i think it is already on your roadmap, isn’t it ?)

Thank you again for your plugin, it achieves something i was debating for since several years.

Removing and readding the app actually worked :slight_smile:

Yeah, that’s the iOS caching issue I mentioned. Glad it’s working for you now :slight_smile:

Glad you’re finding it useful :slight_smile:

when the markers are short (like 3 or 4 seconds), the slide transition effect becomes kinda nauseous on desktop fullscreen

That’s a fair point. I’m hesitant to add an option if there’s a way of doing without an option so instead I’ve disabled the slide transition for any videos shorter than 30s. Try updating the plugin and let me know if that works for you.

Would it be possible to make the plugin play random parts of random videos for a random (or a set) amount of time

Yep! It’s on the roadmap. I’ll hopefully get to that soon and I’ll let you know when I do.

Working great, thank you :slight_smile:

1 Like

I’ve pushed a bunch of new updates recently. Including a new setting to control the start point. It doesn’t let you set the end time but you can set it to start playing from a random point so hopefully that’s still somewhat useful for you @mf35 :slight_smile:

This is awesome, thanks for working on this. One suggestion that’s probably a heavier lift, so maybe more of a long term goal: some kind of performer interface that mimics TikTok/Instagram style user profiles. You could tap on the performer from a given video and it would bring you to their profile page, from which you could swipe through all of that performer’s videos. Or short of that, maybe just link directly to the performer’s Stash page.

Also just echoing others’ requests for a simple rating interface, or even just a like button.

Thanks again!

Thank you this is great. :open_hands:
The only suggestion i would make is the possibility to set a fixed or a random duration for the videos before it switches. (a random duration set between a minimum and a maximum).

Awesome plugin.

(oh and maybe an option to hide or auto hide the progress bar, at least in full screen mode :wink: )

@camcarter123 I’ve actually been thinking about some like that for a while. It will probably be a longer term feature though. And ratings are definitely coming, probably up next.

@mf35 That’s definitely doable, I’ve added that to my list to do at some point. And clicking the three dots button in the bottom right corner should already hide the progress bar but it looks like that’s broken at the moment so I’ll work on a fix for that.

I was playing around today and came up with this. I like the idea of cards better for a mobile ui because we can browse more like reddit/redgifs. We can also load multiple sources at the same time which makes scrolling have a better flow

And I made it a bit eaierr to browse different tags and make it more like a discovery feature. With links to performers and scenes

Instead of me publishing my own fork, maybe you could incorporate some elements of this

Keep up the good work :slight_smile:

Wow! I love it, very slick looking. There’s definitely some stuff there that I’ve been wanting to add to tv already (like search and viewing all tags for a scene). Although I think if it were to be adopted into tv rather than a card based ui replacing a slide one I think there they serve slightly different use cases and there’s room for both. I could imagine a toggle for switching between the two styles. I think it could be quite nice to be able to swap between both formats.

Unfortunately I probably don’t have the capacity to do that myself. After I get a couple more features done that I’ve been thinking of doing next (rating and an end point setting) I’m probably going to deliberately step back a bit from working on tv to deal with some other priorities in my life. I’m still planning on working on tv after that, just at a slower pace.

I’m be open to PRs though if you’re interested in integrating. Give how big of a change this is it’d probably be a good idea to have a quick chat first to work out how we’d want approach that.

If that’s more of a hassle than it’s worth for you (which I’d completely understand) then it might just make more sense to do as a fork.

Either way super cool project!

I’m not sure if it’s a bug or if there’s something wrong on my end - but on mobile I’m just not able to swipe through scenes. When I try to swipe up it just won’t switch to the next video, it’s as if the swipe resistance is just too high.

I have Stash Reels installed in parallel and that works fine, so I’m wondering if there’s any variable you might have changed. I’ve tried on multiple browsers and it’s all the same.

I’m not able to replicate that on an iPhone 15 Pro running iOS 26.1:
screen3
(Hopefully that plays on your end, I had to upload a webp because the it wouldn’t let me upload a video file)

As shown in the screen recording you should be able to flick up quickly to move to the next video, as well as drag your finger and have it slide with your finger.

Can you give me more details on your situation to help me reproduce it?

The last update broke it for me :slight_smile:

TypeError: can't access property "some", scene.tags is undefined
    1 http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:165406
    fk http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5705
    unstable_runWithPriority http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:680
    gg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2778
    Oj http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5661
    Lj http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5149
    jg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2802
    unstable_runWithPriority http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:680
    gg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2778
    jg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2798
    ig http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2790
    Jg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5016
    Oh http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:3761
    updateStackScrollClasses http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:168897
    observer http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:168874
    ActionButtons http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:168872
    fk http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5705
    unstable_runWithPriority http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:680
    gg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2778
    Oj http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5661
    ek http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5651
    V http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:608
    onmessage http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:524
    requireScheduler_production_min http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:519
    requireScheduler_production_min http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:721
    requireScheduler http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:729
    requireReactDom_production_min http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:745
    requireReactDom http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:6422
    js http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:6426
    __require http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:3
    <anonymous> http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:183591
index-BHHguZQ4.js:4537:19
TypeError: can't access property "some", scene.tags is undefined
    1 http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:165406
    fk http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5705
    unstable_runWithPriority http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:680
    gg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2778
    Oj http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5661
    Lj http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5149
    jg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2802
    unstable_runWithPriority http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:680
    gg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2778
    jg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2798
    ig http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2790
    Jg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5016
    Oh http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:3761
    updateStackScrollClasses http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:168897
    observer http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:168874
    ActionButtons http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:168872
    fk http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5705
    unstable_runWithPriority http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:680
    gg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2778
    Oj http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5661
    ek http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5651
    V http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:608
    onmessage http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:524
    requireScheduler_production_min http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:519
    requireScheduler_production_min http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:721
    requireScheduler http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:729
    requireReactDom_production_min http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:745
    requireReactDom http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:6422
    js http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:6426
    __require http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:3
    <anonymous> http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:183591
index-BHHguZQ4.js:4537:19
Uncaught TypeError: can't access property "some", scene.tags is undefined
    1 http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:165406
    fk http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5705
    unstable_runWithPriority http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:680
    gg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2778
    Oj http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5661
    Lj http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5149
    jg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2802
    unstable_runWithPriority http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:680
    gg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2778
    jg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2798
    ig http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2790
    Jg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5016
    Oh http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:3761
    updateStackScrollClasses http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:168897
    observer http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:168874
    ActionButtons http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:168872
    fk http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5705
    unstable_runWithPriority http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:680
    gg http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:2778
    Oj http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5661
    ek http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:5651
    V http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:608
    onmessage http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:524
    requireScheduler_production_min http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:519
    requireScheduler_production_min http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:721
    requireScheduler http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:729
    requireReactDom_production_min http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:745
    requireReactDom http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:6422
    js http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:6426
    __require http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:3
    <anonymous> http://localhost:9999/plugin/stash-tv/assets/app/assets/index-BHHguZQ4.js:183591

Ah, I think I see the issue and have pushed a change. Can you update and see if that fixes it?

That it did it! i also implemented like full scene previews in my app. and seem to have managed to load the markers at the current time, without seeing the first frame of the video or whatever.

i think thats the only jarring issue with your implementation right now! and i think its very much solvable

otherwise, great job :slight_smile:

How are you going that? Are you playing the scene preview video?