arabic-audio-reader-worker / docs /best-free-arabic-pdf-audio-stack.md
Syncre's picture
Deploy Arabic Audio Reader worker
6d5a99d verified
|
Raw History Blame Contribute Delete
82.3 kB

Best Free Arabic PDF-To-Audio Stack

Last checked: June 7, 2026.

The source evidence is summarized in docs/source-evidence.md; verify the research markers with python scripts\check_research_sources.py --json.

Recommendation

For this project, the best practical free local stack is:

  1. PyMuPDF for embedded PDF text.
  2. OCR_ENGINE=tesseract OCR_RENDER_ZOOM=2 TESSERACT_PSM=4 for scanned pages by default; it produced the most readable text on the 5-page Arabic benchmark. Use OCR_ENGINE=arabic-max only on short samples when the default reads a specific book badly.
  3. EasyOCR Arabic as a strong alternate for older scans and difficult layouts.
  4. OCR_ENGINE=best for short quality tests, which compares the free local OCR engines and picks the best-looking Arabic text.
  5. QARI-OCR as the optional Arabic-native heavy OCR path for strong workers.
  6. Tesseract Arabic as the final fallback.
  7. Speech cleanup that removes repeated headers, page numbers, digit-heavy OCR debris, symbol noise, and tiny layout fragments before TTS.
  8. SILMA TTS for the best local Arabic voice.
  9. Habibi-TTS MSA as an optional newer Arabic voice experiment.
  10. 3arab-TTS 500M as a very new Arabic-only Apache-2.0 voice benchmark.
  11. KaniTTS Arabic as a high-speed Arabic voice benchmark that needs license confirmation.
  12. Emirati VITS Male as an Apache-2.0 Gulf dialect voice benchmark.
  13. MOSS-TTS-Nano as an optional CPU-friendly multilingual Arabic voice benchmark.
  14. OmniVoice as a fresh optional multilingual Arabic voice benchmark.
  15. Lahgtna OmniVoice v2 as a new dialect-only OmniVoice benchmark candidate.
  16. Lahgtna Chatterbox as an optional Arabic dialect voice benchmark.
  17. NAMAA-Saudi-TTS as an MIT Saudi Arabic Chatterbox benchmark.
  18. Egyptian Arabic Chatterbox as an Apache-2.0 dialect-only Chatterbox benchmark.
  19. NileTTS-XTTS as an Apache-2.0 Egyptian Arabic XTTS benchmark.
  20. Arabic XTTS-v2 Egyptian fine-tune as a CPML/base-license dialect benchmark.
  21. Chatterbox-Multilingual ONNX as an MIT CPU/ONNX Arabic-capable voice benchmark.
  22. tts-arabic-onnx as a compact Arabic-only ONNX voice benchmark with license confirmation required.
  23. VoxCPM2 as an optional strong-worker multilingual Arabic voice benchmark.
  24. Voxtral TTS as a personal/non-commercial strong-worker Arabic voice benchmark only.
  25. Egyptian Arabic Qwen3-TTS as a dialect-only external benchmark.
  26. Saudi Arabic Qwen3-TTS and Emirati Qwen3.5-TTS as newer Apache-2.0 Gulf dialect external benchmarks.
  27. DeepSeek-OCR-2 as a latest Apache-2.0 general document OCR benchmark for strong workers.
  28. DeepSeek Arabic OCR v6 as a newer Apache-2.0 Arabic-labeled DeepSeek-OCR external benchmark.
  29. Qwen3-VL Persian/Arabic line OCR as a line-level OCR benchmark only, not a full-page book OCR default.
  30. Arabic handwritten OCR 4-bit Qwen2.5-VL as a lighter Apache-2.0 handwriting/manuscript OCR benchmark.
  31. NAKBA Arabic manuscript line OCR baseline as a line-level manuscript OCR benchmark only.
  32. HAFITH as an Apache-2.0 historical Arabic manuscript line-OCR benchmark.
  33. Glimpse RTL OCR as an Apache-2.0 Arabic/Persian text-line OCR benchmark.
  34. olmOCR Arabic LoRA v2 as an Apache-2.0 full-page Arabic manuscript OCR benchmark.
  35. Arabic OCR Qwen2.5-VL GGUF as a QariOCR-trained external GGUF/Unsloth benchmark for scanned books and mixed Arabic-English documents.
  36. Arabic Legal Documents OCR 1.0 as a domain-specific Gemma-licensed OCR benchmark for legal/form-like Arabic PDFs.
  37. oi-OCR as an Apache-2.0 Arabic-capable PDF/document parser benchmark for structured PDFs.
  38. NuExtract3 as an Apache-2.0 multilingual document-to-Markdown OCR benchmark for hard layouts and multi-page PDFs.
  39. Qianfan-OCR as an Apache-2.0 heavy multilingual document-intelligence OCR benchmark.
  40. Chandra OCR 2 as a strong multilingual structured-document OCR benchmark with modified OpenRAIL-M weights.
  41. dots.ocr as a compact MIT multilingual document-layout OCR benchmark.
  42. Arabic Large Nougat as a GPL-3.0 Arabic book-page OCR-to-Markdown benchmark.
  43. DocTR Arabic FAST/PARSEQ as a classic Arabic OCR detector/recognizer benchmark.
  44. Kraken/eScriptorium Arabic script as a historical-print/manuscript OCR benchmark.
  45. Kairawan/Qalamus manuscript OCR as a free service-only manuscript OCR signal, not a deployable default.
  46. GLM-OCR Arabic/French documents as an administrative/form-like OCR benchmark.
  47. mimoha Arabic OCR as a sparse-card low-priority Arabic OCR watchlist item.
  48. Saudi Chatterbox fine-tune as an Apache-2.0 Saudi dialect voice benchmark.
  49. Saudi TTS as an Apache-2.0 Saudi dialect voice benchmark.
  50. eSpeak NG as the fast local fallback voice.

This is not the theoretically highest-accuracy Arabic OCR stack. The newest open OCR direction is moving toward vision-language document models, especially Arabic-specific VLMs such as QARI-OCR and general document parsers such as PaddleOCR-VL-1.6, but those are heavier than classic OCR and usually need a real worker with more RAM/GPU. For a free family website that needs to process 100 MB+ Arabic books reliably, the best practical default is still a lightweight OCR engine plus a per-book sample benchmark.

Decision Matrix

