skills/scientific-writing/elife-figure-guide/SKILL.md
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 skillsauth add jaechang-hits/scicraft elife-figure-guideInstall 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.
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:
Figure 1--Figure Supplement 1, Figure 1--Figure Supplement 2, etc.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")
if w < h:
issues.append("Striking image should be landscape orientation")
# 2. Resolution check (standard recommendation)
dpi = img.info.get('dpi', (72, 72))
if not is_striking and dpi[0] < 300:
issues.append(f"Resolution {dpi[0]} DPI; 300+ DPI recommended")
# 3. Format check
fmt = img.format
accepted = ['TIFF', 'JPEG', 'PNG', 'EPS', 'PDF', 'GIF']
if fmt and fmt.upper() not in accepted:
issues.append(f"Format '{fmt}' may not be standard")
if is_striking:
striking_formats = ['PNG', 'TIFF', 'JPEG']
if fmt and fmt.upper() not in striking_formats:
issues.append(f"Striking image: prefer PNG, TIFF, or JPEG (got {fmt})")
# Report
print(f"=== eLife Figure Validation {'(Striking)' if is_striking else ''} ===")
print(f"Dimensions: {w} x {h} px")
print(f"DPI: {dpi[0]} x {dpi[1]}")
print(f"Color mode: {img.mode}")
print(f"Format: {fmt}")
if issues:
print(f"\nISSUES FOUND ({len(issues)}):")
for issue in issues:
print(f" - {issue}")
else:
print("\nAll checks PASSED")
print("\nWARNING: eLife routinely screens images for manipulation")
print("Selective enhancement (e.g., single band intensity) = MISCONDUCT")
return len(issues) == 0
eLife replaces traditional supplementary figures with a linked figure supplement system. Supplements are named "Figure X--Figure Supplement Y" and are directly associated with their parent figure in the publication. Each supplement requires a short title and optional legend. This system improves discoverability compared to buried supplementary files.
eLife requires a striking image (graphical abstract) with specific constraints: minimum 1800 x 900 pixels, landscape orientation, 1-2 panels maximum, and no labels or text. This image appears prominently in article listings and social media. It must be a standalone visual that conveys the paper's main finding.
eLife routinely screens all submitted images for inappropriate digital processing. This is systematic, not random. Selective enhancement of any part of a scientific image (e.g., adjusting intensity of a single band in a blot) is treated as research misconduct and may result in rejection, institutional investigation, or retraction.
What type of figure are you preparing?
├── Striking image (graphical abstract)
│ ├── Dimensions: 1800 x 900 px minimum, landscape
│ ├── Format: PNG (preferred), TIFF, or JPEG
│ └── Content: No text, no labels, 1-2 panels max
├── Main figure
│ ├── Standard format: TIFF, EPS, PDF, JPEG
│ └── Upload as individual file
└── Figure supplement
├── Naming: "Figure X--Figure Supplement Y"
├── Include short title
└── Same format requirements as main figures
| Scenario | Format | Resolution | Notes | |---|---|---|---| | Striking image | PNG | 1800 x 900 px minimum | No text or labels | | Western blot | TIFF | 300+ DPI | Will be screened for manipulation | | Graph or chart | EPS or PDF | Vector | Individual file upload | | Micrograph | TIFF | 300+ DPI | Uniform adjustments only | | Supplementary panel | Same as main | Same as main | Name as "Figure X--Figure Supplement Y" | | Data from Excel | Excel (.xlsx) | N/A | Accepted for data-based figures |
Before submitting figures to eLife, verify:
tools
Fast short-read DNA aligner for WGS/WES/ChIP-seq. 2× faster BWA-MEM successor; outputs SAM/BAM with read group headers for GATK. Primary plus supplementary records for chimeric reads. Use STAR for RNA-seq splice-aware alignment; Bowtie2 is a comparable alternative.
tools
smina molecular docking CLI. AutoDock Vina fork with customizable scoring functions, native SDF/MOL2/PDB ligand input, autoboxing, local energy minimization, and per-atom score breakdowns. Pipeline: receptor PDBQT prep -> ligand prep (RDKit/OpenBabel) -> dock via autobox or explicit grid -> rescore/minimize with custom scoring -> rank poses by affinity. Choose smina over Vina when you need custom scoring terms (--custom_scoring), local optimization of an existing pose (--local_only), per-atom contributions (--atom_term_data), or SDF/MOL2 ligands without manual PDBQT conversion. For unknown binding sites use diffdock-blind-docking; for the Python-bindings/Vinardo workflow use autodock-vina-docking.
development
mdtraj molecular dynamics trajectory analysis (Python). Reads DCD/XTC/TRR/NetCDF/H5/PDB topologies and trajectories; computes RMSD vs time, radius of gyration, per-residue RMSF, residue-residue contact frequency maps, phi/psi torsions for Ramachandran plots (general + Gly/Pro), and 8-state DSSP secondary structure. Modules: trajectory I/O, geometry (distances/angles/dihedrals), structural analysis (RMSD/Rg/RMSF/SASA), contacts, hydrogen bonds, secondary structure (DSSP), NMR observables. For broader atom-selection grammar use mdanalysis-trajectory; for running MD simulations use OpenMM/GROMACS.
development
Programmatic PubMed access via NCBI E-utilities REST API. Covers Boolean/MeSH queries, field-tagged search, endpoints (ESearch, EFetch, ESummary, EPost, ELink), history server for batches, citation matching, systematic review strategies. Use for biomedical literature search or automated pipelines.