Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Cell (Cell Press) figure preparation: resolution (300-1000 DPI), formats (TIFF/PDF), RGB color, Avenir/Arial fonts, uppercase panel labels, strict image manipulation policies.
.claude/skills/jaechang-hits-cell-figure-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 832% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 361% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 71% | 0% |
| case-14 | ✓→✓ | = Same ✓ | 248% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 199% | 0% |
This guide provides the complete specifications for preparing figures for submission to Cell and other Cell Press journals (e.g., Cell Stem Cell, Cell Reports, Molecular Cell). Cell Press has strict figure requirements and a rigorous image integrity policy.
Official reference: https://www.cell.com/information-for-authors/figure-guidelines
| Image Type | Minimum Resolution | Notes | |---|---|---| | Color / Grayscale photographs | 300 DPI | At desired print size | | Black-and-white images | 500 DPI | At desired print size | | Line art (graphs, diagrams) | 1,000 DPI | At desired print size |
IMPORTANT: All resolution measurements are at the desired print size, not at full-page size.
pythonfrom PIL import Image def check_cell_resolution(image_path, image_type='color'): """Check if image meets Cell journal resolution requirements. Args: image_path: Path to the image file image_type: 'color' (300 DPI), 'bw' (500 DPI), or 'lineart' (1000 DPI) """ min_dpi = {'color': 300, 'bw': 500, 'lineart': 1000} required = min_dpi.get(image_type, 300) img = Image.open(image_path) dpi = img.info.get('dpi', (72, 72)) print(f"Image type: {image_type}") print(f"Required DPI: {required}") print(f"Actual DPI: {dpi[0]} x {dpi[1]}") if dpi[0] >= required: print("PASS: Resolution meets Cell requirements") else: print(f"FAIL: Need at least {required} DPI, got {dpi[0]}") return dpi[0] >= required
| Format | Best For | Notes | |---|---|---| | TIFF | Bitmap, grayscale, color images | Use LZW compression to reduce size | | PDF | Any figure type | Universally accepted | | EPS | Vector images (graphs, diagrams) | Preserves scalability |
| Layout | Width | |---|---| | 1 column | 85 mm (3.35 in) | | 1.5 columns | 114 mm (4.49 in) | | Full width | 174 mm (6.85 in) |
| Layout | Width | |---|---| | 1 column | 55 mm (2.17 in) | | 2 columns | 114 mm (4.49 in) | | Full width | 174 mm (6.85 in) |
| Layout | Width | |---|---| | 1 column | 112 mm (4.41 in) | | Full width | 172 mm (6.77 in) |
All figures must fit on a single 8.5" x 11" page.
pythonimport matplotlib.pyplot as plt # Cell Press figure widths in inches CELL_WIDTHS = { '2col_single': 85 / 25.4, # 3.35 in '2col_1.5': 114 / 25.4, # 4.49 in '2col_full': 174 / 25.4, # 6.85 in '3col_single': 55 / 25.4, # 2.17 in '3col_double': 114 / 25.4, # 4.49 in '3col_full': 174 / 25.4, # 6.85 in } def create_cell_figure(layout='2col_single', aspect_ratio=0.75): """Create a Matplotlib figure sized for Cell Press journals.""" width = CELL_WIDTHS[layout] height = width * aspect_ratio fig, ax = plt.subplots(figsize=(width, height)) fig.set_dpi(300) return fig, ax
pythonfrom PIL import Image def convert_to_rgb_for_cell(image_path, output_path): """Convert image to RGB for Cell Press submission.""" img = Image.open(image_path) if img.mode == 'CMYK': img = img.convert('RGB') print("Converted from CMYK to RGB") elif img.mode != 'RGB': img = img.convert('RGB') print(f"Converted from {img.mode} to RGB") img.save(output_path) return output_path
| Element | Font | Size | |---|---|---| | Primary font | Avenir (preferred), Arial, Helvetica | — | | Figure text | — | ~7 pt at print size | | Panel labels | — | Bold, capital letters |
pythonimport matplotlib.pyplot as plt def set_cell_fonts(): """Configure Matplotlib for Cell Press figure fonts.""" plt.rcParams.update({ 'font.family': 'sans-serif', 'font.sans-serif': ['Avenir', 'Arial', 'Helvetica'], 'font.size': 7, 'axes.labelsize': 7, 'axes.titlesize': 7, 'xtick.labelsize': 6, 'ytick.labelsize': 6, 'legend.fontsize': 6, })
pythonimport matplotlib.pyplot as plt import string def add_cell_panel_labels(fig, axes): """Add Cell-style uppercase bold panel labels.""" if not hasattr(axes, '__iter__'): axes = [axes] for i, ax in enumerate(axes): label = string.ascii_uppercase[i] ax.text(-0.1, 1.1, label, transform=ax.transAxes, fontsize=8, fontweight='bold', va='top', ha='right', fontfamily='Arial')
pythonfrom PIL import Image import os def validate_cell_figure(image_path, image_type='color', layout='2col_single'): """Full validation of a figure against Cell Press requirements.""" img = Image.open(image_path) issues = [] # 1. Resolution check min_dpi = {'color': 300, 'bw': 500, 'lineart': 1000} required_dpi = min_dpi.get(image_type, 300) dpi = img.info.get('dpi', (72, 72)) if dpi[0] < required_dpi: issues.append(f"Resolution {dpi[0]} DPI below minimum {required_dpi} DPI for {image_type}") # 2. Color mode check if img.mode != 'RGB': issues.append(f"Color mode is {img.mode}; Cell requires RGB submission") # 3. File size check size_mb = os.path.getsize(image_path) / (1024 * 1024) if size_mb > 20: issues.append(f"File size {size_mb:.1f} MB exceeds 20 MB limit") # 4. Dimension check (width in mm) widths_mm = { '2col_single': 85, '2col_1.5': 114, '2col_full': 174, '3col_single': 55, '3col_double': 114, '3col_full': 174, } if layout in widths_mm and dpi[0] > 0: max_width_mm = widths_mm[layout] actual_width_mm = (img.size[0] / dpi[0]) * 25.4 print(f"Width at current DPI: {actual_width_mm:.1f} mm (target: {max_width_mm} mm)") # Report print(f"=== Cell Figure Validation: {os.path.basename(image_path)} ===") 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}") print(f"File size: {size_mb:.1f} MB") if issues: print(f"\nISSUES FOUND ({len(issues)}):") for issue in issues: print(f" - {issue}") else: print("\nAll checks PASSED") return len(issues) == 0
Cell Press uses a three-tier resolution system: 300 DPI for color/grayscale photographs, 500 DPI for black-and-white images, and 1,000 DPI for line art. All measurements are at the desired print size, not at arbitrary large dimensions. This tiered approach ensures each image type reproduces at appropriate quality.
Cell Press journals use different column layouts depending on the journal. Two-column journals (Cell, Molecular Cell) use 85/114/174 mm widths. Three-column journals use 55/114/174 mm. Other journals (Chem, Joule) use 112/172 mm. Sizing figures to the correct column width prevents unwanted rescaling.
Cell Press enforces one of the strictest image integrity policies in biomedical publishing. The use of Photoshop clone/heal tools on scientific images is explicitly prohibited. Any single-channel color alterations must be disclosed in both the figure legend and Methods section.
What type of image are you preparing?
├── Color or grayscale photograph → 300 DPI minimum
│ ├── Micrograph → TIFF (LZW compression)
│ └── Clinical image → TIFF or PDF
├── Black-and-white image → 500 DPI minimum
│ └── High-contrast micrograph → TIFF
├── Line art (graph, diagram) → 1,000 DPI minimum
│ ├── Vector source → Export as PDF or EPS
│ └── Raster source → Export TIFF at 1,000 DPI
└── Which journal layout?
├── Cell, Molecular Cell → 2-column (85/114/174 mm)
├── Cell Reports → 3-column (55/114/174 mm)
└── Chem, Joule, Matter → Single/full (112/172 mm)| Scenario | Format | Resolution | Width | |---|---|---|---| | Fluorescence micrograph | TIFF (LZW) | 300 DPI | Journal-specific column | | Western blot | TIFF | 500 DPI | Single column (85 mm) | | Bar chart or scatter plot | PDF or EPS | 1,000 DPI (if rasterized) | Varies by data density | | Gel electrophoresis | TIFF | 500 DPI | Full width if multi-lane | | Pathway diagram | PDF or EPS | Vector | Full width (174 mm) |
Before submitting figures to Cell, verify:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 21,041 | 18,896 | -10% | 1 | 1 | 0% | 4,362 | 7,464 | +71% | 0 | 0 | — |
case-14 | pass→pass | 8,981 | 6,777 | -25% | 1 | 1 | 0% | 1,500 | 5,218 | +248% | 0 | 0 | — |
case-02 | pass→pass | 9,416 | 5,555 | -41% | 1 | 1 | 0% | 1,688 | 5,046 | +199% | 0 | 0 | — |
case-03 | pass→pass | 11,377 | 5,506 | -52% | 1 | 1 | 0% | 1,950 | 5,025 | +158% | 0 | 0 | — |
case-04 | pass→pass | 27,800 | 4,721 | -83% | 1 | 1 | 0% | 1,303 | 4,854 | +273% | 0 | 0 | — |
case-05 | pass→pass | 8,644 | 3,349 | -61% | 1 | 1 | 0% | 1,799 | 4,708 | +162% | 0 | 0 | — |
case-15 | pass→pass | 7,940 | 9,573 | +21% | 1 | 1 | 0% | 1,294 | 5,555 | +329% | 0 | 0 | — |
case-06 | pass→pass | 3,134 | 3,264 | +4% | 1 | 1 | 0% | 605 | 4,685 | +674% | 0 | 0 | — |
case-07 | pass→pass | 13,088 | 3,024 | -77% | 1 | 1 | 0% | 2,397 | 4,609 | +92% | 0 | 0 | — |
case-08 | fail→pass | 3,209 | 2,252 | -30% | 1 | 1 | 0% | 471 | 4,392 | +832% | 0 | 0 | — |
case-09 | pass→pass | 10,412 | 6,615 | -36% | 1 | 1 | 0% | 1,595 | 5,203 | +226% | 0 | 0 | — |
case-10 | fail→pass | 6,346 | 3,362 | -47% | 1 | 1 | 0% | 998 | 4,604 | +361% | 0 | 0 | — |
case-11 | pass→pass | 9,477 | 4,118 | -57% | 1 | 1 | 0% | 1,721 | 4,746 | +176% | 0 | 0 | — |
case-12 | pass→pass | 8,983 | 5,494 | -39% | 1 | 1 | 0% | 1,456 | 4,870 | +234% | 0 | 0 | — |
case-13 | pass→pass | 12,157 | 5,877 | -52% | 1 | 1 | 0% | 1,821 | 4,999 | +175% | 0 | 0 | — |
case-16 | pass→pass | 12,129 | 9,772 | -19% | 1 | 1 | 0% | 1,973 | 5,751 | +191% | 0 | 0 | — |
case-17 | pass→pass | 4,162 | 1,473 | -65% | 1 | 1 | 0% | 675 | 4,336 | +542% | 0 | 0 | — |
case-18 | pass→pass | 7,873 | 5,314 | -33% | 1 | 1 | 0% | 1,402 | 4,956 | +253% | 0 | 0 | — |
case-19 | pass→pass | 8,327 | 6,029 | -28% | 1 | 1 | 0% | 1,720 | 5,325 | +210% | 0 | 0 | — |
case-20 | fail→fail | 5,421 | 3,967 | -27% | 1 | 1 | 0% | 920 | 4,741 | +415% | 0 | 0 | — |
case-21 | pass→pass | 10,431 | 11,819 | +13% | 1 | 1 | 0% | 1,816 | 5,964 | +228% | 0 | 0 | — |
case-22 | pass→pass | 12,716 | 11,279 | -11% | 1 | 1 | 0% | 2,471 | 6,165 | +149% | 0 | 0 | — |
case-23 | pass→pass | 10,302 | 12,387 | +20% | 1 | 1 | 0% | 2,354 | 7,002 | +197% | 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. 23 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 23 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.