Meta Forest Continuous Plot
aipoch/medical-research-skills
Generate forest plots for meta-analysis of continuous data. An agent skill from aipoch/medical-research-skills.
Extract continuous X-Y data from experimental spectrum images (Raman, XRD, UV-Vis, IR, etc.) via hybrid VLM + CV pipeline and agent-in-the-loop workflow.
$ npx skills add learningmatter-mit/AtomisticSkills --skill general-plot-digitizer -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install learningmatter-mit/AtomisticSkills general-plot-digitizer --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/general-plot-digitizer .claude/skills/general-plot-digitizer && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "general-plot-digitizer" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-plot-digitizer into .claude/skills/general-plot-digitizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-plot-digitizer", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-plot-digitizerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add learningmatter-mit/AtomisticSkills --skill general-plot-digitizer -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install learningmatter-mit/AtomisticSkills general-plot-digitizer --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/general-plot-digitizer .agents/skills/general-plot-digitizer && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "general-plot-digitizer" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-plot-digitizer into .agents/skills/general-plot-digitizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-plot-digitizer", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add learningmatter-mit/AtomisticSkills --skill general-plot-digitizer -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install learningmatter-mit/AtomisticSkills general-plot-digitizer --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/general-plot-digitizer .cursor/skills/general-plot-digitizer && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "general-plot-digitizer" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-plot-digitizer into .cursor/skills/general-plot-digitizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-plot-digitizer", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/learningmatter-mit/AtomisticSkills.git --path skills/general-plot-digitizer--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add learningmatter-mit/AtomisticSkills --skill general-plot-digitizer -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install learningmatter-mit/AtomisticSkills general-plot-digitizer --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/general-plot-digitizer .gemini/skills/general-plot-digitizer && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "general-plot-digitizer" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-plot-digitizer into .gemini/skills/general-plot-digitizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-plot-digitizer", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install learningmatter-mit/AtomisticSkills general-plot-digitizerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add learningmatter-mit/AtomisticSkills --skill general-plot-digitizer -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/general-plot-digitizer .github/skills/general-plot-digitizer && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "general-plot-digitizer" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-plot-digitizer into .github/skills/general-plot-digitizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-plot-digitizer", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add learningmatter-mit/AtomisticSkills --skill general-plot-digitizer -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install learningmatter-mit/AtomisticSkills general-plot-digitizer --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/general-plot-digitizer .opencode/skills/general-plot-digitizer && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "general-plot-digitizer" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-plot-digitizer into .opencode/skills/general-plot-digitizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-plot-digitizer", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
general-plot-digitizerExtract continuous X-Y data from experimental spectrum images (Raman, XRD, UV-Vis, IR, etc.) via hybrid VLM + CV pipeline and agent-in-the-loop workflow.
General Plot Digitizer is an agent skill from learningmatter-mit/AtomisticSkills. Extract continuous X-Y data from experimental spectrum images (Raman, XRD, UV-Vis, IR, etc.) via hybrid VLM + CV pipeline and agent-in-the-loop workflow.
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 61 other files, including scripts (for example `examples/01-single-curve/README.md`, `examples/01-single-curve/metadata.json` and `examples/01-single-curve/source_digitized.md`).
The repository describes itself as: Integrating AtomisticSkills into Agentic IDEs (Cursor, Claude Code, Codex, Google Antigravity, Hermes Agent, etc). The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6257444. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
General Plot Digitizer loads about 2.8k tokens when it runs. Until then it costs about 44 tokens; SKILL.md has 1,130 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from learningmatter-mit/AtomisticSkills at commit 6257444, republished under its MIT licence (© learningmatter-mit). 1,130 words, ~2,829 tokens.
.claude/skills/general-plot-digitizer/SKILL.md (or your agent's skills folder). This skill also uses 58 other files; get the full folder from GitHub.Extract calibrated numeric X-Y data from images of experimental spectra (Raman, XRD, UV-Vis, IR, NMR, etc.) using a deterministic "Agent-in-the-Loop" workflow.
The labor is divided between two models:
metadata.json, runs the CV pipeline, inspects the overlay, and iterates until the curve is correctly isolated.Do not attempt to generate JSON with the VLM. It acts only as a visual sensor.
${CLAUDE_SKILL_DIR}/../../venv/run cpu python ${CLAUDE_SKILL_DIR}/scripts/plot_utils.py plot.png --draw-gridThis produces plot_grid.png with a labeled pixel grid for precise coordinate reading.
Prompt the VLM to analyze plot_grid.png (not the raw image). Use the built-in vision capabilities or the notify_user VLM inspection tool. Provide the prompt guidelines from scripts/vlm_prompt_template.txt.
Expected VLM output — a natural-language report covering:
Read the VLM narrative and construct metadata.json. Schema: resources/metadata_schema.json.
Required fields:
{
"plot_title": "",
"x_axis_label": "Wavelength (nm)",
"y_axis_label": "Absorbance",
"x_tick_min": 400, "x_tick_max": 800,
"y_tick_min": 0, "y_tick_max": 1,
"x_calibration_points": [
{ "pixel": 70, "value": 400 },
{ "pixel": 450, "value": 800 }
],
"x_scale": "linear", "y_scale": "linear",
"bounding_box": {"x_min": 72, "y_min": 28, "x_max": 452, "y_max": 318},
"x_reversed": false, "y_reversed": false,
"spectrum_type": "UV-Vis",
"curves": [{"label": "sample", "color_hint": "#1f77b4"}],
"text_regions": [{"x_min": 300, "y_min": 50, "x_max": 400, "y_max": 80, "label": "legend"}]
}x_calibration_points (strongly recommended): anchor the X-axis transform to exact pixel→value pairs read from the grid, rather than assuming axis ticks align perfectly with bbox edges. Pick two well-separated ticks visible on the grid. If provided, these override x_tick_min/max for pixel-to-data mapping.
Translation rules (VLM narrative → metadata fields):
text_regions[] and/or mask_regions[] with pixel bounding boxes.curves[].color_hint (from pixels on the plotted line, not from legend swatches)."cli_hints": {"curve_is_black": true}."cli_hints": {"smooth": true}.If the VLM color guess is uncertain, run:
${CLAUDE_SKILL_DIR}/../../venv/run cpu python ${CLAUDE_SKILL_DIR}/scripts/suggest_colors.py plot.png \
--bounding-box x_min,y_min,x_max,y_maxThis reports dominant non-background colors in the cropped region. Use the top result as color_hint.
Select CLI flags based on VLM visual cues:
| VLM describes... | Required CLI flags | Avoid |
|---|---|---|
| Thin, needle-like peaks (XRD, FTIR) | --crop-upscale 4.0 | --smooth, --cluster-centroid |
| Fuzzy / anti-aliased / JPEG artifacts | --curve-tolerance 75 (up to 85) | — |
| Thick, noisy trace / scatter points | --smooth --smooth-window 5 --smooth-deviation 15.0 | — |
| Black curve on black axes | --allow-black (auto-enables --spatial-filter --cluster-centroid) | — |
| Thin anti-aliased colored line | --extraction-method edge+color | --morph-open |
Run the pipeline:
${CLAUDE_SKILL_DIR}/../../venv/run cpu python ${CLAUDE_SKILL_DIR}/scripts/digitize_pipeline.py \
plot.png \
--full \
--metadata metadata.json \
--output-dir ./output \
--overlay \
--format bothAppend the VLM-dictated flags from the table above. The pipeline also reads cli_hints from metadata and auto-applies safe flags (--allow-black, --smooth, --all-curves).
*_digitized.overlay.png visually.| Symptom | Fix (metadata or CLI) |
|---|---|
| Wrong curve extracted (e.g. legend ink) | Set curves[].color_hint from actual line pixels; or run suggest_colors.py on a tight crop |
| Text / labels contaminating trace | Add bounding boxes to text_regions[] in metadata; add --smooth |
| Black curve picks up axis lines | --allow-black + add axis regions to mask_regions[] |
| Trace too sparse / broken gaps | --curve-tolerance 55 or --preset lowres |
| Thin line lost entirely | --extraction-method edge+color; or --crop-upscale 4.0 for needle peaks |
| Same-color text blobs on thick curve | --morph-open (caution: destroys thin <3px curves) |
| Low-res image, everything pixelated | --upscale-strategy force (pre-upscales image, scales metadata bbox) |
| X/Y values shifted or inverted | Fix x_tick_min/max, x_reversed, y_reversed, or x_calibration_points in metadata |
color_hint, text_regions, mask_regions, bounding_box) over adding CLI flags. Re-run the same pipeline command after editing metadata.json.Outputs:
*_digitized.csv — comma-separated with x,y header*_digitized.xy — space-separated, no header (if --format xy or both)*_digitized.overlay.png — visual QC*_digitized.md — summaryplot_grid.png than on raw images.| Flag | Use when... | Default |
|---|---|---|
--curve-color HEX | VLM identified a specific curve color | auto-detect |
--curve-tolerance N | Trace is sparse or image has JPEG artifacts (increase); or mask bleeds into nearby colors (decrease) | 40 |
--overlay | Always recommended for QC | off |
--format {csv,xy,both} | Downstream tool needs specific format | csv |
--all-curves | Multiple curves in metadata curves[] (auto-enabled when >1 curve) | off |
--allow-black | Data curve is black (same color as axes/frame) | off |
--smooth | Noisy, jagged, or thick trace with outlier points | off |
--smooth-window N | Tune smoothing aggressiveness (larger = more smoothing) | 5 |
--smooth-deviation PX | Pixel distance from local median beyond which a point is rejected as outlier | 15.0 |
--crop-upscale FACTOR | Thin peaks (XRD, FTIR) need more pixel width to register; or generally low-res crop | 1.0 |
--upscale-strategy {none,auto,force} | auto (default) pre-upscales when metadata or heuristic says low-res; force always pre-upscales; none skips | auto |
--upscale-factor FACTOR | Controls the multiplier used by --upscale-strategy auto|force | 2.0 |
--vlm-metadata-on-upscale | After pre-upscale, re-run VLM metadata on upscaled image instead of just scaling coordinates. Only if API keys are set | off |
--extraction-method {color,edge,edge+color} | color (default) fails on thin anti-aliased lines; try edge+color | color |
--morph-open | Same-color text blobs touching a thick curve; erodes then dilates to remove small blobs. Destroys thin (<3px) curves | off |
--spatial-filter | Curve matches frame/axis color — keeps only the largest connected line-like component | off |
--cluster-centroid | Text or axes bleed into mask — uses largest-cluster centroid instead of full-column median. Auto-enabled with --allow-black | off |
--preset {lowres,thin-red} | Quick combos: lowres = upscale 2 + tolerance 55 + edge+color; thin-red = tolerance 50, no morph-open | none |
--debug | Save intermediate crops/masks for diagnosing failures | off |
--json-summary | Emit machine-readable JSON summary to stdout after completion | off |
Full flag list: python ${CLAUDE_SKILL_DIR}/scripts/digitize_pipeline.py --help
| Scenario | Directory | Key Flags |
|---|---|---|
| Single colored curve | 01-single-curve/ | --curve-color |
| Multiple curves by color | 02-multi-curve-color/ | --all-curves |
| Black curve + text masking | 03-black-curve-text-mask/ | --allow-black --smooth, text_regions |
| Stacked spectra | 04-stacked-spectra/ | --all-curves, per_curve_normalized |
curves[] must have a color_hint. Auto-detect is unreliable with multiple traces.curves[].region.y_min/y_max must include generous padding (10-20px) above tallest peaks and below baseline.cpu environment.Author: Jesus Diaz Sanchez Contact: GitHub @jdsanc
© learningmatter-mit, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 58 other files (scripts) in skills/general-plot-digitizer of learningmatter-mit/AtomisticSkills.
Open the folder on GitHubat commit 6257444
General Plot Digitizer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| General Plot Digitizer this skilllearningmatter-mit/AtomisticSkills | 176 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Meta Forest Continuous Plotaipoch/medical-research-skills | 2k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Continuetelegramdesktop/tdesktop | 33k | 2 repos | ~9.4k | Automated safety check: Pass | GPL-3.0 | |
| Extractalirezarezvani/claude-skills | 28k | — | ~1.4k | Automated safety check: Pass | MIT | |
| PDF Extract Experimental Materialsaipoch/medical-research-skills | 2k | — | ~2k | Automated safety check: Pass | MIT | |
| Digital Forensicssickn33/agentic-awesome-skills | 47k | 1 repos | ~495 | Automated safety check: Pass | MIT |
aipoch/medical-research-skills
Generate forest plots for meta-analysis of continuous data. An agent skill from aipoch/medical-research-skills.
telegramdesktop/tdesktop
Continue autonomous Telegram Desktop development from the shared ai-tdesktop repository.
alirezarezvani/claude-skills
Turn a proven pattern or debugging solution into a standalone reusable skill with SKILL.md, reference docs, and examples.
aipoch/medical-research-skills
Extract experimental materials and instrument information from PDFs (or PDF-derived text/Markdown) into three CSV tables; use when a paper/report contains sections like Materials and Methods, Key…
sickn33/agentic-awesome-skills
Authorized digital forensics: memory dumps, disk timelines, PCAP investigation, artifact triage, and incident-response evidence preservation.
zhaoxuya520/reverse-skill
A skill your agent uses for authorized digital forensics including memory dumps, disk timelines, PCAP investigation, artifact triage, and IR evidence preservation.
learningmatter-mit/AtomisticSkills
Define a docking search box (center coordinates + box dimensions in Angstroms) from a co-crystal ligand, binding-site residues, or a saved JSON specification.
learningmatter-mit/AtomisticSkills
Build a solvated, charge-neutralized protein-ligand complex for OpenMM molecular dynamics simulation.
learningmatter-mit/AtomisticSkills
Identify and rank ligandable pockets on a protein structure or model using geometry (fpocket) or an ML predictor (P2Rank).
learningmatter-mit/AtomisticSkills
Calculate homolytic and heterolytic bond dissociation energies (BDEs) for all single bonds in a molecule using MLIPs with RDKit fragmentation.
learningmatter-mit/AtomisticSkills
Generate molecular conformers with RDKit ETKDG, relax with MLIPs, and rank by energy with Boltzmann weighting.
learningmatter-mit/AtomisticSkills
Query multiple MOF databases (QMOF via MPContribs; ARC-MOF DB7/Majumdar et al.
Extract continuous X-Y data from experimental spectrum images (Raman, XRD, UV-Vis, IR, etc.) via hybrid VLM + CV pipeline and agent-in-the-loop workflow. General Plot Digitizer is an agent skill from learningmatter-mit/AtomisticSkills.) via hybrid VLM + CV pipeline and agent-in-the-loop workflow.
Run `npx skills add learningmatter-mit/AtomisticSkills --skill general-plot-digitizer -a claude-code`. Or copy the skill folder (skills/general-plot-digitizer in learningmatter-mit/AtomisticSkills) into .claude/skills/general-plot-digitizer in your project. Claude Code loads it when a task matches its description.
Run `npx skills add learningmatter-mit/AtomisticSkills --skill general-plot-digitizer -a codex`. Or copy the skill folder (skills/general-plot-digitizer in learningmatter-mit/AtomisticSkills) into .agents/skills/general-plot-digitizer in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add learningmatter-mit/AtomisticSkills --skill general-plot-digitizer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/general-plot-digitizer, .gemini/skills/general-plot-digitizer, .github/skills/general-plot-digitizer and .opencode/skills/general-plot-digitizer in your project.
Going by SKILL.md and its folder, General Plot Digitizer needs the command-line tools its instructions call (python). Our summary lists: Python 3.
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
General Plot Digitizer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with General Plot Digitizer: Meta Forest Continuous Plot (aipoch/medical-research-skills, 2k stars), Continue (telegramdesktop/tdesktop, 33k stars), Extract (alirezarezvani/claude-skills, 28k stars) and PDF Extract Experimental Materials (aipoch/medical-research-skills, 2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
learningmatter-mit (a GitHub organization) maintains it in learningmatter-mit/AtomisticSkills, which has 176 GitHub stars. The repository holds 129 skills in this directory. The repository was last updated on October 7, 2026.
Source: learningmatter-mit/AtomisticSkills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.