Browser Extension · OCR · Translation

PanelPal

Read comics, manga, and webtoons in any language. Panel Pal crops a panel in your browser, runs OCR and translation, and overlays the result right where the original text was.

In DevelopmentSolo Developer2026
POST /translate-image
なるほど、そういうことか…
region detectedbbox 45,120 · 200×80
I see... so that's how it is.
manga_ocr+google_vision · 640ms98% conf
Project Details

Reading untranslated comics, manga, or webtoons usually means constantly alt-tabbing to a translator and losing the flow of the panel. Panel Pal removes that friction: crop a speech bubble in the browser extension, and a FastAPI backend runs OCR and translation, returning overlay-ready text positioned exactly where the original was.

OCR
Google Cloud Vision OCR, with an optional manga-ocr transformer for stylized or hand-lettered Japanese text
MT
DeepL translation across JA, KO, ZH, ES, FR, DE, and more, with auto source-language detection
EXT
Browser extension (WXT + TypeScript) that overlays translated text directly on the page
PRIV
Privacy-first: cropped panels are processed in memory and never written to disk
1
User crops a panel region in the extension
2
Region is base64-encoded and POSTed to /translate-image
3
Google Cloud Vision (or manga-ocr for Japanese) extracts text and bounding boxes
4
DeepL translates each detected region
5
Backend returns overlay-ready JSON with translated text and positions
6
Extension renders the translation directly over the original panel
FastAPI + Uvicorn: an async-first framework fits an I/O-bound workload like chained OCR and translation calls, without blocking on either external API.
manga-ocr as an optional add-on: the transformer model downloads ~400MB of weights, so it's opt-in via a startup flag rather than bundled by default, keeping the base deploy lean for languages that don't need it.
Images never touch disk: everything is processed in memory, both for latency and for privacy, no cropped panel content is ever persisted server-side.
Per-IP rate limiting and locked CORS: the API is meant to be called from one specific extension, not the open web, so production access is restricted accordingly.

General-purpose OCR struggles with manga-style typography: stylized fonts, hand lettering, and text bent around speech bubbles. That's what motivated the optional manga-ocr path, a transformer trained specifically on manga speech bubbles, as an upgrade over Google Vision for Japanese text.

The harder part was threading OCR and translation together so the response still carries precise bounding boxes, not just a flat translated string, so the extension can overlay each translation exactly where the original text was.

  • Publish the extension to the Chrome and Firefox web stores
  • Expand language coverage and test OCR accuracy across more scripts
  • Add response caching to avoid re-translating repeated panels