Generate AI-powered presentations locally using Presenton. Use when: (1) User asks to create a presentation or slideshow, (2) User wants to convert a document or prompt into slides, (3) User needs PPTX/PDF export with AI-generated content.
Presenton is an open-source, locally-run AI presentation generator. It creates professional slideshows from text prompts or uploaded documents, exports to PPTX and PDF, and exposes a built-in MCP server so agents can generate presentations programmatically.
Install options:
# Docker (Linux/macOS) — recommended
docker run -it --name presenton \
-p 5000:80 \
-v "./app_data:/app_data" \
ghcr.io/presenton/presenton:latest
# Docker (Windows PowerShell)
docker run -it --name presenton `
-p 5000:80 `
-v "${PWD}\app_data:/app_data" `
ghcr.io/presenton/presenton:latest
# With OpenAI + DALL-E 3 (no UI key entry needed)
docker run -it --name presenton \
-p 5000:80 \
-e LLM="openai" \
-e OPENAI_API_KEY="<your-key>" \
-e IMAGE_PROVIDER="dall-e-3" \
-e CAN_CHANGE_KEYS="false" \
-v "./app_data:/app_data" \
ghcr.io/presenton/presenton:latest
Generate a presentation by sending a prompt to the Presenton REST API.
# Start Presenton first (see install above), then call the API
curl -fsS --max-time 60 \
-X POST "http://localhost:5000/api/v1/ppt/generate" \
-H "Content-Type: application/json" \
-d '{"prompt": "Introduction to Quantum Computing", "n_slides": 8}'
# The response includes a presentation ID; download PPTX with:
PPTX_PATH=$(curl -s "http://localhost:5000/api/v1/ppt/generate" \
-H "Content-Type: application/json" \
-d '{"prompt": "Introduction to Quantum Computing", "n_slides": 8}' \
| jq -r '.pptx_url')
curl -s "http://localhost:5000${PPTX_PATH}" -o presentation.pptx
Node.js:
async function generatePresentation(prompt, nSlides = 8, baseUrl = 'http://localhost:5000') {
const res = await fetch(`${baseUrl}/api/v1/ppt/generate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ prompt, n_slides: nSlides }),
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
return await res.json(); // contains pptx_url and pdf_url
}
// Usage
// generatePresentation('Introduction to Quantum Computing', 10).then(console.log);
Use Presenton's built-in MCP server to generate presentations from an AI agent.
# Add Presenton MCP server to your agent config (e.g. Claude Desktop, Cursor)
# mcp.json entry:
cat <<'EOF'
{
"mcpServers": {
"presenton": {
"url": "http://localhost:5000/mcp"
}
}
}
EOF
Node.js:
// The MCP server exposes a generate_presentation tool.
// Call it via your MCP client library:
const result = await mcpClient.callTool('presenton', 'generate_presentation', {
prompt: 'Climate Change: Causes and Solutions',
n_slides: 10,
});
console.log(result); // { pptx_url, pdf_url }
Upload an existing PPTX to create an on-brand template, then generate from it.
# Upload a template PPTX to extract theme/design
curl -fsS --max-time 30 \
-X POST "http://localhost:5000/api/v1/ppt/upload-template" \
-F "file=@my_template.pptx"
# Generate a new presentation using that template
curl -fsS --max-time 60 \
-X POST "http://localhost:5000/api/v1/ppt/generate" \
-H "Content-Type: application/json" \
-d '{"prompt": "Q3 Sales Report", "n_slides": 6, "template": "my_template"}'
Node.js:
const { readFileSync } = require('fs');
async function uploadTemplate(filePath, baseUrl = 'http://localhost:5000') {
const form = new FormData();
form.append('file', new Blob([readFileSync(filePath)]), 'template.pptx');
const res = await fetch(`${baseUrl}/api/v1/ppt/upload-template`, {
method: 'POST',
body: form,
});
if (!res.ok) throw new Error(`Upload failed: HTTP ${res.status}`);
return await res.json();
}
// Usage
// uploadTemplate('./branding.pptx').then(console.log);
pptx_url: Path to download the generated PPTX file (string)pdf_url: Path to download the generated PDF file (string){ detail: "<message>" } — check Presenton logs for root causeDISABLE_IMAGE_GENERATION=true for faster, text-only output during developmentCAN_CHANGE_KEYS=false in production to lock down credentialsYou have Presenton capability. When a user asks to create a presentation:
1. Confirm the topic and desired number of slides (default: 8)
2. Call POST http://localhost:5000/api/v1/ppt/generate with {"prompt": "<topic>", "n_slides": <n>}
3. Wait for the response (up to 60 seconds) and extract pptx_url and pdf_url
4. Offer the user download links for both PPTX and PDF
5. If a custom template is requested, upload it first via /api/v1/ppt/upload-template and include the template name in the generate request
Always check that Presenton is running at http://localhost:5000 before calling the API.
Report any HTTP errors with the status code and response body so the user can diagnose the issue.
Presenton container not starting:
docker run exits immediately or port 5000 is unreachabledocker logs presenton for errors; ensure port 5000 is free (lsof -i :5000)Generation times out:
n_slides; check container logsNo images in slides:
IMAGE_PROVIDER and the matching API key environment variable; or set DISABLE_IMAGE_GENERATION=true to skip imagesMCP server not responding:
http://localhost:5000/mcpskills/presenton/SKILL.mdEdit PDFs with natural-language instructions using the nano-pdf CLI.