Skip to main content

Offline screen translator for Japanese retro games

Project description

Interpreter

Offline screen translator for Japanese retro games. Captures text from any window, performs OCR, translates to English, and displays subtitles in a floating overlay.

sample

Features

  • Fully offline - No cloud APIs, no internet required after setup
  • Free - No API costs or subscriptions
  • Private - Text never leaves your machine
  • Optimized for retro games - Uses MeikiOCR, trained specifically on Japanese game text
  • Two overlay modes - Banner (subtitle bar) or inplace (text over game)
  • Translation caching - Fuzzy matching avoids re-translating similar text

Requirements

  • Python 3.11+
  • macOS (Windows/Linux support planned)

Installation

  1. Install uv (modern Python package manager):

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  2. Clone and install:

    git clone https://github.com/bquenin/interpreter.git
    cd interpreter
    uv sync
    
  3. Models are downloaded automatically on first run (~1.5GB total).

Usage

# List available windows
uv run interpreter --list-windows

# Run with default config
uv run interpreter

# Run with specific window
uv run interpreter --window "Tales"

# Start in inplace mode (text over game)
uv run interpreter --overlay-mode inplace

# Debug mode (show OCR confidence scores)
uv run interpreter --debug

Controls

Key Action
m Cycle overlay mode: off → banner → inplace
- Decrease font size
= Increase font size
Ctrl+C Quit

In banner mode, you can drag the overlay to reposition it.

Overlay Modes

Banner Mode (default)

A subtitle bar at the bottom of the screen displaying translated text. Draggable, opaque background, centered text.

Inplace Mode

Transparent overlay positioned over the game window. Translated text appears directly over the original Japanese text at OCR-detected positions. Click-through so you can interact with the game.

Configuration

Edit config.yml:

# Window to capture (partial title match)
window_title: "Tales"

# Refresh rate in seconds
refresh_rate: 0.5

# OCR confidence threshold (0.0-1.0)
# Filters out garbage text by average per-line confidence
ocr_confidence: 0.6

# Subtitle appearance
font_size: 24
font_color: "#FFFFFF"
background_color: "#404040"

How It Works

  1. Screen Capture - Captures the target window at the configured refresh rate
  2. OCR - MeikiOCR extracts Japanese text (optimized for pixel fonts)
  3. Translation - Sugoi V4 translates Japanese to English
  4. Display - Shows translated text in the selected overlay mode

Troubleshooting

Window not found

Use --list-windows to see available windows. The window title is a partial match.

Poor OCR accuracy

Try adjusting ocr_confidence in config. Lower values include more text (but may include garbage), higher values are stricter.

Slow performance

First run downloads models (~1.5GB). Subsequent runs use cached models from ~/.cache/huggingface/.

What's New in v2

  • Inplace overlay mode - Text appears directly over game text
  • Mode cycling - Press m to switch between off/banner/inplace
  • Font size adjustment - Press -/= to resize on the fly
  • Translation caching - Fuzzy matching reduces redundant translations
  • Improved OCR - Punctuation excluded from confidence calculation
  • Better window capture - Excludes overlapping windows, auto-detects fullscreen
  • Multi-display support - Overlay appears on the same display as the game

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

interpreter_v2-2.0.0.tar.gz (3.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

interpreter_v2-2.0.0-py3-none-any.whl (29.2 kB view details)

Uploaded Python 3

File details

Details for the file interpreter_v2-2.0.0.tar.gz.

File metadata

  • Download URL: interpreter_v2-2.0.0.tar.gz
  • Upload date:
  • Size: 3.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for interpreter_v2-2.0.0.tar.gz
Algorithm Hash digest
SHA256 980a4335ec1a2ae92c0026e5e42fd9a4f71fdcc41742fe65daa3598ae0a08164
MD5 7b729dacab38a8183dbf95fd3bfe2fc4
BLAKE2b-256 f2b4db2b148dc2bbf51a1a7ddb34a147311ca085c9a22b27a02baeb3afcefd7d

See more details on using hashes here.

File details

Details for the file interpreter_v2-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: interpreter_v2-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 29.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for interpreter_v2-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 edcae87aecebf0e43e6eabaae56a9afdfbd33d0aaa6e61591b65ade7449b6cbd
MD5 0a04b288ef1b78c4c4da3c05b07d3357
BLAKE2b-256 37849359ca3edeb65f50e1baf4204042360dd92ab7b71ceb78cb2e31d1664271

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page