For a while now I’ve been working on a little passion project to bring Stash to Apple TV — you know, to enjoy from the comfort of your living room, bedroom, or wherever the mood strikes. It started as something just for me, but it turned out well enough that I’m excited to get it on the App Store. This seemed like exactly the right place to share that excitement.
Imagine my delight when I discovered someone already beat me to the punch! Big kudos to @1letzgo for blazing the trail — it clearly covers a lot of ground and does it well. I think we can complement each other: my app has fewer features, but my goal was always to put the watching experience front and center. More options, more Stash for everyone!
So here’s what Mirage Player is all about:
Designed from the ground up to play scenes on your TV (tvOS focus for now)
Inspired by the best streaming apps: easy, intuitive playback
Browse and sort performers, studios, and tags
Set favorites and ratings, and remember watched progress
The Stash ecosystem is pretty niche, and I think having multiple clients with different approaches is exciting! Different strokes for different folks — pun intended.
I was building a macOS one using the same code as the main iOS/tvOS app, but it didn’t really look or feel like a native Mac app.
You can run the iPad version on the App though: the App Store should let you download it as a macOS catalyst app. And, to be honest, if I had released the one I was working on it would look exactly the same.
If there is enough demand for a true native Mac app, I’d certainly change my mind though.
Version 1.5 is baking now and it’s looking great with some compelling new features.
Feature request: A way to play the next or previous video without leaving the video screen. Something functionally similar to the Stash TV plugin (with a different UI, of course) is more or less what I have in mind. There’s currently no easy way to iterate through a set of Stash videos on Apple TV (that I know of, at least).
In the detail tabs like Studio > Scenes, the paging logic isn’t working. When scrolled to the last page, the entry is supposed to have a “Show More” button, and when that becomes visible, it triggers a pre-fetch of the next page, but those pages didn’t include it.
And the reason this bug is present is as silly as you can get: in my testing, I used collections that were not large enough to need the extra pages.
Videos were, of course, something that obviously pages; I do have more than 40 of those. Each tab has its own page size based on the content, the connection quality, and how heavyit the GraphQL query is on the Stash server. Detail grids, as you can probably guess, are set at 32 by default. The standard grids get 40 at a time.
FWIW, the app isn’t vibe coded. Any bugs, performance issues, limitations, etc., are my fault and not a LLM/Transducer hallucination. I wrote the app for myself and thought, hey, let’s see if anyone else would use it.
Sorting by ascending/descending order is in the app now. Select, tap on the Sort Menu, choose “Scene Count”, and then toggle the directional up/down arrow next to that menu. That works for me, but if you can describe the situation you’re looking at, I can track down the issue.
Supporting various aspect ratios is something of a pain in a fixed-width grid. The grid has to pick one preferred aspect ratio and try to fit the images the best it can (videos are 16:9, performers are 3:2, and studios/tags are, as you know, 1:1). If you can provide more detail about how you’d like it to work I can certainly look into better options.
Stash is the 99% market and provides, by far, the richest set of metadata and full experience; that said, there are use cases – perhaps driven by my itch to support them – for platforms. SMB/DLNA are useful for me, especially since I’ve turned on DLNA and exposed the Stash media folder via SMB. The app was written from the beginning to be backend neutral. There is a full API set driven by Stash, and then for other platforms, I try to get the most of Stash-level metadata I can.
I’ve been stuck in the mud getting 2.0 done and, hopefully, it’ll be worth the wait.
Is there a way to have group playback move onto the next scene once the current one has finished? Basically have them function as playlists? (I’m wondering if that might only be possible in HLS streaming not direct play)
also, within a group, it doesn’t seem possible to show using the order within a group (scene index iirc)?
(this on the App Store version, not the TestFlight)
I’ve just fixed it so that you can sort by scene index (aka scene number) for groups. Stash supports this, but it doesn’t fit into the model like other fields do. I have added support for v2.0 (hopefully releasing soon).
Video queue is also coming up. When you tap on a scene the video player can seed the playback with that scene and queue all the others after in the list. All of this will be in 2.0.
If, for some reason, 2.0 slips, I’ll back port the changes to 1.1.