Install any skill in seconds. Free to start, no credit card required.
Get Started Free →NEJM figure preparation: resolution (300-1200 DPI), editable vector formats (AI/EPS/SVG), in-house medical illustration policy, and strict image integrity requirements.
.claude/skills/jaechang-hits-nejm-figure-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | 79% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 73% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 113% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 194% | 0% |
This guide provides the complete specifications for preparing figures for submission to the New England Journal of Medicine (NEJM). A unique feature of NEJM is that medical illustrations are created by NEJM's in-house illustrators working directly with authors — authors should NOT submit finished medical illustrations due to copyright considerations.
Official reference: https://www.nejm.org/author-center/new-manuscripts
| Image Type | Minimum Resolution | Notes | |---|---|---| | Black-and-white line art | 1,200 DPI | Highest requirement | | Photographic / halftone images | 300 DPI | Standard for photographs | | Peer review stage | Lower resolution acceptable | High-res required for final publication |
pythonfrom PIL import Image def check_nejm_resolution(image_path, image_type='photo', stage='final'): """Check if image meets NEJM resolution requirements. Args: image_type: 'lineart' (1200 DPI) or 'photo' (300 DPI) stage: 'review' (lower OK) or 'final' (strict requirements) """ min_dpi = {'lineart': 1200, 'photo': 300} required = min_dpi.get(image_type, 300) if stage == 'review': print("NOTE: Lower resolution acceptable for peer review") required = 150 # relaxed for review img = Image.open(image_path) dpi = img.info.get('dpi', (72, 72)) print(f"Stage: {stage} | Type: {image_type}") print(f"Required: {required} DPI | Actual: {dpi[0]} DPI") passed = dpi[0] >= required print("PASS" if passed else "FAIL") return passed
| Figure Type | Preferred Format | Notes | |---|---|---| | Data visualizations (graphs, plots, diagrams) | AI, EPS, SVG | Editable vector files preferred | | Photographic images | TIFF | High-resolution raster | | Medical illustrations | Do NOT submit | NEJM illustrators create these |
IMPORTANT: NEJM's in-house medical illustrators will work directly with authors to create medical illustrations. Authors should NOT submit finished illustrations due to copyright considerations. The journal retains copyright on illustrations created by their team.
NEJM does not publish detailed size specifications in their public guidelines. General best practices:
| Element | Specification | |---|---| | Preferred style | Sans-serif | | Historical font | Univers (NEJM house font) | | Alternatives | Helvetica, Arial |
pythonimport matplotlib.pyplot as plt def set_nejm_fonts(): """Configure Matplotlib for NEJM figure fonts.""" plt.rcParams.update({ 'font.family': 'sans-serif', 'font.sans-serif': ['Univers', 'Helvetica', 'Arial'], 'font.size': 8, 'axes.labelsize': 8, 'axes.titlesize': 8, 'xtick.labelsize': 7, 'ytick.labelsize': 7, 'legend.fontsize': 7, })
pythondef check_clinical_image_text(title, legend): """Validate text limits for NEJM Images in Clinical Medicine.""" title_words = len(title.split()) legend_words = len(legend.split()) issues = [] if title_words > 8: issues.append(f"Title has {title_words} words (max 8)") if legend_words > 150: issues.append(f"Legend has {legend_words} words (max 150)") if issues: for issue in issues: print(f"ISSUE: {issue}") else: print(f"PASS: Title ({title_words} words), Legend ({legend_words} words)") return len(issues) == 0
pythonfrom PIL import Image import os def validate_nejm_figure(image_path, image_type='photo', stage='final'): """Full validation of a figure against NEJM requirements.""" img = Image.open(image_path) issues = [] # 1. Resolution check min_dpi = {'lineart': 1200, 'photo': 300} required = min_dpi.get(image_type, 300) if stage == 'review': required = 150 dpi = img.info.get('dpi', (72, 72)) if dpi[0] < required: issues.append(f"Resolution {dpi[0]} DPI below {required} DPI for {image_type} ({stage})") # 2. Color mode if img.mode not in ('RGB', 'RGBA', 'L'): issues.append(f"Color mode {img.mode} may not be ideal; use RGB or Grayscale") # 3. Format check fmt = img.format vector_preferred = image_type != 'photo' if vector_preferred and fmt and fmt.upper() in ('JPEG', 'PNG'): issues.append(f"Data visualizations: prefer vector format (AI, EPS, SVG) over {fmt}") # Report print(f"=== NEJM Figure Validation ({stage}) ===") print(f"Dimensions: {img.size[0]} x {img.size[1]} px") print(f"DPI: {dpi[0]} x {dpi[1]}") print(f"Color mode: {img.mode}") if issues: print(f"\nISSUES FOUND ({len(issues)}):") for issue in issues: print(f" - {issue}") else: print("\nAll checks PASSED") print("\nREMINDER: Do NOT submit finished medical illustrations (NEJM creates these)") print("REMINDER: Remove ALL patient-identifying information from images") return len(issues) == 0
NEJM's most distinctive policy is that medical illustrations are created by their in-house illustrators working directly with authors. Authors should NOT submit finished medical illustrations. The journal retains copyright on illustrations created by their team. This applies only to medical illustrations — data visualizations and photographs are author-submitted.
NEJM accepts lower-resolution figures during peer review to reduce submission friction. However, final publication requires full resolution: 1,200 DPI for line art and 300 DPI for photographs. Authors should prepare high-resolution originals from the start to avoid rework.
NEJM enforces strict patient privacy requirements. All patient-identifying information must be removed from images, including faces, names, medical record numbers, and any other identifiable features. This is non-negotiable and applies to all clinical images regardless of consent status.
What type of figure are you preparing?
├── Medical illustration (anatomy, mechanism)
│ └── Do NOT submit → NEJM illustrators create these
├── Data visualization (graph, chart, diagram)
│ ├── Vector source available → AI, EPS, or SVG (preferred)
│ └── Raster only → TIFF at 1,200 DPI (line art) or 300 DPI (photo)
├── Clinical photograph
│ ├── Patient identifiable? → Remove ALL identifying information
│ └── Ready for submission → TIFF at 300+ DPI
└── What stage?
├── Peer review → Lower resolution acceptable
└── Final publication → Full resolution required| Scenario | Format | Resolution | Special Considerations | |---|---|---|---| | Kaplan-Meier curve | AI, EPS, SVG | Vector | Editable format preferred | | Clinical photograph | TIFF | 300+ DPI | Remove patient identifiers | | Histology image | TIFF | 300+ DPI | Include scale bar | | Flowchart or diagram | AI, EPS, SVG | Vector | Use Univers or Helvetica | | Medical illustration | Do NOT submit | N/A | NEJM creates in-house | | Images in Clinical Medicine | TIFF/JPEG | 300+ DPI | Title max 8 words, legend max 150 words |
Before submitting figures to NEJM, verify:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | fail→pass | 13,794 | 4,246 | -69% | 1 | 1 | 0% | 2,044 | 3,667 | +79% | 0 | 0 | — |
case-01 | fail→pass | 22,146 | 40,852 | +84% | 1 | 1 | 0% | 4,073 | 7,057 | +73% | 0 | 0 | — |
case-02 | fail→pass | 22,141 | 14,619 | -34% | 1 | 1 | 0% | 3,390 | 5,514 | +63% | 0 | 0 | — |
case-03 | fail→pass | 16,617 | 14,826 | -11% | 1 | 1 | 0% | 2,837 | 6,041 | +113% | 0 | 0 | — |
case-04 | pass→pass | 10,947 | 3,914 | -64% | 1 | 1 | 0% | 1,644 | 3,601 | +119% | 0 | 0 | — |
case-05 | pass→pass | 13,457 | 5,065 | -62% | 1 | 1 | 0% | 2,311 | 3,912 | +69% | 0 | 0 | — |
case-06 | pass→pass | 10,179 | 6,902 | -32% | 1 | 1 | 0% | 1,482 | 4,113 | +178% | 0 | 0 | — |
case-07 | pass→pass | 11,651 | 6,212 | -47% | 1 | 1 | 0% | 1,661 | 3,928 | +136% | 0 | 0 | — |
case-08 | pass→pass | 13,617 | 14,076 | +3% | 1 | 1 | 0% | 2,173 | 5,291 | +143% | 0 | 0 | — |
case-09 | fail→pass | 7,924 | 4,743 | -40% | 1 | 1 | 0% | 1,326 | 3,903 | +194% | 0 | 0 | — |
case-10 | pass→pass | 14,178 | 13,579 | -4% | 1 | 1 | 0% | 2,253 | 5,337 | +137% | 0 | 0 | — |
case-11 | pass→pass | 10,541 | 6,461 | -39% | 1 | 1 | 0% | 1,560 | 4,029 | +158% | 0 | 0 | — |
case-13 | fail→pass | 8,225 | 3,697 | -55% | 1 | 1 | 0% | 1,320 | 3,548 | +169% | 0 | 0 | — |
case-14 | pass→pass | 16,966 | 12,413 | -27% | 1 | 1 | 0% | 2,448 | 5,221 | +113% | 0 | 0 | — |
case-15 | pass→pass | 7,387 | 5,944 | -20% | 1 | 1 | 0% | 1,166 | 3,842 | +230% | 0 | 0 | — |
case-16 | pass→pass | 11,915 | 7,426 | -38% | 1 | 1 | 0% | 1,771 | 4,158 | +135% | 0 | 0 | — |
case-22 | pass→pass | 11,525 | 10,458 | -9% | 1 | 1 | 0% | 1,627 | 4,635 | +185% | 0 | 0 | — |
case-17 | pass→pass | 13,559 | 12,264 | -10% | 1 | 1 | 0% | 2,118 | 4,911 | +132% | 0 | 0 | — |
case-18 | pass→pass | 10,526 | 6,018 | -43% | 1 | 1 | 0% | 1,569 | 3,967 | +153% | 0 | 0 | — |
case-19 | fail→pass | 8,955 | 4,223 | -53% | 1 | 1 | 0% | 1,159 | 3,727 | +222% | 0 | 0 | — |
case-20 | fail→fail | 14,974 | 18,919 | +26% | 1 | 1 | 0% | 2,405 | 6,269 | +161% | 0 | 0 | — |
case-21 | pass→pass | 11,205 | 14,943 | +33% | 1 | 1 | 0% | 1,913 | 5,487 | +187% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +32 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.