Skip to content
Docs Screenshot Scanning

Documentation

Screenshot Scanning

Post the end-of-game scoreboard and an AI reads names, placements and stats into a match result that someone checks and approves

Overview

Instead of typing out every player and stat, attach the post-match scoreboard. A vision AI reads each player's in-game name, their team, where they finished and the stats your leaderboard tracks, and the bot turns that into a proposed result. Nothing is recorded until a person approves it, unless you switch on auto-record for a queue, and even then only a completely clean scan records by itself.

Two ways to scan

Both use the same reader and the same instructions, and a scanned match records exactly like any other: ratings, match history, and /record_match undo if it was wrong.

What it reads

  • Each player's in-game name, matched to a Discord member who is in the match
  • Their team, for team games, and their finishing place
  • The per-player stats defined on the leaderboard (kills, deaths, score, MVP…)
  • Each team's score, when the leaderboard defines team scores

Setting It Up

/record_match screenshot works with no setup at all. The steps below make scans more accurate, and the last one turns on the button for a queue.

  1. Define the stats you want read (optional) on the leaderboard's Stats & Choices page. The AI is told exactly which stats to look for and of which type, and each value is checked against it. Team-level numbers such as rounds won are Per Team number stats.
  2. Write reading instructions on the leaderboard's Screenshot Scanning page: which column is which, how the winner is shown, anything particular to your game. See writing instructions. Most leagues play one game, so the page's League defaults tab holds instructions every leaderboard uses unless it has its own.
  3. Check the winner rule on the same page. By default the team with the higher on-screen score wins, decided in code from the scores the AI read rather than by the AI. A custom rule decides by a team score or a player stat, highest or lowest, and adds teammates up (or takes the best, the worst or the average) when the stat is per player.
  4. For a queue, turn it on in Discord: on the queue's message open 🔒 Admin Actions → Results & scoring… → Configure AI Screenshot Recording, set Enable AI Screenshot Recording to Enabled, and choose whether AI as source of truth (auto-record) is Off (every scan is approved by a person, the default) or On. The setting is copied onto each match when it forms, so it applies to matches after the change.

Instructions resolve in this order for every scan: the leaderboard's own, then the league default, then none. /config leaderboard shows which is in effect for a leaderboard, and /config server shows the league default.

/record_match screenshot

/record_match screenshot screenshot:<attach image> players:@Patrick @Idris @Sam @Alex

How it goes

  1. Attach the scoreboard screenshot (an image file, such as PNG or JPG)
  2. Mention everyone in the match, at least two players. These are the only members the AI matches names to, so it can never record someone you didn't mention
  3. The bot posts a proposed result: teams or placements, each player's stats, and which in-game name it matched to which member
  4. Press Record, Dismiss, or Fix to assign a name it couldn't match. On a free-for-all, Set placements corrects the finishing order

Options and who can use it

  • screenshot and players are required; leaderboard is optional (default: the channel's leaderboard, then the league's default)
  • The leaderboard's stats and instructions decide what is read and how
  • Record, Dismiss and Fix are for the person who ran the command, the players mentioned, and admins
  • /record_match is staff-only in Discord until you open it up, and Discord → Permissions & Logging can keep screenshot for admins even when players can use the rest. See command permissions
  • A locked leaderboard refuses the scan before anything is read

Every option: /record_match screenshot in the command reference.

Scanning a Queue Match

With scanning on for the queue, every match it forms gets a 🤖 Scan Result button next to the usual result controls. It works on team matches (including more than two teams) and on solo free-for-alls from automatic (headless) queues. Hosted lobbies don't have it.

The scan

  1. A player in the match, or an admin, presses Scan Result and uploads the screenshot, or pastes a direct image link in Or paste an image URL (for Discord's mobile and console apps, where uploading in a popup doesn't always work)
  2. Names are matched against the match's own roster, so a misread name can only ever land on someone who played
  3. The teams are the ones the match was formed with. The AI's reading only decides which team won
  4. The match message changes to the proposed result, with any unmatched players or stat warnings

Fixing it before it records

  • Edit ▾ opens a stat editor, a winner editor (or a tie), and member association for a name it couldn't match
  • On a solo free-for-all, Edit ▾ → Set placements corrects the finishing order
  • Dismiss throws the proposal away and brings back the normal result message
  • Scanning, editing and dismissing are for the players in the match and admins, not other members of the server

Scanning is not the Upload button. Upload Screenshot only posts evidence to the queue's screenshot channel and reads nothing. When the queue has a screenshot channel, Scan Result posts its image there too, as soon as the scan is submitted, so one upload is both read and kept, even if the scan is later dismissed.

Who Approves

A scanned queue match follows the queue's existing Ranking & Voting Mode; there is no separate approval setting. The button is Approve & Record. "Admin" here means Administrator or Manage Server, the queue's admin roles, or the person who set the queue up.

