Purpose and verification scope
FluentRead is an open-source browser extension that displays translations beneath the original text and provides selection translation, AI reading cards, learning records, document reading and bilingual captions on supported platforms. Its inputs are webpage text, selected sentences, documents or readable captions. Available output and controls depend on the installed build, browser and selected translation service.
Basic webpage translation can use free services without an API key. AI explanations need an available AI service and model. A local model changes the processing path for its assigned feature; it does not establish that every tool runs offline.
Installation and first translation
The official README supplies the installation links below. After installing for the relevant browser, refresh pages that were already open and pin the FluentRead toolbar icon.
| Environment | Installation | Limits to check |
|---|---|---|
| Chrome | Chrome Web Store | The store version can differ from the source checkout |
| Edge | Edge Add-ons | Mobile installation availability depends on browser version and management policy |
| Firefox | Mozilla Add-ons | Use the compatible installation method offered on the device |
| Userscript | Greasy Fork | Requires an enabled compatible script manager and has fewer features |
| Safari | Userscripts or the native developer preview | No ready Safari store package; a desktop extension ZIP cannot be installed directly on an iPhone |
In Chrome, find FluentRead in the extensions menu beside the address bar and select its pin icon. Other browsers may place this control elsewhere; first confirm that the FluentRead menu opens.
- Not completed:
Test on an ordinary HTTP(S) article, avoiding protected pages such as browser settings and extension stores.
- Not completed:
On first opening, choose and confirm the interface language; this controls buttons and settings only.
- Not completed:
Set the target language separately and leave source-language detection automatic initially.
- Not completed:
Start with
Free translation servicesand confirm that an available service supports the target language. - Not completed:
Select
Translate, then useRestoreafter reading.
Features and their entry points
Webpage reading
Translate / Restore
Compare languages and restore the original
Read source text and translations together, with content processed near the reading position by default. Restore the page before starting again after changing language or service.
Word and sentence lookup
Selection translation
Look up the current selection
Enable it, select text and choose the nearby FluentRead icon to use the available translation, dictionary and read-aloud tools.
Closer reading
AI explanations / Structure
Use an available AI model for meaning and sentence structure
Configure an AI service and model, then request an explanation or structure analysis. Check the result against the original; unaligned output may fall back to a text explanation.
Continued study
Learning Center
Keep expressions with their source context
Save words, phrases and sentences for later reading and review. Learning data and configuration backups cover different things.
Document reading
Document translation
Import, translate, proofread and download documents
Open files within format and size limits, switch between original, bilingual and translated views, and download the translations and edits currently retained.
Video reading
Video subtitle translation
Compare captions in supported players
Most platforms must supply readable captions. Some desktop extension builds can use local recognition on X; userscripts do not provide subtitles.
Opening a selection card does not automatically call AI. A deliberate learning action sends the selection and permitted context to the configured service.
Translation services and AI setup
Choose a service under Settings → Translation services and enter its URL, key and required provider fields; an AI service also needs a model available to the account. Check connection sends a short request and may use allowance. Success describes that check only.
Confirm language support, API allowance, region and model access with the provider.
Configure and check the connection, then choose
Set as default translation service.Test a short ordinary passage before translating a full article.
Documents, subtitles and reading cards can use separate services, so check each active selection.
| Route | Required information | Cost and processing boundary |
|---|---|---|
| Free translation | Available candidates and language settings | No API key, but public endpoints can throttle, change or stop working |
| Existing machine-translation account | Matching key, region or account fields | Charges follow the provider's API plan and allowance |
| AI service | Correct endpoint, key and available model | A chat-product subscription may not include API allowance |
| Custom compatible endpoint | Matching protocol, model ID and complete route | The compatible endpoint uses OpenAI Chat Completions; other protocols cannot be treated as the same entry point |
Automatic balancing or fallback in the free service may send the same passage to another provider. To restrict text to a single provider, disable other candidates or select that provider's standalone service.
Extra AI context and AI multi-paragraph translation are off by default. Context submits more webpage text and may increase allowance use and waiting time. Its range is limited, so verify terminology and important information.
Browser-local models and Ollama
| Route | Setup | Limits |
|---|---|---|
Local model translation | Select a model in service settings, download and verify it, then choose it for translation | No separate server; requires the browser extension and is unavailable in the userscript |
Ollama (local) | Install Ollama, start its server, download a model and enter the installed model's name | Allow the extension's origin to connect; manage the server and model separately |
Ollama's default address is http://127.0.0.1:11434 without an API key. Other devices or ports need a complete /v1/chat/completions URL as documented. On slower computers, set concurrency to 1 under Request limits → Entire service → Custom, then observe response times and resource use.
The first local-model download still needs a connection, and download size is not runtime memory use. Model files remain in the current browser and are excluded from configuration backups. Ollama manages its own model residency.
Document and subtitle availability
Document import and download
Open Document translation and import a file or provide a direct online PDF link. If a login prevents the link from opening, download the file and import it locally.
| Item | Confirmed scope |
|---|---|
| Document formats | PDF, ePub, DOCX, HTML, TXT, Markdown, JSON |
| Subtitle file formats | SRT, VTT, ASS, SSA, LRC |
| Size limits | 50 MB for PDFs; 10 MB for other formats |
| Older Word files | Convert .doc to .docx first |
| Scanned PDF | Recognize text before translation; recognition-language data may need downloading |
| Downloaded output | Choose bilingual or translation-only output, including retained proofreading edits |
Documents can pause, continue and retry while retaining completed results and edits. After changing language or some settings, Retranslate replaces existing translations and manual edits. Download the current version first if it needs to be kept.
Untranslated passages keep their original text in partial downloads, so a download does not establish full translation. Check recognition, formulas and specialist terms against the source file. Clearing browser data can also remove local documents and edits.
Video and meeting captions
The official guide lists YouTube, X, Udemy, Disney+ and Google Meet, Teams and Zoom web meetings. Most routes need readable captions supplied by the platform. Account, region, player and meeting-host permissions can restrict availability.
Enable Video subtitle translation, then enable the player's native captions. For X videos without captions, supported desktop Chrome, Edge and Firefox extensions can use Whisper in the browser. Models download on first use, and the documented limit is 20 minutes per video.
Whisper recognition can run locally, but recognized text may still go to the selected translation service. FluentRead does not create captions for meetings that supply none and does not control desktop meeting applications.
Userscripts, phones and Safari
Userscripts require a compatible manager such as Tampermonkey, Violentmonkey, Via or Safari Userscripts. Keep a single FluentRead script enabled, check site access and the script switch, then reload an ordinary webpage.
| Build | Available route | Main limits |
|---|---|---|
| General userscript | Core webpage, selection and hover translation | No image OCR, area capture, video subtitles, writing assistance or some statistics |
| Android Via | Build and import the standalone script as documented | Greasy Fork and source builds update separately; check the file and manager versions |
| Safari Userscripts | Enable the manager and site access, then open settings from the floating button | No script menu commands; page and service-domain access follow separate rules |
| Native Safari | Developer preview for Safari/iOS 26+ | Requires a source build, Xcode and signing; no Safari store package yet |
The native Safari preview still lacks Chrome's built-in translation, image OCR, area capture and some platform features. iOS system video fullscreen does not display normal webpage overlays. The system-caption route described in the guide still needs physical-device verification.
Reading and configuration practices
Follow the reading position
The default mode translates passages near the current reading position first. Scroll down to check for more results; unseen passages are not automatically failures.
Restore before changing services
Restore webpage originals before translating again after changing language, service or some base styles. Documents have separate continuation and retranslation rules, so keep important edits first.
Translate a selected area
Use Section to choose an article or thread, then confirm translation after locking it. Selecting the area alone does not send a translation request.
Avoid overlapping translation tools
For duplicate text or broken layout, restore the page and disable browser translation and other translation extensions to isolate the conflict.
Sentence roles and parts of speech describe different things, and model formatting can cause analysis to fall back to text. Treat the result as a reading aid and compare it with the sentence and context. Use a glossary when important terms need consistent translation.
Reading an article from start to restore
Use an ordinary public article with Traditional Chinese as the target language. Start with free translation without an API key. AI explanations remain optional for users who already have an available service.
| Stage | Action | Observable result |
|---|---|---|
| Establish a baseline | Refresh the article, open FluentRead and check interface and target languages separately | Buttons use the chosen interface language, with the translation target shown separately |
| Read both languages | Choose Free translation services, select Translate and scroll | Originals remain while nearby passages gain translations |
| Look up a sentence | Enable Selection translation, select a sentence and open its card | The card shows the current selection and available lookup tools |
| Request an explanation | With an available AI service, configure AI explanations and select Structure deliberately | Structure or text explanation appears; ordinary translation remains available without AI setup |
| Compare and restore | Check terms against the original, then select Restore | Original text returns and pending webpage translation stops |
This procedure follows the official interface documentation; this research did not run the extension. When testing it, record the browser, installed version, service, language and article URL, with private content removed from screenshots.
Privacy, keys and backups
Settings and learning records stay local by default. Cloud translation sends relevant text to the chosen provider, and fallback may send it to another provider. Extra AI context, documents and subtitles have separate processing paths, so check the feature and service before using sensitive material.
API keys persist in local settings instead of disappearing when the browser closes. Configuration storage uses public application material for encryption, so it does not provide secrecy under a user-owned password. People with access to the browser profile or backups may still read credentials.
| Backup type | Contents | Limits to check |
|---|---|---|
| Local full backup | Settings, wordbooks and model usage, potentially including API keys, service credentials and source text | Unencrypted JSON; not an image of every local database |
| Basic cloud settings | General settings such as language, appearance, shortcuts and website rules | Excludes connections, keys, model selections, URLs and private prompts by default |
| Sensitive cloud settings | Adds service connections, credentials and private prompts from settings after explicit selection | Still excludes wordbooks, conversations, usage statistics and recent documents |
Google Drive and WebDAV configuration backups are manual; changing settings does not upload them automatically. Consent for sensitive settings stays in the current browser until that option is disabled. Cancellation, failure or changing accounts does not clear the choice automatically.
The official backup guide and privacy guide explain that disabling sensitive settings, revoking access or uninstalling does not delete old cloud files. To remove existing secrets, confirm a basic-settings save or merge and manage cloud version history and other copies separately.
Troubleshooting and known limits
| Symptom | First check | Next action |
|---|---|---|
| Webpage does not change | Extension switch, page access and protected-page restrictions | Refresh an ordinary article and retry a single passage |
| Only nearby passages are translated | Default reading-position behavior | Scroll down, then check service and article-recognition scope |
| Interface is Chinese but translations are not | Interface and target languages are separate | Correct the target, restore and translate again |
| Selection translates but AI analysis is missing | AI service, model and deliberate learning action | Configure an available service and request explanation or structure |
| Connection check fails | URL, key, model, region and allowance | Follow the provider's error code without sharing complete requests |
| HTTP 404 returns a webpage | Endpoint path or protocol mismatch | Check the complete route; this alone does not prove an invalid key |
| Rate limits or full-article failure | Concurrency, request count and provider allowance | Reduce concurrency or scope, retry later or change services |
| Document cannot be imported | Format, size, login and recognition requirements | Download an accessible file and check its limits before retrying |
| Video lacks bilingual captions | Build type, caption switch and native captions | Enable platform captions first; on X, check supported local recognition |
| Duplicate translations or broken layout | Other translation tools act on the same page | Restore, then disable conflicting tools individually |
Free endpoints, models and browser restrictions can change, and a documented feature may not have reached the installed store build. Report the installed version and publicly reproducible steps. Verify important recognition, translation and AI-explanation output manually.
Source builds and contributions
Readers can use a store build. To investigate or change the code, use the checked commit, Node.js 22.23.4 from .nvmrc and the package's pnpm 12.18.0 through Corepack.
git clone https://github.com/FluentRead/FluentRead.git
cd FluentRead
git checkout 2f0fb198db20addfbfda06b84185a7638a6dfc52
nvm install
corepack pnpm install --frozen-lockfile
corepack pnpm devcorepack pnpm dev starts local development, and corepack pnpm zip packages Chrome. These are upstream project commands. This research did not install dependencies, build the extension or load it in a browser.
The maintainer release guide covers Edge, Firefox, Userscript and Safari builds separately. Producing a ZIP does not complete store review or signing. Platforms such as Firefox and Safari have their own distribution requirements.
Further reading and reporting problems
Complete basic translation and restore before configuring AI, document or subtitle services. To reduce external text transfer, consider a local translation route and check the network behavior of other tools separately.
Official user guide: check current controls and support.
Repository Issues: report versions, a public URL, reproduction steps and redacted screenshots.
GPL-3.0 license: read it with third-party notices before distributing or modifying the program.
The official README welcomes code, documentation, interface translations and website-adaptation contributions. Describe a single reproducible problem with expected and actual results before proposing a matching change.
References
- FluentRead LICENSE
- FluentRead README.md
- FluentRead package.json
- FluentRead .nvmrc
- FluentRead docs/en/guide/getting-started.md
- FluentRead docs/en/guide/features.md
- FluentRead docs/en/config/translation-engines.md
- FluentRead docs/en/guide/webpage-translation.md
- FluentRead docs/en/guide/sentence-analysis.md
- FluentRead docs/en/guide/document-translation.md
- FluentRead docs/en/guide/video-subtitles.md
- FluentRead docs/en/guide/faq.md
- FluentRead docs/en/guide/mobile-safari.md
- FluentRead docs/en/guide/userscript.md
- FluentRead docs/maintainers/releases.md
- FluentRead docs/en/guide/privacy.md
- FluentRead docs/en/config/backup-sync.md
- FluentRead src/platform/storage/configEncryption.ts
- FluentRead src/platform/google-drive/encryption.ts