ALLWEONE® AI Presentation Generator(presentation-ai):开源 AI 演示文稿生成器
ALLWEONE® 开源的 AI 演示文稿生成器,定位为 Gamma.app 的替代方案。支持先由 AI 生成大纲、再实时生成幻灯片,内置 38 套主题,支持自定义主题、PPTX 主题导入、AI 配图、演示模式与录制、PowerPoint 导出,并可通过 OpenAI、Ollama、LM Studio 等文本模型驱动,采用 Next.js + PostgreSQL + Prisma 技术栈,MIT 许可证。
社区作者 · zZz
它解决什么问题
该项目是一个开源、AI 驱动的演示文稿生成器,作为 Gamma.app 的替代方案,可在几分钟内生成美观且可自定义的幻灯片,是 ALLWEONE AI 平台的一部分。
【核心功能】
- AI 内容生成:可针对任意主题生成完整演示文稿。
- 大纲优先工作流:先生成大纲,人工审阅修改后再转为幻灯片。
- 可定制幻灯片:可选择文本模型、幻灯片数量、语言,并决定是否启用联网搜索。
- 空白演示文稿:不想使用 AI 生成内容时可以从零开始。
- 可编辑大纲:在定稿前审阅并修改 AI 生成的大纲。
- 实时生成:内容生成过程中可实时看到演示文稿构建。
- 自动保存:工作过程自动保存。
【设计与定制】
- 多主题:开箱即用 38 套内置主题。
- 自定义主题:创建、保存并复用自有主题。
- PPTX 主题导入:可从 PowerPoint 文件导入主题灵感。
- 完全可编辑:可修改文字、字体和设计元素。
- 图像生成:可为幻灯片选择不同的 AI 图像生成模型。
- 受众导向风格:可在专业(Professional)与休闲(Casual)演示风格之间选择。
【演示工具】
- 演示模式:可直接在应用内进行演示。
- 公开分享:生成可分享的公开链接。
- 演示录制:支持麦克风与摄像头控制的录制。
- PowerPoint 导出:可导出为 .pptx。
- 图表、信息图与媒体嵌入:在纯文本幻灯片之外提供更丰富的视觉内容。
- 富文本编辑:由 Plate Editor 提供文字与图片处理能力。
- 拖拽操作:直观地调整幻灯片顺序与元素位置。
【技术栈】
- 框架:Next.js、React、TypeScript
- 样式:Tailwind CSS
- 数据库:PostgreSQL + Prisma ORM
- AI 集成:OpenAI API、Together AI、Ollama、LM Studio
- 认证:NextAuth.js
- UI 组件:Radix UI
- 文本编辑器:Plate Editor
- 文件上传:UploadThing
- 拖拽:DND Kit
【本地模型】 项目同时支持 Ollama 与 LM Studio 作为本地模型提供方。当 LM Studio 服务器或 Ollama 守护进程运行时,模型会自动出现在模型选择器中;LM Studio 必须开启 CORS 以便浏览器连接。OpenAI 仍是默认的云端文本模型,但若使用本地文本模型,可以在没有 OPENAI_API_KEY 的情况下进行文本生成。
【路线图状态】
- 导出 PowerPoint(.pptx):部分完成,可用但图片和其他组件无法一一对应迁移。
- 媒体嵌入:部分完成,功能已有,UI/UX 待改进。
- 更多内置主题:进行中,目前内置 38 套主题且仍在增长。
- 移动端响应式:进行中。
- 高级图表:部分完成,AI 生成图表与图表编辑可用,覆盖率仍在改进。
- 端到端测试:未开始。
- 实时协作:未开始。
- 导出 PDF:未开始(高优先级)。
- 模板库、动画与转场、云存储集成、演示分析、AI 演讲者备注、自定义字体上传、插件系统、API:均未开始。
配图 1 为该仓库的 Star History Chart,可反映项目关注度变化趋势。
【适用对象】 希望自托管 AI 演示文稿生成能力的团队与个人、需要批量制作汇报/路演材料的用户、希望在本地模型环境中生成幻灯片的隐私敏感用户,以及需要二次开发演示生成能力的开发者。
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
【准备环境】 开始前请确保已安装:
- Node.js 18.x 或更高版本
npm、yarn 或
pnpm 包管理器- PostgreSQL 数据库
- Google Client ID 与 Secret(用于认证)
- 按需选择的可选提供方密钥:OpenAI API key(云端文本生成)、Together AI API key(图像生成)、FAL API key(额外图像生成流程)、Tavily API key(联网搜索)、Unsplash access key(图库图片)
【第一步:克隆仓库】
git clone [email protected]:allweonedev/presentation-ai.gitcd presentation-ai【第二步:安装依赖】
pnpm install【第三步:配置环境变量】 在根目录创建 .env 文件,填入以下变量:
Database
DATABASE_URL="postgresql://username:password@localhost:5432/presentation_ai"Authentication
NEXTAUTH_SECRET=" "NEXTAUTH_URL="http://localhost:3000"Google OAuth Provider
GOOGLE_CLIENT_ID=" "GOOGLE_CLIENT_SECRET=" "AI Providers
OPENAI_API_KEY=" "TOGETHER_AI_API_KEY=" "FAL_API_KEY=" "File Upload Service
UPLOADTHING_TOKEN=" "Optional search and media providers
UNSPLASH_ACCESS_KEY=" "TAVILY_API_KEY=" "提示:可将 .env.example 复制为 .env 并填写实际值。如果计划通过 Ollama 或 LM Studio 使用本地文本模型,则可以不配置 OPENAI_API_KEY 也能进行文本生成。
【第四步:数据库初始化并首次运行】
步骤 1 · 初始化数据库:
pnpm db:push步骤 2 · 启动开发服务器:
pnpm dev- 打开应用:在浏览器访问 http://localhost:3000
【可用脚本】
pnpm dev # 启动 Next.js 开发服务器pnpm build # 构建应用pnpm start # 启动生产服务器pnpm db:push # 将 Prisma schema 推送到数据库pnpm db:studio # 打开 Prisma Studiopnpm type # 运行 TypeScript 类型检查pnpm check # 运行 Biome 检查pnpm lint # 运行 Biome lint【使用:创建演示文稿】
- 登录应用
- 进入演示文稿仪表盘
- 输入演示主题
- 选择文本模型(OpenAI、Ollama 或 LM Studio)
- 选择幻灯片数量(推荐 5-10 页)
- 选择首选语言
- 如需引入外部上下文,开启联网搜索开关
- 点击 “Generate Outline”
- 审阅并编辑 AI 生成的大纲
- 为演示文稿选择主题
- 选择图片来源(ai / stock)
- 选择演示风格(Professional / Casual)
- 点击 “Generate Presentation”
- 等待 AI 实时生成幻灯片
- 按需预览、编辑与优化
- 直接在应用内演示或导出演示文稿
【自定义主题】
- 点击 “Create New Theme”
- 从零开始或基于已有主题派生
- 自定义颜色、字体与布局
- 保存主题以便日后复用
【本地模型配置】 LM Studio:
Ollama:
在应用中使用本地模型:
- 安装 LM Studio
- 在 LM Studio 应用中开启 Server 并启用 CORS
- 在 LM Studio 内下载任意想使用的模型
- 安装 Ollama
- 下载想使用的模型(例如:ollama pull llama3.1)
- 打开应用并进入文本模型选择器
- 选择想使用的模型
- 使用 LM Studio 时需先在 LM Studio 中加载模型
- 使用 Ollama 时已安装模型会自动出现,部分推荐模型可在首次使用时下载
- 开始生成
【常见问题与注意事项】
- OpenAI 仍是默认的云端文本模型;不配置 OPENAI_API_KEY 时可用本地模型完成文本生成。
- 当 LM Studio 服务器或 Ollama 守护进程运行时,模型会自动出现在模型选择器中。
- 必须确保 LM Studio 已启用 CORS,否则浏览器无法连接。
- 该项目当前未提供端到端测试(路线图中标记为未开始)。
【参与贡献】
- Fork 仓库
步骤 2 · 创建功能分支:
git checkout -b feature/amazing-feature步骤 3 · 提交改动:
git commit -m 'Add some amazing feature'步骤 4 · 推送分支:
git push origin feature/amazing-feature贡献要求:遵循现有代码风格与约定、编写清晰的提交信息、保持尊重与建设性的讨论。
- 发起 Pull Request