sciagent-skill-creator
Scaffold a new SciAgent-Skills entry. Picks pipeline/toolkit/database/guide template, creates skills/{category}/{name}/SKILL.md with valid frontmatter, appends…
Science (AAAS) figure preparation: resolution (150-300+ DPI), formats (PDF/EPS/TIFF), RGB color, Myriad/Helvetica fonts, strict image manipulation policies including gamma adjustment disclosure.
$ npx -y skills add jaechang-hits/SciAgent-Skills --skill science-figure-guide --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/science-figure-guideContext preview
The summary Claude sees to decide when to auto-load this skill.
Science (AAAS) figure preparation: resolution (150-300+ DPI), formats (PDF/EPS/TIFF), RGB color, Myriad/Helvetica fonts, strict image manipulation policies including gamma adjustment disclosure.
name: science-figure-guide description: "Science (AAAS) figure preparation: resolution (150-300+ DPI), formats (PDF/EPS/TIFF), RGB color, Myriad/Helvetica fonts, strict image manipulation policies including gamma adjustment disclosure." license: CC-BY-4.0 compatibility: Python 3.10+, Pillow, Matplotlib metadata: authors: HITS version: "1.0"
This guide provides the complete specifications for preparing figures for submission to **Science** journal (published by AAAS). Science has different requirements for initial vs. revised manuscript submissions and requires explicit disclosure of nonlinear image adjustments.
**Official reference**: https://www.science.org/content/page/instructions-preparing-initial-manuscript
---
| Image Type | Resolution | |---|---| | All figures | **150-300 DPI** |
| Image Type | Minimum Resolution | Notes | |---|---|---| | Line art | **300 DPI+** | At final print size | | Grayscale and color artwork | **300 DPI+** | Higher resolution preferred |
**CRITICAL**: Upsampling (artificially increasing resolution) is **prohibited**. The resolution must be native to the image.
from PIL import Image
def check_science_resolution(image_path, stage='initial'):
"""Check image resolution for Science submission.
Args:
image_path: Path to image file
stage: 'initial' (150-300 DPI) or 'revised' (300+ DPI)
"""
img = Image.open(image_path)
dpi = img.info.get('dpi', (72, 72))
min_dpi = 150 if stage == 'initial' else 300
print(f"Stage: {stage} submission")
print(f"DPI: {dpi[0]} x {dpi[1]}")
print(f"Minimum required: {min_dpi} DPI")
if dpi[0] >= min_dpi:
print("PASS: Resolution meets Science requirements")
else:
print(f"FAIL: Need at least {min_dpi} DPI")
return dpi[0] >= min_dpi---
| Figure Type | Preferred Formats | |---|---| | Vector illustrations/diagrams | **PDF, EPS, Adobe Illustrator (AI)** | | Raster illustrations/diagrams | **TIFF** (300+ DPI) | | Photography/microscopy | TIFF, JPEG, PNG, PSD, EPS, PDF |
---
| Layout | Width | |---|---| | 1 column | **3.4 inches** (86 mm / 20.38 picas) | | 1.5 columns | **5.0 inches** | | 2 columns | **7.0-7.3 inches** | | Maximum | **6.5 x 8 inches** (16.5 x 20 cm) |
Figures should be sized to fit 8.5" x 11" or A4 paper.
import matplotlib.pyplot as plt
SCIENCE_WIDTHS = {
'single': 3.4, # inches
'middle': 5.0,
'double': 7.3,
}
def create_science_figure(layout='single', aspect_ratio=0.75):
"""Create a Matplotlib figure sized for Science journal."""
width = SCIENCE_WIDTHS[layout]
height = min(width * aspect_ratio, 8.0) # max height 8 inches
fig, ax = plt.subplots(figsize=(width, height))
fig.set_dpi(300)
return fig, ax---
---
| Element | Font | Size | Style | |---|---|---|---| | Preferred font | **Myriad** | — | Sans-serif | | Alternative fonts | Helvetica, Arial | — | Sans-serif | | Panel labels | — | **8 pt** | **Bold** | | Other figure text | — | 5-7 pt | Max 7 pt, min 5 pt |
import matplotlib.pyplot as plt
def set_science_fonts():
"""Configure Matplotlib for Science journal figure fonts."""
plt.rcParams.update({
'font.family': 'sans-serif',
'font.sans-serif': ['Myriad Pro', 'Helvetica', 'Arial'],
'font.size': 7,
'axes.labelsize': 7,
'axes.titlesize': 7,
'xtick.labelsize': 6,
'ytick.labelsize': 6,
'legend.fontsize': 5,
})---
def format_science_axis(ax, xlabel, ylabel, x_unit='', y_unit=''):
"""Format axes following Science journal conventions."""
if x_unit:
ax.set_xlabel(f"{xlabel} ({x_unit})", fontsize=7)
else:
ax.set_xlabel(xlabel, fontsize=7)
if y_unit:
ax.set_ylabel(f"{ylabel} ({y_unit})", fontsize=7)
else:
ax.set_ylabel(ylabel, fontsize=7)
ax.tick_params(labelsize=6)---
---
from PIL import Image
import os
def validate_science_figure(image_path, stage='initial'):
"""Full validation of a figure against Science requirements."""
img = Image.open(image_path)
issues = []
# 1. Resolution checkTurn your AI coding agent into a life sciences expert — 199 bioinformatics skills for Claude Code covering RNA-seq, single-cell analysis, genomics, proteomics, drug discovery, and more. Boosted BixBench from 65% to 92%. Open source.
Scaffold a new SciAgent-Skills entry. Picks pipeline/toolkit/database/guide template, creates skills/{category}/{name}/SKILL.md with valid frontmatter, appends…
Bayesian modeling with PyMC 5: priors, likelihood, NUTS/ADVI sampling, diagnostics (R-hat, ESS), LOO/WAIC comparison, prediction. Hierarchical, logistic, GP…
Time-to-event modeling with scikit-survival: Cox PH (elastic net), Random Survival Forests, Boosting, SVMs for censored data. C-index, Brier, time-dependent…
Guided statistical analysis: test choice, assumption checks, effect sizes, power, APA reporting. Pick tests, verify assumptions, or format results for…
Python statistical modeling: regression (OLS, WLS, GLM), discrete (Logit, Poisson, NegBin), time series (ARIMA, SARIMAX, VAR), with rigorous inference,…
DL cell/nucleus segmentation for fluorescence and brightfield microscopy. Pre-trained models (cyto3, nuclei, tissuenet) and a generalist flow-based algorithm…