presenton
SKILL.md
Presenton — AI Presentation Generator
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.
When to use
- Use case 1: When the user asks to generate a presentation or slideshow on any topic
- Use case 2: When you need to convert a document, report, or prompt into structured slides
- Use case 3: When the user wants to export a presentation as PPTX or PDF
- Use case 4: When building agent workflows that produce presentation outputs via MCP
- Use case 5: When the user wants AI-generated presentations that run entirely on their own device
Required tools / APIs
- Docker (recommended) or Node.js LTS + Python 3.11 + uv for local dev
- One of: OpenAI API key, Google Gemini API key, Anthropic API key, or a local Ollama instance
- Optional image providers: DALL-E 3, Gemini Flash, Pexels, Pixabay, or ComfyUI
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
Skills
generate_presentation_via_api
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);
generate_with_mcp
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 }
generate_with_custom_template
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);
Output format
pptx_url: Path to download the generated PPTX file (string)pdf_url: Path to download the generated PDF file (string)- Error shape:
{ detail: "<message>" }— check Presenton logs for root cause
Rate limits / Best practices
- Generation takes 15–60 seconds depending on the model and number of slides; use async handling
- Cache generated presentations by prompt hash to avoid redundant API calls
- Use
DISABLE_IMAGE_GENERATION=truefor faster, text-only output during development - Prefer Pexels or Pixabay as image providers to avoid per-image AI costs
- Set
CAN_CHANGE_KEYS=falsein production to lock down credentials
Agent prompt
You 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.
Troubleshooting
Presenton container not starting:
- Symptom:
docker runexits immediately or port 5000 is unreachable - Solution: Check
docker logs presentonfor errors; ensure port 5000 is free (lsof -i :5000)
Generation times out:
- Symptom: API call hangs beyond 60 seconds
- Solution: Verify the LLM API key is valid and the model is reachable; reduce
n_slides; check container logs
No images in slides:
- Symptom: Slides are generated but contain no images
- Solution: Set
IMAGE_PROVIDERand the matching API key environment variable; or setDISABLE_IMAGE_GENERATION=trueto skip images
MCP server not responding:
- Symptom: Agent cannot connect to
http://localhost:5000/mcp - Solution: Confirm Presenton is running and the MCP endpoint is accessible; check firewall rules
See also
- ../browser-automation-agent/SKILL.md — Automate the Presenton web UI when API access is not available
- ../pdf-manipulation/SKILL.md — Post-process exported PDFs
- ../static-assets-hosting/SKILL.md — Host generated presentations for sharing
Notes
- Source: https://github.com/presenton/presenton
- License: Apache 2.0
- Skill file path:
skills/presenton/SKILL.md
Weekly Installs
7
Repository
besoeasy/open-skillsGitHub Stars
87
First Seen
14 days ago
Security Audits
Installed on
kimi-cli7
opencode6
github-copilot6
codex6
gemini-cli6
amp6