Queue modeWho approves
Ranked / UnrankedA player on the side the result records as losing, or an admin. For a draw, any player in the match. The winners can't approve their own win, so one team can't record a result the other never agreed to.
Admin Approval modesAn admin.
DisabledNobody: the queue records nothing.

Auto-record

With auto-record on, a scan records with no approval only when all of this holds:

  • Every player in the match was matched to a name on the scoreboard
  • A winner was read, and there are no stat warnings
  • Every matched player has a value for every per-player stat
  • The winner is certain: when the leaderboard decides the winner from team scores, those scores were read, and a second, separate read of them agreed with the first
  • The queue isn't in an Admin Approval mode

Anything less becomes a normal proposal for a person to check.

What approving does

  • Records the match through the normal path: ratings, match history, tier roles, cleanup
  • Unranked modes record the match for history and move no ratings, as they do without screenshots
  • A match member the scan didn't match blocks approval until it is fixed. An admin can approve anyway; in a team match that player is recorded with their team, without stats

Writing Good Instructions

Instructions are free text, up to 10,000 characters, and they are the biggest single factor in how accurate scans are. Describe the scoreboard the way you would to someone reading it for the first time:

  • Which column is which stat: "The columns left to right are Kills, Deaths, Assists, Score."
  • How the winner is shown: "Each team's rounds won is the large number on its own panel," or "A WIN or DEFEAT banner shows each team's result." Point it at the score or banner, not at the order of the rows.
  • Packed cells and separators: "K/D is shown as kills/deaths; read the first number as kills and the second as deaths."
  • Markers: "The player with the crown icon is the MVP."
  • Anything else about your game: translated labels, role icons, where the two teams' panels are.

Don't give worked examples with numbers. "For example, if Blue has 0 and Red has 2, Red won" can make the AI copy the example's numbers instead of reading your screenshot, which flips the winner. Describe the rule ("the larger rounds-won number wins") and leave the numbers out.

Name matching

The AI matches in-game names to the players you mentioned, or to the match's roster in a queue. Ask players to set their Discord nickname to their in-game name for the best match rate. When it isn't sure, it leaves the player unmatched rather than guessing, and you pick the member with Fix or Edit ▾.

On the Dashboard

PageWhat it is for
Leaderboards → a leaderboard → Screenshot ScanningThat leaderboard's reading instructions, the team scores the scan reads, and the winner rule. Empty the instructions to fall back to the league default.
Screenshot Scanning → League defaultsInstructions for every leaderboard that has none of its own, and a list of the leaderboards that override them. Also linked from League Settings.
Leaderboards → a leaderboard → Stats & ChoicesThe stats a scan reads. Per Team number stats are the team scores; a Select stat's choices can carry an Elo multiplier.
Discord → Permissions & LoggingWhether non-admins may use /record_match screenshot.

Turning scanning on for a queue is done in Discord, from the queue's Admin Actions; the dashboard's queue settings don't have it. See AI Screenshot Scanning and auto-record in the queue settings reference.

Limits & Gotchas

  • One screenshot per scan. A scoreboard split over two pages isn't stitched together.
  • Reading a screenshot takes time, usually 15 to 30 seconds, longer on a big scoreboard.
  • A number stat that comes back as something else (a packed 25/19 cell) is flagged and left out, never recorded wrong. Explain that column in the instructions, or type the value in.
  • A scoreboard can't show who won a playoff, so a tie for 1st in a free-for-all is flagged: set the winner with Set placements. Tied players share a place and the next place is skipped (1, 1, 3).
  • A Select stat choice with an Elo multiplier (set on Stats & Choices) scales the match when every player's value is that choice, and the proposal shows it before anyone approves. When players' values differ, no multiplier applies. Writing something like {x=2} in the instructions does not set one.
  • Only automatic (headless) queue matches have Scan Result; hosted lobbies don't.
  • A locked leaderboard can't be recorded to. /record_match screenshot refuses before reading; a queue's Scan Result still reads the screenshot, and recording the result is refused.

FAQ

Do we have to use it for queue results?

No. It is off for every queue until an admin turns it on, and the normal voting and reporting stay as they are when it is on.

Why was a player left unmatched?

The AI couldn't confidently link their in-game name to a member. Pick the right member with Fix or Edit ▾, or scan a clearer screenshot; setting Discord nicknames to in-game names prevents most of these.

It read the wrong team as the winner. Why?

Busy scoreboards can confuse the win indicator. Say exactly how the winner is shown in the instructions (without numbered examples), add team scores so the winner is decided from them, and correct this one with the winner editor before approving.

The upload doesn't work on my phone or console.

File uploads in a popup aren't supported on every Discord app. Post the screenshot anywhere with a direct image link (for example in a Discord channel, then Copy Image Address) and paste the link into Or paste an image URL. It is read the same way.

Does a scanned match change ratings?

Yes, like any recorded match, unless the queue is in an Unranked mode. Undo it with /record_match undo like any other.

Can it record someone who wasn't in the match?

No. Names are only matched to the players you mentioned, or to the match's roster in a queue.