Thanks for considering a contribution.
OpenCR exists to make Turkish-language and archival OCR easy to run, share, and improve — every PR, issue, and dataset published with OpenCR helps that goal.
-
File issues. Found a bug, a layout that OpenCR struggles with, or a confusing piece of docs? Open an issue with a short PDF (or page screenshot) we can reproduce against.
-
Add Turkish-language test fixtures. A small public-domain PDF + the expected text is one of the highest-leverage contributions.
-
Benchmarks. Compare OpenCR against Tesseract / Surya / PaddleOCR / Marker on a Turkish corpus and post the table — even informal numbers are useful.
-
Deployment recipes. vLLM, hosted GPU endpoints, and reproducible benchmark environments that improve throughput or quality.
-
Translations. README and dataset cards in additional languages.
git clone https://github.com/cdliai/opencr.git
cd opencr
make install
make testmake run starts a local dev server on http://localhost:39672 and points it at MODEL_SERVER_URL (default: http://localhost:39671). Start the bundled GPU stack with docker compose up -d, or provide another OpenAI-compatible GPU endpoint.
-
Python: keep it boring and explicit. Type hints on public functions. No new dependencies without a brief rationale in the PR.
-
Frontend: stays Alpine + plain CSS until the state model genuinely outgrows it. No build step, no framework rewrite.
-
Tests: every new code path should have a unit or integration test. We use
pytestandpytest-asyncio.
-
Open an issue first for non-trivial changes — a 5-line discussion saves a 500-line rewrite.
-
Branch from
main, name itfeat/...orfix/.... -
Run
make lint testbefore pushing. -
PR description: what changed, what it fixes, how to verify locally.
If a particular PDF regresses after a change, please attach (or link to a public copy of) the PDF, the page number, what OpenCR produced, and what was expected. Quality bugs without a reproducer are very hard to act on.
Be respectful. We're a small project trying to do useful work for Turkish-language NLP — no room for harassment or discrimination here.
By submitting a PR, you agree your contribution is licensed under the project's Apache 2.0 License.