HotOrNotV2

:placard: Summary Adds an ELO based ranking system for performers and images.
:link: Repository https://github.com/lowgrade12/hot-or-not/tree/main/plugins/hotOrNotV2
:information_source: Source URL https://lowgrade12.github.io/hot-or-not/main/index.yml
:open_book: Install How to install a plugin?

HotOrNotV2 Plugin

An ELO-based ranking system for performers in Stash. Compare performers head-to-head in an interactive battle interface to build personalized rankings based on your preferences.

Features

Battle Modes

The plugin offers three distinct comparison modes:

:bullseye: Swiss Mode (Default)

  • True ELO with zero-sum property - Winner gains exactly what loser loses, maintaining rating pool integrity
  • Pairs performers with similar ratings for competitive matchups
  • Uses weighted random selection to prioritize performers with fewer matches
  • Best for building initial rankings and ensuring balanced coverage

:trophy: Gauntlet Mode

  • King of the hill style - One performer stays on as champion while challengers attempt to dethrone them
  • Champion works their way up the rankings by defeating increasingly difficult opponents
  • Only the active participant (champion) has their rating change
  • When the champion loses, they “fall” to find their appropriate position
  • Visual streak tracking shows how many wins the current champion has
  • Great for quickly identifying top performers

:crown: Champion Mode

  • Winner stays on with reduced rating impact (50% of Swiss mode)
  • Both performers get rating updates, but at a slower pace
  • Maintains the “winner stays on” excitement while still evolving rankings
  • Good for fine-tuning existing rankings

ELO Rating System

  • Adaptive K-factor based on:
    • Match count (new performers have higher K-factor for faster initial placement)
    • Scene count (prolific performers have more stable ratings)
    • Current rating distance from default
  • Diminishing returns at high ratings (harder to reach 100)
  • Skip as draw - Skipping applies ELO draw mechanics (higher-rated performer loses points to lower-rated)

Comprehensive Statistics

Each performer tracks:

  • Total matches played
  • Wins, losses, and draws
  • Current streak (positive = winning, negative = losing)
  • Best and worst streaks ever
  • Last match timestamp

Access the Stats Modal to view:

  • Rating distribution bar chart (grouped by rating ranges)
  • Full leaderboard with all performers
  • Win rates and streak information

URL Filter Support

Respects the current page’s filter criteria when launched from a filtered performers page:

  • Gender filters
  • Tag filters
  • Studio filters
  • Rating filters
  • Favorites filter
  • Age, ethnicity, country filters
  • And many more


User Interface

  • Floating action button on performer pages to launch the comparison modal
  • Battle rank badge on individual performer pages showing their rank position (e.g., “#5 of 100”)
  • Side-by-side comparison with performer images and metadata
  • Visual feedback showing rating changes after each choice
  • Keyboard shortcuts: Left Arrow (choose left), Right Arrow (choose right), Escape (close)
  • Responsive design that works on desktop and mobile

Battle Rank Badge

When viewing a single performer’s page, a badge displays their battle rank:

  • Shows rank position and total performers (e.g., “Battle Rank #5 of 100”)
  • Tier-based styling: :crown: Legendary (top 5%), :1st_place_medal: Gold (top 20%), :2nd_place_medal: Silver (top 40%), :3rd_place_medal: Bronze (top 60%), :fire: Default
  • Hover for tooltip showing exact rating

Installation

  1. Download the /plugins/hotOrNotV2/ folder to your Stash plugins directory
  2. Reload plugins in Stash (Settings → Plugins → Reload)
  3. Navigate to the Performers page to see the floating HotOrNot button

Usage

  1. Go to the Performers page in Stash
  2. Optionally apply filters to narrow down the performer pool
  3. Click the floating HotOrNot button (:fire:) in the bottom-right corner
  4. Select your preferred battle mode
  5. Click on a performer or their “Choose” button to select the winner
  6. Continue rating until you’re satisfied with your rankings

Tips

  • First run: Swiss mode with many comparisons builds a solid ranking foundation
  • Quick ranking: Gauntlet mode rapidly identifies your top performers
  • Fine-tuning: Champion mode adjusts rankings with smaller changes
  • Skip strategically: Use skip when you can’t decide - it affects both performers’ ratings based on ELO draw mechanics

Custom Fields

The plugin stores match statistics in a custom field called hotornot_stats containing:

{
  "total_matches": 42,
  "wins": 25,
  "losses": 15,
  "draws": 2,
  "current_streak": 3,
  "best_streak": 8,
  "worst_streak": -4,
  "last_match": "2024-01-15T10:30:00.000Z"
}

Requirements

  • Stash v0.27 or later
  • Performers must have images for best experience (performers without images are excluded by default)

Technical Details

Rating Scale

  • Ratings are stored as rating100 (0-100 scale)
  • Displayed as 0.0-10.0 in the UI
  • Default rating for unrated performers: 50 (5.0)

K-Factor Calculation

Match Count Base K-Factor
0-9 matches 16
10-29 matches 12
30+ matches 8

Scene count multipliers further reduce K-factor for established performers.

Default Filters

When no URL filters are applied, the plugin automatically:

  • Excludes male performers
  • Excludes performers without images

Cool plugin. A little confused on this bit..

Does this mean it should show scene previews on hover? I can’t tell if it isn’t working or if I misunderstand what it should be doing.

This plugin was borrowed from the stash battle plugin that is for scenes. Probably something I forgot to take out of there. It doesn’t do anything with scenes or videos.

Submitted PR’s to move the button to nav bar similarly to Stash-Battle.. Sorry for double PR’s I just started using GIT via browser and its a mess to me over terminal.
Screenshot 2026-02-27 105841

Is it possible to allow Non-Binary for gender? As of right now it errors out

I would also like to request the ability to see match ups and modify them. In case a mistake is made I would like to go back and correct it.

pull down the 2.1 update of HotOrNotV2. non-binary should be fixed. added an undo last battle button to replay the previous battle. floating button was now moved to the top right nav bar, just look for the fire

1 Like

can you please give an option to disable Star Rating Widget. it gets mistakenly clicked while opening the performer page

also the hover video doesn’t seem to work. alternatively can it play a random preview of the performer video.

i appreciate the undo last battle, unfortunately, when you do that it doesn’t change the stats. it just adds onto the outcome when you do it again.

i added switches to turn the star widget and the battle badge on or off.

this plugin doesn’t do anything with videos. there was a line in the readme that was a leftover from the stash battle plugin this was borrowed from. the line has been removed.

1 Like

what exactly are you seeing? i’ve tested by opening the performer in another tab and refreshing the page after a battle and after undoing the battle and everything looks correct to me.

Suggestion to change the country field values from flag codes to actual flag emojisđŸ„č

you’re right, it was user error. i didn’t properly refresh.

however, i have shadow games recorded onto some performers. I don’t know why it’s happening:

when you run a performer through gauntlet mode, the performer on the right does count as having a match even when their rating doesn’t change. that could be what you’re seeing. to be honest, V2 was the version i was using to try things for myself, but as things were being requested that i had already done i threw it out there.

1 Like

pull the new version to see if that works for you. pulling the flag and full country name instead of the country code now

You son of a bitch. Im in.

1 Like

Digging all the updates. One, hopefully, small ask. Would it be possible to move some of the stuff that is currently above the performers to below? Since more and more stuff is getting put up there it means you have to scroll down each time, even at decently high res. Small annoyance but since it is every single time it becomes a touch more tedious each battle.