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

Screen Translator (overlay-translator): a no-root Android overlay translator for games, visual novels and manga

无需 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).

925 stars36 forksKotlinApache-2.0

At a glance

What is it?
Screen Translator, published as ciddwd/overlay-translator, captures the Android screen through MediaProjection or Shizuku, runs OCR locally or in the cloud, translates with an LLM or a machine translation service, and draws the result back over the original text. It is built for people reading untranslated games, visual novels and manga on a phone, and its main constraint is that it is Android only.
Who is it for?
Adopt Screen Translator if you read untranslated games, visual novels or manga on an Android 8.0 (API 26) or newer device and want to choose your own OCR, translation and TTS providers, including fully offline combinations. Skip it if you need Windows, iOS or a desktop overlay: the repository is an Android app and the README documents no other platform.
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 12 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 October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Screen Translator solves, and who it is actually for

The problem is narrow and specific: text is on the screen, you cannot read it, and switching to another app to look it up breaks the flow of whatever you are doing. Screen Translator, whose Chinese name is 屏译, addresses that by keeping capture, recognition, translation and display inside one overlay. The README describes the loop as 截屏 → 识字 → 翻译 → 叠加显示 / 朗读: screenshot, recognise text, translate, then overlay or read aloud.

The intended audience is stated plainly. The project targets visual novels, manga and game dialogue, plus, in its own words, any on-screen text. The feature list is shaped by that audience rather than by general document translation. There is bubble detection for manga panels, vertical Japanese text is reassembled right to left, furigana is stripped so the translation does not repeat it, and sentences that OCR split into fragments are merged before translation. A general-purpose translator would not need any of that.

Two constraints matter more than the feature list. First, it is Android only. The repository is a Gradle project with an app module and a llama-android module, and the README's badge states Android 8.0 (API 26) and above. The related searches include overlay translator windows, overlay translator ios and overlay translator for games, and none of those platforms are covered by this repository. Second, no root is required, which is the project's central claim. Capture runs through MediaProjection or Shizuku, both of which are user-granted mechanisms rather than privilege escalation.

How the capture, OCR, translation and overlay pipeline fits together

The README presents the stages as independently configurable: capture, OCR, translation, display and TTS. That separation is the design decision the rest of the app hangs on. You can recognise text on the phone with ML Kit, PaddleOCR or a manga-specific OCR model, or send the frame to a local HTTP OCR service such as Umi-OCR or LunaTranslator OCR running on a machine in the same network, or fall back to a cloud OCR provider. Translation is chosen separately: a hosted LLM over an OpenAI or Anthropic compatible endpoint, an on-device model, Google ML Kit's offline language packs, Sakura or Hy-MT2, DeepL (including a self-hosted deeplx proxy), Youdao image translation, or plain Google.

Because the stages are separate, the failure of one does not take down the others. The README makes this explicit: the app does not stop working because a single service is unavailable. TTS is likewise decoupled; the README notes it is off by default and that turning it off does not affect recognition or translation.

Capture is triggered from a floating ball. A single tap translates the whole screen by default, or enters a selection 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 selection, swap source and target languages, change translation preset, open settings, and return home. The order of those buttons and how many appear per page are configurable, and a next-group button appears when there is more than one page. There is also a volume-key trigger: holding volume up and volume down together for 0.3 seconds, which requires enabling the accessibility service. Separately, selecting text in any other app and choosing 屏译翻译 from the system menu opens a translation card without switching apps.

For continuous reading there is a cycle mode. It can run at a fixed interval or wait until the caption text stabilises before translating, skips identical frames and identical translations, and can prioritise the lower half of the screen where dialogue boxes usually sit. On the rendering side there are two modes: blocks placed under, above or over each source region, or a draggable, resizable floating window that can be locked to avoid accidental touches. The automatic fit mode picks colour, background and font size per text region, and in manga scenes uses built-in bubble detection to erase the original text inside a bubble, repair the background and lay out the translation to the bubble's shape. The README states it falls back to plain rectangular rendering when confidence is low or processing fails, and that no separate bubble model needs downloading.

