Model or dataset
ciddwd/overlay-translator avatar
ciddwd/overlay-translator

Screen Translator (ciddwd/overlay-translator): no-root Android screen translation with swappable OCR, translation and TTS

无需 ROOT 的开源 Android 屏幕实时翻译工具,适合游戏、视觉小说和漫画。支持端侧与云端 OCR、离线 LLM、多种翻译服务和文字朗读(TTS),译文可直接显示在画面上。Open-source no-root Android real-time screen translator for games, visual novels, and manga. Supports on-device and cloud OCR, offline LLMs, multiple translation services, on-screen translations, and text-to-speech (TTS).

841 stars35 forksKotlinApache-2.0

At a glance

What is it?
An Apache-2.0 Kotlin app that captures the screen through MediaProjection or Shizuku, runs OCR, translates, and draws the result back over the original text. The interesting part is that OCR, translation and speech are three separately configurable stages, which is also where the setup cost lives.
Who is it for?
Adopt it if you read Japanese or Korean games, manga or visual novels on Android and you want to choose your own OCR, translation and speech engines rather than accept one vendor's stack, and if you are willing to download models and grant MediaProjection or Shizuku access. Skip it if you need a one-tap install that works with no model downloads, or if you want a desktop pipeline where OCR and translation run on a PC.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem: text you can see but cannot select

Android gives no general way to read text rendered by another app. Games, visual novels and manga viewers draw glyphs into a surface, so there is nothing to long-press, nothing to copy, and nothing a translation app can hook. The usual workarounds are awkward: screenshot, switch to a translator, crop, paste, switch back, lose your place. Screen Translator takes the other route. It captures the screen, finds the text regions with OCR, translates them, and draws the translated text back on top of the original through an overlay window.

The target user is narrow and specific. Someone reading a Japanese visual novel, a Korean mobile game, or raw manga on a phone, who wants the translation to appear where the original text is rather than in a separate app. The README positions it exactly there, listing visual novels, manga and game dialogue, and the feature set follows: dialogue-box prioritisation, vertical Japanese text handling, furigana removal, and per-app terminology. This is not a general-purpose translation utility, and the configuration surface reflects the audience.

Capture, recognise, translate, draw: the four stages

The pipeline named in the README is 截屏 → 识字 → 翻译 → 叠加显示 / 朗读: capture, recognise, translate, overlay or read aloud. Capture uses MediaProjection or Shizuku. MediaProjection is the standard Android screen-capture API and needs a user consent prompt; Shizuku is the route the project offers as an alternative, and the topic list confirms it. Neither requires root, which is the central claim of the project.

OCR is a pluggable stage. On-device options are ML Kit for Chinese, Japanese, Korean and English, PaddleOCR with v5 and v6 model variants, and a dedicated manga OCR. There is also a local HTTP OCR mode that points at a Umi-OCR or LunaTranslator service on the same network, and cloud options including PP-OCRv6 online through PaddleOCR AI Studio, Baidu, Tencent and Youdao. Translation is equally pluggable: LLM providers over OpenAI- or Anthropic-compatible APIs, on-device ML Kit translation after downloading language packs, Sakura for Japanese to Simplified Chinese, Hy-MT2, DeepL including self-hosted deeplx, Youdao image translation, and keyless Google. Speech is a third independent stage, using the phone's system TTS, a self-hosted service, or online voices from Volcengine, MiniMax and MiMo.

The rendering stage has two modes. BLOCKS places translated text above, below or over each recognised region. The alternative is a draggable, zoomable floating window, which the README suggests for games with dense on-screen controls, since the translation sits above the UI instead of covering it. A bubble-detection path for manga erases the original text inside a speech bubble, repairs the background, and lays out the translation to match the bubble shape, falling back to plain rectangular rendering when confidence is low or processing fails.

Triggering a translation without leaving the game

