scientific-skills/scientific-slides/references/visual_review_workflow.md
Visual review is a critical quality assurance step for presentations, allowing you to identify and fix layout issues, text overflow, element overlap, and design problems before presenting. This guide covers converting presentations to images, systematic visual inspection, common issues, and iterative improvement strategies.
MANDATORY: Always convert presentation PDFs to images FIRST, then review the images.
If you're reviewing a presentation and haven't converted to images yet, STOP and convert first.
LaTeX Beamer Issues:
PowerPoint Issues:
Projection Issues:
No External Dependencies Required: The script uses PyMuPDF, a self-contained Python library - no poppler or other system software needed.
Installation:
# PyMuPDF is included as a project dependency
pip install pymupdf
Basic Conversion:
# Convert all slides to JPEG images
python skills/scientific-slides/scripts/pdf_to_images.py presentation.pdf slide --dpi 150
# Creates: slide-001.jpg, slide-002.jpg, slide-003.jpg, ...
High-Resolution Conversion:
# Higher quality for detailed inspection (300 DPI)
python skills/scientific-slides/scripts/pdf_to_images.py presentation.pdf slide --dpi 300
# PNG format (lossless, larger files)
python skills/scientific-slides/scripts/pdf_to_images.py presentation.pdf slide --dpi 150 --format png
Convert Specific Slides:
# Slides 5-10 only
python skills/scientific-slides/scripts/pdf_to_images.py presentation.pdf slide --dpi 150 --first 5 --last 10
# Single slide
python skills/scientific-slides/scripts/pdf_to_images.py presentation.pdf slide --dpi 150 --first 3 --last 3
Output Options:
# Different output directory
python skills/scientific-slides/scripts/pdf_to_images.py presentation.pdf review/slide --dpi 150
# Custom naming
python skills/scientific-slides/scripts/pdf_to_images.py presentation.pdf output/presentation --dpi 150
For PowerPoint presentations, use the pptx skill's thumbnail tool:
# Create thumbnail grid
python scripts/thumbnail.py presentation.pptx output --cols 4
# Individual slides
python scripts/thumbnail.py presentation.pptx slides/slide --individual
Advantages:
Installation:
# Ubuntu/Debian
sudo apt-get install imagemagick
# macOS
brew install imagemagick
Conversion:
# Convert PDF to images
convert -density 150 presentation.pdf slide.jpg
# Higher quality
convert -density 300 presentation.pdf slide.jpg
# Specific format
convert -density 150 presentation.pdf slide.png
import fitz # PyMuPDF
# Open PDF
doc = fitz.open('presentation.pdf')
# Convert each page to image
zoom = 200 / 72 # 200 DPI (72 is base DPI)
matrix = fitz.Matrix(zoom, zoom)
for i, page in enumerate(doc, start=1):
pixmap = page.get_pixmap(matrix=matrix)
pixmap.save(f'slide-{i:03d}.jpg', output='jpeg')
doc.close()
Install PyMuPDF:
pip install pymupdf
# No external dependencies needed!
Step 1: Overview Pass
Step 2: Detailed Inspection
Step 3: Cross-Slide Comparison
Step 4: Distance Test
Review each slide for these common problems:
Overflow and Truncation:
Readability:
Text Overlaps:
Visual Element Overlaps:
Alignment Issues:
Spacing Problems:
Visibility:
Consistency:
Quality:
Layout:
Rendering:
Consistency:
Create a spreadsheet or document tracking all issues:
Slide # | Issue Category | Description | Severity | Status
--------|---------------|-------------|----------|--------
3 | Text Overflow | Bullet point 4 extends beyond box | High | Fixed
7 | Element Overlap | Figure overlaps with caption | High | Fixed
12 | Font Size | Axis labels too small | Medium | Fixed
15 | Alignment | Title not centered | Low | Fixed
22 | Contrast | Yellow text on white background | High | Fixed
Severity Levels:
Good Documentation:
Slide 8: Text Overflow Issue
- Description: Last bullet point "...implementation details"
extends ~0.5 inches beyond right margin of text box
- Cause: Bullet text too long for available width
- Fix: Reduce text to "...implementation" or increase box width
- Verification: Check neighboring slides for similar issue
Poor Documentation:
Slide 8: text problem
- Fix: make smaller
Problem: Text extends beyond boundaries
Identification:
Solutions:
LaTeX Beamer:
% Reduce text
\begin{frame}{Title}
\begin{itemize}
\item Shorten this long bullet point
% or
\item Use abbreviations or acronyms
% or
\item<alert@1> Split into multiple bullets
\end{itemize}
\end{frame}
% Adjust margins
\newgeometry{margin=1.5cm}
\begin{frame}
Content with wider margins
\end{frame}
\restoregeometry
% Smaller font for specific element
{\small
Long text that needs to fit
}
PowerPoint:
Problem: Elements overlapping inappropriately
Identification:
Solutions:
LaTeX Beamer:
% Use columns for better separation
\begin{columns}
\begin{column}{0.5\textwidth}
Text content
\end{column}
\begin{column}{0.5\textwidth}
\includegraphics[width=\textwidth]{figure.pdf}
\end{column}
\end{columns}
% Add spacing
\vspace{0.5cm}
% Adjust figure size
\includegraphics[width=0.7\textwidth]{figure.pdf}
PowerPoint:
Problem: Text difficult to read due to color choices
Identification:
Solutions:
LaTeX Beamer:
% Increase contrast
\setbeamercolor{frametitle}{fg=black,bg=white}
\setbeamercolor{normal text}{fg=black,bg=white}
% Use darker colors
\definecolor{darkblue}{RGB}{0,50,100}
\setbeamercolor{structure}{fg=darkblue}
% Test in grayscale
\usepackage{xcolor}
\selectcolormodel{gray} % Temporarily for testing
PowerPoint:
Problem: Text too small to read from distance
Identification:
Solutions:
LaTeX Beamer:
% Increase base font size
\documentclass[14pt]{beamer} % Instead of 11pt default
% Recreate figures with larger fonts
% In matplotlib:
plt.rcParams['font.size'] = 18
plt.rcParams['axes.labelsize'] = 20
% In R/ggplot2:
theme_set(theme_minimal(base_size = 16))
PowerPoint:
Problem: Elements not properly aligned
Identification:
Solutions:
LaTeX Beamer:
% Use consistent templates
\setbeamertemplate{frametitle}[default][center]
% Align columns at top
\begin{columns}[T] % T = top alignment
\begin{column}{0.5\textwidth}
Content
\end{column}
\begin{column}{0.5\textwidth}
Content
\end{column}
\end{columns}
% Center figures
\begin{center}
\includegraphics[width=0.8\textwidth]{figure.pdf}
\end{center}
PowerPoint:
1. Generate PDF
↓
2. Convert to images
↓
3. Systematic visual inspection
↓
4. Document issues
↓
5. Prioritize fixes
↓
6. Apply corrections to source
↓
7. Regenerate PDF
↓
8. Re-inspect (go to step 2)
↓
9. Complete when no critical issues remain
Fix Immediately (Block presentation):
Fix Before Presenting:
Fix If Time Permits:
Minimum Standards:
Ideal Standards:
from PIL import Image
import numpy as np
def detect_edge_content(image_path, threshold=10):
"""
Detect if content extends too close to slide edges.
Returns True if potential overflow detected.
"""
img = Image.open(image_path).convert('L') # Grayscale
arr = np.array(img)
# Check edges (10 pixel border)
left_edge = arr[:, :threshold]
right_edge = arr[:, -threshold:]
top_edge = arr[:threshold, :]
bottom_edge = arr[-threshold:, :]
# Look for non-white pixels (content)
white_threshold = 240
issues = []
if np.any(left_edge < white_threshold):
issues.append("Left edge")
if np.any(right_edge < white_threshold):
issues.append("Right edge")
if np.any(top_edge < white_threshold):
issues.append("Top edge")
if np.any(bottom_edge < white_threshold):
issues.append("Bottom edge")
return issues
# Usage
for slide_num in range(1, 26):
issues = detect_edge_content(f'slide-{slide_num}.jpg')
if issues:
print(f"Slide {slide_num}: Content near {', '.join(issues)}")
from PIL import Image
import numpy as np
def check_contrast(image_path):
"""
Estimate contrast ratio in image.
Simple version: compare lightest and darkest regions.
"""
img = Image.open(image_path).convert('L')
arr = np.array(img)
# Get brightness values
bright = np.percentile(arr, 95)
dark = np.percentile(arr, 5)
# Rough contrast ratio
contrast = (bright + 0.05) / (dark + 0.05)
if contrast < 4.5:
return f"Low contrast: {contrast:.1f}:1 (minimum 4.5:1)"
return f"OK: {contrast:.1f}:1"
# Usage
for slide_num in range(1, 26):
result = check_contrast(f'slide-{slide_num}.jpg')
print(f"Slide {slide_num}: {result}")
Setup:
Viewing Options:
Fresh Eyes:
Systematic Approach:
Common Oversights:
PDF to Image Conversion:
Image Viewing:
Issue Tracking:
Before finalizing your presentation:
Conversion:
Visual Inspection:
Issue Resolution:
Final Verification:
Testing: