react-best-practices

๐Ÿ“„ PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable.

์„ค์น˜
CLI
npx skills add https://github.com/majcheradam/ocrbase --skill react-best-practices

CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์Šคํ‚ฌ์„ ์„ค์น˜ํ•˜๊ณ  ์ž‘์—… ๊ณต๊ฐ„์—์„œ SKILL.md ์›Œํฌํ”Œ๋กœ ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•˜์„ธ์š”.

์ตœ๊ทผ ์—…๋ฐ์ดํŠธ: 4/29/2026

ocrbase: Model-Agnostic OCR API

Release Docker Bun License

๐Ÿ“„ ocrbase is a lightweight, model-agnostic API that standardizes document parsing across visual language models (VLMs).

Key Features of ocrbase

๐Ÿชถ Lightweight: Tiny Bun + Elysia service, single container, minimal footprint.

๐Ÿ”Œ Model-Agnostic: Point at any supported VLM โ€” GLM-OCR, PaddleOCR-VL โ€” via env vars.

๐Ÿ“Š State of the Art: Backed by models scoring โ‰ฅ94.5 on OmniDocBench v1.5.

๐Ÿ’Ž Easy to Deploy: One command away from a working OCR API.

๐Ÿงฉ Core

  • /v1/parse โ€” turn a document into text
  • /v1/parse/async โ€” enqueue a parse job
  • /v1/extract โ€” extract structured JSON from a document
  • /v1/extract/async โ€” enqueue an extract job
  • /v1/job/:jobId โ€” inspect parse or extract job status

๐Ÿง  Models

Both models are state of the art:

๐Ÿ“‹ Requirements

[!IMPORTANT]
ocrbase does not ship the models โ€” point it at a running inference server:

๐Ÿš€ Quick Start

docker run -d -p 3000:3000 \
  -e PADDLEOCR_URL=http://localhost:8190 \
  -e GLM_OCR_URL=http://localhost:5002 \
  --name ocrbase ghcr.io/ocrbase-hq/ocrbase

๐Ÿ› ๏ธ Develop

bun install
bun dev

โ˜๏ธ Optional S3 Input Staging

If S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_BUCKET, and S3_ENDPOINT are set, /v1/parse will:

  • upload incoming File inputs to S3
  • fetch remote document URLs and upload the contents to S3
  • upload base64 or data URL payloads to S3
  • pass a presigned GET URL into the selected document model

If those env vars are not set, ocrbase keeps the current direct behavior and sends the original input to the model.

๐Ÿ“ฌ Optional BullMQ Parse Queue

If REDIS_URL and the S3 env vars above are set, queue mode is enabled:

  • POST /v1/parse uploads or normalizes the input to S3, enqueues a parse job, waits for completion, and returns the normal parse response
  • POST /v1/parse/async returns 202 { jobId }
  • GET /v1/job/:jobId returns the job state plus result or error

If Redis is missing, or Redis is present but S3 is not fully configured, POST /v1/parse keeps the existing direct behavior and the async/status endpoints return 503.

When queue mode is enabled, Bull Board is also available at /v1/admin/queues.