LandPPT - AI-Powered PPT Generation Platform

GitHub stars GitHub forks GitHub issues License Python FastAPI Docker Ask DeepWiki

English | 中文

LandPPT Logo

Topic / Document → Outline → HTML PPT → Script / Narration / Export

In one line: LandPPT is an LLM-powered presentation platform—turn a topic or uploaded document into an editable professional deck, with speech scripts, narrated video, and multi-format export.

Core capabilities:

Capability Description
One-click generation Topic to full PPT, with parallel slide generation
Smart images Local gallery / web stock / AI generation
Deep research Tavily + SearXNG for live web retrieval and summaries
Scripts & video Speech scripts + Edge-TTS per-slide narration; 1080p video export
Multi-format export PDF / HTML / PPTX / images / DOCX / Markdown
Automation OpenAI-compatible API + REST APIs with API-key auth

Documentation · Docker Hub · Issues


Table of Contents


Overview

LandPPT folds outline writing, layout, imagery, speaker notes, and export into one AI workflow:

  1. Input — topic text, or PDF / Word / Markdown / Excel / PPT documents
  2. Plan — editable outline; optional deep research for up-to-date context
  3. Generate — parallel HTML slides with templates and AI-adaptive layouts
  4. Refine — sidebar AI chat editing, image swap, visual references
  5. Deliver — multi-format export, or a public share link (with narration and subtitles)

Local default: SQLite + in-memory cache—one command to try, no PostgreSQL / Valkey required.
Production recommended: docker compose with Web + Worker + PostgreSQL + Valkey + MinIO.


Features

Multi-AI providers

  • OpenAI GPT, Anthropic Claude, Google Gemini, Azure OpenAI
  • OpenAI-compatible endpoints (DeepSeek, Moonshot, Qwen, …)
  • Ollama local models; per-role routing (outline / slides / editor / template / speech) for cost control

Files & deep research

  • Formats: PDF / Word / Markdown / TXT / Excel / PowerPoint
  • High-quality parsing via MinerU + MarkItDown
  • Multi-engine retrieval with Tavily + SearXNG and web summarization

Smart images

  • Three sources: local gallery / Pixabay & Unsplash / DALL·E, SiliconFlow, Pollinations, OpenAI, Gemini
  • AI matching; automatic resize, format conversion, quality tuning
  • Image service is off by default (ENABLE_IMAGE_SERVICE)

Templates & projects

  • Global master template + scenario templates (general / tourism / education, …)
  • Extract layout from uploaded reference PPTX; project-level AI-adaptive templates
  • Four-stage workflow: requirements → outline → task tracking → PPT generation
  • Stage restart/resume, visual outline editor, one-click public sharing

Platform & ops

  • Single-container Docker or multi-service Compose; async jobs (PDF / PPTX / narration video)
  • Local accounts, GitHub / Linux Do OAuth, email verification, registration rate limits
  • Optional credits, SMTP / Resend, Cloudflare Turnstile

Screenshots

Main interface

Main interface

Outline & generation result

Outline

Generation result

More screenshots (editor / speech / export / templates)

Main interface (alt)

Main interface 2

Generation result (alt)

Generation result 2

Online editing

Editor 1

Editor 2

Editor 3

Editor 4

Speech script

Speech script

Template generation

Template


Dependencies & Scope

Separate minimum runnable from full feature set so you are not surprised after first boot.

Capability Dependency Notes
Core generation (outline / HTML PPT) At least one AI provider key Required
Local models Ollama, etc. Optional offline inference
Deep research TAVILY_API_KEY or SearXNG Optional
Web / AI images Gallery or image-gen keys + ENABLE_IMAGE_SERVICE=true Optional (off by default)
Standard editable PPTX APRYSE_LICENSE_KEY (commercial) Optional, but required for editable PPTX
Image-based PPTX No Apryse Higher visual fidelity; in-slide elements usually not editable
Narration video ffmpeg; optional ComfyUI TTS Optional
Multi-user / background jobs PostgreSQL + Valkey + MinIO + Worker Prefer Compose

Production security

  • Change SECRET_KEY and admin password; do not ship default admin / admin123
  • Production compose disables admin bootstrap by default—enable explicitly on first deploy only
  • Use strong random LANDPPT_API_KEY / LANDPPT_API_KEYS
  • Never commit real secrets to Git

Quick Start

System requirements

  • Python 3.11+
  • SQLite 3 (local default)
  • ffmpeg (for narration video export)
  • Docker (optional)

Database migrations

  • Pending migrations run automatically on startup; disable with LANDPPT_AUTO_MIGRATE_ON_STARTUP=false
  • Local default is SQLite; set DATABASE_URL only when you want PostgreSQL or another external DB
  • For multi-node shared databases, disable auto-migrate and run a one-off migration job
