LEXO

LEXO 02 Features

v0.4.1 AGPL-3.0

What LEXO does

Every capability below exists in the current release, and each one is shown in the real app. Nothing here is a roadmap.

Burmese-first OCR

Burmese is the default OCR language. You don't pick it, configure it, or install a language pack.

LEXO uses Google Docs OCR, which reads Myanmar script well, and wraps it in a workflow built around Burmese documents: scanned books, old PDFs, and legacy-font files.

OCR workflows
A scanned Burmese page beside its Google Docs OCR text in LEXO.

Google Docs OCR through your own account

No paid OCR API, no per-page fee, and no large local model download. LEXO sends each page image to your own Google Drive, lets Google Docs OCR read it, takes the text, and deletes the temporary file.

It needs a one-time Google Cloud setup, and access is limited to the drive.file scope: only the files LEXO creates.

Google Cloud setup
LEXO running Google Docs OCR, with per-page progress.

Smart text extraction for digital PDFs

A PDF exported from a word processor already contains its text. LEXO copies it straight out: instant, lossless, offline, and without an account.

From the CLI, lexo ocr routes page by page, so a digital document with a few scanned pages only OCRs the scans. Text layers made of unusable legacy glyphs are detected and OCR'd instead.

lexo extract report.pdf -o report.txt
Text extracted from a digital Burmese PDF's text layer in LEXO.

Scanned PDFs and images

Open a scanned PDF, a single image, or a set of images as one document. PNG, JPEG, TIFF, and BMP all work.

Results arrive page by page. Transient failures retry automatically, and Retry Failed Pages re-runs only what still failed, so a long book never has to start over.

lexo ocr scan.pdf --lang my -o scan.txt

A way through legacy-font PDFs

Burmese typed in Win Innwa or Win Myanmar is stored as ASCII letters. Extracting it gives you Latin gibberish. Run Google Docs OCR instead and LEXO reads the page as an image, returning real Myanmar Unicode.

Legacy fonts, explained
ASCII characters extracted from a Win Innwa Burmese PDF in LEXO's text pane.

Batch PDF OCR

OCR a folder of PDFs, or a hand-picked list, into one UTF-8 .txt per file. Existing outputs are skipped, so an interrupted batch resumes where it stopped.

In the app: Batch OCR PDFs on the welcome screen, or Ctrl+Alt+O. From the CLI: lexo ocr-batch.

lexo ocr-batch ./pdfs --out-dir ./txt
Batch OCR guide
Batch OCR PDFs dialog in LEXO.

Crop, split, rotate, merge

Prepare pages before OCR, entirely offline. Drag a crop box over the preview to remove running heads and page numbers, for one page, all pages, or a selection. Rotate, reorder, remove, extract, split into files, or append other PDFs.

Edits apply to a working copy. Your original stays untouched until you save.

lexo pdf crop book.pdf --top 8 --bottom 8 -o trimmed.pdf
lexo pdf merge a.pdf b.pdf -o book.pdf
PDF tools
The visual crop editor over a scanned Burmese page.

Two-page spread splitting

Scans of open books often hold two pages per image. Drag a line onto the gutter and split every spread into left and right pages, in reading order. Rotation and existing crops are respected.

lexo pdf split-spread scans.pdf -o pages.pdf
A two-up spread with LEXO's draggable split line.

Side-by-side proofreading

Each page sits beside its editable text. Zoom and pan the page image to check a difficult line, fix the text in place, and move on. Page thumbnails show which pages are done, pending, or failed.

Noto Sans Myanmar is bundled, so Burmese renders correctly while you proofread, whatever fonts your system has.

LEXO proofreading: a doubled vowel sign selected in the text pane, beside its page.

Myanmar Unicode handling

All text is normalized to Unicode NFC, so the same word is always stored the same way. Zero-width spaces, which Burmese uses to mark word and line breaks, are kept; stray control characters are removed.

TXT, Markdown, and JSONL

Plain text for reading and editing. Markdown with YAML frontmatter and a heading per page for publishing and EPUB work. JSONL with one record per page, carrying the page number and how its text was obtained, for NLP and LLM datasets.

Export formats
LEXO's Run panel set to export Markdown.

A desktop app and a CLI, one engine

The PySide6 desktop app and the lexo command call the same core, so behaviour matches. Prove a workflow by hand, then script it.

lexo gui
lexo --help
CLI reference
LEXO welcome screen.