Mirage Player, a tvOS/iOS Stash App

:placard: Summary Mirage Player is a tvOS-first experience for your Stash media — thoughtfully designed and elegantly focused on what matters: watching.
:link: TestFlight (free) https://testflight.apple.com/join/8SuZPy3x
:link: App Store (paid) https://apps.apple.com/us/app/mirage-player/id6757608062

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
  • Sneak a peek at https://mirageplayer.app/

The Stash ecosystem is pretty niche, and I think having multiple clients with different approaches is exciting! Different strokes for different folks — pun intended. :wink:

Website: https://mirageplayer.app
Discourse: https://discourse.wells.consulting

3 Likes

Mirage Player 1.0.2

  • iOS version is available in TestFlight now.
  • tvOS version is pending beta app review and should be available soon.

If you’re interested, you can get early access builds: Join the Mirage Player beta - TestFlight - Apple .

1 Like

Mirage Player 1.0.4 for TVOS and iPad is on the App Store now.

Thanks to everyone who helped test in TestFlight.

We’re having a blast developing the app and look forward to releasing new features soon.

If you have questions, feature requests, or bug reports, feel free to use our Discourse forum at https://discourse.wells.consulting.

Mirage Player 1.0.5 for tvOS and iPad is available on the App Store.

New in this release

  • Improved light mode; improved portrait/landscape layouts; SVG support for performer/studio/tag images.
  • New option to hide app content from Exposé.
  • Performers’ related performers now shown; performer cards on video info panel now tappable.
  • Preview sprites now shown while scrubbing if available.
  • Server port now optional.

I’m working on a TestFlight build for 1.1 that will add support for scene markers.

Thanks to everyone who helps test and report any issues!

Any feedback, especially requests for new features, is most welcome. Feel free to email, DM, or visit the forums shown at the top of this thread.

Mirage Player 1.1.0 for tvOS and iPad is available on the App Store.

New in this release

  • Top Shelf (Apple TV Only)
  • AirPlay (iPad Only)
  • Groups
  • Markers
  • Edit Tags
  • Enhanced diagnostic and profiling tools

Thanks to everyone who helped to test and report issues.

Stay tuned for more features…

Any feedback, especially requests for new features, is most welcome. Feel free to email, DM, or visit the forums shown at the top of this thread.

Any thoughts on a native MacOS Mirage Player? Looks great!

Thanks!

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.

Hope y’all like it.

:slight_smile:

Thanks, that makes sense. What are the plans for V1.5? Any details you can share?

I’m working on a ton of new features and skipping directly to 2.0. :slightly_smiling_face:

Note: none of these are guaranteed to ship and most are Stash-specific obviously.

New Platforms

  • Plex
  • Jellyfin

General

  • Re-imagined For You tab
  • Albums (galleries) and photos (images)
  • And much more…

iOS

  • Downloads with the full-featured Mirage experience; not just the videos
  • Share images and videos from any app
  • And much more…

It’s a massive upgrade, way more than I intended.

Stay tuned…

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).

That said, this is a nice app. Thanks!

1 Like

Yep, in the next release. It’s turning out to be so much bigger than I anticipated though. Sorry for the delay, but tons of new stuff coming up. :slight_smile:

1 Like

Bug report:

There is a limit to how much content can be loaded in some views. Steps to reproduce:

  • Select performer or studio, browse by scenes - No more than 8 rows or 32 scenes are loaded
  • Select performer or studio, browse by other performers - No more than 6 rows or 24 performers are loaded

This is something I’ve noticed in some other vibe coded tvOS media players unfortunately.

Feature request: sort in descending order by default for things like scene counts

Feature request: better handling of non-square studio thumbnails

Feature request: focus on polish rather than new features, we’re here for Stash mostly

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. :man_shrugging:

  • 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.

Happy stashing!

///

1 Like

Mirage TVOS with a fix for this just passed App Review.

Mirage iOS is in review now.

Both versions should be available on the App Store soon.

///

I’m using on tvOS (haven’t tried on iOS yet)

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)

This is an obvious omission in the app.

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.

Thanks for your patience.

///