Skill Tracer
Skills › Scientific Agent Skills › scientific-slides › powerpoint_design_guide.md

powerpoint_design_guide.md

702 lines · skills/scientific-slides/assets/powerpoint_design_guide.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# PowerPoint Design Guide for Scientific Presentations
2

PowerPoint Design Guide for Scientific Presentations

Raw lines 1 to 2
3## Overview
4
5This guide provides comprehensive instructions for creating professional scientific presentations using PowerPoint, with emphasis on programmatic creation with PptxGenJS and best practices for scientific content.
6
7**CRITICAL**: Avoid dry, text-heavy presentations. Scientific slides should be:
8- **Visually engaging**: High-quality images, figures, diagrams on EVERY slide
9- **Research-backed**: Citations from research-lookup for credibility (8-15 papers minimum)
10- **Modern design**: Contemporary color palettes, not default themes
11- **Minimal text**: 3-4 bullets with 4-6 words each, visuals do the talking
12- **Professional polish**: Consistent but varied layouts, generous white space
14**Anti-Pattern Warning**: All-bullet-point slides with black text on white background = instant boredom and forgotten science.
16The examples target [PptxGenJS 4.0.1](https://gitbrent.github.io/PptxGenJS/docs/)
17(reviewed 2026-09-30). Use Node.js with `pptxgenjs` installed in a task-local project.
18Code fragments assume supplied images and verified research claims; example numbers
19and citations are placeholders. Native slide composition preserves quantitative
20figures; generative image attachments do not guarantee unchanged data.

Overview

This guide provides comprehensive instructions for creating professional scientific presentations using PowerPoint, with emphasis on programmatic creation with PptxGenJS and best practices for scientific content.

CRITICAL: Avoid dry, text-heavy presentations. Scientific slides should be:

  • Visually engaging: High-quality images, figures, diagrams on EVERY slide
  • Research-backed: Citations from research-lookup for credibility (8-15 papers minimum)
  • Modern design: Contemporary color palettes, not default themes
  • Minimal text: 3-4 bullets with 4-6 words each, visuals do the talking
  • Professional polish: Consistent but varied layouts, generous white space

Anti-Pattern Warning: All-bullet-point slides with black text on white background = instant boredom and forgotten science.

The examples target PptxGenJS 4.0.1 (reviewed 2026-09-30). Use Node.js with pptxgenjs installed in a task-local project. Code fragments assume supplied images and verified research claims; example numbers and citations are placeholders. Native slide composition preserves quantitative figures; generative image attachments do not guarantee unchanged data.

Raw lines 3 to 21
22## Building the Deck
24New decks are built with PptxGenJS; existing templates are filled with
25[python-pptx](https://python-pptx.readthedocs.io/) 1.0.2. Either way, render the result
26through LibreOffice and inspect the images before delivery.

Building the Deck

New decks are built with PptxGenJS; existing templates are filled with python-pptx 1.0.2. Either way, render the result through LibreOffice and inspect the images before delivery.

Raw lines 22 to 27
28### Two Approaches to PowerPoint Creation
30#### 1. Programmatic Creation (PptxGenJS)
32**Best for**: Creating presentations from scratch with custom designs and data visualizations.
34**Workflow**:
351. Read the PptxGenJS documentation (linked above) for each API call you use
362. Set `pres.layout` before adding slides (`LAYOUT_16x9` is 10" × 5.625"; coordinates are inches)
373. Create a JavaScript file that builds the deck with the PptxGenJS API
384. Add charts and tables using the PptxGenJS API
395. Render the deck to images and validate visually (see Visual Validation Workflow)
406. Iterate based on visual inspection
42**Image dimensions:** `1000, 500` below are illustrative source pixel dimensions.
43Replace them with the actual dimensions of each asset. PptxGenJS 4.0.1 has no
44`imageSizingContain` method; its native `sizing` also relies on supplied source
45`w`/`h`. The small `fitImage` function instead computes explicit placement.
47**Example Structure**:
48```javascript
49const PptxGenJS = require("pptxgenjs");
50const pptx = new PptxGenJS();
51pptx.layout = "LAYOUT_16x9";
53// Supply the original pixel dimensions (for example from Pillow/identify).
54// Explicit geometry preserves the source aspect ratio without API sizing helpers.
55function fitImage(widthPx, heightPx, x, y, w, h) {
56 const scale = Math.min(w / widthPx, h / heightPx);
57 const width = widthPx * scale, height = heightPx * scale;
58 return { x: x + (w - width) / 2, y: y + (h - height) / 2, w: width, h: height };
61// Add title slide
62const slide1 = pptx.addSlide();
63slide1.addText("Your Title", {
64 x: 1, y: 2, w: 8, h: 1,
65 fontSize: 44, bold: true, align: "center"
66});
68// Add content slide with figure
69const slide2 = pptx.addSlide();
70slide2.addText("Results", { x: 0.5, y: 0.5, fontSize: 32 });
71slide2.addImage({ path: "figure.png", ...fitImage(1000, 500, 1, 1.5, 8, 4) });
73pptx.writeFile({ fileName: "presentation.pptx" });
74```
76#### 2. Template-Based Creation
78**Best for**: Using existing PowerPoint templates or editing existing presentations.
80**Workflow** (python-pptx 1.0.2):
811. Start with template.pptx
822. List the template's layouts and placeholders, and render it to images to see each layout
833. Read the existing text with `markitdown` to plan replacements
844. Add slides from the layouts you need and fill their placeholders
855. Save, run `validate_presentation.py`, and re-render to check the result
87```python
88from pptx import Presentation
90prs = Presentation("template.pptx")
91for index, layout in enumerate(prs.slide_layouts):
92 print(index, layout.name, [p.placeholder_format.idx for p in layout.placeholders])
94slide = prs.slides.add_slide(prs.slide_layouts[1]) # choose by the printed name
95slide.shapes.title.text = "Results"
96slide.placeholders[1].text = "Response rate doubled in cohort B"
97prs.save("output.pptx")
98```
100Layout indices and placeholder `idx` values differ between templates, so read them from
101the printout rather than reusing the numbers above. python-pptx has no slide-duplication
102API: build each new slide from a layout instead of copying an existing slide.
104Text extraction uses `markitdown` rather than a dedicated script:
106```bash
107markitdown template.pptx
108```

Two Approaches to PowerPoint Creation

1. Programmatic Creation (PptxGenJS)

Best for: Creating presentations from scratch with custom designs and data visualizations.

Workflow:

  1. Read the PptxGenJS documentation (linked above) for each API call you use
  2. Set pres.layout before adding slides (LAYOUT_16x9 is 10" × 5.625"; coordinates are inches)
  3. Create a JavaScript file that builds the deck with the PptxGenJS API
  4. Add charts and tables using the PptxGenJS API
  5. Render the deck to images and validate visually (see Visual Validation Workflow)
  6. Iterate based on visual inspection

Image dimensions: 1000, 500 below are illustrative source pixel dimensions. Replace them with the actual dimensions of each asset. PptxGenJS 4.0.1 has no imageSizingContain method; its native sizing also relies on supplied source w/h. The small fitImage function instead computes explicit placement.

Example Structure:

const PptxGenJS = require("pptxgenjs");
const pptx = new PptxGenJS();
pptx.layout = "LAYOUT_16x9";

// Supply the original pixel dimensions (for example from Pillow/identify).
// Explicit geometry preserves the source aspect ratio without API sizing helpers.
function fitImage(widthPx, heightPx, x, y, w, h) {
  const scale = Math.min(w / widthPx, h / heightPx);
  const width = widthPx * scale, height = heightPx * scale;
  return { x: x + (w - width) / 2, y: y + (h - height) / 2, w: width, h: height };
}

// Add title slide
const slide1 = pptx.addSlide();
slide1.addText("Your Title", {
  x: 1, y: 2, w: 8, h: 1,
  fontSize: 44, bold: true, align: "center"
});

// Add content slide with figure
const slide2 = pptx.addSlide();
slide2.addText("Results", { x: 0.5, y: 0.5, fontSize: 32 });
slide2.addImage({ path: "figure.png", ...fitImage(1000, 500, 1, 1.5, 8, 4) });

pptx.writeFile({ fileName: "presentation.pptx" });

2. Template-Based Creation

Best for: Using existing PowerPoint templates or editing existing presentations.

Workflow (python-pptx 1.0.2):

  1. Start with template.pptx
  2. List the template's layouts and placeholders, and render it to images to see each layout
  3. Read the existing text with markitdown to plan replacements
  4. Add slides from the layouts you need and fill their placeholders
  5. Save, run validate_presentation.py, and re-render to check the result
from pptx import Presentation

prs = Presentation("template.pptx")
for index, layout in enumerate(prs.slide_layouts):
    print(index, layout.name, [p.placeholder_format.idx for p in layout.placeholders])

slide = prs.slides.add_slide(prs.slide_layouts[1])  # choose by the printed name
slide.shapes.title.text = "Results"
slide.placeholders[1].text = "Response rate doubled in cohort B"
prs.save("output.pptx")

Layout indices and placeholder idx values differ between templates, so read them from the printout rather than reusing the numbers above. python-pptx has no slide-duplication API: build each new slide from a layout instead of copying an existing slide.

Text extraction uses markitdown rather than a dedicated script:

markitdown template.pptx
Raw lines 28 to 109
Names a skill markitdown :83
110## Design Principles for Scientific Presentations

Design Principles for Scientific Presentations

Raw lines 110 to 111
112### 1. Layout and Structure
114**Slide Master Setup**:
115- Create consistent master slides
116- Define 4-5 layout types (title, content, figure, two-column, closing)
117- Set default fonts, colors, and spacing
118- Include placeholders for logos and footers
120**Standard Layouts**:
122**Title Slide**:
123```
124┌─────────────────────────┐
125│ │
126│ Presentation Title │
127│ Your Name │
128│ Institution │
129│ Date / Conference │
130│ │
131└─────────────────────────┘
132```
134**Content Slide**:
135```
136┌─────────────────────────┐
137│ Slide Title │
138├─────────────────────────┤
139│ • Bullet point 1 │
140│ • Bullet point 2 │
141│ • Bullet point 3 │
142│ │
143│ [Optional figure] │
144└─────────────────────────┘
145```
147**Two-Column Slide**:
148```
149┌─────────────────────────┐
150│ Slide Title │
151├───────────┬─────────────┤
152│ │ │
153│ Text │ Figure │
154│ Content │ or │
155│ │ Data │
156└───────────┴─────────────┘
157```
159**Full-Figure Slide**:
160```
161┌─────────────────────────┐
162│ Figure Title (small) │
163├─────────────────────────┤
164│ │
165│ Large Figure or │
166│ Visualization │
167│ │
168└─────────────────────────┘
169```

1. Layout and Structure

Slide Master Setup:

  • Create consistent master slides
  • Define 4-5 layout types (title, content, figure, two-column, closing)
  • Set default fonts, colors, and spacing
  • Include placeholders for logos and footers

Standard Layouts:

Title Slide:

┌─────────────────────────┐
│                         │
│   Presentation Title    │
│   Your Name             │
│   Institution           │
│   Date / Conference     │
│                         │
└─────────────────────────┘

Content Slide:

┌─────────────────────────┐
│ Slide Title             │
├─────────────────────────┤
│ • Bullet point 1        │
│ • Bullet point 2        │
│ • Bullet point 3        │
│                         │
│ [Optional figure]       │
└─────────────────────────┘

Two-Column Slide:

┌─────────────────────────┐
│ Slide Title             │
├───────────┬─────────────┤
│           │             │
│  Text     │   Figure    │
│  Content  │   or        │
│           │   Data      │
└───────────┴─────────────┘

Full-Figure Slide:

┌─────────────────────────┐
│ Figure Title (small)    │
├─────────────────────────┤
│                         │
│    Large Figure or      │
│    Visualization        │
│                         │
└─────────────────────────┘
Raw lines 112 to 170
171### 2. Typography
173**Font Selection**:
174- **Primary**: Sans-serif (Arial, Calibri, Helvetica)
175- **Alternative**: Verdana, Tahoma, Trebuchet MS
176- **Avoid**: Serif fonts (harder to read on screens), decorative fonts
178**Font Sizes**:
179- Title slide title: 44-54pt
180- Slide titles: 32-40pt
181- Body text: 24-28pt (minimum 18pt)
182- Captions: 16-20pt
183- Footer: 10-12pt
185**Text Formatting**:
186- **Bold**: For emphasis (use sparingly)
187- **Color**: For highlighting (consistent meaning)
188- **Size**: For hierarchy
189- **Alignment**: Left for body, center for titles
191**The 6×6 Rule**:
192- Maximum 6 bullet points per slide
193- Maximum 6 words per bullet
194- Better: 3-4 bullets with 4-8 words each

2. Typography

Font Selection:

  • Primary: Sans-serif (Arial, Calibri, Helvetica)
  • Alternative: Verdana, Tahoma, Trebuchet MS
  • Avoid: Serif fonts (harder to read on screens), decorative fonts

Font Sizes:

  • Title slide title: 44-54pt
  • Slide titles: 32-40pt
  • Body text: 24-28pt (minimum 18pt)
  • Captions: 16-20pt
  • Footer: 10-12pt

Text Formatting:

  • Bold: For emphasis (use sparingly)
  • Color: For highlighting (consistent meaning)
  • Size: For hierarchy
  • Alignment: Left for body, center for titles

The 6×6 Rule:

  • Maximum 6 bullet points per slide
  • Maximum 6 words per bullet
  • Better: 3-4 bullets with 4-8 words each
Raw lines 171 to 195
196### 3. Color Schemes
198**Selecting Colors**:
200Consider your subject matter and audience:
201- **Academic/Professional**: Navy blue, gray, white with minimal accent
202- **Biomedical**: Blue and green tones (avoid red-green combinations)
203- **Technology**: Modern colors (teal, orange, purple)
204- **Clinical**: Conservative (blue, gray, subdued greens)
206**Example Palettes**:
208**Classic Scientific**:
209- Background: White (#FFFFFF)
210- Title: Navy (#1C3D5A)
211- Text: Dark gray (#2D3748)
212- Accent: Orange (#E67E22)
214**Modern Research**:
215- Background: Light gray (#F7FAFC)
216- Title: Teal (#0A9396)
217- Text: Charcoal (#2C2C2C)
218- Accent: Coral (#EE6C4D)
220**High Contrast** (for large venues):
221- Background: White (#FFFFFF)
222- Title: Black (#000000)
223- Text: Dark gray (#1A1A1A)
224- Accent: Bright blue (#0066CC)
226**Accessibility Guidelines**:
227- Minimum contrast ratio: 4.5:1 (body text)
228- Preferred contrast ratio: 7:1 (AAA standard)
229- Avoid red-green combinations (8% of men are color-blind)
230- Use patterns or shapes in addition to color for data

3. Color Schemes

Selecting Colors:

Consider your subject matter and audience:

  • Academic/Professional: Navy blue, gray, white with minimal accent
  • Biomedical: Blue and green tones (avoid red-green combinations)
  • Technology: Modern colors (teal, orange, purple)
  • Clinical: Conservative (blue, gray, subdued greens)

Example Palettes:

Classic Scientific:

  • Background: White (#FFFFFF)
  • Title: Navy (#1C3D5A)
  • Text: Dark gray (#2D3748)
  • Accent: Orange (#E67E22)

Modern Research:

  • Background: Light gray (#F7FAFC)
  • Title: Teal (#0A9396)
  • Text: Charcoal (#2C2C2C)
  • Accent: Coral (#EE6C4D)

High Contrast (for large venues):

  • Background: White (#FFFFFF)
  • Title: Black (#000000)
  • Text: Dark gray (#1A1A1A)
  • Accent: Bright blue (#0066CC)

Accessibility Guidelines:

  • Minimum contrast ratio: 4.5:1 (body text)
  • Preferred contrast ratio: 7:1 (AAA standard)
  • Avoid red-green combinations (8% of men are color-blind)
  • Use patterns or shapes in addition to color for data
Raw lines 196 to 231
232### 4. Visual Elements
234**Figures and Images**:
235- **Resolution**: Minimum 300 DPI for print, 150 DPI for projection
236- **Format**: PNG for screenshots, PDF/SVG for vector graphics
237- **Size**: Large enough to be readable from back of room
238- **Placement**: Center or use two-column layout
240**Data Visualizations**:
241- **Simplify** from journal figures (fewer panels, larger text)
242- **Font sizes**: 18-24pt for axis labels
243- **Line widths**: 2-4pt thickness
244- **Colors**: High contrast, color-blind safe
245- **Labels**: Direct labeling preferred over legends
247**Icons and Shapes**:
248- Use for visual interest and organization
249- Consistent style (all outline or all filled)
250- Size appropriately (not too large or small)
251- Limit colors (match theme)

4. Visual Elements

Figures and Images:

  • Resolution: Minimum 300 DPI for print, 150 DPI for projection
  • Format: PNG for screenshots, PDF/SVG for vector graphics
  • Size: Large enough to be readable from back of room
  • Placement: Center or use two-column layout

Data Visualizations:

  • Simplify from journal figures (fewer panels, larger text)
  • Font sizes: 18-24pt for axis labels
  • Line widths: 2-4pt thickness
  • Colors: High contrast, color-blind safe
  • Labels: Direct labeling preferred over legends

Icons and Shapes:

  • Use for visual interest and organization
  • Consistent style (all outline or all filled)
  • Size appropriately (not too large or small)
  • Limit colors (match theme)
Raw lines 232 to 252
253### 5. Animations and Transitions
255**When to Use**:
256- ✅ Progressive disclosure of bullet points
257- ✅ Building complex figures incrementally
258- ✅ Emphasizing key findings
259- ✅ Showing process steps
261**When to Avoid**:
262- ❌ Decoration or entertainment
263- ❌ Every single slide
264- ❌ Distracting effects (fly in, bounce, spin)
266**Recommended Animations**:
267- **Appear**: Clean, professional
268- **Fade**: Subtle transition
269- **Wipe**: Directional reveal
270- **Duration**: Fast (0.2-0.3 seconds)
271- **Trigger**: On click (not automatic)
273**Slide Transitions**:
274- Use consistent transition throughout (or none)
275- Recommended: None, Fade, or Push
276- Avoid: 3D rotations, complex effects
277- Duration: Very fast (0.3-0.5 seconds)

5. Animations and Transitions

When to Use:

  • ✅ Progressive disclosure of bullet points
  • ✅ Building complex figures incrementally
  • ✅ Emphasizing key findings
  • ✅ Showing process steps

When to Avoid:

  • ❌ Decoration or entertainment
  • ❌ Every single slide
  • ❌ Distracting effects (fly in, bounce, spin)

Recommended Animations:

  • Appear: Clean, professional
  • Fade: Subtle transition
  • Wipe: Directional reveal
  • Duration: Fast (0.2-0.3 seconds)
  • Trigger: On click (not automatic)

Slide Transitions:

  • Use consistent transition throughout (or none)
  • Recommended: None, Fade, or Push
  • Avoid: 3D rotations, complex effects
  • Duration: Very fast (0.3-0.5 seconds)
Raw lines 253 to 278
279## Creating Presentations with PptxGenJS

Creating Presentations with PptxGenJS

Raw lines 279 to 280
281### Design-First Workflow
283**Step 0: Choose Modern Color Palette Based on Topic**
285**CRITICAL**: Select colors that reflect your subject matter, not generic defaults.
287**Topic-Based Palette Examples:**
288- **Biotechnology/Life Sciences**: Teal (#0A9396), Coral (#EE6C4D), Cream (#F4F1DE)
289- **Neuroscience/Brain Research**: Deep Purple (#722880), Magenta (#D72D51), White
290- **Machine Learning/AI**: Bold Red (#E74C3C), Orange (#F39C12), Dark Gray (#2C2C2C)
291- **Physics/Engineering**: Navy (#1C3D5A), Orange (#E67E22), Light Gray (#F7FAFC)
292- **Medicine/Healthcare**: Teal (#5EA8A7), Coral (#FE4447), White (#FFFFFF)
293- **Environmental Science**: Sage (#87A96B), Terracotta (#E07A5F), Cream (#F4F1DE)
295Use your supplied template or a palette whose actual text/background pairs pass contrast checks.
297**Step 1: Plan Design System** (With Modern Palette)
298```javascript
299// Define design constants with MODERN colors (not defaults)
300const DESIGN = {
301 colors: {
302 primary: "0A9396", // Teal (modern, engaging)
303 accent: "EE6C4D", // Coral (attention-grabbing)
304 text: "2C2C2C", // Charcoal (readable)
305 background: "FFFFFF" // White (clean)
306 },
307 fonts: {
308 title: { fontSize: 40, bold: true, fontFace: "Arial" },
309 heading: { fontSize: 28, bold: true, fontFace: "Arial" },
310 body: { fontSize: 24, fontFace: "Arial" },
311 caption: { fontSize: 16, fontFace: "Arial" }
312 },
313 layout: {
314 margin: 0.5,
315 titleY: 0.5,
316 contentY: 1.5
317 }
318};
319```
321**Step 2: Create Reusable Functions**
322```javascript
323// Supply the original pixel dimensions (for example from Pillow/identify).
324// Explicit geometry preserves the source aspect ratio without API sizing helpers.
325function fitImage(widthPx, heightPx, x, y, w, h) {
326 const scale = Math.min(w / widthPx, h / heightPx);
327 const width = widthPx * scale, height = heightPx * scale;
328 return { x: x + (w - width) / 2, y: y + (h - height) / 2, w: width, h: height };
331function addTitleSlide(pptx, title, subtitle, author) {
332 const slide = pptx.addSlide();
333 slide.background = { color: DESIGN.colors.primary };
335 slide.addText(title, {
336 x: 1, y: 2, w: 8, h: 1,
337 fontSize: 44, bold: true, color: "FFFFFF",
338 align: "center"
339 });
341 slide.addText(subtitle, {
342 x: 1, y: 3.2, w: 8, h: 0.5,
343 fontSize: 24, color: "FFFFFF",
344 align: "center"
345 });
347 slide.addText(author, {
348 x: 1, y: 4, w: 8, h: 0.4,
349 fontSize: 18, color: "FFFFFF",
350 align: "center"
351 });
353 return slide;
356function addContentSlide(pptx, title, bullets) {
357 const slide = pptx.addSlide();
359 slide.addText(title, {
360 x: DESIGN.layout.margin,
361 y: DESIGN.layout.titleY,
362 w: 9,
363 h: 0.5,
364 ...DESIGN.fonts.heading,
365 color: DESIGN.colors.primary
366 });
368 slide.addText(bullets.join("\n"), {
369 x: DESIGN.layout.margin,
370 y: DESIGN.layout.contentY,
371 w: 9,
372 h: 3,
373 ...DESIGN.fonts.body,
374 bullet: true
375 });
377 return slide;
379```
381**Step 3: Build Presentation** (Visual-First Approach)
382```javascript
383const pptx = new PptxGenJS();
384pptx.layout = "LAYOUT_16x9";
386// Title slide with background image or color block
387addTitleSlide(
388 pptx,
389 "Research Title",
390 "Subtitle or Conference Name",
391 "Your Name • Institution • Date"
392);
394// Introduction with image/icon
395const introSlide = pptx.addSlide();
396introSlide.addImage({
397 path: "concept_image.png", // Visual representation of concept
398 ...fitImage(1000, 500, 5, 1.5, 4, 3)
399});
400introSlide.addText("Background", { x: 0.5, y: 0.5, fontSize: 36, bold: true });
401introSlide.addText([
402 "Key context point 1 (AuthorA, 2023)",
403 "Key context point 2 (AuthorB, 2022)",
404 "Research gap identified (AuthorC, 2021)"
405].join("\n"), {
406 x: 0.5, y: 1.5, w: 4, h: 2,
407 fontSize: 24, bullet: true
408});
410// Results slide - FIGURE DOMINATES
411const resultsSlide = pptx.addSlide();
412resultsSlide.addText("Main Finding", { x: 0.5, y: 0.5, fontSize: 32, bold: true });
413resultsSlide.addImage({
414 path: "results_figure.png", // Large, clear figure
415 ...fitImage(1000, 500, 0.5, 1.6, 9, 3.7),
416 altText: "Describe the measured comparison and uncertainty from the source figure"
417});
418// Minimal text annotation only
419resultsSlide.addText("Verified effect estimate and uncertainty", {
420 x: 0.5, y: 1, w: 9, h: 0.4, fontSize: 20, color: DESIGN.colors.text, bold: true
421});
423// Save
424pptx.writeFile({ fileName: "presentation.pptx" });
425```
427**Key Changes from Dry Presentations:**
428- Title slide uses bold background color (not plain white)
429- Introduction includes relevant image (not just bullets)
430- Results slide is figure-dominated (not text-dominated)
431- Citations included in bullets for research context
432- Text is minimal and supporting, visuals are primary

Design-First Workflow

Step 0: Choose Modern Color Palette Based on Topic

CRITICAL: Select colors that reflect your subject matter, not generic defaults.

Topic-Based Palette Examples:

  • Biotechnology/Life Sciences: Teal (#0A9396), Coral (#EE6C4D), Cream (#F4F1DE)
  • Neuroscience/Brain Research: Deep Purple (#722880), Magenta (#D72D51), White
  • Machine Learning/AI: Bold Red (#E74C3C), Orange (#F39C12), Dark Gray (#2C2C2C)
  • Physics/Engineering: Navy (#1C3D5A), Orange (#E67E22), Light Gray (#F7FAFC)
  • Medicine/Healthcare: Teal (#5EA8A7), Coral (#FE4447), White (#FFFFFF)
  • Environmental Science: Sage (#87A96B), Terracotta (#E07A5F), Cream (#F4F1DE)

Use your supplied template or a palette whose actual text/background pairs pass contrast checks.

Step 1: Plan Design System (With Modern Palette)

// Define design constants with MODERN colors (not defaults)
const DESIGN = {
  colors: {
    primary: "0A9396",    // Teal (modern, engaging)
    accent: "EE6C4D",     // Coral (attention-grabbing)
    text: "2C2C2C",       // Charcoal (readable)
    background: "FFFFFF"  // White (clean)
  },
  fonts: {
    title: { fontSize: 40, bold: true, fontFace: "Arial" },
    heading: { fontSize: 28, bold: true, fontFace: "Arial" },
    body: { fontSize: 24, fontFace: "Arial" },
    caption: { fontSize: 16, fontFace: "Arial" }
  },
  layout: {
    margin: 0.5,
    titleY: 0.5,
    contentY: 1.5
  }
};

Step 2: Create Reusable Functions

// Supply the original pixel dimensions (for example from Pillow/identify).
// Explicit geometry preserves the source aspect ratio without API sizing helpers.
function fitImage(widthPx, heightPx, x, y, w, h) {
  const scale = Math.min(w / widthPx, h / heightPx);
  const width = widthPx * scale, height = heightPx * scale;
  return { x: x + (w - width) / 2, y: y + (h - height) / 2, w: width, h: height };
}

function addTitleSlide(pptx, title, subtitle, author) {
  const slide = pptx.addSlide();
  slide.background = { color: DESIGN.colors.primary };
  
  slide.addText(title, {
    x: 1, y: 2, w: 8, h: 1,
    fontSize: 44, bold: true, color: "FFFFFF",
    align: "center"
  });
  
  slide.addText(subtitle, {
    x: 1, y: 3.2, w: 8, h: 0.5,
    fontSize: 24, color: "FFFFFF",
    align: "center"
  });
  
  slide.addText(author, {
    x: 1, y: 4, w: 8, h: 0.4,
    fontSize: 18, color: "FFFFFF",
    align: "center"
  });
  
  return slide;
}

function addContentSlide(pptx, title, bullets) {
  const slide = pptx.addSlide();
  
  slide.addText(title, {
    x: DESIGN.layout.margin,
    y: DESIGN.layout.titleY,
    w: 9,
    h: 0.5,
    ...DESIGN.fonts.heading,
    color: DESIGN.colors.primary
  });
  
  slide.addText(bullets.join("\n"), {
    x: DESIGN.layout.margin,
    y: DESIGN.layout.contentY,
    w: 9,
    h: 3,
    ...DESIGN.fonts.body,
    bullet: true
  });
  
  return slide;
}

Step 3: Build Presentation (Visual-First Approach)

const pptx = new PptxGenJS();
pptx.layout = "LAYOUT_16x9";

// Title slide with background image or color block
addTitleSlide(
  pptx,
  "Research Title",
  "Subtitle or Conference Name",
  "Your Name • Institution • Date"
);

// Introduction with image/icon
const introSlide = pptx.addSlide();
introSlide.addImage({
  path: "concept_image.png",  // Visual representation of concept
  ...fitImage(1000, 500, 5, 1.5, 4, 3)
});
introSlide.addText("Background", { x: 0.5, y: 0.5, fontSize: 36, bold: true });
introSlide.addText([
  "Key context point 1 (AuthorA, 2023)",
  "Key context point 2 (AuthorB, 2022)",
  "Research gap identified (AuthorC, 2021)"
].join("\n"), {
  x: 0.5, y: 1.5, w: 4, h: 2,
  fontSize: 24, bullet: true
});

// Results slide - FIGURE DOMINATES
const resultsSlide = pptx.addSlide();
resultsSlide.addText("Main Finding", { x: 0.5, y: 0.5, fontSize: 32, bold: true });
resultsSlide.addImage({
  path: "results_figure.png",  // Large, clear figure
  ...fitImage(1000, 500, 0.5, 1.6, 9, 3.7),
  altText: "Describe the measured comparison and uncertainty from the source figure"
});
// Minimal text annotation only
resultsSlide.addText("Verified effect estimate and uncertainty", {
  x: 0.5, y: 1, w: 9, h: 0.4, fontSize: 20, color: DESIGN.colors.text, bold: true
});

// Save
pptx.writeFile({ fileName: "presentation.pptx" });

Key Changes from Dry Presentations:

  • Title slide uses bold background color (not plain white)
  • Introduction includes relevant image (not just bullets)
  • Results slide is figure-dominated (not text-dominated)
  • Citations included in bullets for research context
  • Text is minimal and supporting, visuals are primary
Raw lines 281 to 433
434### Adding Scientific Content
436**Equations** (as images):
437```javascript
438// Render equation as PNG first (using LaTeX or online tool)
439// Then add to slide
440slide.addImage({
441 path: "equation.png",
442 ...fitImage(1000, 500, 2, 3, 6, 1) // Replace with actual equation image dimensions
443});
444```
446**Tables**:
447```javascript
448slide.addTable([
449 [
450 { text: "Method", options: { bold: true } },
451 { text: "Accuracy", options: { bold: true } },
452 { text: "Time (s)", options: { bold: true } }
453 ],
454 ["Method A", "0.85", "10"],
455 ["Method B", "0.92", "25"],
456 ["Method C", "0.88", "15"]
457], {
458 x: 2, y: 2, w: 6,
459 fontSize: 20,
460 border: { pt: 1, color: "888888" },
461 fill: { color: "F5F5F5" }
462});
463```
465**Charts**:
466```javascript
467// Bar chart
468slide.addChart(pptx.ChartType.bar, [
469 {
470 name: "Control",
471 labels: ["Metric 1", "Metric 2", "Metric 3"],
472 values: [45, 67, 82]
473 },
474 {
475 name: "Treatment",
476 labels: ["Metric 1", "Metric 2", "Metric 3"],
477 values: [52, 78, 91]
478 }
479], {
480 x: 1, y: 1.5, w: 8, h: 4,
481 chartColors: [DESIGN.colors.primary, DESIGN.colors.accent],
482 showTitle: false,
483 showLegend: true,
484 catAxisLabelFontSize: 18, valAxisLabelFontSize: 18, legendFontSize: 18
485});
486```

Adding Scientific Content

Equations (as images):

// Render equation as PNG first (using LaTeX or online tool)
// Then add to slide
slide.addImage({
  path: "equation.png",
  ...fitImage(1000, 500, 2, 3, 6, 1)  // Replace with actual equation image dimensions
});

Tables:

slide.addTable([
  [
    { text: "Method", options: { bold: true } },
    { text: "Accuracy", options: { bold: true } },
    { text: "Time (s)", options: { bold: true } }
  ],
  ["Method A", "0.85", "10"],
  ["Method B", "0.92", "25"],
  ["Method C", "0.88", "15"]
], {
  x: 2, y: 2, w: 6,
  fontSize: 20,
  border: { pt: 1, color: "888888" },
  fill: { color: "F5F5F5" }
});

Charts:

// Bar chart
slide.addChart(pptx.ChartType.bar, [
  {
    name: "Control",
    labels: ["Metric 1", "Metric 2", "Metric 3"],
    values: [45, 67, 82]
  },
  {
    name: "Treatment",
    labels: ["Metric 1", "Metric 2", "Metric 3"],
    values: [52, 78, 91]
  }
], {
  x: 1, y: 1.5, w: 8, h: 4,
  chartColors: [DESIGN.colors.primary, DESIGN.colors.accent],
  showTitle: false,
  showLegend: true,
  catAxisLabelFontSize: 18, valAxisLabelFontSize: 18, legendFontSize: 18
});
Raw lines 434 to 487
488## Visual Validation Workflow

Visual Validation Workflow

Raw lines 488 to 489
490### Render Slides to Images
492After creating the presentation, export it to PDF with LibreOffice and render each page
493with the bundled script (run from the repository root):
495```bash
496soffice --headless --convert-to pdf --outdir review presentation.pptx
497python skills/scientific-slides/scripts/pdf_to_images.py review/presentation.pdf review/slide --dpi 100
498```
500LibreOffice substitutes fonts that are not installed, so line breaks can differ from
501PowerPoint. Confirm final text fit in PowerPoint itself.

Render Slides to Images

After creating the presentation, export it to PDF with LibreOffice and render each page with the bundled script (run from the repository root):

soffice --headless --convert-to pdf --outdir review presentation.pptx
python skills/scientific-slides/scripts/pdf_to_images.py review/presentation.pdf review/slide --dpi 100

LibreOffice substitutes fonts that are not installed, so line breaks can differ from PowerPoint. Confirm final text fit in PowerPoint itself.

Raw lines 490 to 502
Runs code python skills/scientific-slides/scripts/pdf_to_images.py :497
503### Inspection Checklist
505For each slide, check:
506- [ ] Text readable (not cut off or too small)
507- [ ] No element overlap
508- [ ] Consistent colors and fonts
509- [ ] Adequate white space
510- [ ] Figures clear and properly sized
511- [ ] Alignment correct

Inspection Checklist

For each slide, check:

  • [ ] Text readable (not cut off or too small)
  • [ ] No element overlap
  • [ ] Consistent colors and fonts
  • [ ] Adequate white space
  • [ ] Figures clear and properly sized
  • [ ] Alignment correct
Raw lines 503 to 512
513### Common Issues
515**Text Overflow**:
516- Reduce font size or text length
517- Increase text box size
518- Split into multiple slides
520**Element Overlap**:
521- Use two-column layout
522- Reduce element sizes
523- Adjust positioning
525**Poor Contrast**:
526- Choose higher contrast colors
527- Use dark text on light background
528- Test with contrast checker

Common Issues

Text Overflow:

  • Reduce font size or text length
  • Increase text box size
  • Split into multiple slides

Element Overlap:

  • Use two-column layout
  • Reduce element sizes
  • Adjust positioning

Poor Contrast:

  • Choose higher contrast colors
  • Use dark text on light background
  • Test with contrast checker
Raw lines 513 to 529
530## Templates and Examples

Templates and Examples

Raw lines 530 to 531
532### Starting from Template
534If you have an existing template:
5361. **Extract template text**:
537```bash
538markitdown template.pptx > inventory.md
539```
5412. **Render the template** to see its layouts:
542```bash
543soffice --headless --convert-to pdf --outdir template_review template.pptx
544python skills/scientific-slides/scripts/pdf_to_images.py template_review/template.pdf template_review/slide
545```
5473. **Analyze layouts** and document which slides to use
5494. **Add slides from the layouts you need** with python-pptx (see Template-Based
550 Creation above)
5525. **Replace content** in the placeholders, save, and check the result:
553```bash
554python skills/scientific-slides/scripts/validate_presentation.py output.pptx --duration 15
555```

Starting from Template

If you have an existing template:

  1. Extract template text:
markitdown template.pptx > inventory.md
  1. Render the template to see its layouts:
soffice --headless --convert-to pdf --outdir template_review template.pptx
python skills/scientific-slides/scripts/pdf_to_images.py template_review/template.pdf template_review/slide
  1. Analyze layouts and document which slides to use
  1. Add slides from the layouts you need with python-pptx (see Template-Based Creation above)
  1. Replace content in the placeholders, save, and check the result:
python skills/scientific-slides/scripts/validate_presentation.py output.pptx --duration 15
Raw lines 532 to 556
Runs code python skills/scientific-slides/scripts/pdf_to_images.py :544
Runs code python skills/scientific-slides/scripts/validate_presentation.py :554
557## Best Practices Summary

Best Practices Summary

Raw lines 557 to 558
559### Do's (Make Presentations Engaging)
561- ✅ Use research-lookup to find 8-15 papers for citations
562- ✅ Add HIGH-QUALITY visuals to EVERY slide (figures, images, diagrams, icons)
563- ✅ Choose MODERN color palette reflecting your topic (not defaults)
564- ✅ Keep text MINIMAL (3-4 bullets, 4-6 words each)
565- ✅ Use LARGE fonts (24-28pt body, 36-44pt titles)
566- ✅ Vary slide layouts (full-figure, two-column, visual overlays)
567- ✅ Maintain high contrast (7:1 preferred)
568- ✅ Generous white space (40-50% of slide)
569- ✅ Cite papers in intro and discussion (establish credibility)
570- ✅ Test readability from distance
571- ✅ Validate visually before presenting

Do's (Make Presentations Engaging)

  • ✅ Use research-lookup to find 8-15 papers for citations
  • ✅ Add HIGH-QUALITY visuals to EVERY slide (figures, images, diagrams, icons)
  • ✅ Choose MODERN color palette reflecting your topic (not defaults)
  • ✅ Keep text MINIMAL (3-4 bullets, 4-6 words each)
  • ✅ Use LARGE fonts (24-28pt body, 36-44pt titles)
  • ✅ Vary slide layouts (full-figure, two-column, visual overlays)
  • ✅ Maintain high contrast (7:1 preferred)
  • ✅ Generous white space (40-50% of slide)
  • ✅ Cite papers in intro and discussion (establish credibility)
  • ✅ Test readability from distance
  • ✅ Validate visually before presenting
Raw lines 559 to 572
573### Don'ts (Avoid Dry Presentations)
575- ❌ Don't create text-only slides (add visuals to EVERY slide)
576- ❌ Don't use default themes unchanged (customize for your topic)
577- ❌ Don't have all bullet-point slides (vary layouts)
578- ❌ Don't skip research-lookup (presentations need citations too)
579- ❌ Don't cram too much text on one slide
580- ❌ Don't use tiny fonts (<24pt for body)
581- ❌ Don't rely solely on color
582- ❌ Don't use complex animations
583- ❌ Don't mix too many font styles
584- ❌ Don't ignore accessibility
585- ❌ Don't skip visual validation

Don'ts (Avoid Dry Presentations)

  • ❌ Don't create text-only slides (add visuals to EVERY slide)
  • ❌ Don't use default themes unchanged (customize for your topic)
  • ❌ Don't have all bullet-point slides (vary layouts)
  • ❌ Don't skip research-lookup (presentations need citations too)
  • ❌ Don't cram too much text on one slide
  • ❌ Don't use tiny fonts (<24pt for body)
  • ❌ Don't rely solely on color
  • ❌ Don't use complex animations
  • ❌ Don't mix too many font styles
  • ❌ Don't ignore accessibility
  • ❌ Don't skip visual validation
Raw lines 573 to 586
587## Accessibility Considerations
589**Color Contrast**:
590- Use WebAIM contrast checker
591- Minimum 4.5:1 for normal text
592- Preferred 7:1 for optimal readability
594**Color Blindness**:
595- Test with Coblis simulator
596- Use patterns/shapes with colors
597- Avoid red-green combinations
599**Readability**:
600- Sans-serif fonts only
601- Minimum 18pt, prefer 24pt+
602- Clear visual hierarchy
603- Adequate spacing

Accessibility Considerations

Color Contrast:

  • Use WebAIM contrast checker
  • Minimum 4.5:1 for normal text
  • Preferred 7:1 for optimal readability

Color Blindness:

  • Test with Coblis simulator
  • Use patterns/shapes with colors
  • Avoid red-green combinations

Readability:

  • Sans-serif fonts only
  • Minimum 18pt, prefer 24pt+
  • Clear visual hierarchy
  • Adequate spacing
Raw lines 587 to 604
605## Integration with Other Skills
607**With Scientific Writing**:
608- Convert paper content to slides
609- Simplify dense text
610- Extract key findings
611- Create visual abstracts
613**With Data Visualization**:
614- Simplify journal figures
615- Recreate with larger labels
616- Use progressive disclosure
617- Emphasize key results
619**With Research Lookup**:
620- Find relevant papers
621- Extract key citations
622- Build background context
623- Support claims with evidence

Integration with Other Skills

With Scientific Writing:

  • Convert paper content to slides
  • Simplify dense text
  • Extract key findings
  • Create visual abstracts

With Data Visualization:

  • Simplify journal figures
  • Recreate with larger labels
  • Use progressive disclosure
  • Emphasize key results

With Research Lookup:

  • Find relevant papers
  • Extract key citations
  • Build background context
  • Support claims with evidence
Raw lines 605 to 624
625## Resources
627**PowerPoint Tutorials**:
628- Microsoft PowerPoint documentation
629- PowerPoint design templates
630- Scientific presentation examples
632**Design Tools**:
633- Color palette generators (Coolors.co)
634- Contrast checkers (WebAIM)
635- Icon libraries (Noun Project)
636- Image editing (PowerPoint built-in, external tools)
638**PowerPoint Tooling Documentation**:
639- [PptxGenJS](https://gitbrent.github.io/PptxGenJS/docs/): programmatic creation
640- [python-pptx](https://python-pptx.readthedocs.io/): template editing
641- `scripts/pdf_to_images.py` and `scripts/validate_presentation.py`: rendering and checks bundled with this skill

Resources

PowerPoint Tutorials:

  • Microsoft PowerPoint documentation
  • PowerPoint design templates
  • Scientific presentation examples

Design Tools:

  • Color palette generators (Coolors.co)
  • Contrast checkers (WebAIM)
  • Icon libraries (Noun Project)
  • Image editing (PowerPoint built-in, external tools)

PowerPoint Tooling Documentation:

  • PptxGenJS: programmatic creation
  • python-pptx: template editing
  • scripts/pdf_to_images.py and scripts/validate_presentation.py: rendering and checks bundled with this skill
Raw lines 625 to 642
Runs code scripts/pdf_to_images.py :641
Runs code scripts/validate_presentation.py :641
643## Quick Reference

Quick Reference

Raw lines 643 to 644
645### Common Slide Dimensions
647- **16:9 aspect ratio**: 10" × 5.625" (720pt × 405pt)
648- **4:3 aspect ratio**: 10" × 7.5" (720pt × 540pt)

Common Slide Dimensions

  • 16:9 aspect ratio: 10" × 5.625" (720pt × 405pt)
  • 4:3 aspect ratio: 10" × 7.5" (720pt × 540pt)
Raw lines 645 to 649
650### Measurement Units
652- PowerPoint uses inches
653- 72 points = 1 inch
654- Position (x, y) from top-left corner
655- Size (w, h) for width and height

Measurement Units

  • PowerPoint uses inches
  • 72 points = 1 inch
  • Position (x, y) from top-left corner
  • Size (w, h) for width and height
Raw lines 650 to 656
657### Font Size Guidelines
659| Element | Minimum | Recommended |
660|---------|---------|-------------|
661| Title slide | 40pt | 44-54pt |
662| Slide title | 28pt | 32-40pt |
663| Body text | 18pt | 24-28pt |
664| Caption | 14pt | 16-20pt |
665| Footer | 10pt | 10-12pt |

Font Size Guidelines

ElementMinimumRecommended
Title slide40pt44-54pt
Slide title28pt32-40pt
Body text18pt24-28pt
Caption14pt16-20pt
Footer10pt10-12pt
Raw lines 657 to 666
667### Color Usage
669- **Backgrounds**: White or very light colors
670- **Text**: Dark (black/dark gray) on light, or white on dark
671- **Accents**: One or two accent colors max
672- **Data**: Color-blind safe palettes (blue/orange)

Color Usage

  • Backgrounds: White or very light colors
  • Text: Dark (black/dark gray) on light, or white on dark
  • Accents: One or two accent colors max
  • Data: Color-blind safe palettes (blue/orange)
Raw lines 667 to 673
674## Troubleshooting
676**Problem**: Text appears cut off
677- **Solution**: Increase text box size or reduce font size
679**Problem**: Figures are blurry
680- **Solution**: Use higher resolution images (300 DPI)
682**Problem**: Colors look different when projected
683- **Solution**: Test with projector beforehand, use high contrast
685**Problem**: File size too large
686- **Solution**: Compress images, reduce image resolution
688**Problem**: Animations not working
689- **Solution**: Check PowerPoint version compatibility

Troubleshooting

Problem: Text appears cut off

  • Solution: Increase text box size or reduce font size

Problem: Figures are blurry

  • Solution: Use higher resolution images (300 DPI)

Problem: Colors look different when projected

  • Solution: Test with projector beforehand, use high contrast

Problem: File size too large

  • Solution: Compress images, reduce image resolution

Problem: Animations not working

  • Solution: Check PowerPoint version compatibility
Raw lines 674 to 690
691## Conclusion
693Effective PowerPoint presentations for science require:
6941. Clear, simple design
6952. Readable text (24pt+ body)
6963. High-quality figures
6974. Consistent formatting
6985. Visual validation
6996. Accessibility considerations
701Use PptxGenJS for programmatic creation and the visual review workflow to ensure professional quality before presenting.

Conclusion

Effective PowerPoint presentations for science require:

  1. Clear, simple design
  2. Readable text (24pt+ body)
  3. High-quality figures
  4. Consistent formatting
  5. Visual validation
  6. Accessibility considerations

Use PptxGenJS for programmatic creation and the visual review workflow to ensure professional quality before presenting.

Raw lines 691 to 702