1. 项目简介

Presenton 是一款开源的 AI 演示文稿生成器和 API,被视为 Gamma、Canva、Beautiful AI、Decktopus 等商业产品的替代方案。它允许你完全自托管,无需 SaaS 锁定,完全掌控模型和数据。

核心特性:

  • 完全自托管:通过 Docker 包在 Web 中运行,或下载桌面应用(Mac、Windows、Linux)
  • 多模型支持:兼容 Ollama、LM Studio、OpenAI、Gemini、Vertex AI、Azure OpenAI、Amazon Bedrock、Fireworks、Together AI、Anthropic 或任何 OpenAI 兼容的提供商
  • AI 演示文稿生成 API:提供完整的 REST API
  • 完全开源:采用 Apache 2.0 许可证
  • 自定义模板:支持使用自己的设计/模板
  • 完全可编辑的 PPTX 导出:导出的 PowerPoint 文件完全可编辑

系统要求:

组件 要求
Docker(推荐) Docker Engine + Docker Compose 插件
桌面应用 Node.js (LTS)、npm、Python 3.11、uv
操作系统 Windows、macOS、Linux
磁盘空间 建议预留 5GB 以上(镜像约 2.5GB)

重要提示:Presenton 需要配置至少一个 LLM 提供商(如 OpenAI、Google、Ollama 等)才能正常生成演示文稿。

2. 部署方式概览

Presenton 提供三种主要部署方式:

部署方式 适用场景 优势
Docker 部署 推荐方式 一条命令启动,无需配置本地开发环境
Electron 桌面应用 离线使用/开发 原生应用体验,数据完全本地
源码构建 开发者 完全可控,便于定制

3. 方式一:Docker 部署(推荐)

这是最简单快捷的部署方式,适合大多数用户。

3.1 Linux / macOS 部署

打开终端,执行以下命令:

1
docker run -it --name presenton -p 5001:80 -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest

3.2 Windows 部署

打开 PowerShell,执行以下命令:

1
docker run -it --name presenton -p 5001:80 -v "${PWD}\app_data:/app_data" ghcr.io/presenton/presenton:latest

3.3 访问应用

容器启动后,在浏览器中访问:

text

1
http://localhost:5001

说明:你可以将 5001 替换为任意其他端口号来在不同的端口上运行 Presenton。如果使用 Docker Compose,可以设置 PRESENTON_HTTP_HOST_PORT,例如 PRESENTON_HTTP_HOST_PORT=8080 docker compose up production

3.4 使用 Docker Compose 部署

对于生产环境,推荐使用 Docker Compose 方式:

步骤 1:克隆仓库

1
2
git clone https://github.com/presenton/presenton.git
cd presenton

步骤 2:配置环境变量

docker-compose.yml 旁边创建 .env 文件,配置你的 LLM 提供商:

1
2
3
4
PRESENTON_HTTP_HOST_PORT=5001
LLM=openai
OPENAI_API_KEY=your_api_key_here
CAN_CHANGE_KEYS=false

步骤 3:启动服务

1
docker compose up --build --detach production

3.5 GPU 加速部署

如果你使用 Ollama 本地模型并希望启用 GPU 加速,需要先安装和配置 NVIDIA Container Toolkit。

安装完成后,使用 --gpus=all 参数启动:

1
2
3
4
5
6
7
8
docker run -it --name presenton --gpus=all -p 5001:80 \
-e LLM="ollama" \
-e OLLAMA_MODEL="llama3.2:3b" \
-e IMAGE_PROVIDER="pexels" \
-e PEXELS_API_KEY="*******" \
-e CAN_CHANGE_KEYS="false" \
-v "./app_data:/app_data" \
ghcr.io/presenton/presenton:latest

注意:GPU 加速可显著提升 Ollama 模型的性能,尤其是较大模型 。

4. 方式二:Electron 桌面应用部署

如果你偏好原生桌面应用体验,可以运行 Electron 版本。

4.1 前置要求

  • Node.js (LTS)
  • npm
  • Python 3.11
  • uv(用于共享 FastAPI 后端)

4.2 首次设置

1
2
cd electron
npm run setup:env

该命令会安装 Node 依赖、在 FastAPI 服务器中运行 uv sync、并安装 Next.js 依赖。

4.3 开发模式运行

1
npm run dev

该命令会编译 TypeScript 并启动 Electron,后端和 UI 在桌面窗口中本地运行。

