← ALL WORK

Overlay Translator

Live-translates game text right on screen — the game looks like it shipped in English.

DEMO
01THE PROBLEM

Some games never get an English release. Your options are grim: prop a phone translator next to the monitor and pause every few seconds to retype what's on screen, or wait years for a fan translation that may never come. The commercial tools that do exist hook into each game's code — a per-game effort that can trip anti-cheat systems.

02WHAT I BUILT

Overlay Translator started as a personal challenge: could I make a Chinese-only game readable in real time, without touching the game's code? The result is a Windows tool that watches the game window, reads the on-screen text, translates it, and paints the translation directly over the original — matched to the game's own background and lettering colors, so it reads like a native translation, not subtitles stacked on top.

The overlay itself is a transparent, click-through layer that follows the game window wherever you drag it; your clicks pass straight through to the game. When nothing on screen changes, the tool sits idle — the game keeps its performance.

One small tool, many disciplines: Windows internals for the overlay, computer vision to read the text, caching and retry logic so a flaky translation service never stalls the picture, and careful threading to keep it all smooth. Favorite bug: the app was invisibly re-reading its own painted translations — every frame degrading like a photocopy of a photocopy — fixed by capturing the game window's own surface, so the overlay can never photograph itself.

Honest scope: the demo runs against a bundled practice-game window (the mechanism doesn't care which window it watches), a few stylized characters escape the text reader, and translation quality is whatever machine translation returns — the engineering is the pipeline and the rendering. Windows-only, by design.

03OUTCOME

A game with zero English support becomes readable in real time — no game modifications, no per-game setup. Proof that when a problem spans many domains at once, I can build the whole machine.

04STACK
PythonRapidOCRONNX RuntimeWin32 APItkinter