diff --git a/opt/02-core/presenton/README.md b/opt/02-core/presenton/README.md new file mode 100644 index 0000000..7a1e3e5 --- /dev/null +++ b/opt/02-core/presenton/README.md @@ -0,0 +1,248 @@ +# 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 diff --git a/opt/02-core/presenton/docker-compose.yml b/opt/02-core/presenton/docker-compose.yml new file mode 100644 index 0000000..95bb2a7 --- /dev/null +++ b/opt/02-core/presenton/docker-compose.yml @@ -0,0 +1,32 @@ +version: '3.8' + +services: + presenton: + image: ghcr.io/presenton/presenton:latest + container_name: presenton + restart: unless-stopped + networks: + - traefik-public + env_file: + - .env + volumes: + - ./app_data:/app_data + deploy: + resources: + limits: + cpus: '2' + memory: 2G + reservations: + cpus: '1' + memory: 512M + labels: + - "traefik.enable=true" + - "traefik.docker.network=traefik-public" + - "traefik.http.routers.presenton.rule=Host(`presentation.ai-impress.com`)" + - "traefik.http.routers.presenton.entrypoints=websecure" + - "traefik.http.routers.presenton.tls.certresolver=cloudflare" + - "traefik.http.services.presenton.loadbalancer.server.port=80" + +networks: + traefik-public: + external: true