LMT Logo LIBRE MANGA TRANSLATOR FAQ DOCUMENTS
Back to Main
GENERAL DOCS // FREQUENTLY ASKED QUESTIONS

EVERY QUESTION.
UNCOMPROMISING ANSWERS.

Architectural specifications, local LLM integration instructions, script gate mechanics, and troubleshooting details for our in-browser manga translation app.

[DOC #01 // QUICK SETUP] LLM Backends

Q: What is the quickest way to set up LMT?

Pick the pipeline that matches your priority — all three translate the same detected bubbles:

  • Easiest to run — Local pipeline. Install the extension, let the models download once, translate offline. No keys, no server, no account.
  • Best quality, least friction — Gemini mode. Paste a free AI Studio key and the cloud pipeline handles OCR plus translation in one pass. Hard to beat on accuracy — the trade-off is your annotated pages go to Google.
  • Full control — API Mode. Point LMT at a local server (llama.cpp, Ollama, LM Studio, Jan, KoboldCpp) and you unlock the whole GGUF ecosystem. The trade-off is yours to manage: finding the best model and fine-tuning your own server configuration.
[DOC #02 // ACCOUNT & DATA] Privacy & Security

Q: Do I need an account to use LMT?

No — no account, no registration, no sign-in. "You decide where your data goes" is literal: we collect nothing, there is no telemetry, and no LMT-operated server or proxy exists. Every request — Gemini or your own server — goes directly from your device to that endpoint.

Debug logs exist only to help you trace errors: the last 50 attempts stay on your device and we have no access to them. They may contain sensitive page text (source and translated strings), so share them only if you choose to — paste them into a Gitlab issue when reporting a bug.

[DOC #03 // PRIVACY GUARANTEE] Privacy & Security

Q: Does Libre Manga Translator upload my manga images or reading activity?

In Local Mode and API Mode: ABSOLUTELY NOT. All image decoding, RT-DETR bubble detection, PaddleOCR text extraction, and canvas inpainting run 100% locally on your machine in an isolated browser offscreen document.

In API Mode, only extracted text strings (no pixel data) are transmitted to your configured endpoint (such as your local Ollama or LM Studio instance). In Gemini Mode, the annotated manga page is sent directly from your browser to Google AI Studio using your personal API key — with zero proxy server or middleman in between.

[DOC #04 // TELEMETRY & METRICS] Privacy & Security

Q: Does LMT collect improvement data or telemetry?

No — there is no telemetry at all. The old opt-in bbox-correction upload was permanently removed in v1.0.0 Stable: no toggle exists, no endpoint exists, and Local mode transmits zero bytes anywhere.

Outbound requests happen only when you explicitly enable Gemini Mode (annotated image to Google with your key) or API Mode (extracted text to your server). See privacy.md in the repo.

[DOC #05 // OFFLINE RUNTIME] Privacy & Security

Q: Can LMT run completely offline without an active internet connection?

Yes. Once you select Local Mode and allow the initial model download (Llama-3.2-1B / Qwen3.5-0.8B / Qwen3.5-2B / Qwen3.5-4B, RT-DETR bubble detector ONNX weights, and PaddleOCR language packs) to complete, all weights are cached permanently in browser Cache Storage and IndexedDB. Model downloads are completely opt-in with pause and resume support across the setup wizard, sidebar, and popup.

You can disconnect your network, enable airplane mode, and translate chapters offline without contacting any server.

API Mode works offline too when you point it at an OpenAI-compatible / LM Studio server on the same machine (e.g. Ollama at http://127.0.0.1:11434/v1 or LM Studio at http://127.0.0.1:1234/api/v1) — localhost traffic never needs the internet after setup. Remote LAN / VPS / cloud hosts still need connectivity.

[DOC #06 // LOCAL MODE SPECIFICATIONS] LLM Backends

Q: What are the hardware and browser requirements for Local Mode?

Local mode requires a Chromium browser (Chrome 113+, Edge 113+, Brave). On Firefox, local in-browser translation runs on wllama (llama.cpp compiled to WASM) instead of WebLLM — see DOC #19. Gemini Mode and API Mode work identically on both browsers.

  • Llama-3.2-1B-Instruct-q4f16_1-MLC (Compact, ~880 MB): Requires ~0.8 GB available VRAM / unified memory. Replaced Gemma3-1B to avoid sliding-window configuration crashes. Fastest, low footprint for dialogue.
  • Qwen3.5-0.8B-q4f16_1-MLC (Ultra-compact, ~1.6 GB): Very low resource requirement, ideal for systems with minimal memory.
  • Qwen3.5-2B-q4f16_1-MLC (Balanced, ~2.3 GB): Recommended balance of speed and translation quality for modern laptops and GPUs.
  • Qwen3.5-4B-q4f16_1-MLC (Good, ~3.9 GB): High translation reasoning for complex dialogue and idioms.

If your machine lacks a dedicated GPU or has insufficient VRAM, Local mode will notify you and recommend switching to API Mode or Gemini Mode.

[DOC #07 // OLLAMA INTEGRATION] LLM Backends

Q: How do I connect LMT to a local Ollama server?

Ollama provides an OpenAI-compatible endpoint at port 11434. Follow these steps:

# 1. Pull the recommended translation model
ollama pull qwen3.5:4b

# 2. Start the Ollama server
ollama serve

Then open LMT Settings › Backend and set:

  • Backend Kind: API Mode
  • Host URL: http://127.0.0.1:11434/v1
  • Schema: OpenAI
  • Model Name: qwen3.5:4b

Click Test Connection to verify communication.

[DOC #08 // LM STUDIO INTEGRATION] LLM Backends

Q: How do I configure LM Studio with the Experimental Schema?

In LM Studio, navigate to the Developer / Local Server tab, select your preferred model (e.g. tiny-aya-global), and click Start Server on port 1234.

In LMT Settings › Backend:

  • Host URL: http://127.0.0.1:1234/api/v1
  • Schema: LM Studio (Experimental)
  • Model Name: Match the exact model identifier loaded in LM Studio

The experimental schema uses native prompt arrays (input + system_prompt) and parses JSON responses directly without forcing OpenAI-style wrapper envelopes.

[DOC #09 // RECOMMENDED LOCAL MODELS] LLM Backends

Q: What local model is good for translation via API Mode (Ollama / LM Studio)?

For API Mode we recommend a model that was built for translation rather than general chat: Tiny Aya Global for general multilingual translation, or Tiny Aya Fire when your reading is CJK-focused (Chinese / Japanese / Korean). Because they are purpose-trained for translation, they tend to produce cleaner, more consistent manga dialogue than a general-purpose model of the same size. Both are distributed as GGUF, so you can load either one in Ollama, LM Studio or llama.cpp and point LMT at your local host URL as usual.

[DOC #10 // GEMINI CLOUD SETUP] LLM Backends

Q: Where do I get a Gemini API key and does it cost money?

Google provides free tier API keys through Google AI Studio.

1. Sign in with your Google account at aistudio.google.com.
2. Click Get API key and copy your key.
3. In LMT, open Settings › Backend, select Gemini Mode, and paste the key.

Gemini 3.8 Flash, 3.7 Flash, 3.6 Flash and 3.5 Flash handle both OCR and translation in a single pass with high speed. Your key is stored in browser local storage and never leaves your device except to authenticate directly with Google's API endpoints.

[DOC #11 // LANGUAGE SCRIPT GATE] Detection & OCR

Q: Why do some bubbles have a dashed outline and a "Translate anyway" button?

This is LMT's Language Script Gate in action. Before translation, a 3.7 MB on-device script-identification model (OSD LSTM) inspects the cropped text lines.

If a region contains sound effects (SFX), stylized artwork lettering, or English typesetting on a raw Japanese page, the gate holds it back to prevent the LLM from hallucinating nonsensical translations over artistic illustrations.

Held-back regions are left untouched with their original artwork intact — but keep their recognized text so you can still view and edit them. If the gate made a false negative call, click Translate anyway on that bubble card to override the filter with one click. Strict with an explicit CJK source language, page-majority voting under Auto-Detect. Gemini mode skips the gate (VLM path).

[DOC #12 // VERTICAL TEXT HANDLING] Detection & OCR

Q: How do I fix vertical Japanese text that PaddleOCR misses?

PaddleOCR was predominantly trained on horizontal line runs. For dense vertical Japanese manga, pick Manga-OCR in Vision › OCR — the Japanese manga specialist (~460 MB, ViT + BERT) handles vertical text and stylized lettering that PaddleOCR drops or misreads.

LMT still mitigates PaddleOCR misses with an automatic retry pass: empty regions are re-sliced with contrast boosting (boostContrast) and padding (padImageForOCR), with OCR Min Confidence at 0.7 (retry at 0.7×).

Japanese and vertical text are considered fixed via Manga-OCR. For Korean manhwa / webtoon pick Pororo OCR (~74 MB, TPS-VGG-BiLSTM, 2,589 Hangul classes) in Vision › OCR — it still trails the Python engine on hard cases, which is the active OCR target along with Chinese manhua.

[DOC #13 // BUBBLE SEQUENCING] Detection & OCR

Q: How does LMT determine the reading order of dialogue bubbles?

Manga is traditionally read from right to left, top to bottom. LMT builds deterministic regions (refineDetections: centre-in-box merge, speckle drop, overlap merge) then applies agglomerative horizontal band clustering (applyBboxesSort):

  1. Calculates vertical centers for all bounding boxes and sorts strictly top-to-bottom.
  2. Groups dialogue into horizontal panel bands using a gutter threshold (80% of average bubble height).
  3. Sorts bubbles within each panel band using Japanese manga diagonal flow (Right-to-Left).

In the bubble editor overlay, you can manually reorder or refine any box before translation.

[DOC #14 // IN-PLACE EDITING] Detection & OCR

Q: Can I edit OCR text or fix translation typos without re-running inpainting?

Yes. On the results view, click the Edit button in the toolbar. This opens Typeset Mode displaying the raw OCR source text alongside the translated output for each numbered bubble.

When you tweak the wording, style, color and click Apply, LMT repaints the typography directly on top of the cached inpainted canvas. Inpainting is skipped entirely, delivering an instantaneous re-render.

[DOC #15 // INPAINTING LADDER] Inpainting & Fonts

Q: What is the Fast / Quality Inpainting Engine Ladder?

Traditional extensions run heavy blur or Fast Marching across the entire bounding box, leaving ugly rectangular gray patches and halo artifacts over screentones.

LMT solves this with a multi-stage engine ladder using text-shaped contour masks:

  • Rung 0 (Planar Fill): For flat white or uniform speech bubbles, samples the paper border and executes a smooth gradient fill. Zero noise.
  • Rung 1 (Bilateral Denoise): For grainy or JPEG-compressed scans, applies edge-preserving bilateral filtering to prevent ringing.
  • Rung 2 (Pure-JS Telea Fast-Marching): Real rebuilds where fill/denoise fail. MV3-safe, no unsafe-eval.

LaMa Redraw (Quality mode): For complex screentone, halftone and art behind text. One-time ~207 MB download, ~500 MB RAM/VRAM, ~7–20s per complex region on GPU (512² tiles, 128px overlap).

Every stage is evaluated against an image quality metric; if a rung degrades the page, it escalates to the next engine. Pick Fast (model-free ladder, default) or Quality (LaMa-first pass, strict superset of Fast) under Render › Inpainting. In v1.0.2, if Quality is selected without downloaded weights, translation skips the neural pass and automatically flips back to Fast without throwing errors or initiating unexpected downloads.

[DOC #16 // UNPAINTED TEXT] Inpainting & Fonts

Q: Why wasn't text painted / repainted in some bubbles?

Three reasons leave original pixels intact by design. Declined quality: every inpaint rung scored worse than the surrounding artwork (e.g. extreme dark gradients or complex illustration details), so the region was left pixel-identical and flagged declined.

Gate-held: the script gate held back SFX, artwork lettering or wrong-script text — dashed outline with a one-click Translate anyway, recognized text kept. Skipped: no confirmed translated text (failed OCR or untranslated region), so inpainting never ran.

The debug panel shows per-region provenance plus per-rung counts (fill · denoise · lama · telea · rect-telea · declined · skipped) and gate decisions — no image payloads.

[DOC #17 // CUSTOM TYPOGRAPHY] Inpainting & Fonts

Q: How do I load custom comic book fonts?

LMT ships with 3 bundled font families: Noto Sans, Bangers, and Comic Neue.

To use your own font:

  1. Open extension Settings › Typography.
  2. Drag-and-drop any .ttf, .otf, or .woff file into the dropzone.
  3. Select your font from the active dropdown.

The font is parsed into browser font storage and dynamically rendered with automatic bubble fit scaling and high-contrast text outlines.

[DOC #18 // SITE ADAPTERS & RULES] Platform & Rules

Q: My favorite manga reading site isn't recognized. How do I add it?

LMT extracts the series title, chapter number, and page index using regex site rules:

  • AI Rule Generator: Open the manga chapter in your browser, click the LMT icon › Settings › Site Rules, and click Generate with AI. The active LLM will analyze the page title and URL structure to propose a working rule.
  • Submit a Pull Request: Copy src/lib/adapters/_example.ts to src/lib/adapters/<domain>.ts, fill in the 3 regex fields, and submit a PR on Gitlab. It bundles into the next release automatically.
[DOC #19 // FIREFOX ENGINE] Platform & Rules

Q: Why does the Firefox extension use a different local engine than Chrome?

Only local in-browser translation is affected by browser differences. On Chrome, Local mode runs MLC-based WebLLM models. On Firefox, local translation runs on wllama (llama.cpp compiled to WASM) with GGUF models such as Qwen3.5 4B and Tiny Aya Global — a build shaped by Firefox constraints (no offscreen API, AMO packaging limits, uneven WebGPU support). The extension picks the right engine per browser automatically, including a CPU fallback where the GPU path is unavailable.

Gemini Mode and API Mode work identically on both browsers. If you run your own models via Ollama or LM Studio, you are completely unaffected — text goes to your server the same way everywhere.

Install the signed listing from Mozilla Add-ons (AMO) ↗ — it persists across restarts and updates automatically. Only about:debugging sideloads are session-only temporary add-ons. Chrome is live on the Chrome Web Store ↗.

[DOC #20 // DETECTION MODEL PICKER] Detection & OCR

Q: Which bubble detector should I pick in Vision › Detection?

v1.0.2 ships two selectable on-device detectors (Vision › Detection via the shared ModelSelect picker with Cached badges and inline pause/resume downloads, Min Confidence 0.5, manual update checks in System › Model Storage). Popup Home quick-toggles are gated so you cannot switch to an uncached detector until its weights are downloaded:

  • Comic Bubble Detector RT-DETR-v2 (default, 11.1 MB, Apache-2.0): Good at bubbles and free-floating text (bubble, text_bubble, text_free).
  • Comic Text Detector (94.7 MB, GPL-3.0): Text boxes plus a per-pixel segmentation mask ([1, 1, 1024, 1024]) that seeds fitMask() directly — best for dense vertical Japanese. Never bundled; downloads to your local browser cache only when you select it.
[DOC #21 // OCR ENGINE CHOICE] Detection & OCR

Q: PaddleOCR, PP-OCRv6 Manga, Manga-OCR or Pororo — which OCR engine should I use?

Pick in Vision › Text Recognition (OCR). PaddleOCR (~90 MB, default) is the fast multilingual generalist with 11 per-language packs (Latin + Chinese/Japanese ship at setup, the rest download on first use). PP-OCRv6 Manga (~21 MB) is a Japanese-only manga fine-tune between the two. Manga-OCR (~460 MB, opt-in) is the Japanese manga specialist (ViT encoder + BERT decoder) for vertical text and stylized lettering. Pororo OCR (~74 MB) is the Korean specialist (TPS-VGG-BiLSTM, 2,589 Hangul classes, WASM CPU) for manhwa / webtoon.

OCR Min Confidence defaults to 0.7 with a retry pass at 0.7× on failed crops; single characters demand ≥ max(minConfidence, 0.75) to suppress noise. Held-back regions keep their recognized text so you can still view and edit it.

[DOC #22 // LAMA REDRAW] Inpainting & Fonts

Q: When should I switch from Fast to Quality under Render › Inpainting?

Switch to Quality for complex screentone, halftone and artwork behind text — where pure-JS fill / denoise / Telea would leave flat patches or smudges. One-time ~207 MB download, ~500 MB RAM/VRAM, ~30–60s per complex region on CPU (512² tiled inference, 128px overlap).

Quality runs LaMa first per region and falls back into Fast wherever LaMa declines — a strict superset of Fast. Per-region provenance ({method, deviation, thickness, ms}) and per-rung counts surface in the debug panel.

[DOC #23 // MODEL STORAGE & PAGE CACHE] Platform & Rules

Q: How do Model Storage and the per-page translation cache work?

System › Model Storage lists every downloaded weight with its size and language badge, plus per-model delete and full cache clear. Deleting a cached model also wipes any retained partial download chunks so the next fetch starts fresh. Detection, OCR and backend pickers share a ModelSelect dropdown with Cached badges and inline download progress with pause/resume support. Onboarding ships Latin + Chinese/Japanese packs; background prefetch warms the cache.

Translation results are keyed by series + chapter + resolved page index (resolveImagePageIndex) + image hash (quickHash), so re-opening a translated chapter is instant.

[DOC #24 // HARDENING & LICENSES] Platform & Rules

Q: What hardening and third-party licenses ship in v1.0.2?

The background image proxy allowlists http(s) only and rejects credentials, loopback, private IPs and internal schemes; every translation backend validates its schema before painting; model downloads are SHA-256 verified with cache eviction on mismatch, and incomplete streams ending short of advertised length are rejected to prevent corrupted partials from entering storage. Overlay boxes are scaled against natural vs rendered dimensions with isolated keyboard input, and cross-origin images fall back through declarativeNetRequest with magic-byte MIME sniffing (JPEG, PNG, WebP, GIF, AVIF).

LMT code is AGPL-3.0-or-later (built on ComicTL; ladder/gate concepts studied from Manga Cleaner as an independent rewrite). Weights: RT-DETR Apache-2.0 · OSD gate Apache-2.0 · PaddleOCR / PP-OCRv6 / Manga-OCR / Pororo Apache-2.0 · LaMa MIT · WebLLM Llama-3.2 / Qwen3.5 Apache-2.0 · ComicTextDetector GPL-3.0 — all downloaded on-demand.

Full table: README credits & technical reference

[DOC #25 // LIGHTWEIGHT LOCAL SERVER] LLM Backends

Q: Ollama / LM Studio feels too bloated — any lighter recommendation?

Run llama.cpp directly as your local server. Both Ollama and LM Studio build on llama.cpp under the hood — going straight to the source drops the extra GUI layers while staying fully OpenAI-compatible for LMT's API Mode.

Start it with llama-server -m <model>.gguf, then in LMT Settings › Backend set Host to http://127.0.0.1:8080/v1, Schema to OpenAI, and click Test Connection as usual.

The payoff is freshness: new model architectures and GGUF quant releases land in llama.cpp first, so same-day model drops work without waiting for the wrappers to catch up.

[DOC #26 // TRIGGER & AUTO-TRANSLATE] Platform & Rules

Q: How do the floating trigger, skip-refining and auto-translate work?

Hover any image sized ≥ 260px on both sides to reveal a floating Translate pill pinned to its top-left (250ms anti-flicker debounce, isolated ShadowRoot). Clicking runs the full pipeline on that image; after translation the pill becomes an action hub (Edit text, Adjust bboxes, Original/Translated, Export JPEG). The old right-click menu is gone.

Enable Skip bbox refining to jump straight from detection to translation, or Auto-translate to batch chapter pages as they scroll into view (200px margin, site-adapter selectors when available, > 500px generic fallback, one page at a time). A strict status registry dedupes repeat triggers.

[DOC #27 // LICENSE CHANGE] Platform & Rules

Q: Why did LMT change license from MIT to AGPL-3.0-or-later?

From version 1.0.0 Stable the project is licensed under the GNU AGPL-3.0-or-later. Copyleft guarantees this fork stays open: anyone may redistribute or build on it, but every distributed or network-hosted derivative must keep its complete source available under the same terms. Beta releases through v1.0.0-Beta5 were MIT-licensed (each tag carries its own LICENSE file).

Upstream notices are preserved (ComicTL © 2025-2026 Ketut Shridhara, MIT — combined work conveyed under AGPL as the MIT license permits). On-demand model weights keep their own upstream licenses and are never bundled. Full text plus attribution tables: LICENSE ↗

[DOC #28 // GPU & MODEL DOWNLOADS] LLM Backends

Q: How do GPU controls and on-demand model downloads work?

System › GPU Acceleration holds one master WebGPU switch plus per-area overrides (llm, inpaint, ocr), backed by a shared high-performance adapter probe with automatic WASM fallback. Re-check anytime with the probe button.

Detection, OCR and backend pickers share a ModelSelect dropdown: cached weights show a Cached badge, missing ones offer a single Download ⇄ Pause / Resume toggle with live streaming progress and SHA-256 integrity verification. Downloads are centralized in the background worker: pause in the setup wizard, resume in the sidebar or popup, and starting a new download automatically pauses the active one.

[DOC #29 // LOCAL SERVER RECOMMENDATION] LLM Backends

Q: Should I use Local mode or run a local server with API Mode?

If you can run a server on your own machine, we recommend API Mode with a local LLM server over Local mode. Run llama.cpp, Ollama, LM Studio, Jan, KoboldCpp, or any other OpenAI-compatible server on your device and point LMT at it — you unlock the full GGUF ecosystem instead of the handful of WebGPU builds, and larger translation-tuned models generally produce better manga dialogue.

If you are comfortable with your data reaching Google, the Gemini pipeline is the quality pick: one multimodal pass handles OCR and translation together with excellent results.

Either way, LMT collects nothing. Every API call — Gemini or your own server — goes directly from your device to the target endpoint, with no proxy or middleman in between.

[DOC #30 // MULTI-LAYER EDITOR] Inpainting & Fonts

Q: How do the Raw / Cleaned / Result layers and patch tools work?

After translation, open the editor to switch between Raw Scan (original page), Cleaned Scan (inpainted background), and Result Scan (final typeset composite) — switching is instant, no re-translation.

On the cleaned layer, draw add-inpaint boxes to clean missed text or stray SFX, or restore-raw boxes to bring back original art. Selecting a bubble shows ContextualStyleBar (font, size, alignment, color) and FloatingRawTextPill (raw OCR transcript). Export saves the active layer to JPEG.

[DOC #31 // ALWAYS INPAINT & STABILITY] Platform & Rules

Q: What do Always Inpaint?

Always Inpaint (sync:always-inpaint in popup and Render › Inpainting) bypasses decline rollbacks so every detected region is cleaned instead of left pixel-identical. The cleanedSrc cache (in-memory + page storage) removes redundant inpaint passes when re-styling text.

Translation is also more resilient: empty OCR boxes are filtered before prompting, bbox-count mismatches self-heal instead of failing the page, overlay geometry tracks reader layout shifts, and editor inputs stay isolated from host-page shortcuts.

[NO MATCHING ANSWERS FOUND FOR QUERY]