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…
eLife figure preparation: file formats (TIFF/EPS/PDF), striking image requirements (1800x900 px), figure supplement naming, and image screening policy treating selective enhancement as misconduct.
$ npx -y skills add jaechang-hits/SciAgent-Skills --skill elife-figure-guide --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/elife-figure-guideContext preview
The summary Claude sees to decide when to auto-load this skill.
eLife figure preparation: file formats (TIFF/EPS/PDF), striking image requirements (1800x900 px), figure supplement naming, and image screening policy treating selective enhancement as misconduct.
name: elife-figure-guide description: "eLife figure preparation: file formats (TIFF/EPS/PDF), striking image requirements (1800x900 px), figure supplement naming, and image screening policy treating selective enhancement as misconduct." 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 **eLife**. eLife is known for its open-access model, **figure supplement system**, **striking image requirements**, and a **strict image screening policy** where selective enhancement of scientific images is treated as research misconduct.
**Official reference**: https://elife-rp.msubmit.net/html/elife-rp_author_instructions.html
---
| Image Type | Minimum Resolution | |---|---| | Striking images | **1800 x 900 pixels** minimum | | Regular figures | No strict DPI mandate (standard 300 DPI recommended) |
from PIL import Image
def check_elife_resolution(image_path, is_striking=False):
"""Check if image meets eLife resolution requirements.
Args:
is_striking: True for striking/graphical abstract images
"""
img = Image.open(image_path)
w, h = img.size
dpi = img.info.get('dpi', (72, 72))
print(f"Dimensions: {w} x {h} px")
print(f"DPI: {dpi[0]} x {dpi[1]}")
if is_striking:
if w >= 1800 and h >= 900:
print("PASS: Meets striking image minimum (1800x900 px)")
return True
else:
print(f"FAIL: Striking image needs 1800x900 px, got {w}x{h}")
return False
else:
if dpi[0] >= 300:
print("PASS: Resolution meets standard (300+ DPI)")
else:
print(f"NOTE: DPI is {dpi[0]}; 300+ DPI recommended")
return True---
| Format | Accepted | |---|---| | **TIFF** | Yes | | **EPS** | Yes | | **PDF** | Yes | | **JPEG / JPG** | Yes | | **GIF** | Yes | | **PS** (PostScript) | Yes | | **RTF** | Yes | | **Microsoft Excel** | Yes (for data-based figures) | | **CorelDraw** | Yes |
| Format | Recommended | |---|---| | **PNG** | Yes (preferred) | | **TIFF** | Yes | | **JPEG** | Yes |
---
---
---
import matplotlib.pyplot as plt
def set_elife_fonts():
"""Configure Matplotlib with standard settings for eLife."""
plt.rcParams.update({
'font.family': 'sans-serif',
'font.sans-serif': ['Helvetica', 'Arial'],
'font.size': 7,
'axes.labelsize': 7,
'axes.titlesize': 8,
'xtick.labelsize': 6,
'ytick.labelsize': 6,
'legend.fontsize': 6,
})---
eLife uses a unique **figure supplement** system instead of traditional supplementary figures:
def generate_elife_supplement_names(main_figure_num, n_supplements):
"""Generate eLife figure supplement naming.
Args:
main_figure_num: The main figure number (1, 2, 3, ...)
n_supplements: Number of supplements for this figure
Returns:
List of supplement name strings
"""
names = []
for i in range(1, n_supplements + 1):
names.append(f"Figure {main_figure_num}--Figure Supplement {i}")
return names
# Example
supplements = generate_elife_supplement_names(3, 4)
for s in supplements:
print(s)
# Output:
# Figure 3--Figure Supplement 1
# Figure 3--Figure Supplement 2
# Figure 3--Figure Supplement 3
# Figure 3--Figure Supplement 4---
eLife **routinely screens submitted images** for inappropriate digital processing. This is not a random check — it is a systematic process.
---
from PIL import Image
import os
def validate_elife_figure(image_path, is_striking=False):
"""Full validation of a figure against eLife requirements."""
img = Image.open(image_path)
issues = []
w, h = img.size
# 1. Striking image checks
if is_striking:
if w < 1800 or h < 900:
issues.append(f"Striking image: {w}x{h} px below 1800x900 minimum")Turn 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…