- Conditionally mount ingestion router only when OpenSearch + embedding are configured - Add `ingestionAvailable` field to /api/health response - Add `ingestion` feature flag to frontend (hides Search nav, Ingest button, OpenSearch badge, indexed badges/filters when disabled) - Skip ingestion polling when flag is off - Make OpenSearch + embedding optional in docker-compose via profiles - Add docker-compose.ingestion.yml override for full-stack ingestion - Set BATCH_PAGE_SIZE=5 default in Docker local image - Lead Quick Start with one-liner docker run command - Document ingestion as opt-in with dedicated section - Add BATCH_PAGE_SIZE, MAX_FILE_SIZE_MB, MAX_PAGE_COUNT, RATE_LIMIT_RPM to config tables - Update test counts (380 backend, 159 frontend) - Date CHANGELOG 0.4.0, bump frontend version to 0.4.0 - Sync CONTRIBUTING.md with E2E Karate test sections Closes #180
52 lines
2.3 KiB
Markdown
52 lines
2.3 KiB
Markdown
# Docling Studio
|
|
|
|
A visual document analysis studio powered by [Docling](https://github.com/DS4SD/docling).
|
|
|
|
Upload a PDF, configure the extraction pipeline, and visualize the results — text, tables, images, formulas, bounding boxes — all from your browser.
|
|
|
|
{ width="600" }
|
|
|
|

|
|
|
|
## Features
|
|
|
|
- **PDF viewer** with page navigation, bounding box overlay, and resizable results panel
|
|
- **Configurable Docling pipeline** — OCR, table extraction, code/formula enrichment, picture classification & description, image generation
|
|
- **Bounding box visualization** — color-coded element overlay directly on the PDF
|
|
- **Chunking** — split extracted content into semantic chunks (hierarchical, hybrid, or page-based) with configurable token limits
|
|
- **Markdown & HTML export** of extracted content
|
|
- **Document management** — upload, list, delete
|
|
- **Analysis history** — re-visit and open past analyses
|
|
- **Feature flags** — capabilities adapt to the conversion engine (local vs remote)
|
|
- **Upload limits** — configurable max file size (`MAX_FILE_SIZE_MB`) and max page count (`MAX_PAGE_COUNT`) per document
|
|
- **Rate limiting** — configurable requests per minute per IP (`RATE_LIMIT_RPM`)
|
|
- **Deployment modes** — self-hosted (default) or HuggingFace Spaces (with disclaimer banner)
|
|
- **Health endpoint** — `/api/health` reports engine type, deployment mode, and database status
|
|
- **Dark / Light theme** and **FR / EN** localization
|
|
|
|
## Tech Stack
|
|
|
|
| Layer | Stack |
|
|
|-------|-------|
|
|
| **Frontend** | Vue 3, TypeScript, Vite, Pinia |
|
|
| **Backend** | FastAPI, Docling 2.x, SQLite (aiosqlite) |
|
|
| **CI** | GitHub Actions (lint, type-check, test, build) |
|
|
| **Infra** | Docker Compose + Nginx |
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Docker (fastest)
|
|
docker run -p 3000:3000 ghcr.io/scub-france/docling-studio:latest-local
|
|
```
|
|
|
|
Open [http://localhost:3000](http://localhost:3000) and upload a PDF.
|
|
|
|
!!! note
|
|
The first analysis takes longer as Docling downloads its ML models (~400 MB). Subsequent runs are fast.
|
|
|
|
See [Getting Started](getting-started.md) for local development setup.
|
|
|
|
## License
|
|
|
|
[MIT](https://github.com/scub-france/Docling-Studio/blob/main/LICENSE) — Pier-Jean Malandrino
|