Layer Chosen default Why When to switch
Embedded PDF text PyMuPDF Free, fast, and avoids OCR when the PDF already has text. Do not switch unless extraction order is broken.
Scanned Arabic OCR Maximum Arabic OCR mode It compares QARI-OCR, Tawkeed, KATIB, Arabic-Qwen, Baseer, PaddleOCR-VL, PaddleOCR Arabic PP-OCRv5, EasyOCR Arabic, Surya, and Tesseract Arabic, then keeps the best cleaned Arabic text. Use OCR_ENGINE=paddleocr only when speed matters more than comparison.
Single-engine OCR PaddleOCR Arabic PP-OCRv5 Official PaddleOCR docs list arabic_PP-OCRv5_mobile_rec for Arabic-script recognition, and it is lightweight enough for CPU workers. Use EasyOCR or Tesseract when the per-book benchmark scores them better.
OCR comparison OCR_ENGINE=best on short samples only It compares available free engines and picks the best cleaned Arabic text. Do not use for full 300+ page books unless runtime is acceptable.
Arabic-native optional OCR QARI-OCR 0.4 QARI-OCR 0.4 is fine-tuned for OCR on Islamic books and Arabic manuscripts, with Apache-2.0 model licensing. Best Arabic-focused quality upgrade to benchmark on a GPU/strong worker.
Arabic-native external OCR QARI-OCR 0.4 GGUF GGUF packaging of QARI-OCR 0.4 for external runtime experiments. Keep benchmark-only until the exact vision runner and same-page text quality beat the wired QARI sidecar.
Smaller Arabic-trained optional OCR KATIB 0.8B KATIB is fine-tuned for Arabic printed and handwritten OCR while being much smaller than QARI. Try before QARI on smaller workers, then keep it only if it wins on the book sample.
Small Arabic-trained optional OCR Arabic-Qwen3.5-OCR-v4 Apache-2.0 0.9B Arabic OCR VLM for printed, handwritten, classical, and diacritic-heavy text. Try alongside KATIB on short samples; keep only if it wins on the target pages.
Fresh Arabic OCR watchlist aNS Qwen3-VL Arabic OCR v3 Qwen3-VL-2B Arabic OCR fine-tune with a public Hugging Face card and no hosted inference provider. Keep external until license fit, runtime, and same-page Arabic text quality beat QARI/KATIB/Arabic-Qwen/Baseer.
Structured Arabic OCR watchlist Waraqon v3 Arabic OCR HTML Qari Apache-2.0 Qari-family Arabic OCR model aimed at HTML/structured output. Benchmark externally for complex pages; normalize markup to readable Arabic and promote only if it preserves book text better than the wired stack.
Latest general OCR watchlist DeepSeek-OCR-2 Official Apache-2.0 3B DeepSeek OCR successor with 2026 paper/model-card references and public document OCR benchmark results. Benchmark externally only on strong-worker hardware; it is not Arabic-specific, so promote only if it beats QARI/KATIB/Baseer/Arabic-Qwen on the same book pages.
Latest Arabic DeepSeek OCR watchlist Loay Arabic-OCR-DeepSeek-OCR-2 Apache-2.0 Arabic fine-tune of DeepSeek-OCR-2 for Arabic OCR and layout analysis. Benchmark externally on the same exported page images before any sidecar work; it is promising but needs strong-worker proof.
DeepSeek Arabic OCR watchlist DeepSeek Arabic OCR v6 Apache-2.0 Arabic-labeled DeepSeek-OCR fine-tune and newer than v4/v5. Keep external until it proves better on the exported Arabic page images; the card has sparse Arabic-book evaluation detail and no hosted inference provider.
Handwritten OCR watchlist Arabic-English handwritten OCR Qwen3-VL Apache-2.0 Qwen3-VL-4B handwritten OCR model for Arabic and English. Keep external for handwriting-heavy pages; the model card says research-oriented and it is not deployed by inference providers.
Handwritten OCR watchlist Arabic-English handwritten OCR v3 Apache-2.0 Qwen2.5-VL 3B-class handwritten/manuscript OCR model for Arabic and English. Keep external for handwriting-heavy or manuscript pages; it is large and not deployed by inference providers.
Quantized handwritten OCR watchlist Arabic handwritten OCR 4-bit Qwen2.5-VL Apache-2.0 4-bit Arabic handwritten OCR checkpoint with about 2.44GB of model assets. Benchmark externally when handwriting/manuscript pages matter and the full handwritten checkpoint is too heavy; promote only if same-page text beats the wired stack without hallucinations.
Manuscript line OCR watchlist NAKBA Arabic manuscript line OCR baseline Qwen3-VL-8B LoRA baseline for the NAKBA NLP 2026 Arabic manuscript understanding shared task, evaluated on line images. Keep external and line-level only unless a preprocessing step crops pages into lines; confirm license fit before production.
Historical manuscript line OCR watchlist HAFITH Apache-2.0 Arabic-native 642M OCR model for historical manuscript line recognition, with 5.10% CER claims and Arabic-native tokenization. Keep external and line-level only; it needs text-line segmentation before inference, so it is not a full-page PDF default.
RTL line OCR watchlist Glimpse RTL OCR Apache-2.0 Arabic/Persian RTL text-line OCR fine-tune with 6.97% CER claims on unseen RTL text lines. Keep external and line-level only; it needs page images cropped into text lines before inference.
Full-page manuscript OCR watchlist olmOCR Arabic LoRA v2 Apache-2.0 LoRA for full-page Arabic manuscript OCR on an olmOCR 7B base. Benchmark externally on a large worker; keep out of default because 7B base/runtime/license confirmation is needed.
GGUF OCR watchlist Arabic OCR Qwen2.5-VL GGUF QariOCR-v0.3-trained Arabic/English OCR fine-tune for scanned books, religious text, handwriting, and mixed-language documents on a Qwen2.5-VL 7B GGUF/Unsloth path. Benchmark externally on a large worker; confirm license fit and keep only if it beats QARI/KATIB/Arabic-Qwen/Baseer on the same selected pages.
Line-level OCR watchlist Qwen3-VL Persian/Arabic line OCR Apache-2.0 Qwen3-VL 2B fine-tune for Persian/Arabic text-line OCR. Keep external unless pages are cropped into text lines; the model card says it is not designed for full-page OCR.
Large Arabic OCR watchlist Loay Arabic-OCR-Qwen2.5-VL-7B Arabic OCR fine-tune of Qwen2.5-VL-7B for Arabic text from images. Benchmark externally only on a large worker; 7B-class runtime is too heavy for the normal free default.
Arabic manuscript OCR watchlist Ketaba-OCR LoRA Apache-2.0 Arabic manuscript LoRA with strong benchmark claims, but it needs a separate base VLM plus adapter setup. Benchmark externally on selected page images when the wired Arabic OCR stack fails.
Arabic manuscript OCR watchlist Qari-OCR-LoRA Apache-2.0 experimental QARI-family LoRA from the NakbaNLP 2026 Arabic manuscript OCR task; its model card says Ketaba was the primary winning submission. Benchmark externally only as a secondary manuscript comparison after QARI 0.4, Ketaba, and the wired stack.
Arabic-first optional OCR Tawkeed OCR Apache-2.0 Arabic-first QARI v0.3 fork tuned for Arabic documents, handwriting, scene text, and edge-style deployment. Wired as OCR_ENGINE=tawkeed-ocr; benchmark on short samples before full books, especially when QARI 4B is too heavy.
High-end optional OCR PaddleOCR-VL-1.6 The newest official PaddleOCR-VL document parser is an Apache-2.0 0.9B VLM path with state-of-the-art public document parsing claims and 109-language support. Best general document-parser upgrade for a GPU/large-CPU worker; not the first default for free family hosting.
External document parser watchlist oi-OCR Apache-2.0 English/Arabic PDF document parser with April 2026 ParseBench claims for layout, tables, charts, and faithfulness. Benchmark externally for structured PDFs; it is not Arabic-book-specific and has no inference provider deployment.
Multilingual document parser watchlist NuExtract3 Apache-2.0 4B document VLM for OCR, document-to-Markdown, tables, forms, invoices, contracts, multilingual documents, and multi-page PDF examples. Benchmark externally for hard layouts; not the default Arabic-book OCR unless same-page scoring beats the Arabic-trained stack.
Large document parser watchlist Qianfan-OCR Apache-2.0 5B multilingual document-intelligence OCR/VLM with strong general document benchmark claims. Benchmark externally only on a GPU/large worker; it is not Arabic-book-specific and is too heavy for the default free family worker.
Structured document parser watchlist Chandra OCR 2 4B multilingual OCR/layout model for Markdown, HTML, JSON, tables, forms, and handwriting, with Arabic included among 90+ languages. Benchmark externally for complex layouts only; modified OpenRAIL-M weights and GPU-heavy runtime keep it out of the default family-site stack.
Compact document parser watchlist dots.ocr MIT 1.7B multilingual document parser for layout detection, reading order, tables, formulas, and content recognition. Benchmark externally for difficult layouts or mixed pages; not Arabic-book-specific, so promote only if same-page scoring beats the Arabic-trained stack.
Arabic book OCR-to-Markdown watchlist Arabic Large Nougat GPL-3.0 0.4B Arabic book-page OCR model for structured Markdown/text extraction. Benchmark externally only; keep out of the default public worker because GPL licensing and model-card hallucination/context-length caveats need careful handling.
Classic Arabic OCR watchlist DocTR Arabic FAST/PARSEQ Arabic FAST detector with an Arabic PARSEQ recognizer path. Benchmark externally when VLM OCR is too heavy; confirm recognizer licensing and compare text ordering before promotion.
Historical Arabic-script OCR watchlist Kraken/eScriptorium Arabic script Open-source ATR/OCR workflow for historical and non-Latin scripts, useful when pages look like older print, manuscripts, marginalia, or archival material. Benchmark externally with an Arabic-script Kraken model or line-cropped eScriptorium workflow; keep out of the default worker until the selected model/license and page segmentation are proven on the book.
Service-only manuscript OCR signal Kairawan/Qalamus manuscript OCR Free 2026 Arabic and Islamic manuscript transcription service signal, useful evidence that Arabic manuscript OCR is improving. Keep external only unless a reusable open engine, API terms, privacy story, and same-page scoring beat QARI/KATIB/Kraken/HAFITH on the selected sample.
Administrative OCR watchlist GLM-OCR Arabic/French documents GLM-OCR LoRA fine-tuned on Arabic/French scanned documents, forms, receipts, newspapers, and official documents. Benchmark for structured or administrative PDFs, not ordinary book narration.
Sparse-card OCR watchlist mimoha Arabic OCR Apache-2.0 Arabic OCR model card with minimal public details. Keep low priority until a clean local runner and stronger evaluation details are available.
Compact optional OCR VLM Falcon-OCR Apache-2.0 300M document OCR VLM from TII, with plain-text, formula, and table output modes. Track for strong-worker benchmarks; do not default until it beats QARI/Paddle/Tesseract on Arabic book samples.
Heavy optional OCR Surya / Chandra Current Datalab document models support layout, reading order, and 90+ languages including Arabic, but weights/licensing and runtime are less simple than PaddleOCR. Use only for difficult scans on a worker that can handle heavier VLM-style OCR.
Arabic-specific VLM OCR Baseer OCR Apache-2.0 Arabic document OCR fine-tuned from Qwen2-VL-2B, useful to track for difficult Arabic legal/complex layouts. Promising, but 2B parameters and no default hosted inference provider make it optional research, not the default pipeline.
Arabic OCR VLM sidecar Arabic-GLM-OCR-v2 Recent Apache-2.0 Arabic OCR VLM with model-card claims for Arabic document extraction and noise reduction. Wired as an optional sidecar; benchmark on the same 5-page sample before any full-book run.
Large Arabic OCR LoRA watchlist DIMI Arabic OCR v2 Apache-2.0 Arabic OCR LoRA based on Qwen2.5-VL-7B with model-card claims for improved diacritics handling and printed-document extraction. Benchmark externally only on a large worker; 7B-class runtime is too heavy for the normal free default.
Darija OCR watchlist AtlasOCR First open-source Darija/Moroccan Arabic OCR model based on Qwen2.5-VL 3B. Use only for Moroccan/Darija PDFs and confirm license terms before production use.
Legal/structured OCR watchlist Arabic Legal Documents OCR 1.0 Gemma-licensed Gemma-3-4B-IT fine-tune for low-quality scanned Arabic legal documents. Benchmark externally only for legal or form-like PDFs; not a permissive default for ordinary book narration.
OCR correction research Raqim post-OCR correction 2026 open-access research on Arabic OCR correction using dictionary-based correction and LLMs. Do not run automatically before TTS; correction can alter exact book/religious wording.
Arabic voice SILMA TTS Free/open Arabic-English TTS, Arabic Fusha/MSA support, normalization/tashkeel features, permissive model license. Try Habibi MSA when you can afford a heavier optional sidecar; use eSpeak NG when speed matters more than naturalness.
Optional Arabic voice Habibi-TTS MSA Newer Arabic F5-TTS family project; the MSA specialized model is Apache-2.0. Keep it optional because the unified and some dialect models have non-commercial limits.
Optional Arabic-only voice 3arab-TTS 500M Apache-2.0 Arabic-only 500M RF-DiT text-to-speech model, with a VoiceDesign variant updated in June 2026. Benchmark externally on the same cleaned sample; too new to promote before long-form listening tests.
Optional high-speed Arabic voice KaniTTS Arabic Arabic-only 400M TTS model with high-speed/low-latency claims, but current Hugging Face metadata reports other for license. Benchmark externally on the same cleaned sample; promote only if license fit is confirmed and it preserves words and pacing better than SILMA/Habibi.
Optional Gulf dialect voice Emirati VITS Male Apache-2.0 bilingual Emirati Arabic/English VITS voice. Benchmark only when Gulf/Emirati pronunciation fits the PDF; not the default MSA audiobook voice.
Optional CPU-friendly voice MOSS-TTS-Nano Apache-2.0 multilingual 0.1B TTS with Arabic support, packaged CLI, and ONNX CPU path. Benchmark externally with an Arabic reference voice before wiring it into the app; SILMA remains the stable default.
Optional CPU-friendly voice Supertonic 3 OpenRAIL multilingual 99M ONNX TTS with Arabic support and no GPU requirement. Wired as supertonic-ar for local benchmarking; compare comfort against SILMA/Habibi before using it for full books.
Optional multilingual voice OmniVoice Apache-2.0 0.6B zero-shot TTS with 646-language support and Arabic included. Fresh benchmark candidate; compare listenability against SILMA/Habibi before app wiring.
Optional Arabic adapter voice OmniVoice Arabic LoRA Apache-2.0 Arabic LoRA adapter for OmniVoice. Try only after base OmniVoice works; compare against SILMA/Habibi on the same sample.
Optional Arabic dialect voice Lahgtna OmniVoice v2 New Arabic-dialect OmniVoice fine-tune with broad dialect tags and diacritics support. Benchmark externally for dialectal content; confirm licensing before production and keep SILMA/Habibi first for MSA books.
Optional Arabic dialect voice Lahgtna Chatterbox MIT Arabic dialect TTS based on Chatterbox multilingual with several dialect tags. Benchmark externally; the model card notes possible repetition, so long-form audiobook stability must be tested.
Optional Saudi dialect voice NAMAA-Saudi-TTS MIT Chatterbox Multilingual fine-tune for natural Saudi Arabic dialect speech. Benchmark only for Saudi/Gulf dialect fit; its model card says it targets everyday Saudi speech rather than MSA books.
Optional Egyptian dialect voice NAMAA-Egyptian-TTS MIT Chatterbox Multilingual fine-tune for natural Egyptian Arabic dialect speech. Benchmark only for Egyptian/dialectal PDFs; its model card targets everyday Egyptian speech rather than MSA books.
Optional Saudi dialect voice Saudi Chatterbox fine-tune Apache-2.0 Chatterbox Multilingual T3 fine-tune for Saudi Arabic speech. Benchmark beside NAMAA-Saudi-TTS and Saudi Qwen3-TTS for Gulf material; not a default MSA book voice.
Optional Saudi dialect voice Saudi TTS Apache-2.0 Saudi Arabic TTS model. Benchmark beside NAMAA-Saudi-TTS, Saudi Chatterbox fine-tune, and Saudi Qwen3-TTS for Gulf material; not a default MSA book voice.
Optional Egyptian dialect voice Egyptian Arabic Chatterbox Apache-2.0 Chatterbox fine-tune on 120 hours of Egyptian Arabic. Benchmark only for Egyptian/dialectal PDFs; not the default MSA audiobook voice and GPU is recommended.
Optional Egyptian dialect voice NileTTS-XTTS Apache-2.0 XTTS v2 fine-tune from the 2026 NileTTS paper, trained on 38 hours of Egyptian Arabic. Benchmark only for Egyptian/dialectal PDFs; it is not tuned for MSA book narration.
Optional Egyptian dialect voice Arabic XTTS-v2 Egyptian fine-tune MIT project on top of XTTS-v2/Coqui Public Model License base, with Egyptian speaker fine-tuning and same-text comparisons. Benchmark only for Egyptian/dialectal PDFs after license fit is acceptable; not the permissive default MSA book voice.
Optional multilingual voice Chatterbox-Multilingual MIT multilingual TTS/voice-cloning project with Arabic listed among supported languages. Benchmark externally against SILMA/Habibi on the exact same cleaned text before wiring.
Optional Arabic Chatterbox voice Chatterbox Arabic fine-tune MIT LoRA/adapter for Chatterbox-Multilingual that claims better Arabic pronunciation, diacritics, intonation, MSA, and dialect support. Benchmark externally against SILMA/Habibi on the exact same cleaned text; prove long-form stability before wiring.
Optional CPU/ONNX multilingual voice Chatterbox-Multilingual ONNX MIT ONNX packaging for Chatterbox-Multilingual with Arabic listed among supported languages. Benchmark externally on the same cleaned text to see whether CPU/ONNX runtime is practical for the free worker path.
Optional compact Arabic ONNX voice tts-arabic-onnx Arabic-only FastPitch/MixerTTS ONNX package with small models, vocoder choices, speaker IDs, pace, and vowelizer options. Benchmark externally for CPU practicality, but confirm overall model/repo licensing before production use.
Optional Classical Arabic voice Spark-TTS Arabic Apache-2.0 Spark-TTS fine-tune on ClArTTS. Benchmark externally only with diacritized input/reference audio; not a simple default.
Optional dialect voice Sofelia-TTS Apache-2.0 Palestinian Arabic TTS/voice-cloning model. Use only for Palestinian/dialectal content benchmarks, not standard MSA books.
Optional strong-worker voice VoxCPM2 Apache-2.0 multilingual TTS with Arabic support, 2B parameters, 48 kHz output, and voice design/cloning. Benchmark only on GPU/large worker; SILMA remains the practical Arabic-focused default.
Personal/non-commercial strong-worker voice Voxtral TTS Mistral open-weight 4B TTS with Arabic among 9 listed languages and strong latency/quality claims. Do not default for the public/family site because the model card lists cc-by-nc-4.0 and 16GB+ GPU guidance.
Personal/non-commercial voice caution Arabic-F5-TTS-v2 MSA F5-TTS fine-tune with strong Arabic sample claims. Do not use as the default public free app voice because it is non-commercial and requires fully diacritized Arabic.
Do-not-promote-yet TTS Qwen3-TTS Apache-2.0 and high quality, but official released model cards list 10 languages and do not include Arabic. Track future Arabic checkpoints/fine-tunes; do not add to the Arabic reader dropdown yet.
Dialect-only Qwen3-TTS benchmark Egyptian Arabic Qwen3-TTS Apache-2.0 1.7B Qwen3-TTS fine-tune for Egyptian Arabic with about 25 hours of clean Egyptian speech. Benchmark only for Egyptian/dialectal content; it is too large and dialect-specific for the normal MSA book default.
Dialect-only Qwen3-TTS benchmark Saudi Arabic Qwen3-TTS Apache-2.0 1.7B Qwen3-TTS fine-tune for Saudi/KSA Arabic speech. Benchmark only when Saudi/Gulf pronunciation fits the PDF; keep SILMA/Habibi first for MSA books.
Dialect-only Qwen3.5-TTS benchmark Emirati Qwen3.5-TTS Apache-2.0 Emirati Arabic Qwen3-TTS-family fine-tune. Benchmark beside Emirati VITS Male for Gulf/Emirati material; do not make it the default MSA audiobook voice.
Audio format MP3 on workers, WAV locally MP3 is much smaller for downloads when ffmpeg is available. WAV is fine for short local tests.