4.4 构建安装包(可选)

创建 Windows、macOS 或 Linux 安装程序:

1
2
npm run build:all
npm run dist

输出文件写入 electron/dist 目录。

5. 方式三:源码构建部署

适合需要修改源码或深度定制的开发者。

5.1 前置要求

  • Git
  • Docker Engine
  • Docker Compose 插件

5.2 克隆并构建

1
2
3
4
5
6
7
8
9
# 克隆仓库
git clone https://github.com/presenton/presenton.git
cd presenton

# 可选:切换特定版本
git checkout TAG_OR_COMMIT

# 构建并启动
docker compose up --build --detach production

构建完成后,访问 http://localhost:5001

6. 关键配置说明

6.1 LLM 提供商配置

Presenton 支持多种 LLM 提供商,以下是常用配置示例:

使用 OpenAI:

1
2
3
4
5
6
7
docker run -it --name presenton -p 5001:80 \
-e LLM="openai" \
-e OPENAI_API_KEY="******" \
-e IMAGE_PROVIDER="dall-e-3" \
-e CAN_CHANGE_KEYS="false" \
-v "./app_data:/app_data" \
ghcr.io/presenton/presenton:latest

使用 Google Gemini:

1
2
3
4
5
6
7
docker run -it --name presenton -p 5001:80 \
-e LLM="google" \
-e GOOGLE_API_KEY="******" \
-e IMAGE_PROVIDER="gemini_flash" \
-e CAN_CHANGE_KEYS="false" \
-v "./app_data:/app_data" \
ghcr.io/presenton/presenton:latest

使用 Ollama(本地模型):

1
2
3
4
5
6
7
8
docker run -it --name presenton -p 5001:80 \
-e LLM="ollama" \
-e OLLAMA_MODEL="llama3.2:3b" \
-e IMAGE_PROVIDER="pexels" \
-e PEXELS_API_KEY="*******" \
-e CAN_CHANGE_KEYS="false" \
-v "./app_data:/app_data" \
ghcr.io/presenton/presenton:latest

使用 OpenAI 兼容 API:

1
2
3
4
5
6
7
8
9
10
docker run -it -p 5001:80 \
-e CAN_CHANGE_KEYS="false" \
-e LLM="custom" \
-e CUSTOM_LLM_URL="http://*****" \
-e CUSTOM_LLM_API_KEY="*****" \
-e CUSTOM_MODEL="llama3.2:3b" \
-e IMAGE_PROVIDER="pexels" \
-e PEXELS_API_KEY="********" \
-v "./app_data:/app_data" \
ghcr.io/presenton/presenton:latest

6.2 图像生成提供商配置

提供商 环境变量 说明
Pexels PEXELS_API_KEY 免费库存图片
Pixabay PIXABAY_API_KEY 免费库存图片
DALL-E 3 OPENAI_API_KEY OpenAI 图像生成
Gemini Flash GOOGLE_API_KEY Google 图像生成
ComfyUI COMFYUI_URL / COMFYUI_WORKFLOW 自托管 ComfyUI
OpenAI 兼容 OPENAI_COMPAT_IMAGE_BASE_URL 任意 OpenAI 兼容端点

6.3 多用户认证配置

Presenton 支持多用户工作区,每个用户拥有私有空间。首次安装时,第一个账户成为主管理员。

无人值守部署时创建管理员:

1
2
3
4
5
6
docker run -it --name presenton \
-p 5001:80 \
-e AUTH_USERNAME=admin \
-e AUTH_PASSWORD=change-this-password \
-v "./app_data:/app_data" \
ghcr.io/presenton/presenton:latest

说明:用户名至少 3 个字符,新密码至少 8 个字符 。

凭证轮换:

1
2
3
4
5
6
7
8
9
docker stop presenton
docker rm presenton
docker run -it --name presenton \
-p 5001:80 \
-e AUTH_USERNAME=admin \
-e AUTH_PASSWORD=new-secure-password \
-e AUTH_OVERRIDE_FROM_ENV=true \
-v "./app_data:/app_data" \
ghcr.io/presenton/presenton:latest

账户恢复:

使用 RESET_AUTH=true 替代 AUTH_OVERRIDE_FROM_ENV=true 来恢复对现有主管理员的访问权限。

7. API 使用指南

Presenton 提供完整的 REST API,可用于自动化生成演示文稿。

7.1 生成演示文稿

端点POST /api/v1/ppt/presentation/generate

