Skip to main content

🎯 Deckbuilder

PyPI version Test Suite Python 3.11+

Create professional PowerPoint presentations from Markdown or JSON

Deckbuilder is a Python library, Command Line tool, and MCP server that generates PowerPoint presentations from structured content. Focus on your content - Deckbuilder handles the formatting and layout.

✨ Key Features

🚀 One-Shot Presentation Generation

Create complete PowerPoint presentations from JSON or Markdown with YAML frontmatter in a single command.

🎨 Rich Content Support

  • Advanced Formatting: **bold**, *italic*, ___underline___, ***bold italic***
  • Language & Font updating: The ability to update the fonts and language of all slide objects using the command line tools using the CLI.
  • Professional Tables: Custom styling with themes, colors, and precise dimension controls (column widths, row heights, table sizing).
  • Supported Layouts: Progressive library of templates being added.

🧠 Smart Template System

  • Intelligent Layout Selection: Automatic layout recommendations based on content type
  • Pattern-Based Architecture: Customize any layout with your own templates
  • Rich Content Support: Tables, images, multi-column layouts with professional styling

🖼️ Smart Image Processing

  • Automatic Image Fallbacks: Missing images? Deckbuilder generates professional placeholders automatically
  • Smart Cropping: Face detection and intelligent composition for perfect image sizing
  • Professional Filters: Business-appropriate styling with grayscale and other effects

⚡ Enhanced CLI Experience

  • Professional Hierarchical Interface: Clean command structure (deckbuilder <command> <subcommand>)
  • One-Command Setup: deckbuilder init creates templates and configuration
  • Context-Aware Paths: CLI args > env vars > current directory precedence
  • Always Local Output: CLI outputs to current directory for predictable local development
  • Global Arguments: -t/--template-folder, -l/--language, -f/--font for complete customisation
  • Comprehensive Command Structure:
    • deckbuilder template → analyze, validate, document, enhance, list
    • deckbuilder config → show, languages, completion
    • deckbuilder image → generate, crop
    • deckbuilder remap → update existing PowerPoint files with language/font changes
  • Template Management: Analyze, validate, and enhance PowerPoint templates with detailed validation

🚀 Quick Start

Installation

pip install deckbuilder

CLI Usage (Standalone)

# Initialize templates (one-time setup) This will create the default template and mapping JSON.
deckbuilder init

# Create presentation from markdown (outputs to current directory)
deckbuilder create presentation.md

# Use custom template folder (CLI arg overrides env vars)
deckbuilder --template-folder /custom/templates create presentation.md

# Create with custom language and font (supports both formats)
deckbuilder create presentation.md --language "es-ES" --font "Arial"
deckbuilder create presentation.md --language "Spanish (Spain)" --font "Times New Roman"

# View supported languages
deckbuilder config languages

# Template management & intelligence
deckbuilder template analyze default --verbose
deckbuilder template validate default
deckbuilder template list

# Smart template recommendations available through MCP tools

# Image generation with crop-first approach
deckbuilder image generate 800 600 --filter grayscale
deckbuilder image crop image.jpg 800 600

# Language and font remapping for existing PowerPoint files
deckbuilder remap existing.pptx --language en-US --font Arial

# View current configuration (shows path sources)
deckbuilder config show

# Get help
deckbuilder --help

MCP Server (Claude Desktop)

Add to your Claude Desktop configuration:

Option 1: Direct installation (recommended)

{
  "mcpServers": {
    "deckbuilder": {
      "command": "deckbuilder-server",
      "env": {
        "DECK_TEMPLATE_FOLDER": "/Users/username/Documents/Deckbuilder/Templates",
        "DECK_TEMPLATE_NAME": "default",
        "DECK_OUTPUT_FOLDER": "/Users/username/Documents/Deckbuilder",
        "DECK_PROOFING_LANGUAGE": "en-AU",
        "DECK_DEFAULT_FONT": "Calibri"
      }
    }
  }
}

New Environment Variables:

  • DECK_PROOFING_LANGUAGE: Set proofing language for spell-check and grammar (accepts both "en-AU" and "English (Australia)" formats)
  • DECK_DEFAULT_FONT: Set default font family for all presentations
  • Default Language: Australian English (en-AU) if not specified

📝 Usage Examples

---
layout: Title Slide
---
# **Deckbuilder** Presentation
## Creating presentations with *content-first* intelligence

---
layout: Four Columns
title: Feature Comparison
columns:
  - title: Performance
    content: "**Fast** processing with optimized algorithms"
  - title: Security
    content: "***Enterprise-grade*** encryption and compliance"
  - title: Usability
    content: "*Intuitive* interface with minimal learning curve"
  - title: Cost
    content: "___Transparent___ pricing with proven ROI"
---

---
layout: Picture with Caption
title: Market Analysis
media:
  image_path: "charts/revenue_growth.png"  # Auto-fallback to PlaceKitten if missing
  alt_text: "Revenue growth chart"
  caption: "**Q4 Revenue Growth** - 23% increase"