Why Arabic Specialist OCR Is The Default

On the one-page sample from the user's scanned Arabic book:

EasyOCR:   4,207 characters, 743 Arabic words
PaddleOCR: 2,546 characters, 495 Arabic words
Tesseract: 4,344 characters, 767 Arabic words

Tesseract was fastest and extracted a high volume of text, but its preview included more page-layout noise. PaddleOCR was faster than EasyOCR and uses a current Arabic PP-OCRv5 recognition model, but it dropped and garbled more text on this specific book page. EasyOCR had the cleanest main-text preview on that sample, so it remains an important alternate. Arabic specialist mode is now the default because it compares Arabic-configured recognizers and picks the cleanest text for the book page. Plain PaddleOCR remains available when speed matters more than automatic comparison.

The important rule is: default to maximum Arabic-trained OCR for a new scanned book, but benchmark a representative sample before processing a long book. A single OCR engine is not consistently best across Arabic fonts, scan quality, page skew, and book layouts. QARI is the best Arabic-book model to try on a strong worker; KATIB is the smaller Arabic-trained model to try when QARI is too heavy.

For short samples, the app supports OCR_ENGINE=best. That mode runs the available free local OCR engines, tries multiple Tesseract page segmentation modes, scores the cleaned Arabic text by Arabic-word volume, common-word hits, placeholder characters, repeated layout lines, tiny-line noise, digit-heavy lines, symbol noise, and Latin noise, then uses the best-scoring output. It is not the default for full books because it can multiply OCR time on 100 MB+ PDFs.

The default best-mode settings are:

BEST_OCR_RENDER_ZOOMS=1.5
BEST_TESSERACT_PSMS=4

The render-zoom list is deliberately conservative. On this Windows test machine, adding 2.25 made the corrected one-page best-mode benchmark too slow for a routine website flow. If you still want a high-resolution bakeoff for a difficult page, temporarily set:

