Features
Video Playback
- Real-time HLS transcoding with adaptive quality selection (Direct, 1080p, 720p, 480p, 360p)
- Full VOD controls with seeking, quality switching, and playback speed
- Direct play support for compatible formats
Library Browsing
- Modern, responsive interface with grid and list views
- Advanced filtering by performers, studios, tags, resolution, duration, and more
- Search with real-time results
- Configurable homepage carousels (high-rated scenes, recently added, favorite performers, etc.)
Playlists & Navigation
- Create and manage custom playlists with drag-and-drop reordering
- Auto-generated temporary playlists from search results
- Shuffle and repeat modes
- TV Mode with full keyboard/remote control support
Multi-User Support
- JWT-based authentication with admin and user roles
- Separate watch history and O-counter tracking per user
- User management and permissions
Easy Setup
- 5-step setup wizard with auto-discovery of Stash libraries
- Multi-platform path mapping (handles Windows, Linux, Docker paths)
- Single Docker container deployment
Read-Only Access
- Does not modify your Stash files or database
- Only updates O-counter and play history via Stash’s GraphQL API
Installation
Peek runs as a single Docker container and works with any Stash installation (Docker, native Windows/Linux, unRAID, etc.).
Requirements:
- Docker installed
- Network access to your Stash GraphQL endpoint
- Access to your Stash media files (Docker volume mounts or network shares)
Quick Start:
docker pull carrotwaxr/peek-stash-browser:latest
docker run -d \
--name peek-stash-browser \
-p 6969:80 \
-v /path/to/your/media:/app/media:ro \
-v peek-data:/app/data \
-e STASH_URL="http://your-stash-server:9999/graphql" \
-e STASH_API_KEY="your_stash_api_key" \
-e JWT_SECRET="$(openssl rand -base64 32)" \
carrotwaxr/peek-stash-browser:latest
Access at http://localhost:6969 and complete the setup wizard.
unRAID Installation:
Detailed installation guides for unRAID, Windows, Linux, and macOS are available in the Installation - Peek Stash Browser.
Current Limitations
- No support for Groups/Movies or Images/Galleries yet
- Hardware transcoding not yet implemented (CPU-only via FFmpeg)
Planned Features
- Images/Galleries support
- Groups/Movies support
- Hardware-accelerated transcoding
- Advanced watch analytics and recommendations
Screenshots
Browsing (Desktop / TV)
Browsing (Mobile
)
Settings / Themes
2 Likes
For anyone interested in the multiple users feature, how would you like to see that work in regards to your Stash’s play and o history? The interesting bit about this is of course Stash only has a single user and so if Peek has multiple, and each syncs with Stash, your play counts, duration, and o counts will go way up and essentially represent the “aggregate” activity of all your Peek users. So, to support as many use cases as possible, here’s what I’m thinking:
Introduce additional User settings (that an admins sets per user) that determines the view and sync of said data points. Peek will already track a copy of this information in its own database and always display the per-user stats on their Watch History page, but these settings could determine whether or not a given user’s watch history /o history was synced back to / pushed to Stash, and whether or not the O Count and Play Count they see when browsing Scenes in the library is their own (everything starts at 0 for a new user), or if it shows the Stash value (plus their own I suppose if they don’t sync to Stash, otherwise they wouldn’t get a “Like” or O button)
It’s also worth mentioning that I’ll be adding Inclusion and Exclusion filters that can be set for each user (only show certain tags, etc VS don’t show these tags, etc) and adding a download scene / playlist functionality that can be enabled per user as well.
Curious what people would like to be able to do!
so this is an alternative frontend for the web ui?
Yep! Many people over the years have been using various solutions to get their content to play through Emby, Jellyfin, Plex, or Kodi, and I myself was frustrated with these solutions so I thought I’d introduce a version that was natively targeted to integrate with Stash. Stash is amazing but it’s mostly amazing at organizing and storing metadata for your library. Once I got rolling, I realized how quickly I was able to get complete feature parity with those media browsers, so I’ve moved on to additional Stash-specific features 
For filtering the content for users, I would use groups and galleries. The problem with using tags is that if you re-sync the scene with StashDB, whatever tags you manually add get erased. This does not happen to the group values. So the stash admin can assign scenes to the desired groups, for example, “Group A”, and then the peek admin can set which users can access the content of “Group A”.
Regarding personal history, I don’t mind if the stash admin gets the data from each user, but each peek user should not receive any data from the stash admin. So for the following fields, I think the user should start blank and have their own values:
- Play history
- O- count
- Rating
- Favorite
- Playlists
Thanks for the feedback! And excellent to know about using Groups, great callout. I don’t use Groups too much (or didn’t before I started working on this app) so I’ll play around with that
Peek v1.1.3 Released! 
Major feature release with huge performance improvements and tons of new features:
Highlights
97% Faster Performance
- In-memory caching system makes sorting/filtering lightning fast
- First load: 10-15s, subsequent: <500ms (was 15-20s every time)
Per-User Ratings & Favorites
- Rate and favorite Scenes, Performers, Studios, and Tags
- Filter by favorites and rating ranges
- Sort by rating
- All per-user, no conflicts between users
Continue Watching
- New carousel on Home page shows recently watched scenes
- Resume from where you left off
- Configurable in Carousel Settings
Server Statistics Dashboard
- Real-time monitoring of CPU, memory, cache, and transcoding
- See active FFmpeg sessions
- Auto-refreshes every 10 seconds
Better Loading UX
- Skeleton cards prevent layout shift
- No more tiny spinners
- Smooth loading experience
Video Player Improvements
- Dynamic aspect ratios (4:3, 16:9, 9:16 all work correctly now)
- Faster transcoding cleanup (90s instead of 30 minutes)
- Modular architecture refactor
Stash Sync Improvements
- One-way sync with selective import (Rating only, Favorite only, etc.)
- 70% faster with GraphQL filtering
- O Counter sync from Stash
Public Media Proxy
- Share images without exposing Stash API keys
- No authentication required on media endpoints
Plus: Watch history enhancements, entity detail page fixes, dozens of bug fixes, mobile optimizations, and more!
Upgrading
unRAID: Click “Force Update” in Docker tab
Docker:
docker stop peek-stash-browser && docker rm peek-stash-browser
docker pull carrotwaxr/peek-stash-browser:latest
Then run your usual docker run command
Your data persists automatically (peek-data volume).
Full changelog: Release v1.1.0 · carrotwaxr/peek-stash-browser · GitHub
v1.1.1-v1.1.3 were hotfixes to address the Sync from Stash operation failing in Production
Questions? Report issues: GitHub · Where software is built
Looks pretty nice! Got it workign easily enough, but havign issues playing files
most don’t play
edit: ive narrowed it down to the fact that i have 3 different paths to libraries, only one of them work. ideas?
they all report when i add them though, ive tried adding them all to the same mount point in docker and different ones
Directory exists and is readable (571 items)
Docker on Windows btw
Hmm great, I’m really glad you got it installed! Do you mind sharing an example of what your config/paths look like? You can DM me if you want, and replace names of paths or whatever, just trying to get an idea of your configuration so I can simulate it locally. And to clarify, are you able to see everything else work properly, it just doesn’t actually play some of your files? Anything errors in the Docker’s logs?
I ended up just moving all my files to the drive that was working. was a needed change anyway.
One thing i do a lot, is add markers, if i could add markers in peek and have them sync to stash, i think i coudl replace stash frontend with Peek.
Also, i would love a tiktok / reel style viewing for mobile! LIke the StashTV pluign
1 Like
Thanks for the feedback! I think Markers will be soon, and I wondered about generating them from Peek but it sounds like that is wanted and makes sense to me. The Reel style viewing, would that just be for markers? I need to check out this other app.
OH and I did try to figure out your path issue and the only thing I came up with was maybe it was a case sensitivity issue. Oh well, glad you re-org’d and got it working nicer
If you can, generate them in stash and fetch them in peek would be preffered.
I mostly use StashTV for markers yea. mobile accessible…
Planned Features for v1.3.0 - Hopefully released by tomorrow
- Adds support and UI for Groups/Movies/Collections
- The ability to filter the content that certain users see
- Better video player controls, more mobile-friendly and modern
- Improved themes plus the ability for users to define their own custom themes
Bugfixes
- Fix previews not playing when scrolling on mobile
1 Like
I would prefer that markers be managed only by the admin in Stash. This way, he is the only one able to create, modify, and delete content and its inherited metadata. Having the markers available on the Peek player would be great so we can skim through the sections.
The addition of a tab like StashTV would be awesome as well. I don’t use it for markers but for short-form content such as clips, loops, etc. You could basically select a playlist, and it would play its content as if you were on the TikTok/Reels app.
Regarding the filtering of content for users, maybe the Peek admin can create different “libraries” and then assign each scene to one or more libraries. He could then mark on the user profiles which libraries are available to them.
I’d prefer it to be a thing in Peek so i don’t have to open stash again. but it should create the markers in stash for management.
Admin only though ,yeah, or special role
Version 1.3.0 Released!
Based on 67 commits since v1.2.0, here’s the summarized changelog:
New Features
Bug Fixes
Video Player
- Improved Video Player controls
Mobile Experience
- Fixed preview autoplay on mobile scroll
1 Like
Can you make it so that: performers, studios, tags, groups, and galleries with no available content for the user simply don’t show?