Tool crosses into game memory
- Control
- Screen-space capture only; no process-memory access or injection
- Residual risk
- Game policy can still change and should be reviewed.
Produced real-time coaching suggestions from screen pixels alone-without process-memory access, injection, or live network dependence.

Game Screen selected.
A useful coaching overlay needs to understand the visible match state without crossing into game-process inspection or intrusive client behavior.
OWCoach treats terms-of-service safety as an architectural constraint: it reads the screen, evaluates a local ruleset, and renders a click-through recommendation surface.
A real-time Overwatch coaching overlay that reads the game screen - not its memory - to recommend hero counters as a match unfolds. A Python detection engine captures the scoreboard/killcam region, matches hero portraits with template matching, infers the enemy composition, and renders click-through suggestions through an Overwolf overlay. Packaged as a standalone Windows desktop app.
SAFE BY DESIGN - The whole thing is deliberately screen-space only. It never reads or writes game process memory, never injects into the client, and makes zero network calls during play - so it is not a cheat and stays inside the game's terms of service by construction. The counter logic is a local ruleset; nothing about the player's session is uploaded.
ENGINEERING - Auto-calibration locates the relevant HUD region across resolutions, template matching runs above a 0.87 confidence threshold to avoid false positives, and the overlay stays click-through so it never intercepts input. The build ships as a PyInstaller executable with a desktop shortcut and icon, plus a small stats-fetcher that pulls aggregate hero data offline.
Use what the player can already see.
Keep the match path independent from external services.
Prefer no answer to a confident-looking wrong answer.
No control is presented as total risk elimination.
01# Reads the SCREEN locally - never game memory, never the network. TOS-safe.02import mss, numpy as np03 04# Screen-space template matching only: no process-memory reads, no injection.05HERO_ICONS = load_templates("hero_names.json")06 07with mss.mss() as sct:08 region = calibrate(sct) # auto-locate the killcam / scoreboard09 while running:10 frame = np.asarray(sct.grab(region))11 matches = match_templates(frame, HERO_ICONS, threshold=0.87)12 13 enemy = [m.hero for m in matches if m.team == "enemy"]14 counters = suggest_counters(enemy) # local ruleset - zero API calls15 overlay.render(counters) # click-through Overwolf overlayScreen-space only - never touches game memory, makes zero network calls. TOS-safe by construction.
The matcher sees the wrong pixels and confidence falls.
The pipeline withholds the affected recommendation.
Recommendations use visible pixels rather than hidden process state
The match-time path runs locally without network calls
Low-confidence input fails quietly instead of inventing certainty