BEST_OCR_RENDER_ZOOMS=1.5,2.25
BEST_TESSERACT_PSMS=4,6

Use that only on quick tests or selected sample pages first. If the higher-resolution candidate clearly wins on a book, set the matching single-engine render zoom for the full run.

The app also cleans the selected text before speech. This matters because the most accurate-looking OCR output can still include page numbers, repeated book headers, digit-heavy layout fragments, and symbol debris that would sound terrible if read aloud. The TTS-specific cleanup normalizes Arabic-Indic digits, removes tatweel and decorative Quran annotation marks, expands common Arabic ligatures such as ﷺ, and fixes punctuation spacing while preserving useful Arabic diacritics.

The dry-run and benchmark tools report a text quality status before audio is generated. quality=good means the cleaned Arabic text is ready to send to TTS, quality=warning means the text is usable but still has minor artifacts, and quality=poor means OCR should be fixed before creating audio.

The web job path uses the same gate in local, worker, and browser-cloud modes. Poor text does not proceed to speech generation, which protects free-worker CPU time and hosted TTS calls from audio that would not be listenable.

For new books, the website defaults to a first-5-pages quick test. That keeps large scanned PDFs from tying up the free worker before OCR quality and pronunciation are known.

When the opening pages are not representative, use scripts/select_test_pages.py to build a small sample from the most text-dense pages. It scores embedded Arabic text and low-resolution ink density, so it also works as a rough selector for scanned books.

Voice quality should be tested the same way OCR quality is tested. Run scripts/benchmark_voices.py --write-report outputs/voice-benchmark-report.md to synthesize the same Arabic sample with SILMA, optional Habibi MSA, optional Supertonic 3, and eSpeak NG. For external candidates like 3arab-TTS 500M, KaniTTS Arabic, Emirati VITS Male, MOSS-TTS-Nano, OmniVoice/Arabic LoRA, Lahgtna OmniVoice v2, Lahgtna Chatterbox, NAMAA-Saudi-TTS, NAMAA-Egyptian-TTS, Saudi Chatterbox fine-tune, Chatterbox Arabic fine-tune, Saudi TTS, Egyptian Arabic Chatterbox, NileTTS-XTTS, Arabic XTTS-v2 Egyptian fine-tune, Chatterbox-Multilingual, Chatterbox-Multilingual ONNX, tts-arabic-onnx, Spark-TTS Arabic, Sofelia-TTS, Egyptian Arabic Qwen3-TTS, Saudi Arabic Qwen3-TTS, Emirati Qwen3.5-TTS, VoxCPM2, and personal/non-commercial Voxtral TTS, run scripts/export_tts_sample.py C:\path\to\arabic-book.pdf --env-file outputs\recommended-ocr.env --out-dir outputs\external-tts-sample and use the generated outputs\external-tts-sample\arabic-tts-sample.txt for every model. For external OCR candidates like QARI-OCR 0.4 GGUF, Loay Arabic-OCR-DeepSeek-OCR-2, DeepSeek-OCR-2, DeepSeek Arabic OCR v6, aNS Qwen3-VL Arabic OCR v3, Waraqon v3 Arabic OCR HTML Qari, DIMI Arabic OCR v2, Loay Arabic-OCR-Qwen2.5-VL-7B, Arabic-English handwritten OCR Qwen3-VL, Arabic-English handwritten OCR v3, Arabic handwritten OCR 4-bit Qwen2.5-VL, NAKBA Arabic manuscript line OCR baseline, HAFITH, Glimpse RTL OCR, olmOCR Arabic LoRA v2, Arabic OCR Qwen2.5-VL GGUF, Qwen3-VL Persian/Arabic line OCR, AtlasOCR, Ketaba-OCR, Qari-OCR-LoRA, DocTR Arabic FAST/PARSEQ, Kraken/eScriptorium Arabic script, Kairawan/Qalamus manuscript OCR, GLM-OCR Arabic/French documents, mimoha Arabic OCR, oi-OCR, Qianfan-OCR, and Falcon-OCR, run scripts/export_ocr_sample_images.py C:\path\to\arabic-book.pdf --out-dir outputs\external-ocr-sample and use the generated page-*.png files for every model. Then run scripts\score_external_ocr.py on the resulting text files so the external text is judged with the same Arabic speech-readiness metrics as the app. Tawkeed, Arabic-GLM-OCR-v2, Arabic-Qwen3.5-OCR-v4, and Baseer are already wired as optional sidecars, but you can still score external output if you have not installed the sidecars locally. The reports give timing and file paths, but the final choice should be made by listening to the audio samples and reading the OCR text because Arabic pronunciation, pacing, reading order, and comfort matter more than raw speed.

On the one-page scanned Arabic book sample, the corrected OCR_ENGINE=best benchmark selected Tesseract at 2x render scale with page segmentation mode 4:

easyocr@1.5x=3668.4
paddleocr@1.5x=2479.5
tesseract@2x-psm4=3736.0
tesseract@2x-psm6=3255.5
selected=tesseract@2x-psm4

That comparison took 260.83 seconds for one page on this Windows machine. The app now keeps Arabic specialist mode as the normal quality default because it catches cases where a single Arabic OCR engine fragments text. Use plain OCR_ENGINE=paddleocr only when you need a faster single-engine full-book run.

scripts/benchmark_ocr.py now prints a concrete full-book environment recommendation from the winning sample extraction, such as OCR_ENGINE=tesseract OCR_RENDER_ZOOM=2 TESSERACT_PSM=4. This keeps the expensive comparison step separate from the long production run.