git clone https://github.com/sligter/LandPPT.git
cd LandPPT

# Install uv if needed
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

uv sync --extra dev
cp .env.example .env
# Edit .env — configure at least one AI API key

# Defaults to :8000 with SQLite + memory cache
uv run python run.py

Option 2: pip

git clone https://github.com/sligter/LandPPT.git
cd LandPPT

python -m venv venv
# Windows: venv\Scripts\activate
# macOS / Linux: source venv/bin/activate

pip install -e .
cp .env.example .env
# Edit .env with AI API keys

python run.py

Option 3: Docker single container

docker pull bradleylzh/landppt:latest

docker run -d \
  --name landppt \
  -p 8000:8000 \
  -v $(pwd)/.env:/app/.env \
  -v landppt_data:/app/data \
  -v landppt_uploads:/app/uploads \
  -v landppt_reports:/app/research_reports \
  -v landppt_cache:/app/temp \
  -v landppt_lib:/app/lib \
  bradleylzh/landppt:latest

docker logs -f landppt

Create and configure .env (at least one AI API key) before running.

Bundled docker-compose.yml starts landppt (Web) + worker + PostgreSQL + Valkey + MinIO (minio-init creates the bucket). Prefer plain python run.py for a lightweight local trial.

cp .env.example .env
# At minimum: AI keys, SECRET_KEY, POSTGRES_PASSWORD

docker compose up -d
docker compose logs -f landppt
  • App: http://localhost:8000 (override with LANDPPT_PORT)
  • MinIO console: http://localhost:9001
  • Production disables admin auto-bootstrap by default; set LANDPPT_BOOTSTRAP_ADMIN_ENABLED=true and admin credentials for first deploy
  • Default image bradleylzh/landppt:latest; override with LANDPPT_IMAGE

Option 5: Development (hot reload)

cp .env.example .env
docker compose -f docker-compose-dev.yaml up -d --build
docker compose -f docker-compose-dev.yaml logs -f landppt

Builds from the local Dockerfile, mounts sources, enables hot reload; bootstraps admin / admin123 by default.


Usage Guide

1. Access the service

Entry URL
Web UI http://localhost:8000
API docs http://localhost:8000/docs
Health http://localhost:8000/health

Local/dev often bootstraps admin / admin123 via LANDPPT_BOOTSTRAP_ADMIN_*. Always change or disable this in production.

2. Configure AI providers

In the settings UI or .env:

  • OpenAI API key (also works with DeepSeek, Moonshot, Qwen, and other OpenAI-compatible APIs)
  • Anthropic / Google API keys
  • Or local Ollama

3. Create a PPT project

  1. Requirements — topic, audience, page range, scenario template
  2. Outline — structured outline with visual editing
  3. Research (optional) — deep research for fresh context
  4. Images (optional) — local / web / AI generation
  5. Generate — HTML presentation from the outline

4. Edit & export

  • Sidebar AI chat for content and style; upload images as visual references
  • Speech scripts (DOCX / Markdown / PPT notes)
  • Per-slide narration: Edge-TTS or ComfyUI Qwen3-TD (reference audio supported)
  • Narrated MP4 (1080p, 30/60fps, optional subtitles)
  • Export PDF, HTML, standard PPTX, image-based PPTX, scripts, etc.
  • One-click public share (share page plays narration and subtitles)

5. Automation APIs

  • API-key auth for CI, scripts, n8n, custom backends
  • OpenAI-compatible: /v1/chat/completions, /v1/completions, /v1/models
  • Project-level export / share / speech endpoints for non-browser flows

Configuration

Full list: .env.example. Advanced options: src/landppt/core/config.py. Below is minimum runnable + production must-change only.

Minimum (local)

# At least one AI provider
DEFAULT_AI_PROVIDER=openai
OPENAI_API_KEY=your_openai_api_key_here
# or ANTHROPIC_API_KEY / GOOGLE_API_KEY / local Ollama

HOST=0.0.0.0
PORT=8000

# Local defaults (optional to set)
# DATABASE_URL=sqlite:///./landppt.db
# CACHE_BACKEND=memory

Production must-change

SECRET_KEY=replace-with-long-random-string
POSTGRES_PASSWORD=replace-with-strong-password   # Compose production stack

LANDPPT_BOOTSTRAP_ADMIN_ENABLED=false            # or true + custom credentials
# LANDPPT_BOOTSTRAP_ADMIN_USERNAME=...
# LANDPPT_BOOTSTRAP_ADMIN_PASSWORD=...

