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
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
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
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
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
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
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
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.
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
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