| 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 aims to build 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 scene in your collection. 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
- Filtering: Apply any filters on the scenes page before opening Battle. What you see on the scenes page is what you get in Stash Battle. By default, filtered scenes appear on the left (scenes to rate) and opponents come from your full library on the right.
Installation
Install at your own risk, nearly entirely vibe coded for myself but I review code and test as thoroughly as I can.
Recommend saving a backup of your database beforehand (Settings → Interface → Editing) just in case.
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 Homepage or any 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!
As well you can open battle on a scene page which puts that scene into battle right away.
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 |
In Gauntlet and Champion mode, only the active climber’s rating changes during a run (opponents are benchmarks). Climber wins use a high K-factor so placements move quickly.