Research Notes

  • EasyOCR supports Arabic and many other scripts, and remains easy to run locally on CPU.
  • PaddleOCR 3.x includes arabic_PP-OCRv5_mobile_rec, an Arabic-script recognition model listed for Arabic, Persian, Uyghur, Urdu, Pashto, Kurdish, Sindhi, Balochi, and English. The same documentation reports 81.27 accuracy on its Arabic dataset with 22.83 improvement over the previous generation.
  • The PP-OCRv5 paper describes a 5M-parameter specialized OCR system intended to stay lightweight while competing with much larger OCR models on standard benchmarks. That supports using it as the practical free default rather than jumping straight to a large VLM.
  • QARI-OCR 0.4 is an Apache-2.0 Arabic OCR VLM on Hugging Face, built on Qwen3-VL-4B and fine-tuned on Arabic book/manuscript OCR pairs. This is now the most directly relevant Arabic-specific OCR upgrade in the repo. The older QARI-OCR v0.3 2B model remains configurable with QARI_OCR_MODEL for smaller workers.
  • QARI-OCR 0.4 GGUF is an external benchmark path for testing QARI-style Arabic book OCR with a GGUF runtime. Keep it benchmark-only until the exact vision runner, image-prompt format, speed, and text quality beat the wired QARI sidecar on the same selected pages.
  • KATIB 0.8B is an Apache-2.0 Arabic OCR VLM fine-tuned for Arabic printed and handwritten text. It is wired as the smaller Arabic-trained sidecar to try before the heavier QARI path.
  • Ketaba-OCR LoRA is an Apache-2.0 Arabic manuscript OCR benchmark candidate. Keep it external for now because it requires a Qwen2.5-VL base model plus adapter setup rather than a simple sidecar.
  • Qari-OCR-LoRA is an Apache-2.0 QARI-family manuscript LoRA from the NakbaNLP 2026 Arabic manuscript OCR task. Keep it secondary to Ketaba because its own model card describes Ketaba as the primary winning model.
  • Tawkeed OCR is an Apache-2.0 Arabic-first OCR model forked from QARI-OCR v0.3 and fine-tuned for Arabic documents, handwriting, and scene text. It is wired as OCR_ENGINE=tawkeed-ocr, and is most useful when QARI-OCR 0.4 is too heavy or when edge-style Arabic OCR matters.
  • PaddleOCR-VL-1.6 now has a June 2026 paper signal in addition to the model card and official PaddleOCR docs. It is described as a 0.9B document parsing VLM with 96.3% OmniDocBench v1.6 accuracy, 109-language support, and state-of-the-art results across text, formulas, and tables. This is the most important general free/open OCR direction to watch for a stronger hosted worker.
  • oi-OCR is an Apache-2.0 Arabic-capable PDF/document parser with April 2026 ParseBench claims. Keep it external and score it on the same exported page images because structured Markdown/table extraction is different from clean long-form Arabic book transcription.
  • NuExtract3 is an Apache-2.0 4B multilingual document understanding model for OCR, document-to-Markdown, structured extraction, and multi-page PDF workflows. It is useful for hard layouts, forms, tables, and contracts, but it is not Arabic-book-specific and should stay external until same-page scoring proves it beats QARI/KATIB/Arabic-Qwen/Baseer.
  • Qianfan-OCR is an Apache-2.0 5B multilingual document-intelligence OCR/VLM. It has strong general document benchmark claims and public model-card usage examples, but it is not Arabic-book-specific and needs a GPU/large-worker external benchmark before it should influence this app.
  • Chandra OCR 2 is a 4B multilingual structured-document OCR model with Arabic support, Markdown/HTML/JSON output, and strong layout/table/form claims. Its code is Apache-2.0, but the weights are modified OpenRAIL-M, so it stays in the external benchmark lane for personal/family testing rather than the default hosted stack.
  • dots.ocr is an MIT 1.7B multilingual document parser that combines layout detection and content recognition, including reading-order, table, and formula handling. It is promising for complex Arabic layouts, but not Arabic-book-specific, so it stays external until same-page scoring beats the Arabic-trained stack.
  • DocTR Arabic FAST/PARSEQ is a classic OCR alternative: the FAST detector card is Apache-2.0 and designed to pair with an Arabic PARSEQ recognizer. Keep it external until the recognizer license and same-page Arabic book accuracy are confirmed.
  • Kairawan/Qalamus manuscript OCR is a free 2026 web-service signal for Arabic manuscript transcription, not a reusable worker dependency yet. Keep it external unless an open package/API terms/privacy path becomes clear and same-page scoring beats the wired Arabic OCR stack.
  • GLM-OCR Arabic/French documents is a recent GLM-OCR LoRA fine-tune for scanned Arabic/French administrative documents. It belongs in the form/newspaper/official-document benchmark lane, not the default book OCR lane.
  • mimoha Arabic OCR is an Apache-2.0 sparse-card Arabic OCR watchlist item. Keep it low priority unless a clean local runner and stronger evaluation details appear.
  • Surya is promising and supports OCR, layout analysis, reading order, and table recognition in 90+ languages. Current Surya 2 is a 650M-parameter document OCR model that can use llama.cpp or vllm, making it a better future upgrade path than a first default for a simple family website.
  • Surya's code is Apache-2.0, but its model weights use a modified AI Pubs OpenRAIL-M license that is free for research, personal use, and startups under the stated revenue/funding threshold. That is fine for a family/personal project but less simple than PaddleOCR's default path.
  • SILMA TTS is a 150M-parameter Arabic/English TTS model with Arabic Fusha/MSA support, diacritization, text normalization, accepts text with or without tashkeel, MIT code, and Apache-2.0 model weights. SILMA's Hugging Face launch article also calls out Arabic text handling, chunking, normalization, robustness, and audio-quality improvements. It is currently the best free local Arabic voice in this project because it is Arabic-focused, permissively licensed, and practical to run as a worker sidecar.
  • SILMA includes Arabic diacritization and text normalization features. This project exposes them through SILMA_ENABLE_NORMALIZER, SILMA_FORCE_TASHKEEL, and SILMA_NORMALIZE_NUMBERS; they are off by default in the Windows sidecar and Docker worker because those setups use dependency stubs. On Linux, set SILMA_FULL_NORMALIZER_DEPS=1 during setup/build if you want to install and test the full packages.
  • Mishkala Tashkeel is a lightweight Apache-2.0 Arabic diacritization model to test as a pronunciation preprocessor. Keep it external until listening tests prove it improves the exact book sample, because wrong automatic harakat can make Arabic narration sound worse or subtly change perceived meaning.
  • Tashkeel-350M is a larger Apache-2.0 Arabic diacritization benchmark. Compare it beside Mishkala on the same cleaned sample, because a larger preprocessor can improve pronunciation for one book and still make another book less comfortable or less faithful.
  • Mushkil is an Apache-2.0 AraT5V2 Arabic diacritization benchmark. Compare it beside Mishkala and Tashkeel-350M on the same cleaned sample, and keep it external unless it improves pronunciation while preserving meaning and long-listen comfort.
  • Thaka KSAA-2026 speech diacritization is a late-May 2026 shared-task-winning research signal for Arabic diacritization using speech plus text. Track it for future permissive code or checkpoints, but do not add it to the app yet because the current public evidence is a paper/benchmark result rather than a deployable model.
  • Habibi-TTS is a 2026 open-source Arabic speech synthesis project built around F5-TTS with a multi-dialect benchmark. Its specialized MSA model is Apache-2.0, but its unified, Saudi, and UAE models are CC-BY-NC-SA-4.0, so the app exposes habibi-msa as an optional MSA voice rather than making Habibi the default.
  • 3arab-TTS 500M is a very new Apache-2.0 Arabic-only 500M TTS model, with a VoiceDesign variant updated in June 2026. It is worth a same-sample listening benchmark, but it should not replace SILMA/Habibi until long-form stability, pacing, and setup complexity are proven.
  • KaniTTS Arabic is a recent Arabic-only 400M TTS model with high-speed claims. Test it when generation speed matters, but confirm license fit and compare skipped words, pronunciation, and long-passage comfort against SILMA/Habibi before promoting it.
  • Emirati VITS Male is an Apache-2.0 bilingual Emirati Arabic/English voice. It belongs in the dialect benchmark lane, not the default MSA audiobook lane, unless the target PDF benefits from Gulf pronunciation.
  • MOSS-TTS-Nano is an Apache-2.0 0.1B multilingual TTS model with Arabic among 20 supported languages. Its ONNX CPU path and packaged CLI make it a serious candidate for a free worker, but it needs an Arabic reference-voice benchmark before it should replace SILMA in the father-friendly UI.
  • Supertonic 3 is an OpenRAIL 99M multilingual TTS model with Arabic among 31 supported languages and a local ONNX CPU path. It is wired as optional supertonic-ar; use it as a speed/practicality benchmark, not as the Arabic-first default until listening tests beat SILMA/Habibi on the target book.
  • VoxCPM2 is an Apache-2.0 2B multilingual TTS model with Arabic listed among 30 supported languages, 48 kHz output, voice design/cloning, and roughly 8 GB VRAM guidance on its model card. It is now worth tracking as a strong-worker voice benchmark candidate, but SILMA remains the practical default because it is Arabic-focused and lighter.
  • Voxtral TTS is Mistral's open-weight 4B TTS model with Arabic among 9 listed languages and strong latency/quality claims. Keep it external and personal/non-commercial because the model card lists cc-by-nc-4.0 and 16GB+ GPU guidance.
  • Falcon-OCR is an Apache-2.0 300M early-fusion document OCR VLM from TII. It is promising because it is much smaller than 0.9B+ document VLMs, but it is general document OCR rather than Arabic-book-specific, so it should enter the benchmark watchlist before it enters the default pipeline.
  • Baseer OCR V1.0 is an Apache-2.0 Arabic OCR VLM fine-tuned from Qwen2-VL-2B for Arabic legal/complex documents, including multi-column layouts, stamps, tables, handwritten, and printed text. It is wired as an optional sidecar; benchmark it on selected pages before full-book use.
  • Arabic-GLM-OCR-v2 is a newer Apache-2.0 Arabic OCR VLM sidecar. Its model card reports strong Arabic document extraction and noise reduction, but it still needs independent scoring against QARI/KATIB/PaddleOCR/Tesseract on the selected book images before any full-book run.
  • DIMI Arabic OCR v2 is a newer Apache-2.0 Arabic OCR LoRA fine-tuned from Qwen2.5-VL-7B. Keep it external unless the smaller Arabic OCR sidecars fail and a strong worker can handle 7B-class LoRA inference.
  • Raqim-style OCR correction is research-only for now. Dictionary/LLM correction can improve OCR metrics, but it can also change source wording; keep exact extracted text as the default for religious and book audio.
  • Arabic-Qwen3.5-OCR-v4 is a 0.9B Apache-2.0 Arabic OCR VLM now wired as an optional sidecar. Its model card claims printed, handwritten, classical, and diacritic-heavy Arabic support, so benchmark it against KATIB/QARI/PaddleOCR/Tesseract before full-book use.
  • DeepSeek-OCR-2 is the official Apache-2.0 3B DeepSeek OCR successor with 2026 model-card/paper references and public document OCR benchmark results. It is not Arabic-specific, so keep it external and compare only on the exported Arabic book page images.
  • Loay Arabic-OCR-DeepSeek-OCR-2 is an Apache-2.0 Arabic fine-tune of DeepSeek-OCR-2 for high-precision Arabic OCR and layout analysis. It is promising, but still belongs in the external benchmark lane because it needs same-page scoring against QARI/KATIB/Arabic-Qwen/Baseer and a strong-worker runtime check.
  • DeepSeek Arabic OCR v6 is a newer Apache-2.0 Arabic-labeled DeepSeek-OCR fine-tune. It is promising enough to benchmark, but not enough to default because the model card has sparse Arabic-book evidence and no hosted inference provider.
  • Arabic-English handwritten OCR Qwen3-VL is an Apache-2.0 Qwen3-VL-4B watchlist model for Arabic/English handwritten OCR. Keep it external for handwriting-heavy pages because the model card presents it as research-oriented and not inference-provider deployed.
  • Arabic-English handwritten OCR v3 is an Apache-2.0 Qwen2.5-VL 3B-class watchlist model for Arabic/English handwriting and manuscripts. Keep it external for handwriting-heavy pages because it is large and not inference-provider deployed.
  • Arabic handwritten OCR 4-bit Qwen2.5-VL is an Apache-2.0 4-bit handwriting/manuscript checkpoint with about 2.44GB of model assets. It is a better external benchmark than the full handwritten checkpoint when the worker is memory-constrained, but it still needs same-page scoring before any wiring.
  • NAKBA Arabic manuscript line OCR baseline is a Qwen3-VL-8B LoRA baseline for the NAKBA NLP 2026 Arabic manuscript understanding shared task. Keep it line-level and external unless page images are first cropped into manuscript text lines, and confirm license fit before production.
  • HAFITH is an Apache-2.0 historical Arabic manuscript recognition model with Arabic-native tokenization and strong line-level CER claims. Glimpse RTL OCR is a separate Apache-2.0 Arabic/Persian text-line OCR benchmark with 6.97% CER claims. Keep both external because they require pre-segmented text lines rather than full-page PDFs.
  • olmOCR Arabic LoRA v2 fills the full-page manuscript lane when line cropping is impractical. Benchmark it externally against Ketaba/QARI and line-cropped options because it depends on a 7B olmOCR base model.
  • Arabic Large Nougat is a 0.4B Arabic book-page OCR-to-Markdown benchmark. It is directly relevant to printed Arabic books, but keep it external because it is GPL-3.0 and the model card warns about hallucination and context-length limits.
  • Arabic OCR Qwen2.5-VL GGUF is a QariOCR-v0.3-trained Arabic/English OCR fine-tune on a Qwen2.5-VL 7B GGUF/Unsloth path. It is relevant for scanned books, religious text, handwriting, and mixed Arabic-English documents, but it is large and needs license confirmation and same-page scoring before wiring.
  • Qwen3-VL Persian/Arabic line OCR is an Apache-2.0 Qwen3-VL 2B watchlist model for cropped Persian/Arabic text-line OCR. Keep it external unless a layout step crops pages into lines because the model card says it is not designed for full-page OCR.
  • Loay Arabic-OCR-Qwen2.5-VL-7B is a larger Arabic OCR VLM fine-tuned from Qwen2.5-VL-7B for Arabic text in images. Keep it external unless the smaller Arabic OCR sidecars fail and a strong worker can handle 7B-class inference.
  • AtlasOCR is a Darija/Moroccan Arabic OCR model based on Qwen2.5-VL 3B. It is not the default for standard Arabic books, but it is worth tracking for Moroccan/Darija PDFs after license terms are confirmed.
  • Arabic Legal Documents OCR 1.0 is a Gemma-licensed Gemma-3-4B-IT fine-tune for low-quality scanned Arabic legal documents. It may help legal or form-like PDFs, but it is domain-specific and should stay outside the default book-to-audio stack.
  • Facebook MMS TTS supports Arabic and is useful as a hosted fallback in Vercel mode, but the broader MMS TTS license is CC-BY-NC-4.0, so it is not the best permissive default for the local/worker stack.

