Skip to content

Azyrn/Scanly

Repository files navigation

Scanly

Point your phone at a page and get the text — offline, or through the AI provider of your choice.

License Kotlin Compose Telegram

An Android scanner for documents, barcodes, and QR codes.

Works with the radio off. The default engine is PaddleOCR PP-OCRv6, on-device via ONNX Runtime. No key, no account, no network — scanning, layout detection, table recognition, and every export work in airplane mode. Nine script packs; Latin/Chinese/Japanese and Arabic ship in the APK, the rest download on demand.

The AI mode transcribes, it doesn't summarize. A vision model re-types the page as Markdown that mirrors it: same words, same headings, same bold, same line breaks, same tables. That's what lets it read handwriting, receipts, forms, and multi-column pages that classical OCR chokes on — and why the result drops into a PDF or Word file with its structure intact. It streams in as the model works.

Your key goes straight to the provider. Gemini, OpenAI, Claude, Groq, OpenRouter, Mistral OCR, Cerebras, NVIDIA NIM, Hugging Face, Cloudflare Workers AI, or any OpenAI-compatible endpoint — including one you host. Pick the model yourself. Your key is encrypted on-device (AES-GCM, Android Keystore) and sent in a request header to the one provider it belongs to. There is no Scanly server and no proxy: your phone calls api.openai.com or your own URL directly. Your account, your billing, revocable by you. Bundled free-tier keys exist so the feature works before you have your own; the app never silently falls back from your key to one of those.

Read it, then take it with you. Results open in a rendered Markdown view — headings, emphasis, lists, checkboxes, code blocks, and tables as real grids, so a receipt's totals line up and a table is a table. Switch to plain text at any time. Translate in place into 18 languages, cached per language. Then export — and what you see is what you get, with no hidden text a file falls back to:

  • PDF — the rendered document, paginated, with table headers repeated across pages
  • Word (.docx) — real OOXML you can edit: heading runs, emphasis, lists, Word tables
  • Markdown — the source, unchanged
  • CSV — the tables on screen, and nothing when there are none
  • JSON — text plus per-line boxes, confidence, and page number, for feeding into something else

Files land in Downloads/Scanly. Printing goes through the system dialog, which also offers Save-as-PDF.

Barcodes scan in real time (ML Kit or ZXing-C++) with pinch-zoom and tap-to-focus, and offer an action per content type — open a URL, join a Wi-Fi network, dial, save a contact, add an event. EAN, UPC, and ISBN get a product lookup; only the number is sent.

Material 3 Expressive, entirely Jetpack Compose — dynamic color, dark theme, pure-black OLED mode.

Privacy

Nothing is uploaded unless you tap AI Scan. Offline OCR and barcode scanning happen entirely on your phone — your documents never go anywhere, and your scan history stays on the device.

When you do tap AI Scan or Translate, the image (or the text, for a translation) goes to the AI provider you chose, and only then. It goes there directly. There is no Scanly server in between — we never see your documents or your key, because we don't run anything to see them with. Nothing is sent in the background, and nothing about your documents is tracked.

The one small exception: looking up a scanned barcode sends the barcode number — just the number, nothing else — to the product databases.

Build

git clone https://github.com/Azyrn/Scanly.git && cd Scanly && ./gradlew assembleDebug

Android SDK, JDK 21. Min API 24, targets API 37. Offline scanning, barcodes, and exports need no configuration. For cloud AI, add a key in the app's settings, or bundle one at build time in local.properties (gitignored) as GEMINI_API_KEY, GROQ_API_KEY, OPENROUTER_API_KEY, and so on. Release builds are signed from local.properties and use R8 full mode.

Kotlin 2.3 · Compose · Material 3 Expressive · MVVM/Hilt/DataStore · ONNX Runtime · ML Kit · ZXing-C++ · CameraX · Retrofit · Android Keystore.

License

Apache 2.0 — see LICENSE and NOTICE.

About

Scanly — a fast, private document scanner for Android. On-device OCR, barcode & product lookup, and AI text extraction with translation. Free, open-source, and built with Material 3.

Topics

Resources

License

Stars

75 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors

Languages