Installing Screen Translator and running a first translation

The README does not give a command-line install procedure. It points to the Releases page, and the most recent release listed is v0.4.5. The practical route is to take the APK from that release and install it on an Android 8.0 (API 26) or newer device. Building from source is possible, since the repository is a Gradle project with gradlew and gradlew.bat at the top level and a local.properties.example file, but the README does not document a build walkthrough, so treat source builds as unsupported ground.

The first launch runs a paged onboarding flow. It asks in order for interface language, source language, target language, display mode, whether you are using it for everyday reading or manga, translation method, and TTS. If you choose a cloud LLM you enter the provider, URL, API key and model name there. If you choose an offline option, the flow lists the models that need downloading. Choosing Japanese, Korean, Chinese or English as the source language matches a corresponding OCR engine; other source languages default to PaddleOCR v5 mobile.

After onboarding you must enable the screen capture service. The home screen has a 截屏服务 card for this. The README describes a roaming tutorial that runs the first time the capture service is enabled: it walks you through long-pressing the floating ball and explains each item in the arc menu and its paging. You can re-run onboarding and the roaming tutorial from the Help entry on that same card.

A first real use, once the service is running, is to open the game or reader, tap the floating ball once, and wait for the translation to appear over the original text. If you want a word-level dictionary card instead of a full-screen pass, switch to selection mode and drag a box around the word. The README notes that by default you can fine-tune the selection box and then press 翻译, and that recognition and translation happen on release only after you turn off 精细调整 in settings.

For a repeatable setup, the app ships system presets. The README names an offline Japanese manga OCR to Simplified Chinese preset as one of them, and notes the manga preset uses automatic screen fitting by default and prompts you to download missing models first. Backups are portable: settings, custom presets, terminology and font files can be exported and imported, while API keys and tokens stay on the device and are not written into the export.

Where Screen Translator gets in the way

The biggest limitation is the platform. There is no Windows, macOS, iOS or desktop build in this repository. If your visual novel is on a PC, this is the wrong tool, and no amount of configuration changes that. The related searches for a PC or Windows overlay translator point at a need this project does not serve.

The second limitation is that the translation quality ceiling is set by whatever engine you pick, not by the app. The README is honest about this: dictionary-style output with phonetics, parts of speech, inflections, synonyms, multiple senses, example pairs and notes on difficult points is available only when you use an LLM. Baidu, Tencent and DeepL return the translation and nothing else. If you were expecting a dictionary card from a machine translation service, you will not get one.

Third, several capabilities depend on infrastructure you have to supply. Offline translation needs language packs or model files downloaded first. Cloud OCR needs credentials, and the README notes that PP-OCRv6 online requires an AI Studio access token. Local HTTP OCR needs a service running on your network. DeepL's free path and Google may need a proxy depending on where you are. None of this is hidden, but it means the app is not useful the moment it is installed unless you pick a combination whose dependencies are already present.

Fourth, background execution on Android is fragile. The README devotes a feature to what it calls 国产手机后台引导, one-tap shortcuts into the battery settings of Xiaomi, OPPO, VIVO, Huawei and Samsung devices, precisely because those phones kill background services. If the capture service is killed, translation stops. That is an operating system behaviour, not something the app can fully prevent.

Finally, TTS has a documented rough edge. The README states that some phone vendors' system voices do not report playback position, so resuming can only restart the segment from the beginning. It also notes that online voice services such as Volcano Engine, MiniMax and MiMo may charge. On the privacy side, plaintext HTTP is restricted to a local network by default and public endpoints must use HTTPS, which is a sensible default but does constrain how you point the app at a remote self-hosted service.

How it differs from a PC screen translator workflow

The obvious alternative for the same reading problem is a desktop screen translator such as LunaTranslator, which is also named in this README as a local HTTP OCR service you can connect to. The difference in approach is where the pipeline runs. A desktop tool assumes the text is on a monitor, captures it there, and renders the overlay there. Screen Translator assumes the text is on a phone screen and keeps the entire loop on the device, with MediaProjection or Shizuku for capture and an Android overlay for display.

