Translate any text on your Windows screen, in place. A desktop take on Google Lens translate.
English · 简体中文
WinLens translates the text on your screen and draws the translation right over the original, matching the background and font so it reads as if the app had always been in your language. It's the Google Lens translate idea, but for the Windows desktop.
Browser translators only touch web pages. WinLens reads whatever is rendered on screen, so it also works on native apps, games, chat clients, PDFs and foreign software. It uses OCR, so the text doesn't need to be selectable.
It sits in the system tray and is triggered by a global hotkey. Press the hotkey, read the translation, press Esc to dismiss it.
Browser extensions translate text inside a web page. They can't read anything else on your screen. WinLens runs OCR on the actual pixels, so it translates things they can't:
- Text inside images: photos, screenshots, memes, infographics, scanned documents.
- Games: menus and dialogue, including imported titles.
- Desktop apps: installers, error dialogs, foreign software UIs.
- PDFs and documents in any reader.
- Video frames and subtitles.
- Anything you can't select or copy.
If a browser tab already translates it, you don't need WinLens. For everything else on screen, you do.
- Translates on-screen text in place: the translation replaces the original, with a matching background and font, instead of appearing in a separate box.
- Works on any window (apps, games, chats, documents), not just the browser.
- Reads Latin and CJK (Chinese, Japanese, Korean) on the same screen.
- Global hotkey, default Ctrl + Alt + T.
- Upscales the screenshot before OCR and picks the best recognizer per text block, which helps accuracy on small text.
- Dark control panel. You can change the target language straight from the overlay.
- Right-click a block to copy the original text or the translation.
- Optional "launch at startup". Otherwise it stays out of the way in the tray.
A small tray app with a dark control panel. Pick the target language, set the hotkey, choose the OCR source language, and toggle launch-at-startup.
Open the Releases page and pick the
build for your CPU (win-x64 for most PCs, win-arm64 for Snapdragon / ARM devices). Two
flavours are offered:
| Download | Size | Needs a runtime? |
|---|---|---|
WinLens-win-x64.exe |
~25 MB | Yes — the .NET 10 Desktop Runtime |
WinLens-win-x64-standalone.zip |
~75 MB | No — the runtime is bundled |
Pick the small .exe if you already have (or don't mind installing) the .NET 10 Desktop
Runtime. Pick the standalone .zip if you want it to run with no install — extract the folder
anywhere and run WinLens.exe inside (keep the files together; the .exe needs the DLLs
next to it).
The executable isn't code-signed yet, so on first launch Windows SmartScreen may show "Windows protected your PC". Click More info > Run anyway. If you'd rather verify the download instead, compare its checksum against the SHA256 listed on the release page:
Get-FileHash .\WinLens-win-x64.exe -Algorithm SHA256WinLens uses the Windows OCR engine, so it can only read languages whose OCR pack is installed. Most systems already have your display language. To add more (for example Chinese or Japanese):
Settings > Time & Language > Language & region > (your language) > Language options > Optional features > add the OCR feature.
The "Add OCR languages in Windows" link in the control panel opens that page for you. Newly installed languages show up automatically.
- Launch WinLens. The control panel opens the first time, then it minimizes to the tray.
- Pick a target language in the control panel.
- Press the hotkey (Ctrl + Alt + T) anywhere in Windows.
- The screen is translated in place. Press Esc or Close to dismiss.
| Action | How |
|---|---|
| Translate now | Hotkey, tray menu, or the control panel button |
| Open the control panel | Double-click the tray icon, or tray menu > Open WinLens |
| Change target language | Control panel, or the overlay's top bar (re-translates live) |
| Change the hotkey | Control panel > Change, then press your combination |
| Pick the source (OCR) language | Control panel > Detect text in (leave on Auto unless you need speed) |
| Copy text | Right-click a translated block > Copy original / Copy translation |
| Launch at startup | Control panel toggle |
| Quit | Tray menu > Exit |
Leaving "Detect text in" on Auto is usually best: WinLens runs every installed recognizer and keeps the text each one reads well, so a mixed-language screen still works. Forcing a single language only saves a little time.
Hotkey > capture screen > upscale > OCR (per script) > translate > overlay in place
- Capture the whole virtual screen (DPI-accurate, all monitors).
- Upscale the image about 2x so small UI text is recognized more reliably.
- Run every installed OCR recognizer and keep from each only the blocks whose script matches it (Latin from the Latin engine, CJK from the CJK engine), then drop overlapping duplicates.
- Translate each line (Google endpoint, with a MyMemory fallback), cached per session.
- Draw an opaque, color- and font-matched box over each original line.
The issues and project board have the full list.
- Offline translation (Argos / NLLB): no network, no rate limits, more privacy.
- PaddleOCR / ONNX engine: stronger CJK and small-text accuracy, no OS language packs.
- Cross-platform (Avalonia): macOS and Linux.
- Region capture: translate a selected area instead of the whole screen.
- Animated demo (GIF) in the README.
git clone https://github.com/marco-beltrame/WinLens.git
cd WinLens
dotnet build -c Release
dotnet runRequirements: Windows 10 (build 19041 or later) / 11, the .NET 10 SDK, and the Windows Desktop workload (WPF).
| Flag | Effect |
|---|---|
--settings |
Open the control panel on launch |
--translate |
Run one capture-and-translate on launch |
Contributions are welcome. See CONTRIBUTING.md and the Code of Conduct. Issues tagged good first issue are a good place to start.
MIT. See LICENSE.
- Translation through the Google Translate endpoint, with a MyMemory fallback.
- Tray integration with Hardcodet.NotifyIcon.Wpf.
- Built with .NET 10 and WPF.

