Open Source  ·  Python  ·  Windows & Linux

Translate anything
on your screen — instantly.

Drag a box over any text, get the translation in a popup. No copy-paste. No browser tabs. Just one hotkey.

Get started See features
# Press F8 or click Snip, drag over text...
OCR → "Auf Wiedersehen" conf: 96%
Lang German → English
Out → "Goodbye"
Saved to translations.csv ✓

Features

Everything you need. Nothing you don't.

✂️

Drag-to-Snip Capture

Draw a rectangle over any text on screen — in any app, browser, PDF, or game. The selection overlay dims the screen so you see exactly what you're capturing.

🔬

OCR with Confidence Score

Powered by Tesseract 5. Automatically selects the best page-segmentation mode for the aspect ratio. Shows a warning badge when OCR confidence is below 60%.

🌐

15 Languages Supported

German, English, French, Spanish, Italian, Portuguese, Dutch, Polish, Russian, Japanese, Chinese, Korean, Arabic, Turkish, Swedish — with auto-detect mode.

📋

Clipboard Monitor

Enable it once and translations fire automatically whenever you copy text. Short clips only — multi-line and URLs are skipped to avoid noise.

🔊

Audio Playback

Click Play in the popup to hear the translated text via gTTS. Auto-play mode speaks the result the moment it appears. Works offline after the mp3 is generated.

📖

Word Definitions

Single English words get an inline definition fetched from dictionaryapi.dev, expanding the popup automatically — no extra clicks required.

📄

Translation History & CSV

Every translation is appended to translations.csv with a timestamp. Open the History panel to browse, sort by column, or search your past captures.

🃏

Anki Export

One click exports all translations to a tab-separated file that imports directly into Anki as flashcards. Source language on the front, translation on the back.

⌨️

Global Hotkey

F8 triggers a snip from anywhere — while watching a video, reading a PDF, or in a fullscreen game. Configurable in config.json.

🖥️

System Tray

Closing the window hides it to the tray. Right-click to snip, show the window, or quit. The app stays running in the background at near-zero CPU.

🧠

Translation Cache

Repeated captures of the same text hit an in-memory cache — zero network latency on the second lookup. The cache lives for the session.

💻

Windows & Linux

Full support for Windows (DPI-aware, bundleable with PyInstaller) and Linux — X11 with the Tkinter overlay and Wayland with native grim+slurp capture.


How it works

From screen to translation in under two seconds.

1

Trigger a snip

Press F8 (global hotkey) or click the Snip button. The screen dims and a crosshair cursor appears. On Wayland, the system's native selection tool handles this via slurp.

2

Draw a selection

Drag a rectangle around the text. Release the mouse. The overlay closes instantly and the captured area is passed to the OCR engine.

3

OCR extracts the text

Tesseract 5 processes the image: it's grayscaled, auto-contrasted, and scaled up if small. The page-segmentation mode is chosen automatically based on the aspect ratio of the selection.

4

Language detection & translation

With auto-detect on, langdetect identifies the source language from the OCR text. Then Google Translate (via deep-translator) produces the translation.

5

Popup appears beside your selection

A frameless dark popup shows the original, the translation, and the OCR confidence score. It auto-copies to clipboard, auto-plays audio if enabled, and fetches a definition for single English words.

6

Saved to history

The pair is appended to translations.csv with a timestamp. Open the History panel any time to review, sort, or export to Anki.


Languages

Supported languages

Auto-detect mode works with all 15. Fixed-direction mode covers the six most common pairs.

🇩🇪 German
🇬🇧 English
🇫🇷 French
🇪🇸 Spanish
🇮🇹 Italian
🇵🇹 Portuguese
🇳🇱 Dutch
🇵🇱 Polish
🇷🇺 Russian
🇯🇵 Japanese
🇨🇳 Chinese
🇰🇷 Korean
🇸🇦 Arabic
🇹🇷 Turkish
🇸🇪 Swedish

Installation

Get it running in two minutes.

🗔️ Windows

  • Python 3.10 or newer
  • Tesseract OCR — download from UB-Mannheim, include German language data
  • Run the setup commands below
  • Global hotkey works out of the box
  • Bundles into a single .exe via PyInstaller

🐧 Ubuntu / Linux

  • Python 3.10 or newer (system)
  • Tesseract via apt — already in Ubuntu repos
  • X11 session: overlay + hotkey work natively
  • Wayland session: uses grim + slurp for capture
  • Audio via mpg123, ffplay, or xdg-open
# 1. Install Tesseract OCR (run the installer, tick "deu" language data)
#    https://github.com/UB-Mannheim/tesseract/wiki

# 2. Create a virtual environment and install packages
cd snip_translate_tool
py -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt

