Skip to content

sound-barrier/recall

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,712 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Recall

CI Release Pages CodeQL Latest release License Go Vue Docs API Code of Conduct Backlog

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.

What it looks like

Matches view Match detail panel
Recall Matches tab — dossier headline with W/L/D + top maps/heroes, Campaign Log heatmap, and the compact leaf-row list below The Matches tab is a *set workspace*: a customizable dossier at the top (W/L/D, win rate, top maps/heroes, active-clause chips — drag to reorder, remove, or re-add any KPI/breakdown widget), the full-width Campaign Log heatmap + Geography (Map × Role) band below it, and the compact leaf-row list at the bottom. The left-side **Filter matches** panel consolidates every filter dimension into one place. Recall right-side detail panel — Match Journal annotation, Match Stats grid, Heroes Played, source screenshots Click a row (or press e) to slide in the per-match dossier: leaver chooser, Match Stats grid, Rank Update card, Match Journal (notes / replay code / group / tags), Heroes Played, and the source screenshots. ←/→ paginate; Esc closes.

📚 Full documentation: sound-barrier.github.io/recall — the Windows install guide and the API reference. Auto-deployed from main on every doc change.

Table of Contents

Getting started

Project

Quick start

The desktop app is the simplest way to use Recall. Five steps from zero to your first match record:

  1. Install Recall — grab recall-{version}-windows-amd64-installer.exe from GitHub Releases and run it. Full step-by-step in the Windows install guide.
  2. 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.
  3. 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.
  4. 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).
  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.)

Installation

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.

Verifying downloads

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/recall

Every release also includes recall-{version}-sbom.spdx.json — a software bill of materials listing every dependency.

Capturing matches

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).

Bulk-set play mode + queue type

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.

Multiple accounts (profiles)

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.

What each screenshot type looks like

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.

SUMMARY TEAMS screen
SUMMARY tab — Antarctic Peninsula, Juno, comp victory Antarctic Peninsula · comp victory 2-1. The map name + game type + heroes-played list + per-10-min averages all come from this tab. Post-match TEAMS screen with both teams' stats Same match. Eliminations / assists / deaths / damage / healing / mitigation all come from the highlighted row + the right-hand stat panel.
PERSONAL (one per hero played)
PERSONAL tab — Juno hero-specific stats Juno's PERSONAL tab. The 3×3 grid populates hero-specific stats (pulsar torpedoes damage, orbital ray healing, players saved, weapon accuracy). PERSONAL tab — Mizuki hero-specific stats from a hero-swap match Mizuki's PERSONAL tab from the same match — the player swapped from Juno (67% played) to Mizuki (33% played). Recall captures one PERSONAL per hero and merges them into the same match record.
RANK (competitive progress)
RANK screen — Platinum 5 competitive victory A win — Platinum 5, +21% rank progress, Lúcio SR 2697 (+45). Tier, level, progress %, modifiers (expected · victory), and per-hero SR all come from this screen. RANK screen — Gold 1 loss with demotion protection A loss under demotion protection — Gold 1, -19% rank progress, Lúcio SR 2733. Recall reads the negative progress and the demotion shield.

Troubleshooting

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":

  1. Install Tesseract 5.x — see the Windows install guide (UB-Mannheim installer).
  2. Click Settings → Engine → Detect — Recall walks the default install locations + PATH looking for a working 5.x binary.
  3. If Detect comes up empty, click Locate Tesseract… and point Recall at the binary directly (C:\Program Files\Tesseract-OCR\tesseract.exe).
  4. 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 syncDocuments\Overwatch\… or Pictures\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 by task dev (wails3 dev); the production app uses an OS-allocated port. If it errors with "bind: address already in use", another wails3 dev is 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.

Contributing

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.

License

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.

About

Desktop app that tracks your Overwatch competitive match history — from post-match screenshots (OCR) or manual entry — and surfaces your strengths and weaknesses by hero, map, and mode, with in-app trend charts over time.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors