How newnol/retain-pdf-en works
RetainPDF is a full-stack tool for translating PDFs while preserving page layout, including scanned documents and complex inline formulas. Its main workflow is upload, job creation, OCR and document normalization, translation, layout reconstruction and PDF rendering, then artifact download or reading. The graph also includes job monitoring and diagnostics, OCR provider integrations, and artifact storage. README capabilities inform the end-to-end pipeline; sampled source confirms frontend job/upload behavior and artifact handling, but does not expose every backend or Python call, so uncertain links are omitted.
Main entry points: job_runner/mod.rs Job runner · jobs/mod.rs Job endpoints · main.js Web application · ocr_flow/mod.rs OCR processing
Components 24
User interface
- Web application
frontend/src/js/main.js - Upload controls
frontend/src/js/features/upload/controller.js - Workflow actions
frontend/src/js/features/app-actions/controller.js - Job monitoring
frontend/src/js/features/job-runtime/controller.js - Job history
frontend/src/js/features/recent-jobs/controller.js - PDF reader
frontend/src/js/features/reader-dialog/controller.js
Rust API
- Rust API
backend/rust_api/src/app/router.rs - Upload endpoint
backend/rust_api/src/routes/uploads.rs - Job endpoints
backend/rust_api/src/routes/jobs/mod.rs - Job creation
backend/rust_api/src/services/jobs/creation.rs - Job runner
backend/rust_api/src/job_runner/mod.rs - OCR processing
backend/rust_api/src/job_runner/ocr_flow/mod.rs - Translation processing
backend/rust_api/src/job_runner/translation_flow.rs - Render processing
backend/rust_api/src/job_runner/render_flow.rs - Artifact delivery
backend/rust_api/src/services/artifacts/mod.rs
Document pipeline
- OCR normalization
backend/scripts/services/document_schema/normalize_pipeline.py - Document workflow
backend/scripts/runtime/pipeline/book_pipeline.py - PDF reconstruction
backend/scripts/services/rendering/render_only_pipeline.py
External services
- OCR providers
backend/rust_api/src/ocr_provider/catalog.rs - OCR services
- Translation service
Job data
- Job records
backend/rust_api/src/db.rs - Job artifacts
backend/rust_api/src/storage_paths.rs
Other components
- PDF user
Connections 29
- PDF user → Web application: uses
- Web application → Upload controls: mounts
- Web application → Workflow actions: mounts
- Web application → Job monitoring: mounts
- Web application → Job history: mounts
- Web application → PDF reader: opens
- Upload controls → Upload endpoint: uploads PDF
- Workflow actions → Job endpoints: submits job
- Job monitoring → Job endpoints: polls and controls
- Job history → Job endpoints: lists jobs
- PDF reader → Artifact delivery: loads PDF
- Rust API → Upload endpoint: routes requests
- Rust API → Job endpoints: routes requests
- Job endpoints → Job creation: creates jobs
- Job creation → Job runner: launches jobs
- Job runner → OCR processing: runs OCR stage
- Job runner → Translation processing: runs translation stage
- Job runner → Render processing: runs render stage
- OCR processing → OCR providers: selects provider
- OCR providers → OCR services: sends OCR requests
- OCR processing → OCR normalization: normalizes OCR
- Job runner → Document workflow: invokes workflow
- Document workflow → Translation service: requests translation
- Document workflow → PDF reconstruction: reconstructs pages
- Job endpoints → Job records: reads and writes
- Job runner → Job records: updates job state
- Job runner → Job artifacts: writes outputs
- Artifact delivery → Job artifacts: reads files
- Job endpoints → Artifact delivery: serves downloads