> Convert PDF files to Markdown using opendataloader-pdf. Extracts text, tables, headings, lists, and images with correct reading order. Use for PDF parsing, PDF to Markdown conversion, document extraction, and AI-ready data preparation.
npx skills add https://github.com/first-fluke/oh-my-agent --skill oma-pdf
Convert PDF files into structured Markdown or another requested extraction format while preserving readable document structure for LLM context, RAG, or downstream review.
input_path: PDF file or folder pathoutput_dir: optional target directoryformat: optional output format, default markdownocr_languages: optional OCR language list for scanned or image-based PDFsextraction_options: optional flags for tagged structure, image extraction, or hybrid conversionuvx opendataloader-pdf for standard conversionuvx --from "opendataloader-pdf[hybrid]" opendataloader-pdf-hybrid for OCR or hybrid conversion (the hybrid server is a console script of the [hybrid] extra, not a standalone package)uvx mdformat for Markdown normalizationuvxoutput_dir and the expected output filename.mdformat for Markdown output and inspect the result for readable structure.--use-struct-tree.--table-method cluster or --markdown-with-html before escalating to hybrid mode.--to-stdout) so repeated runs do not overwrite the same basename.| Failure | Recovery |
|---------|----------|
| uvx unavailable | Ask user to install uv before conversion |
| opendataloader-pdf-hybrid not found | Invoke via uvx --from "opendataloader-pdf[hybrid]" opendataloader-pdf-hybrid; the bare package name does not exist on PyPI |
| Password-protected PDF | Ask for password or unlocked PDF |
| Garbled output | Retry with tagged structure or hybrid mode |
| Missing tables | Retry with --table-method cluster or --markdown-with-html first; hybrid mode for scanned tables |
| OCR language mismatch | Retry with explicit OCR languages, for example ko,en |
| Large file or memory pressure | Split into page ranges using distinct output directories or --to-stdout; never reuse one output directory for the same basename |
| Action | SSL primitive | Evidence |
|--------|---------------|----------|
| Validate path and options | VALIDATE | Input preflight in execution protocol |
| Probe text layer | READ | Text preview extraction |
| Choose conversion strategy | SELECT | Standard, tagged, or hybrid mode decision |
| Run converter | CALL_TOOL | uvx opendataloader-pdf |
| Start OCR server | CALL_TOOL | uvx --from "opendataloader-pdf[hybrid]" opendataloader-pdf-hybrid |
| Write output artifact | WRITE | Markdown, text, JSON, or HTML output |
| Normalize Markdown | CALL_TOOL | uvx mdformat |
| Inspect extraction quality | VALIDATE | Structure/readability verification |
| Report result | NOTIFY | Final user-facing summary |
opendataloader-pdf: primary PDF extraction CLIopendataloader-pdf-hybrid: hybrid OCR and complex extraction pathmdformat: Markdown normalizationfile, wc, or pdfinfo may be used for preflight when availableuvx opendataloader-pdf "{input_path}" -f text --pages 1-3 --to-stdout -q # text-layer probe (no temp files)
uvx opendataloader-pdf "{input_path}" --format markdown --output-dir "{output_dir}"
uvx mdformat "{output_path}"
For scanned/image-based PDFs, start OCR first and then convert through hybrid mode:
uvx --from "opendataloader-pdf[hybrid]" opendataloader-pdf-hybrid --port 5002 --force-ocr --ocr-lang "{languages}"
uvx opendataloader-pdf --hybrid docling-fast --hybrid-mode full "{input_path}" --format markdown --output-dir "{output_dir}"
On-request flags — --sanitize (PII masking), --pages (range extraction), --threads (parallel pages), --detect-strikethrough, hybrid --enrich-formula / --enrich-picture-description — are detailed in resources/execution-protocol.md. The two enrichment flags require client-side --hybrid-mode full.
| Scope | Resource target |
|-------|-----------------|
| LOCAL_FS | Input PDFs and generated output files |
| PROCESS | uvx subprocesses and optional hybrid server |
| MEMORY | Extracted previews and validation notes |
| OTHER | OCR model/runtime behavior inside hybrid mode |
uvx.config/pdf-config.yaml; explicit user options override them, and output.overwrite: false requires confirmation before replacing an existing output file.resources/execution-protocol.md rather than duplicating every variant here.resources/execution-protocol.mdconfig/pdf-config.yaml../_shared/core/context-loading.md../_shared/core/quality-principles.mdComprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks
Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs, merging/splitting documents, and handling forms. When Claude needs to fill in a PDF form or programmatically process, generate, or analyze PDF documents at scale.
Presentation creation, editing, and analysis. When Claude needs to work with presentations (.pptx files) for: (1) Creating new presentations, (2) Modifying or editing content, (3) Working with layouts, (4) Adding comments or speaker notes, or any other presentation tasks
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.
Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.
Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.
Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx filename, regardless of what they plan to do with the content afterward. If a .pptx file needs to be opened, created, or touched, use this skill.
Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax. Use when working with .md files in Obsidian, or when the user mentions wikilinks, callouts, frontmatter, tags, embeds, or Obsidian notes.
Take first-fluke/oma-pdf from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference uvx.
Without those the skill loads but fails at the first command.