Voice Selection Process

Use SILMA as the first local voice to test. It is the recommended baseline because it is Arabic-focused, lightweight compared with larger multilingual TTS systems, and Apache-2.0.

Use Habibi MSA as the optional second test when the sidecar is installed. It may sound better for some Modern Standard Arabic passages, but keep it optional because only the specialized models are Apache-2.0.

Use Mishkala Tashkeel, Tashkeel-350M, and Mushkil as external pronunciation-preprocessor benchmarks, not as automatic website defaults. Diacritize the same cleaned text sample, then listen-test plain, Mishkala, Tashkeel-350M, and Mushkil versions with SILMA/Habibi/Supertonic/eSpeak. Keep a preprocessor only if it improves pronunciation without adding distracting or wrong harakat and scripts\score_tts_preprocessor.py says the meaning-preservation score is high enough.

Track Thaka KSAA-2026 speech diacritization as a research signal, not a website dependency. The paper shows a winning CATT-Whisper ensemble for speech dictation diacritization, which is useful for understanding where Arabic pronunciation preprocessing is going, but it should not affect the production stack until a permissive, practical implementation can be tested on the same cleaned book sample.

Use 3arab-TTS 500M as a new Arabic-only external benchmark. It is permissively licensed and much smaller than VoxCPM2/Voxtral, but it is new enough that long-form stability and audiobook comfort need to be proven before it becomes a normal app voice.

Use KaniTTS Arabic as a speed-focused Arabic-only external benchmark. It is smaller than large multilingual voices, but its current metadata reports other, so verify license fit, word preservation, and pacing on the exact cleaned book text before wiring it into the app.

Use Emirati VITS Male only as a dialect-specific voice benchmark. It may be a nice match for Gulf/Emirati Arabic, but for MSA books SILMA/Habibi remain the better first tests.

Use MOSS-TTS-Nano as a future CPU-friendly benchmark. It is permissively licensed, supports Arabic, and has an ONNX CPU path, but it needs a clean Arabic reference/prompt audio workflow before it should appear as a normal app voice.

Use Supertonic 3 as the wired CPU-friendly comparison voice. It supports Arabic with a compact ONNX model and can be installed with scripts/setup_supertonic.ps1, but it is multilingual rather than Arabic-specialized, so listen against SILMA/Habibi on the same passage before choosing it for a full book.

Do not add Kyutai Pocket TTS to the Arabic voice picker yet. The current official Kyutai page makes it attractive for CPU real-time TTS, but the listed Pocket TTS languages are English, French, German, Spanish, Portuguese, and Italian, not Arabic. Revisit it only if Kyutai publishes Arabic support.

Use OmniVoice as the newest multilingual Arabic benchmark candidate. It is Apache-2.0, has Arabic in its broad language list, and is smaller than VoxCPM2, but it still needs side-by-side listening against SILMA/Habibi on the same cleaned Arabic text.

Use OmniVoice Arabic LoRA only after base OmniVoice is working. It is an Apache-2.0 Arabic adapter, but it adds another moving part and still needs the same listening and runtime test.

Use Lahgtna OmniVoice v2 only for dialect experiments. It is Arabic-focused and newer than the Chatterbox dialect entry, but the model card does not declare a license, so it should stay external until licensing and long-form stability are proven.

Use Lahgtna Chatterbox as a dialect benchmark, not the default audiobook voice. It is MIT and Arabic-focused across dialects, but long-form repetition/stability needs to be tested on the same cleaned sample.

Use Egyptian Arabic Chatterbox only for Egyptian/dialectal Arabic experiments. It is Apache-2.0 and trained on Egyptian Arabic, but it is a Chatterbox fine-tune that recommends GPU for real-time inference and may not fit MSA books.

Use NileTTS-XTTS only for Egyptian/dialectal Arabic experiments. The 2026 NileTTS paper and model card report improved Egyptian Arabic intelligibility versus XTTS v2, but it is trained on Egyptian Arabic and should not replace SILMA or Habibi MSA for standard Arabic books.

Use Arabic XTTS-v2 Egyptian fine-tune only as a dialectal listening benchmark after license review. Its project is MIT, but it is built on XTTS-v2 with the Coqui Public Model License, so keep it outside the default public/family deployment path unless that license and voice-cloning runtime fit the exact use case.

Use Chatterbox-Multilingual as a broader MIT Arabic-capable benchmark. It supports Arabic via language_id="ar" and can use a reference voice, but long-form book pacing and watermarking should be judged before it becomes a website voice.

Use Chatterbox Arabic fine-tune as the first Arabic-focused Chatterbox adapter to compare against SILMA/Habibi for MSA books. It is MIT and claims better Arabic pronunciation, diacritics, intonation, MSA, and dialect support, but it needs same-text listening tests and long-form stability proof before it becomes a normal app voice.

Use Chatterbox-Multilingual ONNX as the CPU/ONNX variant to benchmark when the free worker path needs a more portable runtime. It is MIT and Arabic-capable, but repetition, pacing, and runtime still need same-sample listening tests.

Use tts-arabic-onnx as a compact Arabic-only ONNX benchmark when CPU runtime is the bottleneck. It exposes smaller FastPitch/MixerTTS and vocoder combinations plus vowelizer options, but keep it external until the overall model/repo licensing is confirmed.

Use Spark-TTS Arabic as an external Classical/MSA benchmark only when you can provide diacritized input and reference audio through the Spark-TTS repo. Its setup is too involved for the father-friendly default.

Use Sofelia-TTS only for Palestinian/dialectal Arabic experiments. It is permissively licensed, but not a general MSA audiobook default.

Use Egyptian Arabic Qwen3-TTS only for Egyptian/dialectal Arabic experiments. It is permissively licensed and Arabic-capable, but it is a 1.7B Qwen3-TTS fine-tune, not hosted by an inference provider, and not the right default for MSA book narration.

Use NAMAA-Saudi-TTS, Saudi Chatterbox fine-tune, Saudi TTS, Saudi Arabic Qwen3-TTS, and Emirati Qwen3.5-TTS only for Gulf dialect experiments. NAMAA-Saudi-TTS is MIT and Chatterbox-based, Saudi Chatterbox fine-tune and Saudi TTS are Apache-2.0, while the Qwen voices are Apache-2.0 Qwen3-TTS-family fine-tunes; all should stay external until a same-text listening test proves they are better for the target PDF than SILMA/Habibi or Emirati VITS Male. Keep NAMAA-Saudi-TTS-V2 out of the default/free production lane because it is non-commercial, reference-audio based, and explicitly Najdi/Saudi rather than MSA book narration.

Use NAMAA-Egyptian-TTS only for Egyptian/dialectal experiments. It is MIT and Chatterbox-based with local and hosted examples, but its own model card targets conversational Egyptian Arabic rather than Modern Standard Arabic books.

Keep Arabic-F5-TTS-v2 out of the default public app. It may be useful for personal MSA experiments, but it is non-commercial and requires fully diacritized Arabic input.

Use VoxCPM2 only as a future strong-worker benchmark. It is permissively licensed and supports Arabic, but its 2B size and GPU-oriented requirements make it a poor fit for the first free CPU family deployment.

Use Voxtral TTS only for personal/non-commercial strong-worker benchmarks. It supports Arabic on the model card, but its license and GPU guidance make it the wrong default for a public family website.

Use eSpeak NG when speed and reliability matter more than naturalness, or when the neural voices are not installed on the worker.

The voice benchmark now reports both:

recommended -> quality-first starting voice, usually silma-local
fastest     -> fastest successful voice in the current run

The final voice choice still requires listening to the generated files, because Arabic pacing and comfort over long religious/commentary texts cannot be judged by runtime alone.

Optional Arabic-Trained VLM OCR Worker Paths

The repo includes optional KATIB, Arabic-Qwen, and QARI-OCR wiring for hard Arabic scans. For maximum quality on a short sample or strong worker, use:

OCR_ENGINE=arabic-max

arabic-max tries QARI-OCR, KATIB, Arabic-Qwen, Baseer, PaddleOCR-VL, PaddleOCR Arabic, EasyOCR Arabic, Surya, and Tesseract Arabic where installed, then keeps the cleanest text by the same speech-readiness score used by the app.

Try KATIB first when you want a smaller Arabic-trained model:

OCR_ENGINE=katib-ocr
KATIB_OCR_RENDER_ZOOM=1.5

