Deck Viewer

:placard: Summary An optimized single-hand gallery and image viewer for Stash that replaces the default image viewer.
:link: Repository https://github.com/Servbot91/Deck-Viewer/tree/main/plugins/Deck%20Viewer
:information_source: Source URL https://raw.githubusercontent.com/Servbot91/Deck-Viewer/refs/heads/main/plugins/manifest.yml
:open_book: Install How to install a plugin?

Overview

Deck Viewer is a complete rework and reimagination of the original Image-Deck plugin and hijacks the built in stash image viewer. It is meant be used solely over the built in image viewbox and also adds a gallery viewbox. The plugin design is intended to make browsing galleries and images more streamlined and less error prone to accidental clicks\swipes and to futher optimize one hand browsing.

Deck Viewer was written with AI assistance (qwen3-coder:480b, and my local qwen3-coder30b) following general Dev standards and hygeine while also protecting integrity of the plugin with simple A\B testing and versioning.


Screenshots

Click to expand


Screenshot 2026-03-26 164724




Improvements

Feature Integration

  • Performer page integration
    • logic works properly for gallery or images selection
  • Added Mouse wheel functionality
  • Added zoom functionality for mobile and desktop (buttons respect context ie no zoom on galleries)
  • Swipe and pinch gestures on mobile functional
  • Added Gallery support and viewbox
  • Galleries display performer name and image count and clicking\selecting them will open the respective gallery
  • Added keyboard support (strict)
  • Supports SFW Plugin
  • Default Image Viewer Hijacking
  • Infinite Scroll
    • For as long as you have content. It will scroll as long as content exists, it however does not loop around.

Performance

  • Optimized for large datasets (in the millions)
  • Added ‘Chunk’ system
    • Images are locked to 50 on load for performance. Once you are nearing the end of a chunk, the next chunk is loaded. You also have the option to preload multiple chunks ahead by pressing the load next chunk feature.
    • Chunk system has a safety check to prevent backend query spam and will skip if a chunk load is in progress
    • Can manually load the next chunk via button
  • Removed particles and effects and buttons such as strobe.
  • Further reduced code stack (needs further improvement)
  • Backend GraphQL is properly using stash schema rather than guessing

QOL Improvements

  • Respects filter context
    • Note: For the most part, it will not work if you have an exclusion in front of your inclusion meaning the INCLUDE must come before the EXCLUDE or no exclude at all for it to properly function. If an include is after another include, it should work.
  • Split up the image-deck.js into a more manageable format
    • button.js
    • config.js
    • context.js
    • controls.js
    • deck.js
    • graphql.js
    • main.js
    • metadata.js
    • styles.css
    • swiper.js
    • ui.js
    • utils.js
  • When in a gallery, it will remember where you left off
    • Minor disclaimer here, if the ‘remembered item’ is not within the chunk it will default to the first in the list (title sort)
  • Focused view over original card view (no more cards behind cards)
  • Buttons and text fade out when zoomed in

Release notes


Installation

  1. Settings → Plugins → Available Plugins
  2. Add Source → Name: Deck Viewer
  3. Source URL: https://github.com/Servbot91/Deck-Viewer/raw/refs/heads/main/plugins/manifest.yml
  4. Click checkbox, Install
  5. Reload Plugins

Known issues

  • Zoom buttons appear for galleries if swiping on mobile/desktop past the 10th display (doesnt appear if clicking buttons)
  • Filter exclusion issue mentioned in QOL Improvements
  • When using keyboard keys on desktop, you will get a console error related to the chunk system. This is a minor bug IMO as the safety logic continues to the core functionality without interruption. At worse you dont preload a chunk until you reach the end. Clicking the nav buttons the chunk system works without issue. This does not cause performance overhead, and is technically a performance improvement though it will be addressed.
  • CSS stylesheet needs to be cleaned up
  • additional code cleanup needs to be performed
  • Metadata use and tagging is very barebones for now, will be modified at a later time
1 Like

Amazing update really improved the smoothness and presentation of image viewing. I can’t wait for the metadata and tagging changes in the future :star_struck:

1 Like

Really glad you like it!

Dear Sakoto,

first of all, this is a great plugin. It’s a real pleasure to use on mobile.

However, I’m experiencing an issue:
In which resolution are the images supposed to load? In my instance, the displayed pictures are extremely low resolution, even when the source image is 6K.

Hey thanks man I appreciate that!

This is an interesting issue. It should allow the max resolution. Are you viewing an image directly by clicking the image title link? Viewing from /images? Galleries, or gallery images?

This will help me understand any possible logic issues.

When I navigate to a performer → open a gallery → and tap on an image (specifically the magnifying glass icon), only the thumbnail is being loaded instead of the full-resolution image, i guess.

This is weird I dont have the same issue.

It pulls the full reso image. Can you screenshot it and provide a plugin list? Also what happens when you try to zoom in?

Its probably best you disable all plugins besides deck viewer and see if issue persists. If it doesnt, its your plugins.