Deployed Presenton (AI-powered presentation generator) to production infrastructure. Features: - AI-generated presentations from text prompts and documents - Azure OpenAI GPT-5 for text generation - Azure OpenAI DALL-E 3 for image generation - Export to PPTX and PDF formats - Custom template support with HTML/Tailwind CSS - Privacy-focused (local data processing) Infrastructure: - Container: ghcr.io/presenton/presenton:latest - Domain: presentation.ai-impress.com - SSL: Automatic via Traefik + Cloudflare DNS - Network: traefik-public - Resources: 1-2 CPU cores, 1-2GB RAM Configuration: - LLM: Azure OpenAI Custom endpoint (GPT-5) - Images: Azure DALL-E 3 - API keys managed via .env (not committed) - UI key management enabled (CAN_CHANGE_KEYS=true) Services started: - Nginx (port 80) - reverse proxy - Next.js (port 3000) - frontend - FastAPI (port 8000) - backend API - MCP Server (port 8001) - Model Context Protocol Location: /opt/02-core/presenton/ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
248 lines
5.5 KiB
Markdown
248 lines
5.5 KiB
Markdown
# Presenton - AI Presentation Generator
|
|
|
|
AI-powered presentation generator with Azure OpenAI integration.
|
|
|
|
## Overview
|
|
|
|
**Presenton** is an open-source AI presentation generator that creates professional presentations from prompts, documents, or existing PowerPoint files. Privacy-focused alternative to Gamma, Beautiful.ai, and Decktopus.
|
|
|
|
- **URL:** https://presentation.ai-impress.com
|
|
- **Repository:** https://github.com/presenton/presenton
|
|
- **AI Provider:** Azure OpenAI (GPT-5 + DALL-E 3)
|
|
|
|
## Features
|
|
|
|
- AI-generated presentations from text prompts
|
|
- Document upload support (PDF, DOCX, PPTX)
|
|
- Custom template creation (HTML + Tailwind CSS)
|
|
- Export to PPTX and PDF formats
|
|
- Model Context Protocol (MCP) server support
|
|
- Local data processing (privacy-focused)
|
|
|
|
## Architecture
|
|
|
|
```
|
|
presenton/
|
|
├── docker-compose.yml # Container configuration with Traefik
|
|
├── .env # Azure OpenAI credentials
|
|
├── README.md # This file
|
|
└── app_data/ # Persistent storage (auto-created)
|
|
├── presentations/ # Generated presentations
|
|
├── templates/ # Custom templates
|
|
└── uploads/ # Uploaded documents
|
|
```
|
|
|
|
## Technology Stack
|
|
|
|
**Frontend:**
|
|
- Next.js (React)
|
|
- Node.js 20
|
|
- Port: 3000 (internal)
|
|
|
|
**Backend:**
|
|
- FastAPI (Python 3.11)
|
|
- Port: 8000 (internal)
|
|
|
|
**Additional Services:**
|
|
- MCP Server (Port: 8001)
|
|
- Nginx (Port: 80 - exposed via Traefik)
|
|
|
|
**AI Integration:**
|
|
- Azure OpenAI GPT-5 (text generation)
|
|
- Azure OpenAI DALL-E 3 (image generation)
|
|
|
|
## Configuration
|
|
|
|
### Environment Variables (.env)
|
|
|
|
**LLM Configuration:**
|
|
- `LLM=custom` - Use custom Azure OpenAI endpoint
|
|
- `CUSTOM_LLM_URL` - Azure OpenAI chat completions URL
|
|
- `CUSTOM_LLM_API_KEY` - Azure API key
|
|
- `CUSTOM_MODEL=gpt-5` - Model name
|
|
- `TOOL_CALLS=true` - Enable function calling
|
|
|
|
**Image Generation:**
|
|
- `IMAGE_PROVIDER=dall-e-3` - Use DALL-E 3 for images
|
|
- `OPENAI_API_KEY` - Azure DALL-E API key
|
|
|
|
**Advanced Features:**
|
|
- `CAN_CHANGE_KEYS=true` - Allow API key changes in UI
|
|
- `EXTENDED_REASONING=true` - Enable for GPT-5
|
|
- `DISABLE_ANONYMOUS_TELEMETRY=true` - Privacy
|
|
|
|
### Traefik Integration
|
|
|
|
Presenton is configured to work with Traefik reverse proxy:
|
|
- **Domain:** presentation.ai-impress.com
|
|
- **SSL:** Automatic via Let's Encrypt (Cloudflare DNS)
|
|
- **Network:** traefik-public
|
|
|
|
## Usage
|
|
|
|
### Start the service
|
|
|
|
```bash
|
|
cd /opt/02-core/presenton
|
|
docker compose up -d
|
|
```
|
|
|
|
### View logs
|
|
|
|
```bash
|
|
docker logs presenton -f
|
|
```
|
|
|
|
### Stop the service
|
|
|
|
```bash
|
|
docker compose down
|
|
```
|
|
|
|
### Restart the service
|
|
|
|
```bash
|
|
docker compose restart
|
|
```
|
|
|
|
### Update to latest version
|
|
|
|
```bash
|
|
docker compose pull
|
|
docker compose up -d
|
|
```
|
|
|
|
## API Access
|
|
|
|
**API Documentation:**
|
|
- Swagger UI: https://presentation.ai-impress.com/api/v1/docs
|
|
- OpenAPI spec: https://presentation.ai-impress.com/api/v1/openapi.json
|
|
|
|
**Generate Presentation Endpoint:**
|
|
```bash
|
|
POST /api/v1/ppt/presentation/generate
|
|
```
|
|
|
|
**Example Request:**
|
|
```bash
|
|
curl -X POST "https://presentation.ai-impress.com/api/v1/ppt/presentation/generate" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"content": "Create a presentation about AI trends in 2025",
|
|
"slide_count": 10,
|
|
"language": "en",
|
|
"tone": "professional",
|
|
"export_format": "pptx"
|
|
}'
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Container won't start
|
|
|
|
Check logs for errors:
|
|
```bash
|
|
docker logs presenton --tail 100
|
|
```
|
|
|
|
Check if Traefik network exists:
|
|
```bash
|
|
docker network ls | grep traefik-public
|
|
```
|
|
|
|
### Azure OpenAI connection issues
|
|
|
|
Verify environment variables:
|
|
```bash
|
|
docker exec presenton env | grep -E "LLM|CUSTOM|OPENAI"
|
|
```
|
|
|
|
Test Azure OpenAI endpoint:
|
|
```bash
|
|
curl -X POST "https://aipmress-ai-n8n.cognitiveservices.azure.com/openai/deployments/gpt-5/chat/completions?api-version=2025-01-01-preview" \
|
|
-H "Content-Type: application/json" \
|
|
-H "api-key: YOUR_API_KEY" \
|
|
-d '{"messages":[{"role":"user","content":"Hello"}]}'
|
|
```
|
|
|
|
### DALL-E image generation not working
|
|
|
|
Azure DALL-E uses a different API format than OpenAI. If images fail to generate:
|
|
|
|
1. Check logs: `docker logs presenton | grep -i "dall-e"`
|
|
2. Verify DALL-E endpoint is accessible
|
|
3. Consider using Pexels as alternative (free stock photos)
|
|
|
|
To switch to Pexels:
|
|
```bash
|
|
# Edit .env
|
|
IMAGE_PROVIDER=pexels
|
|
PEXELS_API_KEY=your_pexels_key # Get free at https://www.pexels.com/api/
|
|
```
|
|
|
|
### Performance issues
|
|
|
|
Increase container resources in docker-compose.yml:
|
|
```yaml
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: '4'
|
|
memory: 4G
|
|
```
|
|
|
|
## Maintenance
|
|
|
|
### Backup presentations
|
|
|
|
```bash
|
|
# Create backup
|
|
tar -czf presenton-backup-$(date +%Y%m%d).tar.gz app_data/
|
|
|
|
# Restore from backup
|
|
tar -xzf presenton-backup-YYYYMMDD.tar.gz
|
|
```
|
|
|
|
### Clear cache and temp files
|
|
|
|
```bash
|
|
docker exec presenton sh -c "rm -rf /tmp/*"
|
|
```
|
|
|
|
### Monitor disk usage
|
|
|
|
```bash
|
|
du -sh app_data/
|
|
```
|
|
|
|
## Security
|
|
|
|
- API keys stored in .env (excluded from Git)
|
|
- SSL/HTTPS via Traefik with Let's Encrypt
|
|
- Local data processing (no cloud uploads)
|
|
- API key changes allowed via UI (can be locked with `CAN_CHANGE_KEYS=false`)
|
|
|
|
## Resources
|
|
|
|
- **CPU:** 1-2 cores (recommended)
|
|
- **RAM:** 1-2 GB
|
|
- **Disk:** ~1 GB (image) + presentations storage
|
|
|
|
## Links
|
|
|
|
- **Official Docs:** https://github.com/presenton/presenton
|
|
- **Issue Tracker:** https://github.com/presenton/presenton/issues
|
|
- **Docker Hub:** ghcr.io/presenton/presenton
|
|
|
|
## Support
|
|
|
|
For issues specific to this deployment:
|
|
- Check container logs: `docker logs presenton`
|
|
- Review Traefik logs: `docker logs traefik`
|
|
- Contact: AI-Impress Infrastructure Team
|
|
|
|
---
|
|
|
|
**Last Updated:** 2025-11-05
|
|
**Version:** latest
|
|
**Deployment:** Production
|