---

---
layout: Title and Content
title: "**Table Dimensions:** Custom Column Widths"
style: dark_blue_white_text
row_style: alternating_light_gray
border_style: thin_gray
column_widths: [8, 6, 4, 5]
row_height: 0.9
content: |
  Sales Performance Report with individual column width control:

  | **Product Category** | **Q1 Sales** | **Q2** | **Growth %** |
  | Enterprise Software | $125,000 | $142,000 | +13.6% |
  | SaaS Solutions | $89,500 | $98,200 | +9.7% |
  | Cloud Services | $156,000 | $178,000 | +14.1% |
  | Mobile Apps | $67,300 | $73,800 | +9.7% |
---

---
layout: Title and Content
title: "**Table Dimensions:** Equal Column Distribution"
style: light_blue_dark_text
row_style: alternating_light_gray
border_style: thin_gray
table_width: 22
row_height: 0.9
content: |
  Team Performance Dashboard with equal column distribution:

  | **Team Member** | **Projects** | **Completed** | **Success Rate** |
  | Alice Johnson | 25 | 24 | 96% |
  | Bob Smith | 18 | 17 | 94% |
  | Carol Davis | 32 | 31 | 97% |
  | David Wilson | 21 | 20 | 95% |

JSON Format (Programmatic)

{
  "presentation": {
    "slides": [
      {
        "type": "Title Slide",
        "title": "**Deckbuilder** Presentation",
        "subtitle": "Content-first presentation generation"
      },
      {
        "type": "Title and Content",
        "title": "Key Benefits",
        "content": [
          "**Intelligent** content analysis",
          "*Semantic* layout recommendations",
          "***Professional*** template system"
        ]
      },
      {
        "type": "Title and Content",
        "title": "Team Performance Dashboard",
        "table": {
          "column_widths": [6, 4, 5, 3],
          "row_height": 1.8,
          "data": [
            ["**Team Member**", "**Projects**", "**Completed**", "**Rate**"],
            ["Alice Johnson", "25", "24", "96%"],
            ["Bob Smith", "18", "17", "94%"],
            ["Carol Davis", "32", "31", "97%"]
          ],
          "header_style": "dark_blue_white_text",
          "row_style": "alternating_light_gray",
          "border_style": "thin_gray"
        }
      }
    ]
  }
}

Python API

from deckbuilder import Deckbuilder

# Initialize engine
db = Deckbuilder()

# Create from markdown
result = db.create_presentation_from_markdown(
    markdown_content=open("presentation.md").read(),
    fileName="My_Presentation"
)

# Create from JSON
result = db.create_presentation(
    json_data={"presentation": {"slides": [...]}},
    fileName="JSON_Presentation"
)

print(f"✅ Created: {result}")

🌍 Language & Font Support

Supported Languages (20)

Deckbuilder supports 20 proofing languages for spell-check and grammar. You can use either locale codes (en-AU) or full names (English (Australia)):

# View all supported languages (shows both formats)
deckbuilder config languages

Available Languages:

  • English (United States, United Kingdom, Canada, Australia)
  • Spanish (Spain, Mexico, Latin America)
  • French (France, Canada)
  • German (Germany, Austria, Switzerland)
  • Italian, Portuguese (Brazil, Portugal)
  • Chinese (Simplified, Traditional), Japanese, Korean
  • Dutch, Russian, Arabic

Font Customization

# Set language and font globally (supports both formats)
export DECK_PROOFING_LANGUAGE="en-AU"           # Locale code format
export DECK_PROOFING_LANGUAGE="English (Australia)"  # Full name format
export DECK_DEFAULT_FONT="Arial"

# Or use CLI arguments (both formats work)
deckbuilder create presentation.md --language "fr-CA" --font "Times New Roman"
deckbuilder create presentation.md --language "French (Canada)" --font "Arial"

# Check current settings (shows locale codes and descriptions)
deckbuilder config show

🖼️ PlaceKitten Image Processing

Smart Image Fallback System - When images are missing or invalid, PlaceKitten automatically generates professional placeholders:

from placekitten import PlaceKitten

pk = PlaceKitten()
placeholder = (pk.generate(1920, 1080, image_id=1)
                .smart_crop(1920, 1080)
                .apply_filter("grayscale")
                .save("professional_placeholder.jpg"))

Features:

  • ✅ File Validation: Checks image existence, format, and accessibility
  • ✅ Professional Styling: Automatic grayscale filtering for business context
  • ✅ Smart Cropping: Computer vision-based cropping with face detection
  • ✅ Performance Optimized: Intelligent caching prevents duplicate processing
  • ✅ Seamless Integration: Zero user intervention required

🚀 What's New in v1.2.0

Smart Template Recommendations

  • Content Analysis: Automatically analyzes your content to suggest the best layouts
  • MCP Integration: Available through Claude Desktop with intelligent recommendations