The interaction design is the part most likely to decide whether you keep the app installed. The primary control is a floating ball. A single tap translates the whole screen by default, or enters a region-select mode where you drag a box around a word or phrase. A long press opens an arc-shaped submenu with actions such as cycle translation, reselect region, switch between full-screen and word-select modes, swap source and target languages, switch translation preset, open settings, and return home. The README states the button order and the number of buttons per page are configurable, and that a next-group button appears when there is more than one page.

There are two other triggers worth noting. Holding volume up and volume down together for 0.3 seconds fires a translation, which requires enabling the app in system accessibility settings. And selecting text in any other app surfaces a Screen Translator entry in the system text menu, which opens a translation card directly. The second one is the least obvious and probably the most useful outside of games, because it removes the need to switch apps and re-select the region manually.

Getting it running: permissions, models and the first-run wizard

Installation is an APK from the releases page. The README states Android 8.0 (API 26) or higher, Kotlin 2.x and Jetpack Compose. The first launch runs a paged setup wizard that asks for interface language, source language, target language, display mode, whether the use case is everyday or manga, translation method, and TTS. Choosing Japanese, Korean, Chinese or English as the source language selects a matching OCR engine; other source languages default to recommending PaddleOCR v5 mobile.

Model downloads are handled in-app and continue in the background if you leave the settings page. On Android 13 and above the app requests notification permission before starting a download, and progress appears both in-app and as a system notification, with cancel, retry and resume supported. Cloud LLM setup takes a provider, URL, API key and model name entered directly in the wizard. PP-OCRv6 online requires an AI Studio access token. DeepL accepts official paid or free keys, a self-hosted deeplx endpoint, or an automatic fallback between the two, and the README notes it can display the current quota.

Two operational details are easy to miss. First, the app ships presets, including an offline Japanese manga OCR to Simplified Chinese combination, and the manga preset defaults to the auto-fit display mode and will prompt you to download missing models. Second, there is a one-tap shortcut into the battery and background restrictions settings for Xiaomi, OPPO, VIVO, Huawei and Samsung devices, which the README calls out because those manufacturers are aggressive about killing background processes. If capture stops working after the screen is off for a while, that setting is the first place to look.

Where the design gets specific: manga, vertical text and terminology

Several features only make sense for this audience, and they are the strongest signal that the project is aimed at real reading rather than a demo. The OCR stage can detect horizontal, vertical and rotated text orientation and rerun a more appropriate OCR path, or you can lock the orientation manually. For vertical Japanese manga, the README says text is assembled right to left, furigana is stripped so the translation does not duplicate it, and vertical translation layout is available. Sentences split across several OCR regions are merged before translation, which matters when a speech bubble is detected as two or three boxes.

Terminology handling has two layers. You can store names, places, organisations and technical terms globally or per app, and per-app context can be enabled so different games get their own glossaries. The README states package names stay on the device and only the app display name is sent to translation models that support context, and only when you enable it. Separately, a translation library records corrections: long-pressing a displayed translation lets you edit the source or the translation, and the correction is reused for identical or similar sentences later. There is a translation cache for the current session so identical text and configuration are not sent twice.

PaddleOCR, manga OCR and the orientation model select 1, 2, 4 or 6 CPU inference threads based on available cores, capped at 6. That is a concrete tuning decision rather than a vague performance claim, and it tells you the project expects mid-range phones to be the common case.

The limitations that decide the purchase

The biggest one is that there is no single download-and-go configuration. Offline operation requires downloaded OCR models, downloaded ML Kit language packs, and downloaded system TTS voices, and the wizard exists precisely because the combinations are not obvious. If you want to translate a language whose OCR engine is not installed, the app will recommend switching engines rather than silently producing garbage, which is honest but still means a detour. Source and target language cannot be the same; the settings page and the floating menu disable conflicting options and explain why.

Capture is the second constraint. MediaProjection requires a consent prompt, and some apps block screen capture outright, which is outside the project's control. Shizuku is offered as an alternative but is itself a separate setup that many users will not want to perform. The third limitation is speech. The README states that some manufacturers' system TTS engines do not report playback position, so resuming after a pause restarts the segment from the beginning. That is an engine limitation the app cannot fix, and it is worth knowing before building a workflow around listening.