LANDPPT_API_KEY=replace-with-strong-random-key
# or multi-key: LANDPPT_API_KEYS=admin:prod-key,robot:n8n-key

# Production storage example
# DATABASE_URL=postgresql://landppt:password@localhost:5432/landppt
# CACHE_BACKEND=valkey
# VALKEY_URL=valkey://localhost:6379

Enable as needed

# Per-role model routing (cost control)
OUTLINE_MODEL_NAME=gpt-4o-mini
SLIDE_GENERATION_MODEL_NAME=gpt-4o
SPEECH_SCRIPT_MODEL_NAME=gpt-4o-mini

# Deep research
TAVILY_API_KEY=...
# SEARXNG_HOST=http://localhost:8888
# RESEARCH_PROVIDER=tavily   # tavily | searxng | both

# Image service (off by default)
ENABLE_IMAGE_SERVICE=true
PIXABAY_API_KEY=...
UNSPLASH_ACCESS_KEY=...
SILICONFLOW_API_KEY=...

# Standard editable PPTX (commercial license)
APRYSE_LICENSE_KEY=...

# Optional ComfyUI TTS
# COMFYUI_BASE_URL=http://127.0.0.1:8188
# COMFYUI_TTS_WORKFLOW_PATH=tests/Qwen3-TD-TTS.json

# Registration / OAuth / email / credits / Turnstile
# ENABLE_USER_REGISTRATION=true
# GITHUB_OAUTH_ENABLED=false
# ENABLE_CREDITS_SYSTEM=false

Notes:

  • Standard PPTX needs APRYSE_LICENSE_KEY. Image-based PPTX (/api/projects/{project_id}/export/pptx-images) does not; better for complex CSS/icons.
  • If images still point at localhost behind a reverse proxy, set BASE_URL in Web “Application Configuration”. See docs/base_url_configuration.md.
  • Narration video requires ffmpeg on the host/container.

FAQ

Q: Which AI models are supported?

OpenAI GPT (and compatible APIs), Anthropic Claude, Google Gemini, Azure OpenAI, Ollama local models, and more. Switch providers in the config UI.

Q: How do I enable images?

Set ENABLE_IMAGE_SERVICE=true and configure:

  • Pixabay: PIXABAY_API_KEY
  • Unsplash: UNSPLASH_ACCESS_KEY
  • AI generation: SILICONFLOW_API_KEY or POLLINATIONS_API_KEY, etc.

Without a correct BASE_URL, links may still use localhost:8000.

  1. Open https://your-domain.com/ai-config
  2. Application Configuration → Base URL
  3. Save

Q: How does research work?

Configure TAVILY_API_KEY or a SearXNG instance, then enable research when creating a project.

Q: Fully local deployment?

Yes—Docker or source install. Point inference at Ollama if you want no external LLM APIs (research / web images may still need network).

Q: Standard PPTX vs image-based PPTX?

Type Dependency Best for
Standard PPTX APRYSE_LICENSE_KEY Further editing in PowerPoint
Image-based PPTX No Apryse Visual fidelity of complex layouts; elements usually not editable

Use Share in the project editor, or POST /api/projects/{project_id}/share/generate. URL shape: /share/{share_token}. Disable via share/disable.

Q: Production vs development Compose?

  • Production: docker compose up -d (pre-built image + Web/Worker/Postgres/Valkey/MinIO)
  • Development: docker compose -f docker-compose-dev.yaml up -d --build (local build + hot reload)

Q: Narration providers?

Edge-TTS by default; optional ComfyUI Qwen3-TD with reference-audio upload.

Q: Does parallel generation hurt quality?

No. Parallelism only changes scheduling; per-slide quality is unchanged. Providers may still rate-limit concurrency.


Contributing

Issues, PRs, and docs improvements are welcome.

  1. Fork the repo
  2. Branch: git checkout -b feature/AmazingFeature
  3. Commit: git commit -m 'Add some AmazingFeature'
  4. Push and open a Pull Request

Bugs & ideas: Issues


License

Licensed under the Apache License 2.0.

Third-party components such as Apryse (used for standard PPTX export) have their own terms—ensure compliance before use.


Star History

Star History Chart


Contact


If this project helps you, please give it a !

Made with ❤️ by the LandPPT Team

S
Description
一个基于LLM的演示文稿生成平台,能够自动将文档内容转换为专业的PPT演示文稿。平台支持多种AI模型,提供丰富的模板和样式选择,让用户能够创建高质量的演示文稿。
Readme Apache-2.0 28 MiB
Languages
Python 45.3%
JavaScript 37.1%
HTML 15.3%
CSS 2%
Shell 0.2%