Documentation

How Scoring Works

When someone uploads a gear screenshot, a lot happens behind the scenes. The bot reads the text, compares it against the build spec, runs two scoring passes, and produces a final score. Here's how each step works.

Step 1: Reading the Screenshot (OCR)

The bot uses Tesseract OCR to extract text from screenshots. It processes each image and pulls out every piece of text it can find. This includes perk names, weapon types, trophy names, stat labels, and whatever else is visible on screen.

OCR is not perfect. It works best with clear, high-contrast text. Small fonts, stylized text, overlapping UI elements, and low-resolution screenshots can all cause issues. That's why the scoring system uses fuzzy matching rather than requiring exact text matches.

Step 2: Fuzzy Matching

Once the bot has the OCR text, it compares it against every item in the build. Rather than requiring an exact string match, it uses fuzzy matching (powered by RapidFuzz). This means "Refrshing" can still match "Refreshing" even though the spelling is slightly off.

Each item is checked against the OCR text using the item name and all of its aliases. The best match score wins. If the match is strong enough, it counts as a hit. If it's close but not great, it counts as a "maybe." If nothing is found, it's a miss.

Excludes are checked first. If the OCR text matches an exclusion pattern for an item, that match is thrown out before scoring. This prevents "Refreshing Move" from counting as a match for "Refreshing."

Step 3: Two-Pass Scoring

The scoring engine runs two passes over the OCR text to maximize accuracy:

Pass 1: Balanced Pass

The first pass goes through the build items and tries to find matches in the OCR text using standard fuzzy matching thresholds. Items that clearly match get marked as hits. Items that are ambiguous get flagged for the second pass.

Pass 2: Rescue Pass

The second pass revisits items that didn't match in the first pass. It uses a more lenient matching threshold to catch near-misses that the balanced pass left behind. Items matched during rescue are counted as "maybe" matches, which contribute partial credit.

Match Types

Each item in the build ends up in one of three states after scoring:

Match (full credit)

The item was found in the OCR text with high confidence. It counts as 100% credit toward the category score.

Maybe (half credit)

The item might be in the screenshot, but the match isn't strong enough to be certain. Typically caught by the rescue pass. Counts as 50% credit.

Miss (no credit)

The item was not found in the OCR text at all. Either the member doesn't have the item, or the screenshot didn't capture it clearly enough.

Category Weights

After scoring each category individually, the bot combines them into a final score using category weights. Each category has a weight (default 1.0), and categories with higher weights contribute more to the final number.

How it works

For each category, the raw category score is multiplied by its weight. Then all weighted scores are added up and divided by the total weight to produce the final percentage. A category with weight 1.5 has 50% more influence on the final score than a category with weight 1.0.

Score Thresholds

The final score determines the member's verification status. Each status level has a threshold:

StatusDefaultWhat It Means
Verified80%+Passed. Role gets assigned if configured.
Tentative60-79%Close. Worth a manual review by a mod.
Borderline40-59%Missing significant items. Needs better gear or screenshots.
Unverified<40%Too low. Gear doesn't meet the build spec.

Score Floors (Mod Overrides)

Sometimes the OCR just gets it wrong. A mod can look at the screenshots, confirm the gear is actually correct, and set a score floor using /mod override. The floor means the displayed score won't go below that value, even if the OCR-based score is lower. This doesn't change the actual OCR results. It just says "I've manually verified this person's gear is at least X%."

The Failsafe System

If a member repeatedly scores very low on a build (well below the threshold, multiple times in a row), the failsafe system kicks in. The build gets locked for that member, preventing them from submitting more attempts until a mod unlocks it.

This exists to prevent people from spamming screenshots hoping to get a lucky OCR result. If someone genuinely has the right gear but keeps scoring low, a mod can review the screenshots and either override the score or unlock the build.

Why Did I Get a Low Score?

If a score seems wrong, here are the most common causes and what to do about them:

Blurry or Low-Resolution Screenshots

OCR needs clear text to work. If the screenshot is blurry, zoomed out too far, or heavily compressed, the bot can't read the perk and item names accurately. Try taking a cleaner screenshot, ideally with the game UI at native resolution.

UI Elements Covering Gear Text

Tooltips, popups, chat overlays, or other UI elements can block the text the bot needs to read. Make sure the gear information is fully visible and not obscured by anything.

Missing Aliases in the Build

If the item's name appears differently in-game than what the build expects, it won't match. Admins can fix this by adding aliases to the item using /pack edit-item. Check the "Show Details" button on the score breakdown to see exactly what the bot found vs. what it expected.

Missing Items in the Build Spec

If items aren't in the build at all, the bot won't know to look for them. Admins can review and update the build using the /pack commands.

Debug With /pack test

Admins can paste screenshot text into /pack test to see exactly how the scoring engine handles it. This is the best way to figure out whether the issue is in the OCR, the aliases, or the build spec itself.

Related