BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
翻譯準備中
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 tr
翻譯準備中
遊戲TypeScript · GoGitHub @sound-barrier上線中營運者未確認
試用過了嗎? 點一下就好,不需要登入。
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.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗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
The desktop app is the simplest way to use Recall. Five steps from zero to your first match record:
recall-{version}-windows-amd64-installer.exe from GitHub Releases and run it. Full step-by-step in the Windows install guide.Recall recognizes 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).
About Recall (the ⋮ menu) compares your installed Recall against the latest release on GitHub, installs a newer release in place once it has checked the release's signature, 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 means the file is intact; False means re-download.
A checksum proves only that the file arrived intact, not who made it.
For that, the release files carry a SLSA provenance
attestation from GitHub's Sigstore integration, and from the first
signed release on, the installer and the updater exe each also carry a
.sig signature from Recall's release key (the same signature the
in-app updater checks). Verify the attestation with the
GitHub CLI 2.68.0 or newer:
gh attestation verify recall-{version}-windows-amd64-installer.exe `
--repo sound-barrier/recall `
--signer-workflow sound-barrier/recall/.github/workflows/release.yml `
--source-ref refs/tags/v{version}
The Windows install guide walks through all three checks, including the OpenSSL signature check.
Every release also includes recall-{version}-sbom.spdx.json — a
software bill of materials listing every dependency. From the first
signed release on, it also includes recall-{version}.intoto.jsonl,
the attestation bundle for verifying without signing in to GitHub.
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 colors:
- 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 colors only. The parser is tuned to Overwatch's stock color scheme — it keys off specific colors (your scoreboard row's blue highlight, the magenta COMPETITIVE badge). Non-default colourblind palettes recolour these and can break detection. Only the default colors 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.
Each screenshot belongs to one profile: the first one that parses it. Profiles that share a screenshots folder skip each other's screenshots, so switching profiles never copies your history into the other account. Moving a match hands its screenshots to the profile it moved to; deleting the match, or dismissing a screenshot, lets another profile parse them again. If a profile ended up with screenshots that belong elsewhere, the Parse tab offers Move them here…, which moves those screenshots and their matches over. Switching away while screenshots are still unparsed asks first, because whichever profile parses them next gets them.
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.
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":
PATH looking for a working 5.x binary.C:\Program Files\Tesseract-OCR\tesseract.exe).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.":
Documents\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.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 %LocalAppData%\Programs\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.
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.
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 a task release-fire shortcut for when a release doesn't start on its own — 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.