From academic-skills
Extracts figures and sub-figures from academic PDF papers with automatic detection, sub-figure label recognition (a/b/c/d), and high-quality PNG output at configurable DPI.
npx claudepluginhub shzhao27208/aut_sci_write --plugin academic-skillsThis skill uses the workspace's default tool permissions.
Precisely extract figures and sub-figures from academic PDF papers.
CHANGELOG.mdLICENSEREADME.mdREADME_CN.md_meta.jsonoutput/cli_all/figure_10.pngoutput/cli_all/figure_2.pngoutput/cli_all/figure_7.pngoutput/cli_all/figure_9.pngoutput/cli_test/figure_3c.pngoutput/phase3_verify/figure_10.pngoutput/phase3_verify/figure_2.pngoutput/phase3_verify/figure_7.pngoutput/phase3_verify/figure_9.pngoutput/phase4_current/figure_3a.pngoutput/phase4_current/figure_3c.pngoutput/phase4_current/figure_3d.pngoutput/phase4_v2/figure_3c.pngoutput/phase4_v3/figure_3b.pngoutput/phase4_v3/figure_3d.pngExtracts core insights, figures, and metadata from scientific PDF papers. Identifies research problem, methods, results, innovations; crops figures; parses title, authors, DOI.
Extracts numerical data from scientific figure images using Claude vision and OpenCV calibration. Supports 26+ plot types like bar charts, scatter plots, forest plots, Kaplan-Meier curves.
Extracts text/tables from PDFs, creates/merges/splits files, fills forms, rotates pages using Python's pypdf library and CLI tools. For programmatic document processing/analysis.
Share bugs, ideas, or general feedback.
Precisely extract figures and sub-figures from academic PDF papers.
Scripts in scripts/ subdirectory. Replace ${SKILL_DIR} with this SKILL.md's directory path.
| Script | Purpose |
|---|---|
scripts/extract_figure.py | Main CLI for figure extraction |
Use Bash to check EXTEND.md existence (priority order):
# Check project-level first
test -f .baoyu-skills/Sh_Sci_Fig/EXTEND.md && echo "project"
# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
test -f "$HOME/.baoyu-skills/Sh_Sci_Fig/EXTEND.md" && echo "user"
EXTEND.md Supports: Default DPI | Default output format | Tesseract path
python ${SKILL_DIR}/scripts/extract_figure.py <input.pdf> [options]
| Option | Short | Description | Default |
|---|---|---|---|
<input> | PDF file path | Required | |
--figure | -f | Figure number (1, 2, 3...) | Required (except --list/--all) |
--subfigure | -s | Sub-figure label (a, b, c...) | None (returns whole figure) |
--output | -o | Output directory | Current directory |
--dpi | -d | Output resolution | 600 |
--list | -l | List all available figure numbers | false |
--all | Extract all figures | false | |
--format | Output format | png |
# Extract Figure 2, sub-figure c
python ${SKILL_DIR}/scripts/extract_figure.py paper.pdf -f 2 -s c
# Extract entire Figure 3
python ${SKILL_DIR}/scripts/extract_figure.py paper.pdf -f 3
# List all available figures in a PDF
python ${SKILL_DIR}/scripts/extract_figure.py paper.pdf --list
# Extract all figures
python ${SKILL_DIR}/scripts/extract_figure.py paper.pdf --all
# Custom output directory and DPI
python ${SKILL_DIR}/scripts/extract_figure.py paper.pdf -f 2 -s c -o ./output/ -d 300
Output:
Extracted: figure_2c.png (1920x1080, 600 DPI)
| Scenario | Behavior |
|---|---|
| Figure number not found | Error + list all available figure numbers |
| OCR recognition failed | Return entire figure region |
| Sub-figure split failed | Return entire figure region |
| No sub-figure labels found | Return entire figure region |
| Library | Role |
|---|---|
| pdfplumber | Text + coordinate extraction (locate "Figure X" labels) |
| PyMuPDF (fitz) | PDF → high-quality image rendering (600 DPI) |
| opencv-python | Boundary detection, contour analysis |
| Pillow | Final cropping, format conversion |
| pytesseract | OCR for sub-figure label recognition |
Custom configurations via EXTEND.md. See Preferences section for paths and supported options.