Skip to content

SlideGen Schema Reference

Complete reference guide for the SlideGen presentation schema format.

Table of Contents

  1. Overview
  2. Schema Structure
  3. Layout Types
  4. Data Binding
  5. Styling
  6. Examples

Overview

The SlideGen schema is a declarative YAML/JSON format for describing PowerPoint presentations. It separates content from presentation, making it:

  • AI-friendly: LLMs can generate valid schemas from natural language
  • Version-controllable: Store slide definitions in Git
  • Portable: Works across tools (not PowerPoint-specific)
  • Validatable: Check correctness before rendering

Schema Structure

Every schema file must have a presentation root object:

presentation:
  title: "My Presentation"      # Optional: Overall title
  theme: "corporate"            # Optional: Theme name or template path
  slides:                       # Required: Array of slides
    - layout: title
      title: "First Slide"

Root Properties

Property Type Required Description
title string No Overall presentation title (metadata)
theme string No Theme name or path to PowerPoint template file
slides array Yes Array of slide definitions (minimum 1 slide)

Layout Types

1. Title Layout

A title slide with title and optional subtitle.

slides:
  - layout: title
    title: "Q4 2025 Results"
    subtitle: "Year-End Review"

Properties: - title (required): Main title text - subtitle (optional): Subtitle text

2. Section Header Layout

A full-slide section divider with centered text.

slides:
  - layout: section_header
    text: "Part 1: Introduction"

Properties: - text (required): Section header text

3. Bullet List Layout

A slide with a title and bullet points.

slides:
  - layout: bullet_list
    title: "Key Metrics"
    bullets:
      - "Revenue: +15% YoY"
      - "Profit margin: 22%"
      - "Customer growth: +1.2M"

Properties: - title (required): Slide title - bullets (required): Array of bullet point strings or objects

Nested Bullets:

bullets:
  - "Main point"
  - text: "Sub-point"
    level: 1
  - "Another main point"

4. Two Column Layout

Side-by-side content with flexible content types.

slides:
  - layout: two_column
    title: "Comparison"
    left:
      type: bullet_list
      bullets:
        - "Left side point 1"
        - "Left side point 2"
    right:
      type: bullet_list
      bullets:
        - "Right side point 1"
        - "Right side point 2"

Properties: - title (required): Slide title - left (required): Column content (see Column Content below) - right (required): Column content

Column Content Types:

Each column can be: - bullet_list: Array of bullets - text: Plain text paragraph - image: Image with optional caption

left:
  type: text
  text: "This is a paragraph of text that will flow naturally in the left column."

5. Comparison Layout

Before/after or option A/B comparison.

slides:
  - layout: comparison
    title: "Before vs After"
    before:
      type: bullet_list
      bullets:
        - "Manual process"
        - "2 hours per day"
    after:
      type: bullet_list
      bullets:
        - "Automated process"
        - "5 minutes per day"

Properties: - title (required): Slide title - before (required): Left side content (column content) - after (required): Right side content (column content)

6. Image Layout

Title with an image.

slides:
  - layout: image
    title: "Product Screenshot"
    image:
      src: "images/product.png"
      alt: "Product interface"
      caption: "New dashboard design"

Properties: - title (required): Slide title - image (required): Image object - src (required): Path to image file - alt (optional): Alternative text for accessibility - caption (optional): Image caption

7. Chart Layout

Title with a data visualization.

slides:
  - layout: chart
    title: "Revenue Trend"
    chart:
      type: line
      data:
        labels: ["Q1", "Q2", "Q3", "Q4"]
        values: [100, 120, 140, 160]
      x_axis_label: "Quarter"
      y_axis_label: "Revenue ($M)"

Properties: - title (required): Slide title - chart (required): Chart object - type (required): One of bar, line, pie, column - data (required): Inline data or external source (see Data Binding) - title (optional): Chart title (overrides slide title) - x_axis_label (optional): X-axis label - y_axis_label (optional): Y-axis label

Multi-Series Charts:

chart:
  type: bar
  data:
    labels: ["Q1", "Q2", "Q3", "Q4"]
    series:
      - name: "Product A"
        values: [100, 120, 140, 160]
      - name: "Product B"
        values: [80, 90, 110, 130]

8. Table Layout

Title with a data table.

slides:
  - layout: table
    title: "Sales by Region"
    table:
      data:
        - ["Region", "Q1", "Q2", "Q3", "Q4"]
        - ["North", "100", "120", "140", "160"]
        - ["South", "80", "90", "110", "130"]
        - ["East", "90", "100", "120", "140"]
      header_row: true

Properties: - title (required): Slide title - table (required): Table object - data (required): Array of rows (each row is array of cells) or external CSV source - header_row (optional, default: true): Whether first row is styled as header

9. Quote Layout

Large centered quote with optional attribution.

slides:
  - layout: quote
    quote:
      text: "The best way to predict the future is to invent it."
      attribution: "Alan Kay"

Properties: - quote (required): Quote object - text (required): Quote text - attribution (optional): Author or source

10. Blank Layout

Empty slide for custom content (future extensibility).

slides:
  - layout: blank
    text: "Custom content placeholder"

Properties: - text (optional): Placeholder text

Data Binding

Charts and tables can reference external data files.

CSV Data Source

chart:
  type: bar
  data:
    source: data/quarterly.csv
    format: csv

CSV format:

Quarter,Revenue
Q1,100
Q2,120
Q3,140
Q4,160

JSON Data Source

chart:
  type: line
  data:
    source: data/quarterly.json
    format: json

JSON format:

{
  "labels": ["Q1", "Q2", "Q3", "Q4"],
  "values": [100, 120, 140, 160]
}

Table from CSV

table:
  data:
    source: data/sales.csv
    has_header: true

Styling

Each slide can override theme styles.

slides:
  - layout: bullet_list
    title: "Custom Styled Slide"
    bullets: ["Point 1", "Point 2"]
    style:
      background_color: "#1a1a1a"    # Hex color
      text_color: "#ffffff"          # Hex color
      font_family: "Arial"            # Font name
      font_size: 24                   # Points (8-144)

Style Properties:

Property Type Description
background_color string Hex color code (e.g., "#1a1a1a")
text_color string Hex color code
font_family string Font family name
font_size integer Font size in points (8-144)

Examples

See the examples/ directory for complete presentation schemas:

  1. Corporate Quarterly Results - Finance use case
  2. Agency Client Proposal - Consulting use case
  3. Product Roadmap - Product management use case
  4. Technical Analysis - Data science use case with charts
  5. Educational Content - General business training use case

Validation

Validate your schema before rendering:

# Using slidegen CLI
slidegen validate presentation.yaml

# Using Python directly
python -m jsonschema -i presentation.yaml schema/spec/slide-schema.json

Best Practices

  1. Use meaningful titles: Every slide should have a clear, descriptive title
  2. Keep bullets concise: Limit bullet points to 5-7 per slide
  3. Use data binding: For large datasets, use external CSV/JSON files
  4. Leverage themes: Define reusable themes rather than per-slide styling
  5. Version control: Store schemas in Git for collaboration and history

Schema Version

This documentation applies to Schema Version 1.0.0.

For the JSON Schema specification, see schema/spec/slide-schema.json.