Install it locally on Windows with:

.\scripts\setup_katib_ocr.ps1

KATIB 0.8B is Apache-2.0 and fine-tuned specifically for Arabic OCR, including printed and handwritten text. It is still a VLM path, so benchmark it on a small sample before using it for a full book.

Try Arabic-Qwen3.5-OCR-v4 as a second smaller Arabic-trained model:

OCR_ENGINE=arabic-qwen-ocr
ARABIC_QWEN_OCR_RENDER_ZOOM=1.5

Install it locally on Windows with:

.\scripts\setup_arabic_qwen_ocr.ps1

Arabic-Qwen3.5-OCR-v4 is Apache-2.0 and smaller than QARI. It is still a VLM path, so use it on short samples or a worker and promote it only if it beats the existing wired OCR stack on the same pages.

QARI-OCR remains the stronger/heavier Arabic-book path:

OCR_ENGINE=qari-ocr
QARI_OCR_RENDER_ZOOM=1.5

Install it locally on Windows with:

.\scripts\setup_qari_ocr.ps1

The QARI sidecar installs transformers, qwen-vl-utils, accelerate, peft, PyTorch, torchvision, and Pillow, then checks that the image-to-text model classes import successfully. The first real run downloads the model weights, so expect the first QARI test to take longer than later tests.

Then benchmark it against the lighter engines:

python scripts\benchmark_ocr.py C:\path\to\arabic-book.pdf --page-limit 1 --engines arabic baseer-ocr arabic-qwen-ocr katib-ocr qari-ocr paddleocr tesseract

OCR_ENGINE=katib-ocr tries KATIB first, then falls back to PaddleOCR, EasyOCR, and Tesseract. OCR_ENGINE=arabic-qwen-ocr tries Arabic-Qwen first, then falls back to PaddleOCR, EasyOCR, and Tesseract. OCR_ENGINE=baseer-ocr tries Baseer first, then falls back to PaddleOCR, EasyOCR, and Tesseract. OCR_ENGINE=qari-ocr tries QARI first, then falls back to PaddleOCR, EasyOCR, and Tesseract. OCR_ENGINE=arabic includes installed KATIB, Arabic-Qwen, Baseer, and QARI automatically unless ARABIC_INCLUDE_KATIB_OCR=0, ARABIC_INCLUDE_ARABIC_QWEN_OCR=0, ARABIC_INCLUDE_BASEER_OCR=0, or ARABIC_INCLUDE_QARI_OCR=0 is set. OCR_ENGINE=arabic-max always opts into the heavy Arabic OCR comparison path where those sidecars are installed. OCR_ENGINE=best does not include those VLM engines unless BEST_INCLUDE_KATIB_OCR=1, BEST_INCLUDE_ARABIC_QWEN_OCR=1, BEST_INCLUDE_BASEER_OCR=1, or BEST_INCLUDE_QARI_OCR=1 is set, because they can be much slower and heavier than the default OCR path.

Optional Surya Worker Path

The repo includes optional Surya wiring for hard scanned books. This remains useful when PaddleOCR-VL is unavailable or when you want to compare a Datalab document OCR path:

OCR_ENGINE=surya
SURYA_RENDER_ZOOM=1.5

OCR_ENGINE=surya tries Surya first, then falls back to PaddleOCR, EasyOCR, and Tesseract. OCR_ENGINE=best does not include Surya unless BEST_INCLUDE_SURYA=1 is set, because Surya can be much slower and heavier than the default OCR path.

Install it only on a worker or powerful local machine:

.\scripts\setup_surya.ps1

Surya also needs llama.cpp / llama-server for CPU or Apple Silicon, or vLLM for NVIDIA GPU. The setup script installs the Python sidecar but does not install those heavier backend runtimes.

Latest High-End OCR Watchlist

The current implementation intentionally avoids making a heavy VLM the default, but these are the free options to revisit when the worker has enough RAM/GPU:

  1. QARI-OCR 0.4: strongest Arabic-specific upgrade candidate because it is directly trained for Arabic OCR on Islamic books and Arabic manuscripts.
  2. KATIB 0.8B: smaller Arabic-trained OCR VLM to try when QARI is too heavy.
  3. PaddleOCR-VL-1.6: best general document-parser candidate because it is in the official PaddleOCR ecosystem and supports 109 languages.
  4. Ketaba-OCR LoRA: Arabic manuscript LoRA candidate to benchmark externally when the wired Arabic OCR stack fails difficult scans.
  5. Qari-OCR-LoRA: secondary QARI-family manuscript LoRA benchmark after Ketaba and QARI 0.4.
  6. Tawkeed OCR: wired Apache-2.0 Arabic-first QARI v0.3 fork to benchmark when QARI 0.4 is too heavy or edge-style Arabic OCR matters.
  7. Falcon-OCR: compact Apache-2.0 300M document OCR VLM worth benchmarking when Arabic VLM OCR is too heavy or when layout/table handling matters.
  8. Baseer OCR V1.0: Arabic-specialized and Apache-2.0, worth tracking for difficult Arabic legal or complex-layout pages.
  9. Arabic-GLM-OCR-v2: newer Arabic OCR VLM optional sidecar that needs short-sample scoring before full-book use.
  10. Arabic-Qwen3.5-OCR-v4: 0.9B Apache-2.0 Arabic OCR VLM wired as an optional sidecar; benchmark it beside KATIB/QARI on the target pages.
  11. DeepSeek-OCR-2: official Apache-2.0 3B general document OCR VLM to benchmark externally on strong-worker hardware.
  12. DeepSeek Arabic OCR v6: newer Arabic-labeled DeepSeek-OCR fine-tune to benchmark externally before considering any sidecar work.
  13. Arabic-English handwritten OCR Qwen3-VL: 4B handwritten Arabic/English OCR watchlist model to benchmark externally for handwriting-heavy pages.
  14. Arabic-English handwritten OCR v3: 3B-class handwritten Arabic/English OCR watchlist model to benchmark externally when manuscript/handwriting pages are the main failure.
  15. Arabic handwritten OCR 4-bit Qwen2.5-VL: smaller Apache-2.0 handwriting/manuscript OCR checkpoint to benchmark when memory is tight.
  16. NAKBA Arabic manuscript line OCR baseline: 2026 manuscript-line benchmark to test only after pages are cropped into lines.
  17. HAFITH: Apache-2.0 historical Arabic manuscript line-OCR benchmark to test only after page images are segmented into text lines.
  18. Glimpse RTL OCR: Apache-2.0 Arabic/Persian line-OCR benchmark to test only after page images are segmented into text lines.
  19. olmOCR Arabic LoRA v2: full-page Arabic manuscript LoRA benchmark for large workers.
  20. Arabic Large Nougat: GPL-3.0 Arabic book-page OCR-to-Markdown benchmark to test externally for printed books.
  21. Arabic OCR Qwen2.5-VL GGUF: QariOCR-trained Arabic/English GGUF/Unsloth benchmark for scanned books, religious text, handwriting, and mixed-language documents.
  22. Qwen3-VL Persian/Arabic line OCR: Apache-2.0 line-level OCR model to benchmark only when pages can be cropped into text lines.
  23. DIMI Arabic OCR v2: high-capacity Qwen2.5-VL-7B LoRA to benchmark externally for printed Arabic and diacritics-heavy pages.
  24. Loay Arabic-OCR-Qwen2.5-VL-7B: high-capacity Arabic OCR VLM to benchmark externally when smaller Arabic OCR models are not enough.
  25. AtlasOCR: Darija/Moroccan Arabic OCR model to test only when the source PDFs need that dialect coverage.
  26. Arabic Legal Documents OCR 1.0: Gemma-licensed legal/structured-document OCR benchmark for legal PDFs only; not a default audiobook OCR engine.
  27. Kraken/eScriptorium Arabic script: open-source historical/non-Latin OCR workflow to test when pages look like archival Arabic print or manuscripts; model choice and line segmentation make it external-only for this app.
  28. Kairawan/Qalamus manuscript OCR: free web-service evidence for Arabic manuscript transcription, but service-only and not a deployable free-software worker component yet.
  29. Surya / Chandra: useful document parsing alternatives for layout-heavy scans, but less clean as a default because model-weight licensing and runtime needs are more complicated.

Latest High-End TTS Watchlist

