skills/scientific-report-pdf/SKILL.md
Generate a structured scientific PDF report from a JSON description. Accepts a JSON file specifying title, authors, abstract, sections (headings, text, tables, figures), and inline data panels (heatmap, bar, scatter, line). Produces a publication-style A4 PDF using reportlab with no LaTeX dependency. All figures are either loaded from PNG paths or generated on-the-fly from inline data.
npx skillsauth add lamm-mit/scienceclaw scientific-report-pdfInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generates a structured scientific PDF report from a JSON input file. No LaTeX or pandoc required — uses reportlab for pure-Python PDF rendering.
python3 skills/scientific-report-pdf/scripts/scientific_report_pdf.py --input-json report.json
python3 skills/scientific-report-pdf/scripts/scientific_report_pdf.py --input-json report.json --output-dir /tmp/
python3 skills/scientific-report-pdf/scripts/scientific_report_pdf.py --describe-schema
{
"title": "The Sound of Molecules",
"authors": ["ReportAgent", "MusicAnalyst"],
"subtitle": "CS1 Investigation | LAMM Research Platform",
"abstract": "We present ...",
"sections": [
{"type": "heading", "level": 1, "text": "1. Introduction"},
{"type": "text", "text": "Sonification has been applied to ..."},
{
"type": "table",
"label": "Table 1",
"caption": "RDKit descriptors for 16 compounds.",
"headers": ["Compound", "MW", "LogP"],
"rows": [["aspirin", "180.2", "1.19"], ["ibuprofen", "206.3", "3.72"]]
},
{
"type": "figure",
"label": "Figure 1",
"caption": "Era-match heatmap.",
"path": "/path/to/era_match.png"
},
{
"type": "panel",
"label": "Figure 2",
"caption": "Mean similarity by drug class.",
"panel_type": "bar",
"figsize": [10, 5],
"data": {
"categories": ["NSAID", "Opioid", "Stimulant"],
"series": [{"name": "Bach", "values": [0.4, 0.7, 0.3], "color": "#c0392b"}],
"xlabel": "Drug class",
"ylabel": "Mean cosine similarity",
"title": "Harmonic Affinity by Drug Class"
}
},
{"type": "pagebreak"},
{
"type": "panel",
"label": "Figure 3",
"caption": "Cosine similarity heatmap.",
"panel_type": "heatmap",
"data": {
"values": [[0.8, 0.3], [0.2, 0.9]],
"row_labels": ["aspirin", "fentanyl"],
"col_labels": ["Bach", "Beethoven"],
"cmap": "YlOrRd",
"annotate": true
}
}
],
"metadata": {
"investigation_id": "cs1_sound_of_molecules",
"platform": "LAMM Infinite",
"agents": ["SoundAgent1", "MusicAnalyst", "ReportAgent"]
}
}
| type | Required fields | Description |
|------|----------------|-------------|
| heading | level (1-3), text | Section heading |
| text | text | Paragraph body |
| table | headers, rows | Data table with optional label, caption, highlight_col |
| figure | path | Embed existing PNG/JPG |
| panel | panel_type, data | Auto-generate matplotlib figure |
| pagebreak | — | Force page break |
| hr | — | Horizontal rule |
| panel_type | Required data fields |
|-----------|---------------------|
| heatmap | values (2D array), row_labels, col_labels |
| matrix | same as heatmap |
| bar | categories, series (list of {name, values, color}) |
| grouped_bar | same as bar |
| scatter | x, y |
| line | x, y |
{
"pdf_path": "/tmp/The_Sound_of_Molecules_20260403_001234.pdf",
"n_pages": 8,
"n_figures": 4,
"size_kb": 512
}
reportlab — PDF generationmatplotlib — auto-generated panel figurespillow — RGBA→RGB image conversionpypdf (optional) — page count in outputtools
Onboard and manage Paperclip AI for research-paper knowledge and agent orchestration
development
Perform AI-powered web searches with real-time information using Perplexity models via LiteLLM and OpenRouter. This skill should be used when conducting web searches for current information, finding recent scientific literature, getting grounded answers with source citations, or accessing information beyond the model knowledge cutoff. Provides access to multiple Perplexity models including Sonar Pro, Sonar Pro Search (advanced agentic search), and Sonar Reasoning Pro through a single OpenRouter API key.
development
Execute arbitrary Python code and return stdout. NumPy, pandas, scipy, matplotlib, and other scientific libraries are available.
content-media
Read a CSV or XLSX file and return columns, shape, dtypes, and first N rows as JSON.