That split produces different trade-offs. A desktop setup can use a large local OCR model and a full-size LLM without worrying about phone memory or thermal limits, and it can display a translation panel beside the original rather than on top of it. Screen Translator's advantage is that it travels with the device: the same app translates a game on the phone and a manga page in the gallery, with no PC involved, and with offline OCR plus an on-device model plus downloaded system voices the screenshot and the text can stay on the phone.

There is a middle path the README makes explicit. Because Screen Translator can call a local HTTP OCR service, you can keep recognition on a PC and translation on the phone, or the reverse. That is a real architectural difference from a desktop-only tool: the stages are addressable separately, so you can put each one where it is cheapest or most accurate. The cost is configuration. You are assembling a pipeline, not installing a finished one.

Maintenance, licence and the cost of upgrading

The repository is not archived, and the last push was on 2026-08-25. The releases listed are v0.4.5 on 2026-08-23, v0.4.4 on 2026-08-12 and v0.4.3 on 2026-07-31, which is a cadence of roughly one release every two to three weeks across that window. Version numbers in the 0.4.x range indicate the project still considers itself pre-1.0, so expect settings and preset behaviour to move between releases.

Upgrade cost is low in one respect and non-trivial in another. Settings, custom presets, terminology and font files can be exported and imported, so a device migration or a fresh install does not mean rebuilding your configuration by hand. Credentials are deliberately excluded from that export, which means every new device needs the API keys and tokens re-entered. Model files are downloaded separately and, according to the README, downloads support cancellation, retry after failure and resumption, so a large model download does not have to restart from zero.

The licence is Apache-2.0, stated in the README badge and present as a LICENSE file at the top level, with a NOTICE file alongside it. Apache-2.0 permits commercial and private use and modification, and it includes an explicit patent grant. It also requires that you preserve copyright and licence notices and state significant changes when you redistribute. If you fork this and ship it, read the NOTICE file as well as the LICENSE. None of this is legal advice; check with your own counsel before redistributing.

One thing the README does not document is a rollback path for a bad upgrade. There is no mention of downgrade instructions or data migration guarantees between versions, so keeping the APK of the version you are currently running is a reasonable precaution that the documentation itself does not suggest.

Editorial conclusion

Adopt Screen Translator if you read untranslated games, visual novels or manga on an Android 8.0 (API 26) or newer device and want to choose your own OCR, translation and TTS providers, including fully offline combinations. Skip it if you need Windows, iOS or a desktop overlay: the repository is an Android app and the README documents no other platform. Before committing to a preset, verify three things on your own hardware: that the OCR engine you pick recognises your source language, that the model files your preset needs are downloaded, and that your phone's battery manager does not kill the capture service in the background. The bundled 'offline Japanese manga OCR to Simplified Chinese' preset is the fastest way to test all three at once.

Frequently asked questions

Is there a translation overlay app for Android?

Yes. Screen Translator is an open-source Android overlay translator that captures the screen through MediaProjection or Shizuku, recognises the text with on-device or cloud OCR, translates it, and draws the translation over the original text. It requires no root and runs on Android 8.0 (API 26) or newer.

Can I automatically translate my screen with Screen Translator?

The app supports a cycle mode that repeatedly captures and translates, either at a fixed interval or after the caption text stabilises, and it skips identical frames and identical translations. It can also prioritise the lower half of the screen where dialogue boxes usually appear.

How do I translate directly on my screen with Screen Translator?

Enable the screen capture service from the home screen, then tap the floating ball once to translate the whole screen, or switch to selection mode and drag a box around a word or phrase. Holding volume up and volume down together for 0.3 seconds also triggers a translation once the accessibility service is enabled.

Official sources

  1. ciddwd/overlay-translator on GitHub
  2. Issues
  3. License: Apache-2.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ciddwd-overlay-translator.svg)](https://hysenlabs.com/projects/ciddwd-overlay-translator)