Files
meetus/process_doc.py
Mariano Gabriel ca8b3a784d doocus first ver
2026-07-05 10:08:42 -03:00

60 lines
2.0 KiB
Python

#!/usr/bin/env python3
"""
doocus CLI — extract one document into a textified run folder.
Parallels process_meeting.py. Deterministic and offline: no cloud AI touches the
source. Produces docs-output/<YYYYMMDD-NNN-stem>/{content.md, meta.json,
thumb.jpg?, manifest.json}.
python process_doc.py notes.docx
python process_doc.py report.pdf --output-dir docs-output/run1
python process_doc.py scan.png --ocr
"""
import argparse
import logging
import sys
from doocus.workflow import DocConfig, DocWorkflow
def main() -> int:
parser = argparse.ArgumentParser(description="Extract a document into a textified run folder.")
parser.add_argument("source", help="Path to the document to extract")
parser.add_argument("--output-dir", default="docs-output",
help="Base output directory (default: docs-output)")
parser.add_argument("--no-cache", action="store_true",
help="Force a fresh run folder instead of reusing the latest")
parser.add_argument("--render", action="store_true",
help="Render page/slide images where supported (needs extra deps)")
parser.add_argument("--ocr", action="store_true",
help="OCR images / scanned PDFs (needs pytesseract + tesseract)")
parser.add_argument("--verbose", action="store_true", help="Verbose logging")
args = parser.parse_args()
logging.basicConfig(
level=logging.DEBUG if args.verbose else logging.INFO,
format="%(message)s",
)
config = DocConfig(
source=args.source,
output_dir=args.output_dir,
no_cache=args.no_cache,
render=args.render,
ocr=args.ocr,
)
try:
result = DocWorkflow(config).run()
except FileNotFoundError as e:
print(f"ERROR: {e}", file=sys.stderr)
return 1
print(f"\n{result['family']}{result['output_dir']}")
if result["warnings"]:
print(" warnings: " + "; ".join(result["warnings"]))
return 0
if __name__ == "__main__":
sys.exit(main())