AutoSlides is an AI-powered presentation generator that creates customized slide decks from multiple content sources. It uses Google Gemini AI to generate titles, content, images, and tables, with user-controlled source weighting and presentation goals. The system includes a React frontend, FastAPI backend, and n8n workflows for content extraction and export to Google Slides.
Current Direction: The application is evolving towards greater user customization and AI precision. Users can now assign relative weights to sources, specify presentation objectives, and receive detailed usage analytics. Future enhancements will include more export formats, advanced AI features, and improved content processing.
- Multi-Source Input: Extract and combine content from PDFs, web pages, YouTube videos, and text.
- AI-Powered Generation: Google Gemini AI creates slide content with text, images, and tables, respecting user-defined source weights and presentation goals.
- Source Weighting: Adjustable sliders to control the relative contribution of each source (auto-normalized to 100%).
- Presentation Goals: Text field for users to specify what they expect from the presentation, guiding AI generation.
- Usage Analytics: Displays percentage contribution of each source in the generated slides.
- Interactive UI: Loading indicators, source titles generated by AI, and modal views for full content.
- Web Frontend: React-based interface with bilingual support (English/Spanish).
- Backend API: FastAPI server for AI processing and slide generation.
- Customizable Output: Set slide count, templates, and language.
- Export Options: Generate Google Slides presentations via n8n workflows.
Note: The application is designed to run on a separate LXC container (Proxmox) with Caddy as reverse proxy. The LXC is on a different device (IP: 192.168.1.92) and cannot be accessed directly from this shell. Updates must be pulled via Git on the LXC.
- Install Python dependencies:
pip install google-generativeai fastapi uvicorn pydantic
- Set environment variables:
export GOOGLE_AI_API_KEY="your-gemini-api-key" export PORT=8000
- Run the backend:
python3 backend.py
- Ensure n8n is running in a separate container (e.g., at n8n-container-ip:5678).
- Import the AutoSlides workflows from the project.
- Configure Google Slides API credentials in n8n.
- Install Node.js and npm.
- Navigate to
autoslides-frontenddirectory. - Install dependencies:
npm install
- Build for production:
npm run build
- Serve the
builddirectory with Caddy (configured in LXC).
Since the LXC is on a separate device, updates are done via Git pull on the LXC:
- SSH into the LXC:
ssh root@192.168.1.92 - Pull changes:
cd /opt/autoslides && git pull origin main - Rebuild frontend:
cd autoslides-frontend && npm run build - Restart backend:
pkill -f "python3 backend.py" && python3 backend.py & - Restart Caddy:
sudo systemctl restart caddy
- Open the React frontend at
http://192.168.1.92(LXC IP). - Add multiple sources (text, URL, YouTube, PDF) - each gets an AI-generated title.
- Adjust source weights using sliders (auto-normalized to 100%).
- Specify presentation goal in the textarea.
- Set slide count, template, and language.
- Click "Generate Slides" - view loading indicators and "I know Kung-Fu" message.
- Review generated slides with source usage percentages.
# Generate slides with multiple sources, weights, and goal
curl -X POST http://192.168.1.92:8000/generate-slides \
-H "Content-Type: application/json" \
-d '{
"sources": [{"type": "text", "value": "Content 1"}, {"type": "url", "value": "https://example.com"}],
"weights": [60, 40],
"presentation_goal": "Educational presentation for students",
"slide_count": 5,
"template": "default",
"language": "english"
}'
# Generate title for a source
curl -X POST http://192.168.1.92:8000/generate-title \
-H "Content-Type: application/json" \
-d '{"content": "Your content here"}'- Trigger the main AutoSlides workflow with input data.
- Workflows handle content extraction and call the backend API.
- Generated slides are exported to Google Slides.
Contributions are welcome. Please submit issues or pull requests on the project repository.
[Specify license if applicable]