The fourth is scope. This is Android only, it is a screen translator rather than a document translator, and the batch image mode processes photos from the gallery rather than PDFs or folders on a desktop. If your reading happens on a PC, this is the wrong tool regardless of how well the mobile side works. The README also notes that plain HTTP is restricted to local networks by default and public endpoints must use HTTPS, which is a sensible default but will surprise anyone pointing the app at a self-hosted service over an unencrypted public address.

Alternatives and how they differ in approach

The nearest comparison is LunaTranslator, which appears in this README as a local OCR service the app can connect to. LunaTranslator is a Windows application built around hooking and reading text from visual novel processes directly, plus OCR as a fallback, with the translation displayed in its own window on the PC. The difference in approach is fundamental: LunaTranslator reads text before it is rasterised, so it gets clean strings and no OCR errors, but it only works where it runs and only for content it can hook. Screen Translator works on any pixels on an Android screen, including games and apps that expose nothing, at the cost of OCR accuracy and the overhead of capture and recognition on every trigger.

A second comparison is the built-in translation features in browsers and the Google Translate app's camera and screenshot modes. Those are zero-setup and cover many languages, but they are separate apps: you leave what you are reading, and there is no overlay, no per-app glossary, no vertical manga layout, and no reuse of your corrections. The trade here is real. Screen Translator asks for more setup and more permissions in exchange for staying inside the content and adapting to it.

Within the project's own options there is a further choice worth naming. Running everything on-device keeps screenshots and text on the phone, which the README lists as a goal, but limits you to the models you can download and the CPU threads you can spare. Pointing OCR, translation and TTS at services on your own machine or a cloud provider removes those limits and adds network dependency, credentials to manage, and in the cloud case, text leaving the device. The README's own framing is that these stages are independent so a single provider going down does not break the whole app, and that is the strongest argument for the architecture.

Maintenance, licensing and what to check before committing

The project is Apache-2.0, which permits commercial and closed-source reuse with the usual attribution and notice requirements; that is a description of the licence text, not legal advice, and anyone embedding it in a product should read the file. The README states that settings, presets, terminology and fonts can be exported and imported as a portable configuration package, and that API keys, tokens and similar credentials are excluded from the export and kept on the device. Persistent sensitive fields such as API keys, prompts and mirror URLs are migrated to encrypted storage. That matters if you plan to move configurations between devices or share a preset with someone, because the export is designed to be safe to pass around.

Maintenance cost is dominated by the external services, not the app. Cloud OCR, LLM and TTS providers change endpoints, pricing and authentication, and each one you enable is a key to rotate and a quota to watch. Offline configurations have the opposite profile: nothing to renew, but model files to re-download when you change engines, and a fixed accuracy ceiling. The release cadence visible in the supplied material is three tagged releases between late July and late August 2026, with the most recent push on 2026-08-25, which suggests active development rather than a finished product. Treat version numbers as moving.

Before committing, verify three things in the app itself. Confirm your source language maps to an OCR engine you are willing to install, since the wizard's recommendation for non-CJK languages is PaddleOCR v5 mobile rather than ML Kit. Confirm the offline model you want appears in the in-app download page for your device, because the README lists several model families and the thread cap means low-core phones get a slower path. And confirm that the apps you actually read text in permit screen capture, since no amount of configuration fixes a blocked capture surface.

Editorial conclusion

Adopt it if you read Japanese or Korean games, manga or visual novels on Android and you want to choose your own OCR, translation and speech engines rather than accept one vendor's stack, and if you are willing to download models and grant MediaProjection or Shizuku access. Skip it if you need a one-tap install that works with no model downloads, or if you want a desktop pipeline where OCR and translation run on a PC. Verify first that your source language is covered by the OCR engine you intend to use, that the specific offline model you want is listed in the in-app download page, and whether the apps you read text in allow screen capture at all.

Official sources

  1. ciddwd/overlay-translator on GitHub
  2. Issues
  3. License: Apache-2.0
  4. README
  5. Releases
Community notes

Community notes