认证:管理员在 Admin → API keys 创建访问密钥后,在请求头中发送 Authorization: Bearer YOUR_KEY

请求示例:

1
2
3
4
5
6
7
8
9
10
11
curl \
-X POST http://localhost:5001/api/v1/ppt/presentation/generate \
-H "Authorization: Bearer sk-presenton-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Introduction to Machine Learning",
"n_slides": 5,
"language": "English",
"template": "general",
"export_as": "pptx"
}'

响应示例:

1
2
3
4
5
{
"presentation_id": "d3000f96-096c-4768-b67b-e99aed029b57",
"path": "/app_data/d3000f96-096c-4768-b67b-e99aed029b57/Introduction_to_Machine_Learning.pptx",
"edit_path": "/presentation?id=d3000f96-096c-4768-b67b-e99aed029b57"
}

7.2 MCP 集成

Presenton 暴露符合 MCP 2025-11-25 标准的 Streamable HTTP 端点:/mcp

配置示例(VS Code .vscode/mcp.json):

1
2
3
4
5
6
7
8
9
10
11
12
{
"servers": {
"presenton": {
"url": "http://localhost:5001/mcp",
"type": "http",
"headers": {
"Authorization": "Bearer sk-presenton-0123456789abcdef.REPLACE_WITH_SECRET"
}
}
},
"inputs": []
}

注意:MCP 在 Electron 桌面应用中不可用(PRESENTON_ELECTRON=true)。

8. 更新与维护

8.1 更新 Docker 部署

1
2
3
4
5
6
7
8
9
# 拉取新镜像
docker pull ghcr.io/presenton/presenton:latest

# 停止并移除旧容器
docker stop presenton
docker rm presenton

# 使用相同的卷和环境选项重新运行
docker run -it --name presenton -p 5001:80 -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest

8.2 数据持久化

./app_data 目录包含所有持久化数据,包括:

  • 生成的演示文稿
  • 用户配置
  • 数据库(SQLite)

重要:不要删除认证字段以重置访问。Presenton 在 app_data/userConfig.json 中存储了主管理员凭证的哈希恢复副本和会话签名密钥。

9. 常见问题与解决方案

9.1 容器启动失败

问题:Docker 容器无法启动。

解决方案

  • 确认 Docker 已正确安装并运行
  • 检查端口 5001 是否被占用
  • 确认镜像拉取成功

9.2 演示文稿生成失败

问题:API 调用返回错误或生成超时。

解决方案

  • 确认已配置至少一个 LLM 提供商
  • 检查 API Key 是否有效
  • 查看容器日志:docker logs presenton

9.3 Ollama 连接问题

问题:Docker 容器内无法连接到宿主机的 Ollama。

解决方案

  • 使用 host.docker.internal 替代 localhost
  • 或配置 OLLAMA_URL=http://host.docker.internal:11434
  • Linux 用户可能需要使用宿主机的实际 IP 地址

9.4 GPU 加速不生效

问题:Ollama 模型运行速度慢,GPU 未使用。

解决方案

  • 确认已安装 NVIDIA Container Toolkit
  • 使用 --gpus=all 参数启动容器
  • 验证 GPU 在容器内可见:docker run --gpus=all nvidia/cuda nvidia-smi

9.5 导出 PPTX 失败

问题:生成的演示文稿无法导出为 PPTX。

解决方案

  • 确认磁盘空间充足
  • 检查 app_data 目录权限
  • 尝试导出为 PDF 格式

10. 部署架构总结

部署方式 适用场景 启动命令 特点
Docker(单容器) 快速体验 docker run ... 一条命令启动
Docker Compose 生产环境 docker compose up production 配置文件管理
Docker + GPU 本地模型加速 --gpus=all GPU 加速推理
Electron 桌面 离线使用 npm run dev 原生应用体验
源码构建 开发者 docker compose up --build 完全可控

Presenton 作为一款开源的 AI 演示文稿生成器,通过 Docker 可以快速完成部署。对于大多数用户,推荐使用 Docker 单容器方式,配置好 LLM 提供商后即可开始生成演示文稿。如果需要生产环境部署,建议使用 Docker Compose 配合 .env 文件管理配置。对于需要离线使用的场景,Electron 桌面应用是理想选择。部署完成后,你可以通过 Web 界面、REST API 或 MCP 协议与 Presenton 交互,生成完全可编辑的 PowerPoint 演示文稿。