README and requirements: metadata rules and link drops in plain English
This commit is contained in:
@@ -137,3 +137,7 @@ Status: stack items 1-5 agreed by Ty; items 6-8 follow from his standards (ACX s
|
||||
- (C) One command does a whole book: `python3 _pipeline/cli.py process <pdf>`. It fails with exit code 1 and a clear message if any step or any ACX check fails. Warnings are logged, there is no per-book approval gate. Re-running skips audio that already exists unless the script or voice settings changed or `--force` is given.
|
||||
- (C) One book at a time (workflow concurrency group). A failed run commits nothing and leaves the PDF in `_incoming/`. The commit-back is a single commit marked `[skip ci]` that also removes the PDF from `_incoming/`, so it cannot start another run.
|
||||
- (C) The voice endpoint is a setting (`voice.endpoint`, env `AUDIOBOOK_VOICE_ENDPOINT`, repo variable `AUDIOBOOK_VOICE_ENDPOINT`), default in CI `http://192.168.1.202:8090/tts`. Locked voice settings are unchanged. Never publish anything outside the repo.
|
||||
|
||||
## Metadata must never fail a drop, and links can be dropped (2026-10-18, Ty)
|
||||
- (C) Missing title/author never stops a run (run 191 failed on a scanned PDF with no "by" line and no PDF metadata). Order is deterministic and logged: sidecar .json, then PDF Title / a "By Name" line on the first pages (OCR for scanned first pages) / PDF Author, then a name under the title, then the file name. No author = "Unknown" (folder `unknown`) with a warning; no title = cleaned file name. book.json records the source of each value (`metadata_sources`). Code: `_pipeline/meta.py`.
|
||||
- (C) Ty can drop `_incoming/<anything>.url` (or `.txt`) holding one http(s) address of a PDF (Windows `URL=` shortcut also read; arxiv.org/abs/<id> is rewritten to the PDF). The job downloads it (curl, redirects, time and size limits, must be a real PDF), stores it as the book's source PDF, records `source_url` in book.json, removes the link file in the same atomic commit-back, and commits nothing on failure. Code: `_pipeline/fetch.py`.
|
||||
|
||||
Reference in New Issue
Block a user