Japanese OCR dictionary overlay for Android. Capture any screen, recognize Japanese text, and look up words with Yomitan-style deinflection.
Heads up! this is mostly a personal-use app. It's mostly vibecoded, optimized for what I happen to need, and lived-in daily on an AYN Thor for playing retro Japanese games. If it works for you too, great! If it doesn't, that's probably expected. Issues and PRs are welcome but not promised, I've got a full time job :)
- Floating overlay button works over any app
- Japanese OCR via ML Kit or manga-ocr
- AnkiDroid export for flashcard creation
- Longest-match lookup with full deinflection support
- Yomitan dictionary compatible. Bring your own!
- Dictionary popup with readings, definitions, frequency ranking
- Lookup history with screenshots
The app organizes around six tabs in the bottom nav:
- Now — the current scan workspace. Three sub-tabs over a shared editable sentence:
- Lookup (decoupled mode only) — dictionary entries from your last tap, mirrored from the overlay.
- Parse — Kuromoji morphology, bunsetsu chips, DOJG grammar matches with one-line English headlines, source tags, and link-outs to GameGengo, Tae Kim, Imabi, HJG, and the Japanese Expression Pattern Dictionary.
- Translate — Natural / Literal / Leipzig gloss, powered by Gemini Flash with on-device Kuromoji as the offline fallback.
- Search — universal search. Type Japanese, romaji, an English meaning, or a single kanji ("rashii", "らしい", or "seems like" all surface the same entry; "water" surfaces 水 and friends). Filter to Words, Kanji, or Grammar.
- Library — browse ~2,800 grammar patterns aggregated from DOJG, HJG, Tae Kim, Imabi, the Japanese Expression Pattern Dictionary (文型辞典), and GameGengo. Filter chips per source, with short English headlines on every card.
- Kanji — browse all 13,108 kanji in a tappable grid. Filter by JLPT N5–N1, Jōyō, Jinmeiyō, or school grade. Tap a kanji for readings (with TTS), meanings, stroke count, Heisig keyword, Mainichi frequency, and example words pulled from your installed dictionary. Every kanji rendered in a lookup (overlay popup, history detail, in-app lookup) is individually tappable — tap any kanji in a word and you jump straight to its detail page.
- History — every word lookup with screenshot, source app, time filters, Anki export per row.
- Settings — permissions, modes, recognition, translation backend, Anki export, colors, hardware controls.
Two operating modes, toggled from Settings or from a Quick Settings tile:
- Coupled (default) — dictionary entries appear in the overlay popup right where you tapped.
- Decoupled — overlay popup is suppressed and lookups appear in-app. This is meant for dual screen devices playing single screen games (eg. PSP VN on top screen, dictionary on bottom)
Two Quick Settings tiles ship with the app: Yomidroid (toggle the floating button) and Decoupled (toggle decoupled mode). Drag down twice from the top of the screen and add them to your QS panel.
- Go to the latest release and download the
yomidroid-*.apkattached to it. - Install it on your device:
- Via adb:
adb install -r yomidroid-*.apk - On-device: transfer the APK to your phone, tap it in your file manager, and accept the "Install unknown apps" prompt for that app.
- Via adb:
Releases are debug-signed and sideload-only — they can't upgrade a Play Store install.
- Grant overlay permission when prompted (Display over other apps).
- Enable the accessibility service at Settings → Accessibility → Yomidroid. The floating button appears once this is on.
- Import dictionaries. The app ships without any built-in dictionary. Open Settings → Dictionaries and either:
- Tap Import Yomitan Dictionaries to pick Yomitan-format
.zipfiles you already have, or - Choose from the Recommended list to download common dictionaries directly — Jitendex (general), JMnedict (names/places), KANJIDIC, pitch accents, and frequency data.
- Tap Import Yomitan Dictionaries to pick Yomitan-format
- (Optional) Configure translation. Open Settings → Translation Backend to set up Gemini Flash (paste an API key) or an on-device LLM. The Translate sub-tab still works without a backend: it'll show a Kuromoji-only morpheme breakdown.
Once at least one dictionary is loaded, lookups work end-to-end.
- Android Studio Hedgehog (2023.1.1) or newer
- JDK 17
- Android SDK 34
# Build debug APK
./gradlew assembleDebug
# Install on connected device
adb install -r app/build/outputs/apk/debug/app-debug.apkOr open in Android Studio and click Run.
- Open the app you want to read (game, visual novel, manga reader, etc.).
- Tap the floating button to capture and scan.
- Tap highlighted text to look up words.
- Tap outside the popup to dismiss the overlay.
To translate or parse the sentence you just tapped, open the app and head to Now. The sentence is already loaded, and you can edit it, tap Translate or Analyze, and you're done.
To look up something you remember from earlier without re-OCRing (or perhaps the OCR didn't scan correctly), use the Search tab. It queries the dictionary and the grammar library at the same time.
The app ships without bundled dictionaries. The in-app Recommended importer pulls from:
- Jitendex - General-purpose Japanese-English dictionary
- JMnedict - Names and places (CC BY-SA)
- Innocent Corpus - Frequency rankings from 5000+ visual novels
- KANJIDIC and pitch-accent data from the standard Yomitan ecosystem
Any Yomitan-format .zip works via the manual import flow.
The Kanji tab and per-kanji detail pages are powered by kanjiapi.dev (source: onlyskin/kanjiapi.dev, MIT). ~13k kanji with readings, meanings, JLPT level, school grade, stroke count, Heisig keyword, and Mainichi frequency rank.
tools/prepare_kanji_data.py reads a local kanjiapi_full.json (the full upstream rollup, schema {kanjis, readings, words}; ~98 MB, gitignored) and emits the slim app/src/main/assets/kanji_data.json (~1.3 MB) that ships in the APK. To regenerate from scratch, build the rollup with kanjiapi.dev's own make pipeline (see that repo's makefile) or by iterating over /v1/kanji/{char} for every character in /v1/kanji/all, then run:
python3 tools/prepare_kanji_data.pyExample words on the kanji detail screen come from whichever term dictionary you've imported — they're not bundled.
The grammar library is a unified index of ~2,800 patterns linking out to existing references. No copyrighted content is bundled — entries carry a Japanese pattern, a short English headline (where one can be extracted from the source page), and a link button per source.
- GameGengo — JLPT grammar video timestamps
- kenrick95/itazuraneko — local mirror of the master cross-reference (DOJG, Tae Kim, Imabi, the Pattern Dictionary 文型辞典) is the primary source of headlines and link targets
- Handbook of Japanese Grammar Patterns (HJG) — original site is offline; HJG link-outs are rewritten to Internet Archive Wayback snapshots
- Hoshidicts - Dictionary backend: Yomitan-zip import, lookup, and deconjugation (MIT,
main-mitbranch). Vendors glaze, zstd, libdeflate, xxHash, unordered_dense, and utfcpp. - Yomitan - Dictionary
.zipformat - Kuromoji - Japanese morphological analysis
- llama.cpp - On-device LLM inference (MIT)
- Google ML Kit - OCR and translation
- RapidOCR/PaddleOCR - Alternative OCR (Apache 2.0)
- OpenCV - Image processing (Apache 2.0)
- ONNX Runtime - ML model inference (MIT)
- AnkiDroid API - Flashcard export
MIT License (app code) GPL-3.0 (deinflection rules ported from Yomitan)
See LICENSE for details.