The current implementation keeps SILMA as the default local neural voice because it is Arabic-focused, permissively licensed, and practical to install as a sidecar. The strongest free/open voice candidates to revisit on a bigger worker are:

  1. Supertonic 3: OpenRAIL, Arabic among 31 supported languages, 99M parameters, ONNX CPU inference, and now wired as optional supertonic-ar. Benchmark it as the fast local CPU challenger.
  2. 3arab-TTS 500M: Apache-2.0, Arabic-only, about 500M parameters, and a VoiceDesign variant. Benchmark it on the same cleaned text before any app wiring because it is very new.
  3. KaniTTS Arabic: Arabic-only, about 400M parameters, and speed-focused, but license metadata needs confirmation. Benchmark it on the same cleaned text before any app wiring.
  4. Emirati VITS Male: Apache-2.0 bilingual Emirati Arabic/English. Benchmark only for Gulf dialect fit.
  5. MOSS-TTS-Nano: Apache-2.0, Arabic among 20 supported languages, 0.1B parameters, packaged CLI, and ONNX CPU path. Benchmark it with an Arabic reference voice as another CPU-friendly candidate.
  6. OmniVoice plus Arabic LoRA: Apache-2.0, Arabic included in 646-language coverage, and a separate Arabic LoRA adapter exists. Benchmark it externally as the newest broad multilingual candidate.
  7. Lahgtna OmniVoice v2: Arabic dialect OmniVoice fine-tune; benchmark externally for dialectal content and confirm licensing before any production wiring.
  8. Lahgtna Chatterbox: MIT Arabic dialect TTS; benchmark externally for dialectal content and watch for repetition on long text.
  9. Egyptian Arabic Chatterbox: Apache-2.0 Egyptian dialect Chatterbox fine-tune; benchmark only for Egyptian Arabic content.
  10. NileTTS-XTTS: Apache-2.0 Egyptian Arabic XTTS fine-tune with 2026 paper results; benchmark only for Egyptian/dialectal content.
  11. Arabic XTTS-v2 Egyptian fine-tune: promising Egyptian speaker quality work, but CPML/base-license review is required before any personal/public use decision.
  12. Chatterbox-Multilingual: MIT, Arabic listed among 23 supported languages, and simple local examples. Benchmark it with the same Arabic reference voice and listen for long-form pacing.
  13. Chatterbox-Multilingual ONNX: MIT ONNX packaging with Arabic support. Benchmark it for free CPU/ONNX worker practicality before wiring.
  14. tts-arabic-onnx: compact Arabic-only ONNX FastPitch/MixerTTS package. Benchmark CPU speed, speaker IDs, pace, and vowelizers, but confirm license fit before production.
  15. Mishkala, Tashkeel-350M, and Mushkil: Apache-2.0 pronunciation-preprocessor benchmarks. Test plain, lightweight tashkeel, larger-model tashkeel, and AraT5V2 tashkeel on the same voice before changing production settings.
  16. Thaka KSAA-2026 speech diacritization: research-only signal for speech-plus-text Arabic diacritization; wait for permissive code/weights before any app work.
  17. Spark-TTS Arabic: Apache-2.0 Classical/MSA candidate, but requires diacritized input and the Spark-TTS repo.
  18. Sofelia-TTS: Apache-2.0 Palestinian Arabic voice benchmark for dialectal content.
  19. VoxCPM2: Apache-2.0, Arabic among 30 supported languages, 48 kHz output, and voice design/cloning. Benchmark it only on GPU/large-worker hardware.
  20. Voxtral TTS: Arabic listed and high-quality open weights, but CC-BY-NC-4.0 and 4B GPU-oriented deployment. Benchmark only for personal/non-commercial strong-worker comparisons.
  21. Habibi-TTS MSA: Arabic-specific and already wired as an optional voice; continue comparing it against SILMA for MSA passages.
  22. Egyptian Arabic Qwen3-TTS: Apache-2.0 Qwen3-TTS dialect fine-tune to benchmark only for Egyptian Arabic; not the MSA audiobook default.
  23. Saudi Arabic Qwen3-TTS: Apache-2.0 Qwen3-TTS dialect fine-tune to benchmark only for Saudi/Gulf Arabic.
  24. Emirati Qwen3.5-TTS: Apache-2.0 Qwen3-TTS-family dialect fine-tune to benchmark beside Emirati VITS Male for Emirati/Gulf content.
  25. Arabic-F5-TTS-v2: personal/non-commercial MSA candidate that requires tashkeel; do not use as the default public free website voice.
  26. Qwen3-TTS: Apache-2.0 and strong generally, but official released model cards list Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, and Italian. Do not promote the base model until Arabic support and a practical Arabic inference path are verified from primary sources.

For the current father-friendly website, the right process is still: run a 5-page sample, benchmark arabic-max and the lighter Arabic OCR modes, export the same cleaned TTS sample, listen to SILMA/Habibi/Supertonic/eSpeak samples, optionally test Mishkala/Tashkeel-350M/Mushkil preprocessing, 3arab-TTS 500M, KaniTTS Arabic, Emirati VITS Male, MOSS-TTS-Nano, OmniVoice/Arabic LoRA, Lahgtna OmniVoice v2, Lahgtna Chatterbox, NAMAA-Saudi-TTS, Saudi Chatterbox fine-tune, Saudi TTS, Egyptian Arabic Chatterbox, NileTTS-XTTS, Arabic XTTS-v2 Egyptian fine-tune, Chatterbox-Multilingual, Chatterbox-Multilingual ONNX, tts-arabic-onnx, Spark-TTS Arabic, Sofelia-TTS, Egyptian Arabic Qwen3-TTS, Saudi Arabic Qwen3-TTS, Emirati Qwen3.5-TTS, or personal/non-commercial Voxtral TTS externally with that exact text, then process the full book only after text quality is good.

Do not confuse "free/open model" with "available as a hosted inference endpoint." Current Hugging Face model cards show QARI-OCR 0.4 and SILMA TTS as free/open candidates, but not served as a simple hosted Hugging Face inference route and not deployed by a hosted inference provider. That is why the recommended public website remains Vercel for the UI plus a Docker worker for OCR/TTS, not Vercel-only cloud TTS.

Keep audio storage deliberately simple for the free hosted path. The Docker worker stores finished MP3/WAV files locally under outputs/ and the app exposes download URLs until retention cleanup removes old files. That fits the father-friendly goal because the user downloads the audio when it is ready. Permanent hosted audio links should be a later opt-in using Vercel Blob or another object store, because long audiobook files can consume free storage, transfer, operation, and edge-request quotas quickly.

If the wired OCR engines are not clean enough, export fixed page images before trying external OCR models:

python scripts\export_ocr_sample_images.py C:\path\to\arabic-book.pdf --out-dir outputs\external-ocr-sample

Use the generated external-ocr-sample.md handoff and compare external QARI-OCR 0.4 GGUF, Loay Arabic-OCR-DeepSeek-OCR-2, DeepSeek-OCR-2, DeepSeek Arabic OCR v6, aNS Qwen3-VL Arabic OCR v3, Waraqon v3 Arabic OCR HTML Qari, Ketaba-OCR, Qari-OCR-LoRA, oi-OCR, NuExtract3, Qianfan-OCR, Chandra OCR 2, dots.ocr, Arabic Large Nougat, Kraken/eScriptorium Arabic script, Kairawan/Qalamus manuscript OCR, HAFITH, Glimpse RTL OCR, olmOCR Arabic LoRA v2, Falcon-OCR, DIMI Arabic OCR v2, Loay Arabic-OCR-Qwen2.5-VL-7B, Arabic Legal Documents OCR 1.0, Arabic-English handwritten OCR Qwen3-VL, Arabic-English handwritten OCR v3, Arabic handwritten OCR 4-bit Qwen2.5-VL, NAKBA Arabic manuscript line OCR baseline, Arabic OCR Qwen2.5-VL GGUF, Qwen3-VL Persian/Arabic line OCR, AtlasOCR, or similar OCR outputs against the wired Arabic stack on those exact same page images. Tawkeed, Arabic-GLM-OCR-v2, Arabic-Qwen3.5-OCR-v4, and Baseer are already wired as optional sidecars, but the same sample images are still useful if you want to score them externally before installing the sidecar.

After the external OCR model writes text, score its output and save JSON for the promotion gate:

python scripts\benchmark_ocr.py test_pdfs\book-best-5-pages.pdf --page-limit 5 --engines arabic-max arabic tawkeed-ocr baseer-ocr arabic-qwen-ocr katib-ocr qari-ocr paddleocr tesseract --json > outputs\external-ocr-sample\wired-ocr-baseline.json
python scripts\score_external_ocr.py --candidate qari-gguf=outputs\external-ocr-sample\qari-gguf.txt --candidate loay-deepseek-ocr-2=outputs\external-ocr-sample\loay-deepseek-ocr-2.txt --candidate ketaba=outputs\external-ocr-sample\ketaba.txt --candidate loay-qwen25=outputs\external-ocr-sample\loay-qwen25.txt --candidate legal-docs-ocr=outputs\external-ocr-sample\legal-docs-ocr.txt --candidate nuextract3=outputs\external-ocr-sample\nuextract3.txt --candidate chandra=outputs\external-ocr-sample\chandra.txt --candidate dots-ocr=outputs\external-ocr-sample\dots-ocr.txt --candidate arabic-large-nougat=outputs\external-ocr-sample\arabic-large-nougat.txt --candidate kraken=outputs\external-ocr-sample\kraken.txt --candidate handwritten-4bit=outputs\external-ocr-sample\handwritten-4bit.txt --candidate olmocr-arabic-lora=outputs\external-ocr-sample\olmocr-arabic-lora.txt --candidate qwen25-gguf=outputs\external-ocr-sample\qwen25-gguf.txt --candidate falcon=outputs\external-ocr-sample\falcon.txt --candidate arabic-glm=outputs\external-ocr-sample\arabic-glm.txt --baseline-json outputs\external-ocr-sample\wired-ocr-baseline.json --write-report outputs\external-ocr-sample\external-ocr-score.md --write-json outputs\external-ocr-sample\external-ocr-score.json
python scripts\model_promotion_gate.py --candidate-name "External OCR winner" --kind ocr --license Apache-2.0 --score-json outputs\external-ocr-sample\external-ocr-score.json --same-sample --runtime-ok --privacy-ok --human-reviewed --write-report outputs\model-promotion-gate.md

The repo now includes a deliberately optional PaddleOCR-VL sidecar:

.\scripts\setup_paddleocr_vl.ps1
python scripts\benchmark_ocr.py C:\path\to\arabic-book.pdf --page-limit 1 --engines arabic arabic-qwen-ocr katib-ocr qari-ocr paddleocr paddleocr-vl tesseract

Use OCR_ENGINE=paddleocr-vl only for short samples or a strong worker. It falls back to regular PaddleOCR, EasyOCR, and Tesseract when the sidecar is unavailable or fails. OCR_ENGINE=best does not include PaddleOCR-VL unless BEST_INCLUDE_PADDLEOCR_VL=1 is set.

Source Links