[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-71916":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":38,"readmeContent":39,"aiSummary":40,"trendingCount":16,"starSnapshotCount":16,"syncStatus":41,"lastSyncTime":42,"discoverSource":43},71916,"banana-slides","Anionex\u002Fbanana-slides","Anionex","一个基于nano banana pro🍌的原生AI PPT生成应用，迈向＂Vibe PPT＂; 支持上传任意模板图片，上传任意素材&智能解析，一句话\u002F大纲\u002F页面描述自动生成PPT，口头修改指定区域、一键导出可编辑ppt - An AI-native slides generator based on nano banana pro🍌","http:\u002F\u002Fbananaslides.online",null,"Python",14890,1738,59,20,0,40,108,415,120,119.72,"GNU Affero General Public License v3.0",false,"main",true,[27,28,29,30,31,32,33,34,35,36,37],"ai-ppt-maker","ai-slide-builder","ai-slides","document-recognition","editable-pptx","llm","nanobananapro","ppt","ppt-generator","slides","text2image","2026-06-12 04:01:02","\u003Cdiv align=\"center\">\n\n\u003Cp>\n  \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F81fe6816-44cc-4c61-97c7-f3c099650966\" alt=\"Banana Slides\" width=\"860\">\n\u003C\u002Fp>\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F22056\" target=\"_blank\">\n    \u003Cimg src=\"https:\u002F\u002Ftrendshift.io\u002Fapi\u002Fbadge\u002Frepositories\u002F22056\" alt=\"Anionex%2Fbanana-slides | Trendshift\" width=\"265\" height=\"58\">\n  \u003C\u002Fa>\n  \u003Cbr>\n  \u003Ca href=\"https:\u002F\u002Fhellogithub.com\u002Frepository\u002FAnionex\u002Fbanana-slides\" target=\"_blank\">\n    \u003Cimg src=\"https:\u002F\u002Fabroad.hellogithub.com\u002Fv1\u002Fwidgets\u002Frecommend.svg?rid=c8a0ee51918e4353af08012b8472b85e&claim_uid=CtDTm2jbUHhVGBr&theme=neutral\" alt=\"Featured｜HelloGitHub\" width=\"265\" height=\"58\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cp>\n  \u003Ca href=\"#-项目缘起\">\u003Cb>简体中文\u003C\u002Fb>\u003C\u002Fa>\n  &nbsp;•&nbsp;\n  \u003Ca href=\"README_EN.md\">\u003Cb>English\u003C\u002Fb>\u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fstargazers\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FAnionex\u002Fbanana-slides?style=flat-square&color=FFD700\" alt=\"GitHub Stars\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fnetwork\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002FAnionex\u002Fbanana-slides?style=flat-square&color=FFD700\" alt=\"GitHub Forks\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fwatchers\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fwatchers\u002FAnionex\u002Fbanana-slides?style=flat-square&color=FFD700\" alt=\"GitHub Watchers\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fversion-v0.4.0-44cc11?style=flat-square\" alt=\"Version\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fblob\u002Fmain\u002FLICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002FAnionex\u002Fbanana-slides?color=0055aa&style=flat-square\" alt=\"License\">\u003C\u002Fa>\n  \u003Cbr>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-Build-4A90D9?logo=docker&logoColor=white&style=flat-square\" alt=\"Docker Build\">\n  \u003Ca href=\"https:\u002F\u002Fdeepwiki.com\u002FAnionex\u002Fbanana-slides\">\u003Cimg src=\".\u002Fassets\u002Fbadge-deepwiki-flat.svg\" alt=\"Ask DeepWiki\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp>\n  \u003Cb>一个基于 nano banana pro 🍌 的原生 AI PPT 生成应用\u003C\u002Fb>\u003Cbr>\n  \u003Cb>在几分钟内从想法到演示文稿，无需繁琐排版、口头提出修改，迈向真正的 \"Vibe PPT\"\u003C\u002Fb>\n\u003C\u002Fp>\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fbananaslides.online\u002F\">\u003Cb>🚀 在线 Demo\u003C\u002Fb>\u003C\u002Fa>\n  &nbsp;|&nbsp;\n  \u003Ca href=\"https:\u002F\u002Fdocs.bananaslides.online\u002F\">\u003Cb>📖 文档\u003C\u002Fb>\u003C\u002Fa>\n  &nbsp;|&nbsp;\n \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides#-%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95\">\u003Cb>部署方法\u003C\u002Fb>\u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cp>\n  如果该项目对你有用，欢迎 \u003Cb>Star 🌟\u003C\u002Fb> & \u003Cb>Fork 🍴\u003C\u002Fb>\n\u003C\u002Fp>\n\n\u003C\u002Fdiv>\n\n## ✨ 项目缘起\n你是否也曾陷入这样的困境：明天就要汇报，但PPT还是一片空白；脑中有无数精彩的想法，却被繁琐的排版和设计消磨掉所有热情？\n\n我(们)渴望能快速创作出既专业又具设计感的演示文稿，传统的AI PPT生成app，虽然大体满足“快”这一需求，却还存在以下问题：\n\n- 1️⃣只能选择预设模版，无法灵活调整风格\n- 2️⃣自由度低，多轮改动难以进行 \n- 3️⃣成品观感相似，同质化严重\n- 4️⃣素材质量较低，缺乏针对性\n- 5️⃣图文排版割裂，设计感差\n\n以上这些缺陷，让传统的AI ppt生成器难以同时满足我们“快”和“美”的两大PPT制作需求。即使自称Vibe PPT，但是在我的眼中还远不够“Vibe”。\n\n但是，nano banana🍌模型的出现让一切有了转机。我尝试使用🍌pro进行ppt页面生成，发现生成的结果无论是质量、美感还是一致性，都做的非常好，且几乎能精确渲染prompt要求的所有文字+遵循参考图的风格。那为什么不基于🍌pro，做一个原生的\"Vibe PPT\"应用呢？\n\n## 👨‍💻 适用场景\n\n\n1. **小白**：零门槛快速生成美观PPT，无需设计经验，减少模板选择烦恼\n2. **PPT专业人士**：参考AI生成的布局和图文元素组合，快速获取设计灵感\n3. **教育工作者**：将教学内容快速转换为配图教案PPT，提升课堂效果\n4. **学生**：快速完成作业Pre，把精力专注于内容而非排版美化\n5. **职场人士**：商业提案、产品介绍快速可视化，多场景快速适配\n\n\u003Cp>\n  \u003Cb>🎯目标： 降低 PPT 制作门槛，让每个人都能快速创作出美观专业的演示文稿\u003C\u002Fb>\n\u003C\u002Fp>\n\n\n## 🎨 结果案例\n\n\n\u003Cdiv align=\"center\">\n\n| | |\n|:---:|:---:|\n| \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fd58ce3f7-bcec-451d-a3b9-ca3c16223644\" width=\"500\" alt=\"案例3\"> | \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fc64cd952-2cdf-4a92-8c34-0322cbf3de4e\" width=\"500\" alt=\"案例2\"> |\n| **软件开发最佳实践** | **DeepSeek-V3.2技术展示** |\n| \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F383eb011-a167-4343-99eb-e1d0568830c7\" width=\"500\" alt=\"案例4\"> | \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F1a63afc9-ad05-4755-8480-fc4aa64987f1\" width=\"500\" alt=\"案例1\"> |\n| **预制菜智能产线装备研发和产业化** | **钱的演变：从贝壳到纸币的旅程** |\n\n\u003C\u002Fdiv>\n\n更多可见\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fissues\u002F2\" > 使用案例 \u003C\u002Fa>\n\n\n## 🎯 功能介绍\n\n### 1. 灵活多样的创作路径\n支持**想法**、**大纲**、**页面描述**三种起步方式，满足不同创作习惯。\n- **一句话生成**：输入一个主题，AI 自动生成结构清晰的大纲和逐页内容描述。\n- **自然语言编辑**：支持以 Vibe 形式口头修改大纲或描述（如\"把第三页改成案例分析\"），AI 实时响应调整。\n- **大纲\u002F描述模式**：既可一键批量生成，也可手动调整细节。\n\n\u003Cimg width=\"2000\" height=\"1125\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F7fc1ecc6-433d-4157-b4ca-95fcebac66ba\" \u002F>\n\n\n### 2. 强大的素材解析能力\n- **多格式支持**：上传 PDF\u002FDocx\u002FMD\u002FTxt 等文件，后台自动解析内容。\n- **智能提取**：自动识别文本中的关键点、图片链接和图表信息，为生成提供丰富素材。\n- **风格参考**：支持上传参考图片或模板，定制 PPT 风格。\n\n\u003Cimg width=\"1920\" height=\"1080\" alt=\"文件解析与素材处理\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F8cda1fd2-2369-4028-b310-ea6604183936\" \u002F>\n\n### 3. \"Vibe\" 式自然语言修改\n不再受限于复杂的菜单按钮，直接通过**自然语言**下达修改指令。\n- **局部重绘**：对不满意的区域进行口头式修改（如\"把这个图换成饼图\"）。\n- **整页优化**：基于 nano banana pro🍌 生成高清、风格统一的页面。\n\n\u003Cimg width=\"2000\" height=\"1125\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F929ba24a-996c-4f6d-9ec6-818be6b08ea3\" \u002F>\n\n\n### 4. 开箱即用的格式导出\n- **多格式支持**：一键导出标准 **PPTX** 或 **PDF** 文件。\n- **完美适配**：默认 16:9 比例，排版无需二次调整，直接演示。\n\n\u003Cimg width=\"1000\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F3e54bbba-88be-4f69-90a1-02e875c25420\" \u002F>\n\u003Cimg width=\"1748\" height=\"538\" alt=\"PPT与PDF导出\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F647eb9b1-d0b6-42cb-a898-378ebe06c984\" \u002F>\n\n### 5. 可自由编辑的pptx导出（Beta迭代中）\n- **导出图像为高还原度、背景干净的、可自由编辑图像和文字的PPT页面**\n- 相关更新见 https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fissues\u002F121\n\u003Cimg width=\"1000\"  alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fa85d2d48-1966-4800-a4bf-73d17f914062\" \u002F>\n\n### 6. 一键导出讲解视频\n- **一键将幻灯片转换为带 AI 语音旁白和字幕的讲解视频（MP4）**\n- AI 自动根据页面描述和内容生成口语化旁白\n- 支持配置多种表达风格、多语言和多种音色\n\n\u003Cbr>\n\n**🌟和notebooklm slide deck功能对比**\n| 功能 | notebooklm | 本项目 | \n| --- | --- | --- |\n| 页数上限 | 15页 | **无限制** | \n| 二次编辑 | 提示词修改 | **框选编辑+口头编辑** |\n| 素材添加 | 生成后无法添加 | **生成后自由添加** |\n| 导出格式 | 支持导出为 PDF、（不可编辑图片）pptx | **导出为PDF、(图片or可编辑)pptx、讲解视频** |\n| 水印 | 免费版有水印 | **无水印，自由增删元素** |\n\n> 注：随着新功能添加,对比可能过时\n\n\n\n## 🔥 近期更新\n- [2026-04-25]： 素材工具箱上线 — 在原有素材生成基础上新增整图编辑、框选编辑（overlay\u002Freplace）、智能擦除三种模式，统一入口一站式操作\n- [2026-04-25]：支持通过 OpenAI 官方 OAuth 登录绑定账号，绑定后可直接使用 Codex 作为文本\u002F图片生成 provider，无需手动填写 API Key（基于 OpenAI 官方 OAuth PKCE 授权流程，非逆向）\n- [2026-04-25]：支持保存自定义文字风格描述模板，可命名、标色、持久化复用，无需每次重新输入\n- [2026-04-23]：支持了gpt-image-2模型，同时导出可编辑背景效果也因模型能力升级得到了提升（在 设置-导出选项-背景获取 选择 生成式获取）\n- [2026-04-11]：支持了[cli操作并加入了agent skills](https:\u002F\u002Fdocs.bananaslides.online\u002Fcli)\n- [2026-03]：加入了若干功能和优化，如额外字段、多比例设定等\n- [2026-02-09]： 新功能和优化\n  * 新功能\n    * 支持在首页、大纲、描述卡片里面粘贴图片并立即识别，并提供更好的交互体验\n    * 大纲章节手动编辑：支持手动调整页面所属章节（part）。\n    * Docker 多架构：镜像支持 amd64 \u002F arm64 构建。\n    * 国际化 + 暗黑模式：新增中英文切换；支持亮色\u002F暗色\u002F跟随系统主题；全组件适配暗黑模式。\n  * 修复与体验优化\n    * 修复导出相关 500、参考文件关联时序、outline\u002Fpage 数据错位、任务轮询错误项目、描述生成无限轮询、图片预览内存泄漏、批量删除部分失败处理。\n    * 优化格式示例提示、HTTP 错误提示文案、Modal 关闭体验、清理旧项目 localStorage、移除首次创建项目冗余提示。\n    * 若干其他优化和修复\n- [2026-01-04]：v0.4.0发布：可编辑pptx导出全面升级：\n  * 支持最大程度还原图片中文字的字号、颜色、加粗等样式；\n  * 支持了识别表格中的文字内容；\n  * 更精确的文字大小和文字位置还原逻辑\n  * 优化导出工作流，大大减少了导出后背景图残留文字的现象；\n  * 支持页面多选逻辑，灵活选择需要生成和导出的具体页面。\n  * **详细效果和使用方法见 https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fissues\u002F121**\n\n\n## 🗺️ 开发计划\n\n| 状态 | 里程碑 |\n| --- | --- |\n| ✅ 已完成 | 从想法、大纲、页面描述三种路径创建 PPT |\n| ✅ 已完成 | 解析文本中的 Markdown 格式图片 |\n| ✅ 已完成 | PPT 单页添加更多素材 |\n| ✅ 已完成 | PPT 单页框选区域Vibe口头编辑 |\n| ✅ 已完成 | 素材模块: 素材生成、上传等 |\n| ✅ 已完成 | 支持多种文件的上传+解析 |\n| ✅ 已完成 | 支持Vibe口头调整大纲和描述 |\n| ✅ 已完成 | 初步支持可编辑版本pptx文件导出 |\n| 🔄 进行中 | 支持多层次、精确抠图的可编辑pptx导出 |\n| 🔄 进行中 | 网络搜索 |\n| 🔄 进行中 | Agent 模式 |\n| ✅ 已完成 | TTS 讲解视频导出（中\u002F英\u002F日多音色、字幕、Ken Burns 动效） |\n| 🚍 部分 | 优化前端加载速度 |\n| 🧭 规划中 | 在线播放功能 |\n| 🧭 规划中 | 简单的动画和页面切换效果 |\n| 🚍 部分 | 多语种支持 |\n\n## 📦 使用方法\n\n### （新）使用应用模板一键部署\n这是最简单的方式，无需安装docker或下载项目，创建后可直接进入应用\n\n\n1. 通过雨云一键部署和启动本应用 (带宽大，适合高清图片生成和下载。新用户有15天免费试用)\n- [图文教程](https:\u002F\u002Fziy68cvfvu3.feishu.cn\u002Fwiki\u002FB5RIwg3OUiCfo9kyadzcR9CInnc?from=from_copylink)\n\n[![通过雨云一键部署](https:\u002F\u002Frainyun-apps.cn-nb1.rains3.com\u002Fmaterials\u002Fdeploy-on-rainyun-cn.svg)](https:\u002F\u002Fapp.rainyun.com\u002Fapps\u002Frca\u002Fstore\u002F7549\u002Fanionex_)\n\n2. 敬请期待\n\n\n### 使用 Docker Compose🐳\n通过docker compose快速启动前后端服务。\n\n\u003Cdetails>\n  \u003Csummary>📒 Windows\u002FMac用户说明\u003C\u002Fsummary>\n\n如果你使用 **Windows 或 macOS**，请先[安装 **Docker Desktop**](https:\u002F\u002Fdocs.docker.com\u002Fdesktop\u002Fsetup\u002Finstall\u002Fwindows-install\u002F)，并确保 Docker 正在运行（Windows 可检查系统托盘图标；macOS 可检查菜单栏图标），然后按文档中的相同步骤操作。\n\n> **提示**：如果遇到问题，Windows 用户请在 Docker Desktop 设置中启用 **WSL 2 后端**（推荐）；同时确保端口 **3000** 和 **5000** 未被占用。\n\n\u003C\u002Fdetails>\n\n0. **克隆代码仓库**\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\ncd banana-slides\n```\n\n1. **配置环境变量**\n\n创建 `.env` 文件（参考 `.env.example`）：\n```bash\ncp .env.example .env\n```\n\n**（可选， 也可以启动后在用户界面配置，[教程可点击此处](https:\u002F\u002Fziy68cvfvu3.feishu.cn\u002Fwiki\u002FGiNawdmpiinSRqkGspocqEWAnkh?from=from_copylink )）** 编辑 `.env` 文件，配置必要的环境变量：\n\n\u003Cdetails>\n\u003Csummary>点击展开详情\u003C\u002Fsummary>\n  \n> **项目中大模型接口以AIHubMix平台格式为标准，推荐使用 [AIHubMix(点击此处可直接访问)](https:\u002F\u002Faihubmix.com\u002F?aff=17EC) 获取API密钥，减小迁移成本**\u003Cbr>\n> **友情提示：谷歌nano banana pro模型接口费用较高，请注意调用成本**\n```env\n# AI Provider格式配置 (gemini \u002F openai \u002F vertex)\nAI_PROVIDER_FORMAT=gemini\n\n# Gemini 格式配置（当 AI_PROVIDER_FORMAT=gemini 时使用）\nGOOGLE_API_KEY=your-api-key-here\nGOOGLE_API_BASE=https:\u002F\u002Fgenerativelanguage.googleapis.com\n# 代理示例: https:\u002F\u002Faihubmix.com\u002Fgemini\n\n# OpenAI 格式配置（当 AI_PROVIDER_FORMAT=openai 时使用）\nOPENAI_API_KEY=your-api-key-here\nOPENAI_API_BASE=https:\u002F\u002Fapi.openai.com\u002Fv1\n# 代理示例: https:\u002F\u002Faihubmix.com\u002Fv1\n\n# Vertex AI 配置（AI_PROVIDER_FORMAT=vertex）\n# 需要 GCP 项目和服务账户密钥\n# VERTEX_PROJECT_ID=your-gcp-project-id\n# VERTEX_LOCATION=global\n# GOOGLE_APPLICATION_CREDENTIALS=.\u002Fgcp-service-account.json\n\n# Lazyllm 格式配置（当 AI_PROVIDER_FORMAT=lazyllm 时使用）\n# 选择文本生成和图片生成使用的厂商\nTEXT_MODEL_SOURCE=deepseek        # 文本生成模型厂商\nIMAGE_MODEL_SOURCE=doubao         # 图片编辑模型厂商\nIMAGE_CAPTION_MODEL_SOURCE=qwen   # 图片描述模型厂商\n\n# 各厂商 API Key（只需配置你要使用的厂商）\nDOUBAO_API_KEY=your-doubao-api-key            # 火山引擎\u002F豆包\nDEEPSEEK_API_KEY=your-deepseek-api-key        # DeepSeek\nQWEN_API_KEY=your-qwen-api-key                # 阿里云\u002F通义千问\nGLM_API_KEY=your-glm-api-key                  # 智谱 GLM\nSILICONFLOW_API_KEY=your-siliconflow-api-key  # 硅基流动\nSENSENOVA_API_KEY=your-sensenova-api-key      # 商汤日日新\nMINIMAX_API_KEY=your-minimax-api-key          # MiniMax\n...\n```\n  \n\u003C\u002Fdetails>\n\n\n**使用新版可编辑导出配置方法，获得更好的可编辑导出效果**: 需在[百度智能云平台](https:\u002F\u002Fconsole.bce.baidu.com\u002Fiam\u002F#\u002Fiam\u002Fapikey\u002Flist)（点击此处进入）中获取API KEY，填写在.env文件中的BAIDU_API_KEY字段（有充足的免费使用额度）。详见https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fissues\u002F121 中的说明\n\n\n\u003Cdetails>\n  \u003Csummary>📒 Vertex AI 配置指南（适用于 GCP 用户）\u003C\u002Fsummary>\n\nGoogle Cloud Vertex AI 允许通过 GCP 服务账户调用 Gemini 模型，新用户可使用赠金额度。配置步骤：\n\n1. 前往 [GCP Console](https:\u002F\u002Fconsole.cloud.google.com\u002F)，创建一个服务账户并下载 JSON 格式的密钥文件\n2. 将密钥文件保存为项目根目录下的 `gcp-service-account.json`\n3. 在 `.env` 中设置：\n   ```env\n   AI_PROVIDER_FORMAT=vertex\n   VERTEX_PROJECT_ID=your-gcp-project-id\n   VERTEX_LOCATION=global\n   ```\n4. 如果使用 Docker 部署，还需要在 `docker-compose.yml` 中取消相关注释，将密钥文件挂载到容器内并设置 `GOOGLE_APPLICATION_CREDENTIALS` 环境变量。\n\n> `gemini-3-*` 系列模型要求 `VERTEX_LOCATION=global`\n\n\u003C\u002Fdetails>\n\n2. **启动服务**\n\n**⚡ 使用预构建镜像（推荐）**\n\n项目在 Docker Hub 提供了构建好的前端和后端镜像（同步主分支最新版本），可以跳过本地构建步骤，实现快速部署：\n\n```bash\n# 使用预构建镜像启动（无需从头构建）\ndocker compose -f docker-compose.prod.yml up -d\n```\n\n镜像名称：\n- `anoinex\u002Fbanana-slides-frontend:latest`\n- `anoinex\u002Fbanana-slides-backend:latest`\n\n**从头构建镜像**\n\n```bash\ndocker compose up -d\n```\n\n\n> [!TIP]\n> 如遇网络问题，可在 `.env` 文件中取消镜像源配置的注释, 再重新运行启动命令：\n> ```env\n> # 在 .env 文件中取消以下注释即可使用国内镜像源\n> DOCKER_REGISTRY=docker.1ms.run\u002F\n> GHCR_REGISTRY=ghcr.nju.edu.cn\u002F\n> APT_MIRROR=mirrors.aliyun.com\n> PYPI_INDEX_URL=https:\u002F\u002Fmirrors.cloud.tencent.com\u002Fpypi\u002Fsimple\n> NPM_REGISTRY=https:\u002F\u002Fregistry.npmmirror.com\u002F\n> ```\n\n\n3. **访问应用**\n\n- 前端：http:\u002F\u002Flocalhost:3000\n- 后端 API：http:\u002F\u002Flocalhost:5000\n\n4. **查看日志**\n\n```bash\n# 查看后端日志（最后 200 行）\ndocker logs --tail 200 banana-slides-backend\n\n# 实时查看后端日志（最后 100 行）\ndocker logs -f --tail 100 banana-slides-backend\n\n# 查看前端日志（最后 100 行）\ndocker logs --tail 100 banana-slides-frontend\n```\n\n5. **停止服务**\n\n```bash\ndocker compose down\n```\n\n6. **更新项目**\n\n**使用预构建镜像（docker-compose.prod.yml）**\n\n```bash\ndocker compose -f docker-compose.prod.yml pull\ndocker compose -f docker-compose.prod.yml up -d\n```\n\n**使用本地构建（docker-compose.yml）**\n\n注：若手动修改了代码，该方法不适用，需要先将代码还原到拉取时的版本。\n\n```bash\ngit pull \ndocker compose down\ndocker compose build --no-cache\ndocker compose up -d\n```\n\n**注：感谢优秀开发者朋友 [@ShellMonster](https:\u002F\u002Fgithub.com\u002FShellMonster\u002F) 提供了[新人部署教程](https:\u002F\u002Fgithub.com\u002FShellMonster\u002Fbanana-slides\u002Fblob\u002Fdocs-deploy-tutorial\u002Fdocs\u002FNEWBIE_DEPLOYMENT.md)，专为没有任何服务器部署经验的新手设计，可[点击链接](https:\u002F\u002Fgithub.com\u002FShellMonster\u002Fbanana-slides\u002Fblob\u002Fdocs-deploy-tutorial\u002Fdocs\u002FNEWBIE_DEPLOYMENT.md)查看。**\n\n### 从源码部署\n\n#### 环境要求\n- Python 3.10 或更高版本\n- [uv](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fuv) - Python 包管理器\n- Node.js 16+ 和 npm\n- [FFmpeg](https:\u002F\u002Fffmpeg.org\u002F) - 讲解视频导出必需，且必须包含 `libass` \u002F `ass` 字幕滤镜支持\n- 有效的 Google Gemini API 密钥\n- （可选）[LibreOffice](https:\u002F\u002Fwww.libreoffice.org\u002F) - 使用「PPT 翻新」功能上传 PPTX 文件时需要，用于将 PPTX 转换为 PDF。**推荐先在本地将 PPTX 转为 PDF 后再上传**，原因：LibreOffice 在服务端渲染时可能因缺少字体（如微软雅黑、Calibri 等）导致排版错位，且无法完整还原部分特效。上传 PDF 文件则不需要 LibreOffice。Docker 用户如仍需在容器内支持 PPTX 上传，可执行：\n  ```bash\n  docker exec -it banana-slides-backend bash -c \"apt-get update && apt-get install -y libreoffice-impress && rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\"\n  ```\n  > 注意：此方式安装的 LibreOffice 在容器重建后会丢失，需重新安装。\n\n#### 后端安装\n\n0. **克隆代码仓库**\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\ncd banana-slides\n```\n\n1. **安装 uv（如果尚未安装）**\n```bash\ncurl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh | sh\n```\n\n2. **安装依赖**\n\n在项目根目录下运行：\n```bash\n# macOS（Homebrew）\nbrew install ffmpeg-full\nbrew unlink ffmpeg 2>\u002Fdev\u002Fnull || true\nbrew link --overwrite --force ffmpeg-full\n\n# Ubuntu \u002F Debian\nsudo apt-get update\nsudo apt-get install -y ffmpeg libass9\n\n# 然后安装 Python 依赖\nuv sync\n```\n\n这将根据 `pyproject.toml` 自动安装所有依赖。\n\n3. **配置环境变量**\n\n复制环境变量模板：\n```bash\ncp .env.example .env\n# 然后按照前述方法，打开编辑 `.env` 文件，配置你的 API 密钥\n```\n\n#### 前端安装\n\n1. **进入前端目录**\n```bash\ncd frontend\n```\n\n2. **安装依赖**\n```bash\nnpm install\n```\n\n3. **配置API地址**\n\n前端会自动连接到 `http:\u002F\u002Flocalhost:5000` 的后端服务。如需修改，请编辑 `src\u002Fapi\u002Fclient.ts`。\n\n\n#### 启动后端服务\n> （可选）如果本地已有重要数据，升级前建议先备份数据库：  \n> `cp backend\u002Finstance\u002Fdatabase.db backend\u002Finstance\u002Fdatabase.db.bak`\n> 备注： 默认配置下，模板、素材、成品都在uploads\u002F文件夹中\n\n```bash\ncd backend\nuv run alembic upgrade head && uv run python app.py\n```\n\n后端服务将在 `http:\u002F\u002Flocalhost:5000` 启动。\n\n访问 `http:\u002F\u002Flocalhost:5000\u002Fhealth` 验证服务是否正常运行。\n\n#### 启动前端开发服务器\n\n```bash\ncd frontend\nnpm run dev\n```\n\n前端开发服务器将在 `http:\u002F\u002Flocalhost:3000` 启动。\n\n打开浏览器访问即可使用应用。\n\n\n## 🛠️ 技术架构\n\n### 前端技术栈\nReact 18 + TypeScript + Vite 5 + Zustand\n\n### 后端技术栈\nPython 3.10+ + Flask 3.0 + uv + SQLite\n\n## 交流群\n为了方便大家沟通互助，建此微信交流群.\n\n欢迎提出新功能建议或反馈，本人也会~~佛系~~回答大家问题\n\n\u003Cimg width=\"312\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F20233131-4137-41cd-ba2e-76eda832d486\" \u002F>\n\n\n\n欢迎关注作者的社交媒体，我会分享有关本项目和有关AI的信息：\n\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fx.com\u002Fanion_ex\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FX-@anion__ex-000000?style=flat-square&logo=x&logoColor=white\" alt=\"X (Twitter)\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.xiaohongshu.com\u002Fuser\u002Fprofile\u002F62e8f580000000001902fc9d\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F小红书-Anion-FF2442?style=flat-square&logo=xiaohongshu&logoColor=white\" alt=\"小红书\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fspace.bilibili.com\u002F477162339\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBilibili-Anion-00A1D6?style=flat-square&logo=bilibili&logoColor=white\" alt=\"Bilibili\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\n\n\n\n## **🔧 常见问题**\n可见[官网文档](https:\u002F\u002Fdocs.bananaslides.online\u002Fzh\u002Ffaq)\n\n\n## 🤝 贡献指南\n\n欢迎通过\n[Issue](https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fissues)\n和\n[Pull Request](https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fpulls)\n为本项目贡献力量！\n\n> **重要：** 贡献前请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## 📄 许可证\n\n本项目采用 **GNU Affero General Public License v3.0（AGPL-3.0）** 开源，\n可自由用于个人学习、研究、试验、教育或非营利科研活动等非商业用途；\n\n\n\n\u003Ch2>🚀 Sponsor \u002F 赞助 \u003C\u002Fh2>\n\u003Cbr>\n\u003Cdiv align=\"center\">\n\u003Ca href=\"https:\u002F\u002Faihubmix.com\u002F?aff=17EC\">\n  \u003Cimg src=\".\u002Fassets\u002Flogo_aihubmix.png\" alt=\"AIHubMix\" style=\"height:48px;\">\n\u003C\u002Fa>\n\u003Cp>感谢AIHubMix对本项目的赞助\u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\n\u003Cdiv align=\"center\">\n\n \u003Cbr>\n\n\u003Ca href=\"https:\u002F\u002Fapi.chatfire.site\u002Flogin?inviteCode=A15CD6A0\">\u003Cimg width=\"200\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fd6bd255f-ba2c-4ea3-bd90-fef292fc3397\" \u002F>\n\u003C\u002Fa>\n\n\n感谢\u003Ca href=\"https:\u002F\u002Fapi.chatfire.site\u002Flogin?inviteCode=A15CD6A0\">AI火宝\u003C\u002Fa>对本项目的赞助\n \n\u003C\u002Fdiv>\n\n\n\n## 致谢\n\n- 项目贡献者们：\n\n[![Contributors](https:\u002F\u002Fcontrib.rocks\u002Fimage?repo=Anionex\u002Fbanana-slides)](https:\u002F\u002Fgithub.com\u002FAnionex\u002Fbanana-slides\u002Fgraphs\u002Fcontributors)\n\n- [Linux.do](https:\u002F\u002Flinux.do\u002F): 新的理想型社区\n  \n## 赞赏\n\n开源不易🙏如果本项目对你有价值，欢迎请开发者喝杯咖啡☕️\n\n\u003Cimg width=\"240\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Ffd7a286d-711b-445e-aecf-43e3fe356473\" \u002F>\n\n感谢以下朋友对项目的无偿赞助支持：\n> @雅俗共赏、@曹峥、@以年观日、@John、@胡yun星Ethan, @azazo1、@刘聪NLP、@🍟、@苍何、@万瑾、@biubiu、@law、@方源、@寒松Falcon\n> 如对赞助列表有疑问，可\u003Ca href=\"mailto:davidyang042@gmail.com\">联系作者\u003C\u002Fa>\n \n## 📈 项目统计\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F#Anionex\u002Fbanana-slides&type=Timeline&legend=top-left\">\n\n \u003Cpicture>\n\n   \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=Anionex\u002Fbanana-slides&type=Timeline&theme=dark&legend=top-left\" \u002F>\n\n   \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=Anionex\u002Fbanana-slides&type=Timeline&legend=top-left\" \u002F>\n\n   \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=Anionex\u002Fbanana-slides&type=Timeline&legend=top-left\" \u002F>\n\n \u003C\u002Fpicture>\n\n\u003C\u002Fa>\n\n\u003Cbr>\n","Banana Slides 是一个基于 nano banana pro 的原生 AI PPT 生成应用，旨在快速将想法转化为专业的演示文稿。其核心功能包括支持任意模板图片上传、智能解析素材、根据一句话或大纲自动生成PPT，并允许用户口头修改指定区域后一键导出可编辑的PPT文件。该应用利用先进的AI技术，如文档识别和大语言模型，确保生成的内容既美观又符合用户需求。适用于需要迅速制作高质量演示文稿的各种场景，无论是设计新手还是专业人士，都能从中受益。教育工作者也能利用它高效地将教学内容转换为图文并茂的教案PPT，提升课堂体验。",2,"2026-06-11 03:39:28","high_star"]