| 222 | |
| 223 | |
| 224 | def parser() -> argparse.ArgumentParser: |
| 225 | p = argparse.ArgumentParser(description=__doc__ or "extract pdf assets") |
| 226 | p.add_argument("--input", required=True, help="Fetch JSON path, metadata JSON path, JSON string, or raw paper reference.") |
| 227 | p.add_argument("--output", default="", help="Output JSON path.") |
| 228 | p.add_argument("--assets-dir", default="", help="Optional explicit assets directory.") |
| 229 | p.add_argument("--max-pages", type=int, default=40, help="Maximum pages to scan.") |
| 230 | p.add_argument("--min-searchable-chars", type=int, default=100, help="Minimum characters for a page to count as searchable text.") |
| 231 | p.add_argument("--ocr-dpi", type=int, default=300, help="DPI used when OCR fallback is needed.") |
| 232 | p.add_argument("--figure-dpi", type=int, default=FIGURE_RENDER_DPI, help="DPI for figure-level page rendering.") |
| 233 | return p |
| 234 | |
| 235 | |
| 236 | def ensure_record(input_value: str) -> dict: |