Transform structured JSON data into professional PowerPoint presentations with a single command. Perfect for automation, reporting, and bulk presentation generation.
- π Markdown to PowerPoint - Convert markdown documents directly to presentations
- π 7 Slide Layouts - Title, text, charts, tables, images, notes, and custom layouts
- π¨ Professional Themes - Business-ready color schemes and formatting
- π Rich Charts - Bar, line, pie, area, scatter, doughnut, and radar charts
- π’ Template Support - Apply corporate templates to maintain brand consistency
- π― Smart Content Detection - Automatically detects charts from CSV/table data
- π Perfect Spacing - Automatically positions content with professional margins
- π Batch Processing - Generate multiple presentations programmatically
- π PDF Export - Optional PDF generation via LibreOffice
- β No Repair Needed - Generates clean PPTX files that open without errors
npm install -g powerpoint-creator
npm install powerpoint-creator
git clone https://github.com/wapdat/powerpoint-creator.git
cd powerpoint-creator
npm install
npm run build
powerpoint-creator -i presentation.json -o output.pptx
powerpoint-creator -m document.md -o presentation.pptx
powerpoint-creator -i data.json -t company-template.pptx -o report.pptx
cat data.json | powerpoint-creator -o presentation.pptx
powerpoint-creator -i slides.json -o deck.pptx --pdf
PowerPoint Creator can convert markdown documents directly to presentations. It automatically:
- Converts headings to slide titles and sections
- Detects and creates charts from CSV data and tables
- Formats lists, emphasis, and code blocks
- Splits long content across multiple slides
- Processes YAML frontmatter for metadata
---
title: Presentation Title
author: Your Name
company: Company Name
date: 2025-01-15
theme: professional
---
# Main Title Slide
## Section Divider
### Content Slide Title
- Bullet point 1
- Bullet point 2
- **Bold text**
- *Italic text*
### Data Table
| Header 1 | Header 2 | Header 3 |
|----------|----------|----------|
| Data 1 | Data 2 | Data 3 |
### Chart from CSV
\`\`\`csv
Month,Sales,Profit
Jan,100,20
Feb,120,25
Mar,150,35
\`\`\`

<!-- notes: Speaker notes go here -->
- H1 (#) β Title slides
- H2 (##) β Section dividers with colored background
- H3 (###) β New content slide or emphasized bullet
- Lists β Bullet points with proper indentation
- Tables β Table slides or charts (if numeric)
- Code blocks β Notes slides or charts (if CSV/JSON)
- Images β Image slides with captions
- Blockquotes β Notes slides
- Horizontal rules (---) β Slide breaks
- HTML comments β Speaker notes or directives
{
"title": "Q4 2024 Business Review",
"author": "John Smith",
"company": "Acme Corp",
"slides": [
{
"layout": "title",
"title": "Q4 2024 Results",
"subtitle": "Record Breaking Quarter",
"author": "Leadership Team",
"date": "January 2025"
},
{
"layout": "text",
"title": "Key Achievements",
"bullets": [
"Revenue exceeded targets by 15%",
"Launched 3 new products successfully",
"Customer satisfaction increased to 92%"
]
},
{
"layout": "chart",
"title": "Revenue Growth",
"chartType": "bar",
"data": {
"labels": ["Q1", "Q2", "Q3", "Q4"],
"datasets": [{
"label": "Revenue ($M)",
"data": [45, 52, 58, 67]
}]
}
},
{
"layout": "table",
"title": "Regional Performance",
"headers": ["Region", "Revenue", "Growth"],
"tableData": [
["North America", "$30M", "+20%"],
["Europe", "$22M", "+15%"],
["Asia Pacific", "$15M", "+35%"]
]
}
]
}
Creates opening or section divider slides with customizable backgrounds.
{
"layout": "title",
"title": "Main Title",
"subtitle": "Subtitle Text",
"author": "Presenter Name",
"date": "January 2025",
"backgroundColor": "#2C3E50",
"notes": "Speaker notes here"
}
Perfect for agendas, lists, and text-heavy content.
{
"layout": "text",
"title": "Agenda",
"bullets": [
"Introduction and Overview",
"Q4 Performance Metrics",
"Strategic Initiatives",
"2025 Roadmap"
],
"level": [0, 0, 1, 1],
"notes": "Cover each point for 5 minutes"
}
Visualize data with professional charts.
{
"layout": "chart",
"title": "Sales Performance",
"chartType": "line",
"data": {
"labels": ["Jan", "Feb", "Mar", "Apr", "May", "Jun"],
"datasets": [
{
"label": "2024 Sales",
"data": [30, 45, 60, 70, 85, 95]
},
{
"label": "2023 Sales",
"data": [25, 35, 45, 55, 65, 75]
}
]
},
"options": {
"showLegend": true,
"legendPosition": "bottom"
}
}
Supported Chart Types:
bar
- Vertical bar chartsline
- Line graphspie
- Pie chartsarea
- Area chartsscatter
- Scatter plotsdoughnut
- Doughnut chartsradar
- Radar/spider charts
Display structured data in professional tables.
{
"layout": "table",
"title": "Project Status",
"headers": ["Project", "Status", "Completion", "Owner"],
"tableData": [
["Website Redesign", "On Track", "75%", "Sarah"],
["Mobile App", "At Risk", "45%", "John"],
["API Development", "Complete", "100%", "Mike"]
],
"styling": {
"headerBackground": "#2C3E50",
"headerTextColor": "#FFFFFF",
"alternateRows": true
}
}
Include images with optional captions.
{
"layout": "image",
"title": "Product Screenshot",
"imagePath": "./screenshots/dashboard.png",
"caption": "New dashboard interface",
"sizing": "contain",
"notes": "Highlight the improved UX"
}
Text-only slides for detailed notes.
{
"layout": "notes",
"title": "Implementation Notes",
"content": "Detailed implementation plan:\n1. Phase 1: Planning\n2. Phase 2: Development\n3. Phase 3: Testing\n4. Phase 4: Deployment"
}
Advanced layouts with positioned elements.
{
"layout": "custom",
"title": "Custom Layout",
"elements": [
{
"type": "text",
"content": "Custom positioned text",
"x": 1,
"y": 2,
"width": 4,
"height": 1
},
{
"type": "shape",
"content": {
"type": "rect",
"fill": "#3498DB"
},
"x": 6,
"y": 2,
"width": 3,
"height": 3
}
]
}
The package applies a professional business color scheme automatically:
- Primary: Dark blue-gray (#2C3E50)
- Charts: Professional grayscale palette
- Tables: Navy headers with clean alternating rows
- Backgrounds: Sophisticated solid colors
Use HTML tags in any text field:
<strong>Bold text</strong>
<em>Italic text</em>
<u>Underlined text</u>
- Format: 16:9 widescreen (10" Γ 7.5")
- Safe margins: 0.75" on all sides
- Title area: 0.4" - 1.2" from top
- Content area: 1.3" - 5.8" from top
We've included two complete example presentations:
-
Business Report Example - Quarterly business review with charts and tables
-
Product Launch Example - Product announcement with mixed content types
# Generate business report
powerpoint-creator -i examples/business-report.json -o my-report.pptx
# Generate product launch deck
powerpoint-creator -i examples/product-launch.json -o my-launch.pptx
# Process multiple JSON files
for file in data/*.json; do
powerpoint-creator -i "$file" -o "output/$(basename $file .json).pptx"
done
# Generate from API response
curl https://api.example.com/report | powerpoint-creator -o report.pptx
# Apply branding template
powerpoint-creator -i content.json -t templates/corporate.pptx -o branded.pptx
# Process with jq first
cat raw-data.json | jq '.presentations[0]' | powerpoint-creator -o filtered.pptx
Option | Alias | Description | Default |
---|---|---|---|
--input |
-i |
Input JSON file path | stdin |
--output |
-o |
Output PPTX file path | output.pptx |
--template |
-t |
Template PPTX file path | none |
--pdf |
-p |
Also generate PDF | false |
--verbose |
-v |
Show detailed progress | false |
--help |
-h |
Show help message | - |
--version |
-V |
Show version number | - |
const { PresentationGenerator } = require('powerpoint-creator');
const presentation = {
title: "My Presentation",
slides: [
{
layout: "title",
title: "Welcome",
subtitle: "Let's get started"
}
]
};
const generator = new PresentationGenerator();
const buffer = await generator.generate(presentation);
fs.writeFileSync('output.pptx', buffer);
Issue: "Command not found" after installation
# Ensure npm global bin is in PATH
export PATH=$PATH:$(npm prefix -g)/bin
Issue: PDF generation not working
# Install LibreOffice
# macOS:
brew install libreoffice
# Ubuntu:
sudo apt-get install libreoffice
Issue: Images not loading
- Use absolute paths for local images
- Ensure image files exist and are accessible
- For URLs, ensure they're publicly accessible
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with PptxGenJS v4.0.1
- Template support via pptx-automizer
- CLI powered by Yargs
- Styled with Chalk
- Documentation: GitHub Wiki
- Issues: GitHub Issues
- NPM: npmjs.com/package/powerpoint-creator
Made with β€οΈ for automating presentations