From sciagent-skills
Guides eLife figure preparation: formats (TIFF/EPS/PDF), striking images (1800x900 px min), supplements, screening policy. Includes Python Pillow function to check resolutions.
npx claudepluginhub jaechang-hits/sciagent-skills --plugin sciagent-skillsThis skill uses the workspace's default tool permissions.
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.
Guides Cell Press figure preparation: verifies resolution (300-1000 DPI) with Python/Pillow, specifies TIFF/PDF formats, RGB color, fonts, labels, and policies.
Critiques academic figures for format, colorblind safety, legibility, overplotting, category count, resolution, and vector/raster suitability before paper submission.
Guides creation of publication-quality scientific visualizations with matplotlib, seaborn, and Python plotting libraries. Covers pitfalls, color palettes, journal specs, and Claude image constraints.
Share bugs, ideas, or general feedback.
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 |
| 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: