Serves browser-reader manifests, audio, presenter video, and PDF page images.
Source: web/backend/routers/reader.py
GET /api/jobs/{job_id}/reader/statusReturns {available, message} for completed highlight/lip-sync jobs with a reader manifest.
GET /api/jobs/{job_id}/reader/manifestLoads and returns reader_manifest.json.
GET /api/jobs/{job_id}/reader/audioStreams reader_audio.mp3.
GET /api/jobs/{job_id}/reader/presenterStreams presenter.mp4 for lip-sync reader jobs.
GET /api/jobs/{job_id}/reader/pages/{filename}Streams a rendered PDF page image from pages/. The filename is restricted to a plain basename to prevent traversal.
Reader Router
├── Web Database (job lookup)
├── DB Models (Job, JobStatus)
├── Storage Service (get_output_local_path)
└── Reader Assets (asset filenames)