Browser extension that uses local OCR to extract text from images, comics, scans, or any selected area of a web page, then displays the translation in an overlay or in a panel. It uses Google Translate by default, or you can connect it to your own LLM endpoint.
- Select any area of a web page and translate it in place.
- Translate images directly from the context menu.
- Run OCR locally in your browser using bundled PaddleOCR models.
- Recognize multilingual text with automatic script detection. See supported languages.
- Group text lines using speech-bubble and free-text regions detected by a local layout model.
- Translate recognized text with Google Translate (no API key required) or an OpenAI-compatible LLM endpoint (local or remote).
- Copy or listen to the original and translated text, or view them side by side.
Activate the extension from the browser toolbar or context menu, or press Ctrl+Shift+F. Select an area of the page and click "Recognize text".
To translate an image directly, right-click it and select "Translate this image".
By default, translations appear over the original text. You can switch to showing a panel from the toolbar's context menu.
The default shortcut is Ctrl+Shift+F. To change it in Firefox, open about:addons, click the gear button, and select Manage Extension Shortcuts. In Chrome, open chrome://extensions/shortcuts.
Note
To use the extension on local image files, you need to grant access to local files.
- Firefox: open the add-on's Permissions and data settings and enable Access local files on your computer.
- Chrome: open the extension details and enable Allow access to file URLs.
After granting the permission, reload the image and try again.
The extension bundles several recognizer models. The general recognizer is PP-OCRv6. It's a multilingual model that supports 50 languages and provides the best accuracy. Other scripts use separate PP-OCRv5 recognizers.
| Model | Recognized languages |
|---|---|
| PP-OCRv6 (multilingual) | Afrikaans, Albanian, Azerbaijani, Basque, Bosnian, Catalan, Chinese (Simplified & Traditional), Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Hungarian, Icelandic, Indonesian, Irish, Italian, Japanese, Latvian, Lithuanian, Malay, Norwegian, Polish, Portuguese, Romanian, Serbian (Latin), Slovak, Slovenian, Spanish, Swahili, Swedish, Tagalog, Turkish, Uzbek, Vietnamese, Welsh |
| Cyrillic-PP-OCRv5 | Belarusian, Bulgarian, Kazakh, Macedonian, Mongolian, Russian, Serbian (Cyrillic), Ukrainian |
| Korean-PP-OCRv5 | Korean |
| Arabic-PP-OCRv5 | Arabic, Pashto, Persian, Urdu |
| Devanagari-PP-OCRv5 | Hindi, Marathi, Nepali |
When the source language is set to Auto, a local classifier detects the script and selects the matching recognizer.
Recognized text can be translated into any language supported by Google Translate, or any language supported by your configured LLM endpoint.
If Ollama returns HTTP 403, enable Remove Origin header in the LLM endpoint settings.
Recognized text lines are grouped into regions using a bundled RT-DETR model. It may still miss or incorrectly group very small text, tables, or dense multi-column layouts. Selecting a smaller area can improve results.
Warning
GPU acceleration is experimental. Depending on your browser, OS and hardware, it may make text recognition faster or slower. You can enable it in settings.
On Linux, WebGPU is generally disabled by default. Follow the steps below to enable it.
- Open
about:config. - Set
dom.webgpu.enabledtotrue. - Restart the browser.
See the Firefox guide on enableGPU.com for a walkthrough.
- Open
chrome://flags. - Enable both of these flags:
- Unsafe WebGPU Support (
chrome://flags/#enable-unsafe-webgpu) - Vulkan (
chrome://flags/#enable-vulkan)
- Unsafe WebGPU Support (
- Restart the browser.
- Captured images are processed locally.
- Recognized text is sent to the selected translation provider for translation.
- Settings and API keys are stored locally. An API key is sent only to the endpoint configured by the user.
See the Privacy Policy for details.
Built with WXT and TypeScript.
npm ci
npm run dev # Firefox
npm run dev:chrome # ChromeDev mode launches the browser with the extension installed and reloads it on changes.
To test a production build, run:
npm run build # Firefox
npm run build:chrome # ChromeThe builds generate unpacked extensions in .output/firefox-mv3 and .output/chrome-mv3.
- Firefox: load the directory as a temporary add-on. See Temporary installation in Firefox.
- Chrome: load the directory via Load unpacked on
chrome://extensionswith Developer mode on.
Run the test suite and type checks with:
npm test
npm run typecheckScreen OCR Translator is licensed under the Mozilla Public License 2.0. Bundled libraries, runtime files, and OCR models retain their original licenses. See THIRD_PARTY_NOTICES.md.