Recall turns your Overwatch match history into a clear picture of how you're actually playing — on your own machine, with no account and nothing uploaded. Point it at the folder where your post-match screenshots land and it reads each game (result, map, heroes, eliminations/deaths, rank, SR) into a private, searchable history. Don't want to screenshot every game? Type a match in by hand. Then explore your win rate, SR trend, hero pool, and exactly what you're strong and weak at — by hero, map, role, time of day, however you want to slice it.
Curious how it works under the hood? See ARCHITECTURE.md.
📚 Full documentation: sound-barrier.github.io/recall — the Windows install guide and the API reference. Auto-deployed from main on every doc change.
Getting started
Project
- Architecture — how the pipeline works under the hood (OCR → SQLite → UI)
- Technical debt — the outstanding-work ledger: what is owed, accepted, and out of scope (feature ideas live in FEATURES.md)
- Contributing
- License
The desktop app is the simplest way to use Recall. Five steps from zero to your first match record:
- Install Recall — grab
recall-{version}-windows-amd64-installer.exefrom GitHub Releases and run it. Full step-by-step in the Windows install guide. - Install Tesseract OCR 5.x — Recall uses it to read your screenshots. Download the 5.x installer from UB-Mannheim and run it with the default options. Older 3.x / 4.x builds are detected and flagged with a warning — parsing may misread.
- Launch Recall and pick a screenshots folder. The first-run Settings screen surfaces a four-card picker for the canonical Windows capture sources — Nvidia Overlay, OW PrntScn default, Win Snip tool, and Steam install — each with a status dot showing whether the path exists on your machine. One click on a found card sets it as the watched folder. A "Pick a different folder…" tile under the grid covers everything else.
- Capture screenshots in Overwatch with F12 after each match — see Capturing matches for which post-match tabs to screenshot. Recall recognises Nvidia Overlay, OW's default PrntScn, Windows Snip, and Steam in-game F12 filename shapes automatically (full list of supported formats below step 5).
- Click Parse → Run Parse to scan the folder, or flip on Parse → Watch Folder to auto-parse as new screenshots land. Parsed matches appear under the Matches tab.
Recall recognises four capture-tool filename shapes automatically: Nvidia Overlay (Overwatch 2 Screenshot YYYY.MM.DD - HH.MM.SS.ff.png), OW's default PrntScn (ScreenShot_YY-MM-DD_HH-MM-SS-fff.jpg), Windows Snip (Screenshot YYYY-MM-DD HHMMSS.png), and Steam's in-game F12 (YYYYMMDDHHMMSS_N.jpg).
The masthead's Check for updates button compares your installed Recall against the latest release on GitHub AND surfaces any new heroes / maps / capture-tool grammars added since your build shipped — apply them in-place without reinstalling. The app also shows a quiet "you haven't checked in a while" banner roughly every 90 days so a stale install gets nudged. See Updates & game data for the full flow.
That's all most users need. (Trends over time — SR, win-rate, per-match stats — now live right in the Matches tab.)
Pre-built binaries for every tagged release are on the GitHub Releases page. Recall is a Windows 10/11 (x64) desktop app.
| Platform | Desktop app |
|---|---|
| Windows | recall-{version}-windows-amd64-installer.exe |
For setup details (SmartScreen bypass, Tesseract install, data paths), see the Windows install guide.
Every release binary ships with a .sha256 checksum file. On Windows, PowerShell:
(Get-FileHash recall-{version}-windows-amd64-installer.exe).Hash -eq `
(Get-Content recall-{version}-windows-amd64-installer.exe.sha256).Split()[0].ToUpper()True / OK means the file is intact; any mismatch means re-download.
For stronger supply-chain guarantees, every binary and its .sha256
file are also signed with SLSA provenance via
GitHub's Sigstore integration. Verify with the
GitHub CLI:
gh attestation verify recall-{version}-windows-amd64-installer.exe --repo sound-barrier/recallEvery release also includes recall-{version}-sbom.spdx.json — a
software bill of materials listing every dependency.
Recall reads four kinds of post-match screenshots from Overwatch. Three are required for a complete match record; the fourth is optional but recommended for competitive play.
| Screenshot | Required? | What it provides |
|---|---|---|
| SUMMARY | ✅ Required | Match result (victory/defeat/draw), final score, map, mode, date, game length, and the list of heroes played with playtime percentages. |
| TEAMS (scoreboard) | ✅ Required | Eliminations, assists, deaths, damage, healing, mitigation. The in-game scoreboard (Tab key, mid-match) works as a fallback for the post-match tab. |
| PERSONAL | ✅ Required (one per hero played) | Per-hero detailed stats: weapon accuracy, ult charges, role-specific cards. If you played multiple heroes in a single match, take one PERSONAL screenshot for each. |
| RANK | ⭕ Optional (competitive only) | SR value, rank tier, rank change. Only appears after competitive matches. If it's missing but the SR change is captured, Recall infers the win/loss from the SR delta. |
The in-game screenshot key is F12 by default (rebindable under Options → Controls → General → Screenshot). After a match ends, cycle through the post-match tabs and press F12 on each. Recall stitches the screenshots into a single match record using the filename timestamps Overwatch embeds — taking them within a couple of minutes of each other is enough.
Overwatch saves screenshots to Documents\Overwatch\ScreenShots\Overwatch\ on Windows by default — but the Settings first-run picker also supports Nvidia Overlay (~\Videos\Overwatch), Win Snip tool (~\Pictures\Screenshots), and Steam-installed OW (<SteamInstall>\userdata\<id>\760\remote\<OW-app-id>\screenshots). Point Recall at whichever you use; the watcher (enabled under Parse → Watch Folder) auto-parses any new .png / .jpg that lands in it.
Capture quality matters. For the most reliable parsing, prefer a high-quality PNG source and keep Overwatch's default UI colours:
- PNG over JPG. PNG is lossless and parses most reliably. The Nvidia overlay and Windows Snipping Tool save PNG; the Overwatch PrntScn default and Steam's F12 save JPG, whose compression blurs the small stat numbers and can misread (e.g. over-counting eliminations) or land a record in the Unknown tab. If you can, capture with a PNG tool.
- Default colours only. The parser is tuned to Overwatch's stock colour scheme — it keys off specific colours (your scoreboard row's blue highlight, the magenta COMPETITIVE badge). Non-default colourblind palettes recolour these and can break detection. Only the default colours are known to work.
What if a screenshot type is missing? Each match row has a Data Coverage strip in the detail panel (click any row to open) that flags which of the four screenshot types were captured. Required-but-missing types are highlighted with a warning chip; the optional RANK is shown greyed out when absent. Screenshots Recall couldn't match to a known map collect in the Unknown tab for triage — alongside any record whose hero or map text didn't match the canonical roster shipped with this release (see Reference data gaps for what to do).
The Matches list has per-row checkboxes (left column). Tick one or more rows and a sticky toolbar appears at the top of the list: Select all (N) / Clear / Set play mode ▾ (Quickplay / Competitive / Clear) / Set queue ▾ (Role Queue / Open Queue / Clear). Each menu pick fires a single bulk write across every selected row — fast even on hundreds of matches at once. Your annotations / hidden flags / reviews all key on match_key, so bulk-set never disturbs the user-curated metadata.
Got more than one Overwatch account? Each profile in Recall is a fully separate workspace — its own screenshots folder, settings, and SQLite database. The chip in the upper right of the masthead lists every profile, switches between them in one click, and supports inline create + rename so you can name them whatever you want (SilentStorm, Jokester, Manny). Switching profiles re-loads every data surface (dossier, heatmap, Archive) against that profile's history.
If you accidentally ingest a smurf game into the wrong profile, the Matches view's bulk-select supports a Move to… action that transfers the ticked matches (plus their annotations and hidden flags) into another profile in one shot. No manual SQL needed.
You can also scope a single launch to a specific profile via --profile=<name> on the app binary — useful for opening an alt account once without changing the persisted default. The full data layout is documented under How it works → Where things live on disk.
Real examples from Recall's parser-regression fixture set. The same PNG files live under testdata/ in this repo and are the inputs TestParseScreenshot_GoldenFiles runs against on every change. Click any image for the full-resolution source.
First-run friction tends to land in one of a handful of spots. The deep-links go to the platform install guides where the exact commands live.
Tesseract isn't found / parse fails immediately
Recall shells out to Tesseract 5.x to read screenshot text. If the Engine row in Settings → Engine shows a red "Not found" chip, or the Parse button stays disabled with "Tesseract required":
- Install Tesseract 5.x — see the Windows install guide (UB-Mannheim installer).
- Click Settings → Engine → Detect — Recall walks the default install locations +
PATHlooking for a working 5.x binary. - If Detect comes up empty, click Locate Tesseract… and point Recall at the binary directly (
C:\Program Files\Tesseract-OCR\tesseract.exe). - Tesseract 3.x / 4.x predate the OW post-match font and misread reliably — the Engine row flags older versions but the parse-accuracy hit is the real reason to upgrade.
"Cannot access folder" / screenshots folder permission denied
The watcher and Parse-run both need read access to the directory you picked in Settings → Directories. If you see "Cannot access X. Check that you have read access or try a different folder.":
- Windows OneDrive sync —
Documents\Overwatch\…orPictures\Screenshots\…under OneDrive can flip to Files On-Demand (cloud-only placeholders). Right-click the Overwatch screenshots subfolder → Always keep on this device, or move your OW screenshot output to a non-synced path. - The picked folder must be a directory (not a file or device); the Settings probe surfaces "Not a directory" when this is wrong.
Reset Recall's database
To start fresh, recover from a corrupted database, or recover after a schema-changing update (Recall has no migrations pre-1.0, so an old database can become incompatible — wipe it and Recall rebuilds an empty one and re-parses your screenshots). Close Recall first, then:
| Wipe one profile's matches | Wipe everything |
|---|---|
Remove-Item -Recurse "$env:AppData\Recall\profiles\<name>\db\" |
Remove-Item -Recurse "$env:AppData\Recall" |
Windows — guided script (backs up first): double-click C:\Program Files\recall\Reset-Database.bat (it ships with the installer), or download recall-{version}-Reset-Database.bat from Releases. It backs the database up before deleting and asks to confirm — handy when a schema-changing update left the app unable to open. Steps + what's lost vs. kept: Resetting your database.
A softer in-app option exists too (when the app still opens): Settings → Advanced → Clear Database wipes the active profile's matches but keeps its settings + the ignored-screenshots suppress list (tick the opt-out checkbox to also clear that list). The two-step arm/confirm prevents accidental wipes.
Port conflict / "address already in use"
One localhost-only port matters:
:9245(Vite dev server, dev only) — only used bytask dev(wails3 dev); the production app uses an OS-allocated port. If it errors with "bind: address already in use", anotherwails3 devis already running — kill it.
The Wails desktop app does NOT open any externally-visible port by default — the IPC bridge is in-process between the Go runtime and the embedded WebView2 window.
If none of the above match, the Windows install guide carries the long form, and CONTRIBUTING.md → Bug-report bundles describes how to ship a reproducible payload to a bug report.
Bug reports, feature requests, and pull requests are welcome. See CONTRIBUTING.md for development setup, build instructions, coding conventions, and git hook requirements. The release/tagging process — automated via release-please, with task release-beta / task release-fire shortcuts for the manual bits — is documented in RELEASES.md. Commits on main follow Conventional Commits.
By participating in this project — opening an issue, filing a PR, commenting on a discussion — you agree to follow the Code of Conduct. Short version: be kind, and remember that Recall is given away free of charge and maintained in spare time, so no demands and no expectations of timely replies, bug fixes, or feature requests.
Licensed under the Apache License, Version 2.0.
Third-party dependency attribution is in NOTICE. A full software bill of materials (SPDX) is attached to each GitHub Release.







