| Summary | Adds an ELO based ranking system for scenes. | |
| Repository | https://github.com/dtt-git/stash-battle/tree/main/plugins/stash-battle | |
| Source URL | https://dtt-git.github.io/stash-battle/main/index.yml | |
| Install | How to install a plugin? |
Demo Video (NSFW)
Filtering demo on Ver 2.3.0 (NSFW)
Stash Battle
A head-to-head scene comparison plugin for Stash that uses an ELO-style rating system to help you rank your scenes.
Overview
Stash Battle presents you with two scenes side-by-side and asks you to pick the better one. Based on your choices, scene ratings are automatically updated using an ELO algorithm. Over time, this builds an accurate ranking of your entire library based on your personal preferences.
Features
- Three Comparison Modes:
- Swiss
– Fair matchups between similarly-rated scenes. Both scenes’ ratings adjust based on the outcome. - Gauntlet
– Place a random scene in your rankings. It climbs from the bottom, challenging each scene above it until it loses, then settles into its final position. - Champion
– Winner stays on. The winning scene keeps battling until it’s dethroned.
- Swiss
- Filter Support: Apply filters on the Scenes page before opening Battle to rate specific scenes against your full collection.
Installation
Install at your own risk, nearly entirely vibe coded for myself using Claude, I have barely reviewed the code at all.
Recommend saving a backup of your database beforehand (Settings → Interface → Editing)
Source Index:
- Add this repo’s source index:
https://dtt-git.github.io/stash-battle/main/index.ymlto Stash plugin sources - Checkbox the Stash Battle package and click Install
Manual Download:
- Download the
/plugins/stash-battle/folder to your Stash plugins directory
Usage
Optional Step: Change Rating System Type to “Decimal” (Settings → Interface → Editing)
- Navigate to the Scenes page in Stash
- (Optional) Apply any filters or search to narrow down which scenes you want to rate
- Click "
Battle " button in the nav menu
- Choose your preferred comparison mode
- Click on a scene (or use arrow keys) to pick the winner
- Watch your rankings evolve over time!
How It Works
The plugin uses an ELO-inspired algorithm where:
- Beating a higher-rated scene earns more points than beating a lower-rated one
- Losing to a lower-rated scene costs more points than losing to a higher-rated one
- Ratings are stored in Stash’s native
rating100field (1-100 scale which is why changing to decimal rating system type is recommended)
Dynamic K-Factor: Rating changes scale based on a scene’s play_count (similar to chess ELO where new players’ ratings are more volatile):
| Play Count | K-Factor | Behavior |
|---|---|---|
| 0-2 | 12 | New scenes adjust quickly to find their true rating |
| 3-7 | 8 | Settling in with moderate changes |
| 8-14 | 6 | Established scenes change more slowly |
| 15+ | 4 | Very stable ratings that resist large swings |
Filtering:
- The filtered scenes will appear on the left side to be rated, while opponents are drawn from your entire library.