# 3. Run
py snip_translate.py
# 1. Install system dependencies
sudo apt install tesseract-ocr tesseract-ocr-deu mpg123

# 2. Create a virtual environment and install packages
cd snip_translate_tool
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

# 3. Run  (make sure you are in an X11 session)
python snip_translate.py
# 1. Install system dependencies
sudo apt install tesseract-ocr tesseract-ocr-deu grim slurp mpg123

# 2. Create a virtual environment and install packages
cd snip_translate_tool
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

# 3. Run  (WAYLAND_DISPLAY is auto-detected)
python snip_translate.py
# Snipping uses slurp for region selection instead of the Tkinter overlay

Tutorial

Using the tool — step by step.

Basic Translation

1

Launch the app

Run python snip_translate.py. A compact dark window appears in the top-left. It stays on top so it's always accessible.

2

Pick your direction

Use the dropdown to choose a language pair (e.g. German → English), or toggle Auto Detect to let the app figure it out from the captured text.

3

Snip the text

Press F8 or click Snip. Drag a rectangle around the word or phrase you want. Release — done. The popup appears within a second.

4

Read the popup

The popup shows the source language, the recognised text, the target language, and the translation in larger bold text. The translation is already in your clipboard if auto-copy is on.

Clipboard Monitor

Toggle Clipboard in the toolbar. Now any text you copy (up to ~800 characters, single-line, not a URL) is automatically translated. The popup appears near the top-right corner of your screen.

Audio Playback

Click Play in the popup to hear the translation spoken aloud. Toggle Auto Play in the toolbar to have every translation spoken automatically the moment the popup opens.

History & Anki Export

Click History to open a table of all your translations. Click any column header to sort. Hit Sort A→Z to sort by source word and save it back to the CSV. Hit Export Anki to create anki_export.txt — import it into Anki via File → Import, field separator: Tab.

Config tips

Open config.json in any text editor to change defaults:

{
  "hotkey":           "F8",         // any key supported by the keyboard package
  "popup_duration":   15000,        // ms before popup auto-closes
  "auto_copy":        true,         // copy translation to clipboard on capture
  "auto_detect_lang": false,        // use langdetect to auto-identify source
  "target_lang":      "en",         // target when auto-detect is on
  "tray_on_close":    true,         // hide to tray instead of quitting
  "tesseract_path":   ""            // override if tesseract isn't on PATH
}

Tech Stack

Built with reliable, lightweight tools.

No Electron. No web server. A single Python file you can read in 20 minutes.

Python 3.10+
Tkinter (UI)
Tesseract 5 (OCR)
pytesseract
Pillow (image)
deep-translator
langdetect
gTTS (audio)
pystray (tray)
keyboard (hotkey)
grim + slurp (Wayland)
dictionaryapi.dev
CSV (history)
PyInstaller (packaging)

FAQ

Common questions.

The OCR output is garbled — what can I do?

Capture a larger area so the text is bigger in the image. The tool already upscales small captures 2× before OCR. If the text is on a coloured background, try increasing contrast on your screen. The confidence score in the popup header tells you how reliable the result is — below 60% triggers a warning badge.

The F8 hotkey doesn't work on Linux.

The keyboard package requires root on Linux. Either run the app with sudo, or simply use the Snip button. You can also set up a system-wide keyboard shortcut in GNOME Settings → Keyboard → Custom Shortcuts pointing to the launch script.

Does it work on Wayland?

Yes. Install grim and slurp (sudo apt install grim slurp). When WAYLAND_DISPLAY is set, the app automatically uses them for screen capture instead of the Tkinter overlay. The rest of the pipeline is identical.

How do I add more language pairs to the dropdown?

Open snip_translate.py and add an entry to DIRECTION_PAIRS near the top. The key is the display label, the value is a (source_code, target_code) tuple. Language codes follow ISO 639-1. You may also need to add the Tesseract language data code to TESS_LANG.

Can I bundle it into a standalone .exe for Windows?

Yes — a SnipTranslator.spec file is included. Run pyinstaller SnipTranslator.spec after activating your virtual environment. The bundled tesseract/ folder next to the spec is packaged in automatically so end-users don't need a separate Tesseract install.

Does the tool send my screen data anywhere?

The screenshot never leaves your machine. Only the OCR-extracted text is sent to Google Translate (via deep-translator) over HTTPS. Audio generation sends the translated text to Google's TTS service. If you need fully offline operation, swap deep-translator for a local model and disable gTTS.

Where is the translation history stored?

translations.csv sits in the same directory as the script (or next to the .exe when bundled). It's a plain CSV — open it in Excel, LibreOffice Calc, or any text editor. The Anki export writes anki_export.txt to the same location.