英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。
开源 AI 演示文稿生成器和 API(Gamma、Canva、Beautiful AI、Decktopus、Presentations AI 替代方案)
探索 Presenton 的功能,从 AI 驱动的演示文稿生成到编辑、导出以及灵活的模型提供商。
✨ 为什么选择 Presenton
无 SaaS 锁定 · 无强制订阅 · 完全控制模型和数据
是什么让 Presenton 与众不同?
- 通过 Docker 套件 在网页中完全自托管使用
- 或者下载 桌面应用(Mac、Windows 和 Linux)
- 可与 Ollama、LM Studio、OpenAI、Gemini、Vertex AI、Azure OpenAI、Amazon Bedrock、Fireworks、Together AI、Anthropic 或任何其他兼容 OpenAI 的提供商配合使用
- 附带 AI 演示文稿生成 API
- 完全开源(Apache 2.0)
- 支持您自己的设计/模板
- 完全可编辑的 PPTX 导出
[!提示]
给我们点亮⭐吧! 一个 ⭐ 展示您的支持,并鼓励我们继续开发!😇
#
🎛 功能
可以根据提示、上传的文档或您自己的 PowerPoint 设计创建演示文稿。可从内置模板中选择,使用您首选的 AI 提供商和 API 密钥,通过拖拽编辑界面手动完善,并导出完全可编辑的演示文稿。
#
🎨 内置 AI PowerPoint 演示模板
浏览用于投资展示、商业报告、高管更新、教育演示等的内置 AI 演示模板。预览每个可编辑的幻灯片布局,选择设计,并使用 Presenton 从提示或文档生成可完全编辑的 PowerPoint(.pptx)或 PDF 演示文稿。
|
Momentum 商业演示模板 — 销售报告、战略演示文稿和数据故事 预览 Momentum 商业模板 ↗ |
动态创意展示模板 — 提案、视觉故事和高冲击力演示文稿 预览动态演示模板 ↗ |
高管PowerPoint模板 — 领导层更新、战略计划和可决策报告 预览行政PPT模板 ↗ |
|
通用演示模板 — 适用于商业、教育及日常主题的可调整布局 预览通用演示模板 ↗ |
现代融资演示模板 — 面向初创公司、产品和作品集的当代幻灯片 预览现代演示文稿模板 ↗ |
标准商务演示模板 — 专业报告、提案和公司演示文稿 预览标准商业模板 ↗ |
浏览所有免费的 AI 演示模板 → · 从您的 PPTX 创建一个 AI 准备的 PowerPoint 模板 →
#
💻 Presenton 桌面版
使用您自己的模型提供商(BYOK)创建 AI 驱动的演示文稿,或在您自己的机器上本地运行所有内容以实现完全控制和数据隐私。
可用平台
| 平台 | 架构 | 封装 | 下载 |
|---|---|---|---|
| macOS | 苹果硅 / 英特尔 | .dmg |
下载 ↗ |
| Windows | x64 | .exe |
下载 ↗ |
| Linux | x64 | .deb |
下载 ↗ |
部署到云服务提供商
#
Presenton 让您完全控制 AI 演示文稿工作流程。选择您的模型,自定义体验,保持数据私密。
- 自定义模板和主题 — 使用 HTML 和 Tailwind CSS 创建无限演示文稿设计。
- AI 模板生成 — 从现有 PowerPoint 文档创建演示模板。
- 灵活生成 — 从提示或上传的文档构建演示文稿。
- 导出准备就绪 — 以专业格式保存为 PowerPoint (PPTX) 和 PDF。
- 内置 MCP 服务器 — 通过模型上下文协议生成演示文稿。
- 自带密钥 — 使用您自己的 OpenAI、Google Gemini、Vertex AI、Azure OpenAI、Anthropic Claude 或任何兼容提供商的 API 密钥。只为实际使用付费,无隐藏费用或订阅。
- Ollama 集成 — 在本地运行开源模型,完全隐私。
- 兼容 OpenAI API — 使用您自己的模型连接任何 OpenAI 兼容端点。
- 多提供商支持 — 混合使用文本和图像生成提供商。
- 多功能图像生成 — 从 GPT Image 2、Gemini Flash、Pexels 或 Pixabay 中选择。
- 丰富的媒体支持 — 图标、图表和自定义图形,用于专业演示文稿。
- 本地运行 — 所有处理均在您的设备上完成,无需依赖云端。
- API 部署 — 为您的团队托管自己的 API 服务。
- 多用户工作区 — 为每个用户提供私人工作区,并通过内置管理面板管理账户。
- 完全开源 — Apache 2.0 许可,可查看、修改和贡献。
- Docker 就绪 — 一条命令部署,支持本地模型 GPU。
- Electron 桌面应用 — 在 Windows、macOS 和 Linux 上将 Presenton 作为原生桌面应用运行(无需浏览器)。
- 使用 ChatGPT 登录 — 使用您的免费或付费 ChatGPT 账号登录,立即开始创建演示文稿 — 无需单独的 API 密钥。
#
☁️ Presenton 云端
直接在浏览器中运行 Presenton——无需安装,无需设置。随时随地立即开始创建演示文稿。
#
🏢 Presenton 企业版
使用针对 Kubernetes 的版本化 Helm 图表、详细的审计日志和集中式管理控制台,在整个组织中部署和管理 Presenton。企业认证支持通过 OAuth、OIDC 和 SCIM 的单点登录 (SSO) 及自动用户配置。
#
⚡ 运行 Presenton
您可以通过两种方式运行 Presenton: Docker,通过一条命令设置,无需安装本地开发环境, 堆栈,或使用 Electron 桌面应用,以获得本地应用体验(适合开发或离线使用)。
选项 1:Electron(桌面应用)
将 Presenton 作为本地桌面应用运行。LLM 和图像提供者(API 密钥等)可以在应用中配置。在运行捆绑的后端时,Docker 使用的相同环境变量同样适用。
先决条件: Node.js(LTS)、npm、Python 3.11,以及
uv
(用于 servers/fastapi 中的共享 FastAPI 后端)。
-
首次设置
cd electron npm run setup:env这将安装 Node 依赖项,在 FastAPI 服务器中运行
uv sync,并安装 Next.js 依赖项。 -
在开发中运行
npm run dev这会编译 TypeScript 并启动 Electron。后端和用户界面在桌面窗口内本地运行。
-
构建可分发版本(可选) 要为 Windows、macOS 或 Linux 创建安装程序:
npm 运行 build:all npm run dist输出文件会写入
electron/dist(或根据您的electron-builder设置进行配置)。对于 Mac App Store 之外的公共 macOS DMG,在完成
docs/macos/dev/direct-distribution.md中的一次性开发者 ID 和公证设置后,从electron/使用APPLE_KEYCHAIN_PROFILE="presenton-notary" npm run build:all:mac:signed。
选项 2:Docker
-
在 Linux/MacOS (Bash/Zsh Shell) 启动 Presenton:
docker run -it --name presenton -p 5001:80 -v "./app_data:/app_data" ghcr.io/presenton/presenton:latestWindows (PowerShell):
docker run -it --name presenton -p 5001:80 -v "${PWD}\app_data:/app_data" ghcr.io/presenton/presenton:latest -
打开 Presenton
在你选择的浏览器中打开 http://localhost:5001 来使用 Presenton。
注意: 您可以将
5001替换为其他任意端口 以选择的端口号在不同端口上运行 Presenton。如果您使用 Docker Compose,请设置PRESENTON_HTTP_HOST_PORT,例如PRESENTON_HTTP_HOST_PORT=8080 docker compose up production.
#
⚙️ 部署配置
下表对应于此仓库 docker-compose.yml 中转发的环境变量(production、production-gpu、development 和 development-gpu)。将值放入位于 compose 文件旁边的 .env 文件中,或者在执行 docker compose up 之前导出它们。Electron 应用后端在 Docker 外部运行时也可以读取相同的名称。
代码中还有其他可选变量(例如高级 Mem0 路径、LiteParse 运行器,或当 Next.js 和 FastAPI 不同源时的 FAST_API_INTERNAL_URL);它们 未 在 docker-compose.yml 中连接。支持的名称可以从 servers/fastapi/utils/get_env.py 和 servers/nextjs/ 下的 Next.js 服务器实用工具中发现。
隔离部署
社区画廊默认启用,并从 Presenton 社区服务读取演示设计。隔离部署必须禁用它:
PRESENTON_COMMUNITY_ENABLED=false
对于 Docker Compose,在启动 Presenton 之前,将该值添加到与 docker-compose.yml 同目录下的 .env 文件中。对于 docker run,请传递 -e PRESENTON_COMMUNITY_ENABLED=false。这会从 UI 中移除 Community,并防止后端发送 Community 画廊或设计参考请求。
大型语言模型和 API 密钥
提供者设置由账户角色管理:管理员可以查看和更新共享密钥,而普通用户仅能接收已编辑的运行时配置。旧版 CAN_CHANGE_KEYS 变量已被忽略,可从现有部署中删除。缺少提供者配置时,登录状态和初始账户设置仍可用,以便管理员在设置中完成配置。
| 变量 | 值 / 默认值 | 目的 |
|---|---|---|
| PRESENTON_PUBLIC_URL | 可选 URL | 浏览器可访问的 Presenton 来源,例如 http://localhost:5001 或 https://slides.example.com。生成的下载、编辑和预览链接使用此来源。 |
| PRESENTATION_GENERATION_MODE | both(默认),standard,smart |
控制 UI 和 MCP 服务器中可用的模式。单模式值会隐藏选择器;smart 还会隐藏模板功能。请参阅 演示文稿生成模式指南。 |
| PRESENTON_COMMUNITY_ENABLED | true(默认), false |
控制基于云的社区图库和设计参考。对于隔离部署,将其设置为 false 以隐藏该功能并防止社区 API 请求。 |
| LLM(大型语言模型) | openai,deepseek,google,vertex,azure,bedrock,openrouter,fireworks,together,cerebras,anthropic,litellm,lmstudio,ollama,custom,codex |
选择文本 LLM 提供商。 |
| OPENAI_API_KEY | LLM=openai 时必需 |
OpenAI API 密钥。 |
| OPENAI_MODEL | gpt-4.1(默认) |
OpenAI 模型。 |
| DEEPSEEK_API_KEY | 使用 LLM=deepseek 时必需 |
DeepSeek API 密钥。 |
| DEEPSEEK_MODEL | deepseek-chat(默认) |
DeepSeek 模型。 |
| DEEPSEEK_BASE_URL | https://api.deepseek.com(默认) |
DeepSeek 基础 URL。 |
| GOOGLE_API_KEY | LLM=google 时必需 |
Google API 密钥。 |
| GOOGLE_MODEL | models/gemini-2.0-flash(默认) |
谷歌模型。 |
| VERTEX_MODEL | gemini-2.5-flash(默认) |
Vertex AI 模型。 |
| VERTEX_API_KEY | 可选 | Vertex Express API 密钥认证。 |
| VERTEX_PROJECT / VERTEX_LOCATION | 可选组合 | GCP 项目凭证认证;不要与 VERTEX_API_KEY 结合使用。 |
| VERTEX_BASE_URL | 可选URL | 顶点网关或基础URL覆盖。 |
| AZURE_OPENAI_MODEL | 对于 LLM=azure 是必需的 |
Azure 部署或模型名称。 |
| AZURE_OPENAI_API_KEY | 在使用 LLM=azure 时必填 |
Azure OpenAI API 密钥。 |
| AZURE_OPENAI_API_VERSION | 必填;例如 2024-10-21 |
Azure OpenAI API 版本。 |
| AZURE_OPENAI_ENDPOINT / AZURE_OPENAI_BASE_URL | 至少一个必需品 | Azure OpenAI 端点。 |
| AZURE_OPENAI_DEPLOYMENT | 可选 | Azure 部署覆盖。 |
| BEDROCK_REGION | us-east-1(默认) |
AWS Bedrock 区域。 |
| BEDROCK_MODEL | 在 LLM=bedrock 时必填 |
标准模型 ID 或完整推理配置 ARN,作为 modelId 传递给 Bedrock Converse。详见 Amazon Bedrock 指南。 |
| BEDROCK_API_KEY | 可选 | Bedrock API密钥认证;AWS密钥的替代方案。 |
| BEDROCK_AWS_ACCESS_KEY_ID / BEDROCK_AWS_SECRET_ACCESS_KEY | 当 BEDROCK_API_KEY 未设置时需要同时填写 |
用于 Bedrock 的 AWS 凭证认证。 |
| BEDROCK_AWS_SESSION_TOKEN | 可选 | AWS 会话令牌。 |
| BEDROCK_PROFILE_NAME | 可选 | AWS 配置文件名称。 |
| OPENROUTER_API_KEY | 在 LLM=openrouter 时必填 |
OpenRouter API 密钥。 |
| OPENROUTER_MODEL | openai/gpt-4o(默认) |
OpenRouter 模型。 |
| OPENROUTER_BASE_URL | https://openrouter.ai/api/v1(默认) |
OpenRouter 基础 URL。 |
| OPENROUTER_PROVIDER_ORDER | 可选的逗号分隔列表 | 提供者路由顺序。 |
| OPENROUTER_ALLOW_FALLBACKS | true / false |
可选的提供者回退覆盖。 |
| OPENROUTER_REQUIRE_PARAMETERS | true / false |
仅路由到支持所有请求参数的提供者。 |
| OPENROUTER_DATA_COLLECTION | allow / deny |
可选的数据收集策略。 |
| OPENROUTER_ZDR | true / false |
可选的零数据保留要求。 |
| FIREWORKS_API_KEY | 在 LLM=fireworks 时必填 |
Fireworks API 密钥。 |
| FIREWORKS_MODEL | 例如 accounts/fireworks/models/llama-v3p1-8b-instruct |
Fireworks 模型。 |
| FIREWORKS_BASE_URL | https://api.fireworks.ai/inference/v1(默认) |
Fireworks 基础 URL。 |
| TOGETHER_API_KEY | 在 LLM=together 时必填 |
Together AI API 密钥。 |
| TOGETHER_MODEL | 例如 openai/gpt-oss-20b |
Together AI 模型。 |
| TOGETHER_BASE_URL | https://api.together.ai/v1(默认) |
Together AI 基础 URL。 |
| CEREBRAS_API_KEY | 在 LLM=cerebras 时必填 |
Cerebras API 密钥。 |
| CEREBRAS_MODEL | llama-3.3-70b(默认) |
Cerebras 模型。 |
| CEREBRAS_BASE_URL | https://api.cerebras.ai/v1(默认) |
Cerebras 基础 URL。 |
| ANTHROPIC_API_KEY | 使用 LLM=anthropic 时必需 |
Anthropic API 密钥。 |
| ANTHROPIC_MODEL | claude-3-5-sonnet-20241022(默认) |
人类学模型。 |
| CODEX_MODEL | 对于 LLM=codex 是必需的 |
Codex 模型。OAuth 流程将其回调映射到主机端口 1455。 |
| CUSTOM_LLM_URL | LLM=custom 时必需 |
兼容 OpenAI 的基础 URL。服务器必须实现 POST /v1/chat/completions;仅提供特定提供商的完成端点是不够的。 |
| CUSTOM_LLM_API_KEY | 依赖提供者 | 自定义提供者API密钥。 |
| CUSTOM_MODEL | LLM=custom 时必需 |
自定义提供者模型ID。 |
| LITELLM_BASE_URL | LLM=litellm 时必需 |
LiteLLM 代理或网关的基础 URL。 |
| LITELLM_API_KEY | 可选 | LiteLLM API 密钥。 |
| LITELLM_MODEL | gpt-4.1(默认) |
LiteLLM 模型。 |
| LMSTUDIO_BASE_URL | http://localhost:1234/v1(默认) |
LM Studio 基础 URL;当省略时会自动附加 /v1。 |
| LMSTUDIO_API_KEY | 可选 | LM Studio API 密钥。 |
| LMSTUDIO_MODEL | 例如 openai/gpt-oss-20b |
LM Studio 模型。 |
| DISABLE_THINKING | true / false |
禁用支持此功能的提供者的思考,包括 DeepSeek。 |
| WEB_GROUNDING | true / false |
默认启用网页搜索。 |
| WEB_SEARCH_PROVIDER | auto, native, searxng, tavily, exa |
选择搜索模式。auto 对 OpenAI、Google 和 Anthropic 使用本地搜索,否则不启用搜索,除非选择了外部提供者。 |
| WEB_SEARCH_MAX_RESULTS | 5(默认),最大 10 |
添加到模型上下文的最大外部搜索结果数量。 |
| SEARXNG_BASE_URL | 可选网址 | 自托管的SearXNG基础网址。 |
| TAVILY_API_KEY, EXA_API_KEY | 可选 | 托管搜索提供商的凭证。 |
| EXTENDED_REASONING | true / false |
在支持的情况下启用扩展推理。 |
| LLM_GENERATION_PROFILE | fast, balanced(默认), deep, model_max |
全局生成配置档。 |
| LLM_MAX_OUTPUT_TOKENS | 可选正整数 | 对每个文本提供者的输出令牌数进行覆盖。 |
| MAX_OUTLINE_WORDS | 100(默认),正整数 |
每个生成、编辑或 slides_markdown 幻灯片大纲的最大词数。 |
| LLM_REASONING_MODE | auto, enabled, disabled |
全局推理模式覆盖选项。 |
| LLM_REASONING_EFFORT | default, none, minimal, low, medium, high, xhigh, max |
推理努力级别覆盖。 |
| LLM_REASONING_BUDGET_TOKENS | 可选非负整数 | 推理令牌预算。 |
所有高级文本提供程序设置都是可选的。使用设置或入门中的重置高级设置可以移除覆盖并继承应用程序/提供程序的默认值。
奥拉马
当LLM为ollama时使用:
| 变量 | 值 / 默认 | 目的 |
|---|---|---|
| OLLAMA_URL | 例如 http://host.docker.internal:11434 在 Docker 中 |
Ollama HTTP API 基础 URL。 |
| OLLAMA_MODEL | 例如 llama3.2:3b |
Ollama 模型名称。 |
| START_OLLAMA | false(默认),true |
允许容器入口点 (start.js) 安装 Ollama 并运行 ollama serve。 |
演示内存(Mem0 OSS)
Mem0 使用本地 Qdrant SQLite(OSS);内存作用域为每个演示。
默认情况下,Docker 运行时现在将 Mem0 指向本地 Ollama 兼容的 LLM 端点,因此不再需要 OpenAI 密钥即可初始化。如果您想改用 OpenAI,请将 MEM0_LLM_BASE_URL/MEM0_LLM_API_KEY 设置为您的 OpenAI 兼容端点和密钥。Docker 镜像在构建过程中安装默认的 spaCy 模型(en_core_web_sm),因此 Mem0 可以在每次运行时无需额外设置即可启动。
| 变量 | 目的 |
|---|---|
| MEM0_ENABLED | true/false(默认设置 true)。 |
| MEM0_LLM_MODEL | Mem0 LLM 模型名称(默认设置 llama3.1:latest 或 OLLAMA_MODEL)。 |
| MEM0_LLM_API_KEY | Mem0 LLM API 密钥占位符,适用于 OpenAI 兼容客户端(默认设置 ollama)。 |
| MEM0_LLM_BASE_URL | Mem0 LLM 基础 URL(默认设置 OLLAMA_URL 或 http://host.docker.internal:11434)。 |
| MEM0_DIR | 根目录(默认设置 /app_data/mem0)。 |
| MEM0_EMBEDDER_PROVIDER | 嵌入器后端(默认设置 fastembed)。 |
| MEM0_EMBEDDER_MODEL | 模型 ID(默认设置 BAAI/bge-small-en-v1.5)。 |
| MEM0_EMBEDDING_DIMS | 向量维度(默认设置 384)。 |
| MEM0_SPACY_MODEL | 可选的 spaCy 模型覆盖(默认 en_core_web_sm)。 |
| MEM0_REQUIRE_SPACY_MODEL | 保持 true(默认)。仅在你有意让 Mem0 在没有 spaCy 词形还原的情况下运行时设置为 false。 |
文档解析(LiteParse)
| 变量 | 目的 |
|---|---|
| LITEPARSE_DPI | OCR 渲染 DPI(compose 默认 120)。 |
| LITEPARSE_NUM_WORKERS | 工作线程数(compose 默认 1)。 |
数据库
| 变量 | 值 / 默认 | 用途 |
|---|---|---|
| DATABASE_URL | 可选的 SQLAlchemy URL | 配置数据库;如果未设置,应用将在应用数据目录下使用 SQLite。 |
| MIGRATE_DATABASE_ON_STARTUP | true(默认)、false |
在启动时运行数据库迁移。仅当迁移由外部管理时设置为 false。 |
图像生成
这些变量与 docker-compose.yml 相匹配。IMAGE_PROVIDER 选择后端(pexels、pixabay、gemini_flash、nanobanana_pro、gpt-image-2、gpt-image-1.5、comfyui、open_webui)。在 OpenAI 图像模式下使用 OPENAI_API_KEY,在 Gemini 图像模式下使用 GOOGLE_API_KEY(与 LLM 部分使用相同的密钥)。
| 变量 | 值 / 默认 | 目的 |
|---|---|---|
| DISABLE_IMAGE_GENERATION | true / false |
禁用幻灯片图像生成。 |
| ENABLE_PARALLEL_IMAGE_GENERATION | true(默认)、false |
允许并行图像提供请求。对于严格速率限制的提供商请设置为 false。 |
| IMAGE_PROVIDER | pexels、pixabay、gemini_flash、nanobanana_pro、gpt-image-2、gpt-image-1.5、comfyui、open_webui、openai_compatible |
选择图像后端。 |
| PEXELS_API_KEY | 当 IMAGE_PROVIDER=pexels 时必填 |
Pexels 股票图像 API 密钥。 |
| PIXABAY_API_KEY | 当 IMAGE_PROVIDER=pixabay 时必填 |
Pixabay 股票图像 API 密钥。 |
| GPT_IMAGE_2_QUALITY | low、medium(默认)、high |
GPT Image 2 图像质量。 |
| GPT_IMAGE_1_5_QUALITY | low、medium(默认)、high |
GPT Image 1.5 图像质量。 |
| COMFYUI_URL / COMFYUI_WORKFLOW | 当 IMAGE_PROVIDER=comfyui 时必填 |
自托管 ComfyUI 端点和工作流 JSON。 |
| OPEN_WEBUI_IMAGE_URL / OPEN_WEBUI_IMAGE_API_KEY | 当 IMAGE_PROVIDER=open_webui 时必填 |
Open WebUI API 根地址(http://host:8080/api/v1;若只提供主机,则自动附加 /api/v1)和 API 密钥。 |
| OPENAI_COMPAT_IMAGE_BASE_URL / OPENAI_COMPAT_IMAGE_API_KEY / OPENAI_COMPAT_IMAGE_MODEL | 当 IMAGE_PROVIDER=openai_compatible 时必填 |
将图像请求发送至 OpenAI 兼容的 /v1/images/* 端点,例如 LiteLLM、Azure 或 vLLM 网关。 |
现有 IMAGE_PROVIDER=dall-e-3 配置会自动迁移到 gpt-image-2。旧版 standard 质量映射为 medium,hd 映射为 high。设置 GPT_IMAGE_2_QUALITY 可选择其他质量。
并行图像生成选项适用于所有图像生成场景:初始演示生成、幻灯片编辑与再生、直接图像请求,以及助手图像工具。
遥测
| 变量 | 值 / 默认 | 用途 |
|---|---|---|
| DISABLE_ANONYMOUS_TRACKING | true / false |
设置为 true 以禁用匿名遥测。 |
多用户身份验证
Presenton 支持多个账户,每个用户都有一个私人工作区。第一个账户将成为主要管理员,并可以通过 Admin → Users 创建、重置或删除其他账户。
现有的单用户安装将自动升级:当前账户将成为主要管理员,其演示文稿、模板、任务以及其他拥有的数据将继续挂载在同一账户下。
设置主要管理员
在新安装中,打开 Presenton 并按照账户设置界面操作。对于无人值守的 Docker 部署,您可以在首次启动时通过环境变量创建主要管理员:
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个字符。升级后,原有的六位或七位字符密码仍然有效。
身份验证环境变量
| 变量 | 目的 |
|---|---|
| AUTH_USERNAME | 在首次启动时用于创建主管理员的用户名。它也可以在轮换或恢复过程中更改用户名。 |
| AUTH_PASSWORD | 用于首次设置、轮换或恢复的密码。使用下面任一标志时需要提供此密码。 |
| AUTH_OVERRIDE_FROM_ENV=[true/false] | 在下次启动时从环境中替换主管理员凭据。用于部署管理的凭据轮换。 |
| RESET_AUTH=[true/false] | 在不替换帐户或其数据的情况下恢复对现有主管理员的访问权限。 |
Presenton 云提供商
Presenton 云是一个可选的、适用于整个安装的生成提供商。它不是本地自托管实例的认证方法。请先创建或登录本地管理员帐户,然后通过提供商入驻连接 Presenton。
只有本地管理员可以连接、替换或断开提供商。浏览器会显示一个短设备代码并打开托管的 Presenton 批准页面。批准后,委托访问权限和轮换刷新令牌会被加密存储,并作为一个全局提供商凭据存储;它们不会返回浏览器,也不会按本地用户存储。
选择 Presenton 作为文本提供商会保存 LLM=presenton。演示生成和文档上传随后使用 Presenton 云 API 及其令牌。单独连接提供商不会更改生成:当选择其他提供商时,现有本地生成管道保持不变。断开连接会撤销并删除全局凭据,并取消选择 Presenton。
无需任何 OAuth 客户端注册、客户端密钥或环境配置。官方构建包含云 URL 和第一方公钥设备流客户端 ID。
从环境中轮换凭据的方法:
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
要进行账户恢复,请使用相同的命令,但将 AUTH_OVERRIDE_FROM_ENV=true 替换为 RESET_AUTH=true。这两种操作都会保留管理员的用户 ID 和所拥有的数据,并使现有的浏览器会话和 API 密钥失效。在成功启动后,移除一次性标志。
[!重要]
不要从app_data/userConfig.json中删除身份验证字段来重置访问权限。Presenton 会在此处存储主要管理员凭据和会话签名密钥的哈希恢复副本。使用上面的恢复变量可以保留数据库账户及其所有权关联。
要注销,请打开 设置 → 其他 → 注销。
API 和 MCP 身份验证
Presenton 在 /mcp 提供一个客户端中立的 MCP 2025-11-25 可流式 HTTP 端点。当启用身份验证时,REST API 和 MCP 客户端使用相同的管理员配置、用户范围的 API 密钥。浏览器 JWT cookie 不被作为 MCP 凭证接受。
-
管理员创建目标 Presenton 用户,然后从经过身份验证的管理员会话调用
POST /api/v1/admin/api-keys,内容为{"user_id":"...","label":"My API client","expiry_days":90}。响应中包含新密钥。列出和撤销使用GET /api/v1/admin/api-keys和POST /api/v1/admin/api-keys/{api_key_id}/revoke。管理员可以通过GET /api/v1/admin/api-keys/{api_key_id}/token安全地再次显示密钥。 -
配置任意可流式 HTTP MCP 客户端,在每次请求中发送生成的
sk-presenton-...密钥:
{
"servers": {
"presenton": {
"url": "http://localhost:5001/mcp",
"type": "http",
"headers": {
"Authorization": "Bearer sk-presenton-0123456789abcdef.REPLACE_WITH_SECRET"
}
}
},
"inputs": []
}
笔记:
- 此示例使用 VS Code 的
.vscode/mcp.json格式。在 Open WebUI 或任何其他兼容 MCP 客户端中,请使用等效的 Streamable HTTP 和 bearer-header 配置。 - API 密钥保留 Argon2 身份验证哈希以及仅管理员可恢复的加密副本。默认情况下,它们在 90 天后过期,并且完全代表所选的 Presenton 用户。相同的密钥可用于身份验证通用 REST 端点和 MCP,但不能用于浏览器登录或更改管理员/提供者设置。
- API 密钥在 MCP 进程中被交换为短期内部用户会话。长期密钥从未被转发至演示 API。
- 通过管理员 API 撤销密钥会立即生效。
- 标准、智能模式和模板生成工具返回一个异步任务 ID。轮询
get_job_status直到completed或error;模板列表操作是即时的。 - MCP 只公开轮询的智能工作流(
start_smart_presentation后跟get_job_status),因此标准和智能生成使用相同的任务模型。 upload_template_assets在一次调用中接受一个 PPTX 及其替换字体,然后返回start_template_generation所需的数据。upload_files接受引用文档和图像的 base64 编码,并返回可直接传递给标准或智能生成的用户范围路径。- 在 Electron 桌面应用中(
PRESENTON_ELECTRON=true)无法访问外部 REST API 和 MCP。其本地 HTTP 服务器是内部应用服务。Electron 默认无需账户登录,并在每次启动时为其自身应用和导出请求提供生成的私有凭证;匿名本地客户端无法访问这些服务。MCP 服务器在此处保持禁用状态。 - 只有资产子目录通过
/app_data提供服务;配置、数据库和日志绝不会作为 Web 资源访问。文档预览阅读器接受允许的资产/临时目录下的.txt文档文件,并会拒绝导出任务 JSON 和私有应用文件。
注意:上述 LLM 和图像变量在
.env设置时会从docker-compose.yml转发。
按提供者分类的 Docker 运行示例
与 compose 相同的变量;直接运行 docker run 时使用 -e 而不是 .env。
-
使用 OpenAI
docker run -it --name presenton -p 5001:80 -e LLM="openai" -e OPENAI_API_KEY="******" -e IMAGE_PROVIDER="gpt-image-2" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
使用 Google
docker run -it --name presenton -p 5001:80 -e LLM="google" -e GOOGLE_API_KEY="******" -e IMAGE_PROVIDER="gemini_flash" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
使用 Vertex AI(API 密钥模式)
docker run -it --name presenton -p 5001:80 -e LLM="vertex" -e VERTEX_API_KEY="******" -e VERTEX_MODEL="gemini-2.5-flash" -e IMAGE_PROVIDER="gemini_flash" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
使用 Azure OpenAI
docker run -it --name presenton -p 5001:80 -e LLM="azure" -e AZURE_OPENAI_API_KEY="******" -e AZURE_OPENAI_MODEL="gpt-4.1" -e AZURE_OPENAI_API_VERSION="2024-10-21" -e AZURE_OPENAI_ENDPOINT="https://YOUR-RESOURCE.openai.azure.com" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="******" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
Using Amazon Bedrock (on-demand model ID) — see docs/amazon-bedrock.md for inference profiles, IAM, and troubleshooting.
docker run -it --name presenton -p 5001:80 -e LLM="bedrock" -e BEDROCK_REGION="us-east-1" -e BEDROCK_AWS_ACCESS_KEY_ID="******" -e BEDROCK_AWS_SECRET_ACCESS_KEY="******" -e BEDROCK_MODEL="us.anthropic.claude-3-5-haiku-20241022-v1:0" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="******" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
使用 Amazon Bedrock(推理配置文件 ARN,例如 Claude Sonnet 4.6)
docker run -it --name presenton -p 5001:80 -e LLM="bedrock" -e BEDROCK_REGION="us-east-1" -e BEDROCK_AWS_ACCESS_KEY_ID="******" -e BEDROCK_AWS_SECRET_ACCESS_KEY="******" -e BEDROCK_MODEL="arn:aws:bedrock:us-east-1:YOUR_ACCOUNT_ID:inference-profile/us.anthropic.claude-sonnet-4-6" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="******" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
使用烟花
docker run -it --name presenton -p 5001:80 -e LLM="fireworks" -e FIREWORKS_API_KEY="******" -e FIREWORKS_MODEL="accounts/fireworks/models/llama-v3p1-8b-instruct" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="******" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
使用 Together AI
docker run -it --name presenton -p 5001:80 -e LLM="together" -e TOGETHER_API_KEY="******" -e TOGETHER_MODEL="openai/gpt-oss-20b" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="******" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
Using Ollama
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="*******" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
Using Anthropic
docker run -it --name presenton -p 5001:80 -e LLM="anthropic" -e ANTHROPIC_API_KEY="******" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="******" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
Using LM Studio (local)
docker run -it --name presenton -p 5001:80 -e LLM="lmstudio" -e LMSTUDIO_BASE_URL="http://host.docker.internal:1234" -e LMSTUDIO_MODEL="openai/gpt-oss-20b" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="******" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
Using OpenAI Compatible LLM API
docker run -it -p 5001:80 -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 -
Running Presenton with GPU Support To use GPU acceleration with Ollama models, you need to install and configure the NVIDIA Container Toolkit. This allows Docker containers to access your NVIDIA GPU. Once the NVIDIA Container Toolkit is installed and configured, you can run Presenton with GPU support by adding the
--gpus=allflag: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="*******" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest -
Using an OpenAI-Compatible Image Provider
This routes all slide image requests through your OpenAI-compatible gateway (LiteLLM, Azure, vLLM, etc.) while keeping the text LLM configuration independent:
docker run -it --name presenton -p 5001:80 -e IMAGE_PROVIDER="openai_compatible" -e OPENAI_COMPAT_IMAGE_BASE_URL="https://proxy.example.com/v1" -e OPENAI_COMPAT_IMAGE_API_KEY="******" -e OPENAI_COMPAT_IMAGE_MODEL="gpt-image-1" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest
#
✨ Generate Presentation via API
Generate Presentation
Endpoint: /api/v1/ppt/presentation/generate
Method: POST
Content-Type: application/json
Authentication (API key):
All /api/v1/ routes except the public authentication endpoints require authentication. An administrator creates an access key under Admin → API keys. Send that sk-presenton-... key as Authorization: Bearer YOUR_KEY. API keys act as their owning user and cannot call browser-session-only administrator endpoints.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
content |
string | Yes | Main content used to generate the presentation. When using slides_markdown without an additional overall prompt, pass an empty string. |
slides_markdown |
string[] | null | No | Provide one Markdown string per slide instead of asking Presenton to generate the slide outlines. The array length determines the number of slides. |
instructions |
string | null | No | Additional generation instructions. |
tone |
string | No |
Text tone (default: "default"). Options: default, casual, professional, funny, educational, sales_pitch
|
verbosity |
string | No |
Content density (default: "standard"). Options: concise, standard, text-heavy
|
web_search |
boolean | No | Enable web search grounding (default: false). |
n_slides |
integer | No | Number of slides to generate. When omitted, the count is auto-detected. When using slides_markdown, its array length is used and n_slides can be omitted. |
language |
string | No | Presentation language (default: "English"). |
template |
string | No | Template name (default: "general"). |
include_table_of_contents |
boolean | No | Include table of contents slide (default: false). |
include_title_slide |
boolean | No | Include title slide (default: true). |
files |
string[] | null | No |
Files to use in generation. Upload first via /api/v1/ppt/files/upload.
|
export_as |
string | No |
Export format (default: "pptx"). Options: pptx, pdf
|
Response
{
"presentation_id": "string", "path": "string", "edit_path": "string" }
Example (curl + API key)
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"
}'
Example: provide the content for every slide with slides_markdown
Each array item becomes one slide. Use ordinary Markdown headings, lists, emphasis, and tables to describe the audience-facing content. The content field is currently required by the API schema, so set it to an empty string when you do not want to provide an additional overall prompt.
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": "",
"slides_markdown": [
"# Acme Q2 Review\n\nRevenue grew **18% year over year** while customer retention reached 94%.",
"# What changed\n\n- Enterprise revenue increased 24%\n- Support response time fell to 42 minutes\n- Expansion revenue offset slower new-logo growth",
"# Next quarter\n\n1. Launch the self-service onboarding flow\n2. Expand the enterprise pilot program\n3. Reduce infrastructure cost per account by 10%"
],
"template": "general",
"language": "English",
"export_as": "pdf"
}'
Example: provide numeric data for a chart or table layout
Markdown tables with numeric columns help Presenton select a compatible chart or table layout. You can use instructions for presentation-level visual direction without adding those directions to the visible slide text.
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": "",
"slides_markdown": [
"# Regional revenue\n\n| Region | Q1 | Q2 |\n| --- | ---: | ---: |\n| North America | 2.4 | 2.9 |\n| Europe | 1.7 | 2.1 |\n| Asia Pacific | 1.1 | 1.6 |",
"# Key takeaway\n\nAsia Pacific grew fastest at **45%**, while North America remained the largest market."
],
"instructions": "Use a bar chart for slide 1 and an emphasis layout for slide 2.",
"template": "general",
"export_as": "pptx"
}'
Howslides_markdownworks: It skips AI outline generation, but it is not a deterministic Markdown-to-slide renderer. Presenton still uses the configured text LLM to select suitable layouts and map each Markdown item into the template's structured fields, so text may be rephrased to fit. Provide at most 50 array items. Each item is limited to 100 words by default; longer items are truncated. Self-hosted deployments can change the per-slide limit withMAX_OUTLINE_WORDS.
Example Response
{
"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" }
Note: Prepend your server’s root URL topathandedit_pathto construct valid links.
Documentation & Tutorials
- Deploy Presenton
- Full API Documentation
- Generate Presentations via API in 5 Minutes
- Create Presentations from CSV using AI
- Create Data Reports Using AI
#
🚀 Roadmap
Track the public roadmap on GitHub Projects: https://github.com/orgs/presenton/projects/2
- 本文标题:presenton - 开源 AI 演示文稿生成器和 API(Gamma
- 本文链接:https://www.cn121.com/agent/presenton-presenton.html
- 原项目:presenton/presenton 版权归原作者 presenton 及贡献者所有
- 收录信息:本站于 2026-10-28 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 Apache-2.0(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。本站对原文仅作排版与图片地址适配, 并保留原项目的 NOTICE 与署名要求。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 presenton/presenton。
- 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。