Enhanced Image Processing

  • Better Image Sizing: Smart cropping ensures images fit perfectly without distortion
  • Automatic Fallbacks: Professional placeholder images when your images are missing

Improved Pattern System

  • User Customization: Create custom layout patterns in {template_folder}/patterns/
  • Dynamic Loading: All layouts now use flexible pattern files instead of hard-coded templates

🏗️ Architecture

    Your Content (Markdown/JSON)
              ↓
    ┌─────────────────────┐
    │   Content Analysis  │  ← Analyzes your content type and audience
    └─────────┬───────────┘
              ↓
    ┌─────────────────────┐
    │ Template Selection  │  ← Recommends best layouts for your content
    └─────────┬───────────┘
              ↓
    ┌─────────────────────┐
    │  PowerPoint Engine  │  ← Generates professional presentations
    └─────────┬───────────┘
              ↓
    Your Professional Presentation

🎨 Supported Markdown Layouts

✅ Currently Implemented

  • Title Slide - Opening slide with title and subtitle
  • Title and Content - Rich text with headings, paragraphs, bullets
  • Four Columns - Quad content areas with structured frontmatter
  • Two Content - Side-by-side content areas
  • Comparison - Left vs right comparison layout
  • Table - Data tables with professional styling
  • Section Header - Divider slides between topics
  • Picture with Caption - Image-focused slides with smart fallbacks

🚧 Progressive Implementation (50+ Planned)

  • Big Number displays, SWOT Analysis, Feature Matrix
  • Timeline, Process Flow, Organizational Chart
  • Dashboard, Metrics, Financial layouts
  • And 40+ more business presentation layouts

See Feature Documentation for detailed specifications.

🛠️ Development

Prerequisites

  • Python 3.11+
  • Virtual environments are recommended.

Development Install

git clone https://github.com/teknologika/deckbuilder.git
cd deckbuilder
python3 -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -e .[dev]

Code Quality Standards

# Format code (required before commits)
black --line-length 100 src/

# Check linting (required)
flake8 src/ tests/ --max-line-length=100 --ignore=E203,W503,E501

# Run tests (required)
pytest tests/

Contributing

  1. Fork the repository
  2. Create feature branch: git checkout -b feature-name
  3. Follow code quality standards
  4. Add comprehensive tests
  5. Submit pull request with clear description

📚 Documentation

🔧 Technology Stack

  • Python 3.11+ with modern type hints and comprehensive error handling
  • FastMCP for Model Context Protocol server implementation
  • python-pptx for PowerPoint generation and template manipulation
  • PyYAML for structured frontmatter processing
  • OpenCV + Pillow for computer vision and image processing
  • pytest for unit testing
  • Anthropic Claude - for most of the development gruntwork :-)

📋 Troubleshooting

Template not found:

# Create templates folder
deckbuilder init

# Check configuration
deckbuilder config

Permission denied when saving:

  • Verify output folder has write permissions
  • Ensure files aren't open in PowerPoint

MCP connection failures:

  • Verify virtual environment is activated
  • Check Python path in Claude Desktop config
  • Ensure all dependencies are installed

📄 License

Apache License 2.0 - See LICENSE file for details.


Built with ❤️ for intelligent presentation generation - Copyright Bruce McLeod

🚀 Get Started • 📖 Documentation • 🐛 Report Issues

Metadata

Release files for deckbuilder 1.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for deckbuilder 1.4.1
File Size Uploaded Provenance Actions
deckbuilder-1.4.1.tar.gz 17.4 MB Without provenance Details for deckbuilder-1.4.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for deckbuilder 1.4.1
File Interpreter ABI Platform Actions
deckbuilder-1.4.1-py3-none-any.whl Python 3 none any Details for deckbuilder-1.4.1-py3-none-any.whl

Total release size: 34.6 MB

Release files / deckbuilder-1.4.1.tar.gz

Download URL deckbuilder-1.4.1.tar.gz
Size 17.4 MB
Tags Source
SHA-256 checksum
How to use checksums
5060f32339b5b6fdabafd8d7c828a3348d133e0093a2004fe1eb515c752f0c09
BLAKE2b-256 checksum
How to use checksums
174d0e8731e17760de9d34ac5fbdc7553cb2ba678bc2ab4372879c24daa35d29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.13

Release files / deckbuilder-1.4.1-py3-none-any.whl

Download URL deckbuilder-1.4.1-py3-none-any.whl
Size 17.3 MB
Tags Python 3
SHA-256 checksum
How to use checksums
acd9188b4156f70064d6cf03652a20d7a74a93e06e93c8f4cc06eb81a0654e91
BLAKE2b-256 checksum
How to use checksums
854c0ccdfaa4d2cc99134ab3097a9d32fbf1877968c457e75225abf9663c17e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.13

Security for deckbuilder 1.4.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page