# Opentu (开图) PPT 能力规划与实现方案 > 基于 AiPPT (docmee.cn) + [ai-to-pptx](https://github.com/SmartSchoolAI/ai-to-pptx) + [banana-slides](https://github.com/snakeying/banana-slides)(蕉幻)+ [LandPPT](https://github.com/sligter/LandPPT) + [NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) 项目 Review 结合 aitu 现有架构梳理 ## 现有基础 aitu 已具备以下 PPT 相关基础设施: | 能力 | 现状 | 说明 | |------|------|------| | Frame 容器 | ✅ 已实现 | 预设 PPT 16:9 (1920×1080) / 4:3 (1024×768) | | 幻灯片播放 | ✅ 已实现 | `FrameSlideshow` 全屏播放,键盘导航,画笔/激光笔/橡皮擦 | | Frame 管理面板 | ✅ 已实现 | `FramePanel` 列表、搜索、拖拽排序、重命名、删除 | | 基础元素 | ✅ 已实现 | 文本/图形/图片/连线/思维导图/流程图 | | 填充系统 | ✅ 已实现 | 纯色/渐变(线性+径向)/图片填充 | | 文本特效 | ✅ 已实现 | 字体/阴影/发光/渐变文字 | | AI 内容生成 | ✅ 已实现 | Gemini 图片、Mermaid 图表、思维导图、SVG 生成 | | MCP 工具体系 | ✅ 已实现 | 可扩展的 AI 工具接口 | --- ## 能力规划(按优先级排序) ### P0 — AI 一键生成 PPT **价值**:最高,是产品差异化核心能力,AiPPT 的核心卖点 **复杂度**:中高 **AiPPT 参考**:`index.html` 三步流程 (主题 → 大纲 → PPT) #### 实现方案 **流程**:用户输入主题 → AI 生成 Markdown 大纲 → 用户编辑大纲 → AI 按大纲逐页生成 Frame 内容 **具体步骤**: 1. **新增 MCP 工具 `generate_ppt`** - 输入:主题 / 大纲 Markdown - AI 返回结构化 JSON:每页的标题、正文、布局类型、图片提示词 - 参考 AiPPT 的大纲格式(Markdown 层级标题) 2. **PPT 布局引擎** (`services/ppt-layout-engine.ts`) - 预定义 5-8 种版式:封面页、目录页、标题+正文、图文左右、图文上下、纯图、对比页、结尾页 - 每种版式对应一组元素的坐标/尺寸/样式规则 - 自动创建 Frame (1920×1080) 并在其中放置元素 3. **大纲编辑器 UI** - 复用 Chat Drawer 侧边栏,展示 Markdown 大纲 - 支持增删改拖拽章节 - 确认后触发逐页生成 4. **流式生成体验** - 借鉴 AiPPT 的 SSE 流式传输,逐页生成、逐页渲染 - 利用现有 WorkZone 展示生成进度 **数据结构参考**: ```typescript interface PPTOutline { title: string; pages: PPTPageSpec[]; } interface PPTPageSpec { layout: 'cover' | 'toc' | 'title-body' | 'image-text' | 'comparison' | 'ending'; title: string; subtitle?: string; bullets?: string[]; imagePrompt?: string; // AI 图片生成提示词 notes?: string; // 演讲者备注 } ``` #### ai-to-pptx 借鉴补充 > 以下内容借鉴自 [ai-to-pptx](https://github.com/SmartSchoolAI/ai-to-pptx) 项目分析 **1. 多种输入源支持** ai-to-pptx 的 `StepOneInputData.tsx` 支持 5 种输入模式,aitu 可借鉴: | 输入模式 | 说明 | aitu 实现建议 | |---------|------|--------------| | 文本主题 | 直接输入主题关键词 | 已在规划中 | | 多行文本导入 | 粘贴长文本,AI 提炼大纲 | 新增:Chat Drawer 支持文本粘贴输入 | | 文件上传 | 上传 Word/PDF/TXT,提取内容 | 新增:复用现有文件上传能力 | | 网页 URL 抓取 | 输入网页地址,AI 爬取内容 | 新增:后端增加 URL 内容抓取接口 | | 导入大纲 | 直接导入 Markdown 大纲 | 新增:跳过 AI 生成大纲步骤 | **2. 生成选项控制** ai-to-pptx 提供高级生成选项,可提升用户体验: - **篇幅控制**:较短 (10-15 页) / 常规 (20-30 页) / 更长 (25-35 页) - **语言选择**:中文 / 英文 / 法语 / 阿拉伯语 - **额外要求**:自由文本输入,用于补充 AI 生成约束(如"偏商务风格"、"多用数据图表") 建议在 `generate_ppt` MCP 工具中增加 `options` 参数: ```typescript interface PPTGenerateOptions { pageCount?: 'short' | 'normal' | 'long'; // 篇幅控制 language?: string; // 生成语言 extraRequirements?: string; // 额外要求 } ``` **3. 异步生成 + 进度追踪** ai-to-pptx 的 `StepFiveGeneratePpt.tsx` 采用异步生成模式: - 后端异步生成 PPTX,前端轮询 `asyncPptInfo` 接口获取增量数据 - 返回 `{ current, total, pages[] }` 实时显示生成进度 - 适合大量页面(20-35 页)场景,避免请求超时 aitu 建议: - 利用现有 Service Worker 后台任务机制,实现 PPT 逐页生成 - 每生成一页即渲染到画布,用户可实时看到进度 - 参考 `task-queue-service.ts` 的任务队列模式 **4. gzip 压缩传输** ai-to-pptx 使用 `pako` (gzip) + base64 编码传输大体量 PPT JSON 数据,显著减少网络传输: - 一个 30 页 PPT 的 JSON 数据可达数 MB - gzip 压缩率约 70-80%,base64 编码后仍比原始 JSON 小 50%+ - aitu 可在 AI 生成结果较大时启用压缩传输 #### banana-slides 借鉴补充 > 以下内容借鉴自 [banana-slides](https://github.com/snakeying/banana-slides)(蕉幻)项目分析 **1. 三种创建模式** banana-slides 的 `Project` 模型 (`backend/models/project.py`) 定义了 `creation_type` 字段,支持三种输入模式: | 创建模式 | `creation_type` 值 | 说明 | aitu 实现建议 | |---------|-------------------|------|--------------| | 灵感模式 | `'idea'` | 一句话输入,AI 自动生成完整大纲 | 已在 P0 流程中覆盖 | | 大纲模式 | `'outline'` | 粘贴大纲文本,AI 解析为结构化格式(保留原文不修改) | 新增:支持直接导入大纲文本,调用 `parse_outline_text` 解析 | | 描述模式 | `'descriptions'` | 提供完整页面描述,AI 解析出大纲并切分每页描述 | 新增:高级输入模式,用户可精确控制每页内容 | 每种模式对应不同的 prompt 路径: - `idea` → `get_outline_generation_prompt()` → `get_page_description_prompt()` - `outline` → `get_outline_parsing_prompt()`(保留原文) → `get_page_description_prompt()` - `descriptions` → `get_description_to_outline_prompt()` + `get_description_split_prompt()` aitu 建议在 `generate_ppt` MCP 工具中增加 `mode` 参数: ```typescript interface PPTGenerateOptions { mode?: 'idea' | 'outline' | 'description'; // 创建模式 // ...existing options } ``` **2. AI 精炼交互(自然语言迭代修改)** banana-slides 在大纲和描述编辑阶段提供 `AiRefineInput` 组件 (`frontend/src/components/shared/AiRefineInput.tsx`),用户可用自然语言修改已生成的内容: - 组件内置历史记录管理,每次提交自动记录修改请求 - 支持 Ctrl+Enter / Cmd+Enter 快捷键提交 - 后端精炼 prompt 保留完整修改历史作为上下文,支持多轮迭代: - `get_outline_refinement_prompt(current_outline, user_requirement, project_context, previous_requirements, language)` - `get_descriptions_refinement_prompt(current_descriptions, user_requirement, project_context, outline, previous_requirements, language)` - 用例示例:「增加一页关于市场分析的内容」「将整体风格改为更商务化」「删除第三页,合并第四和第五页」 aitu 实现建议: - 在大纲编辑器 UI 底部集成类似的 AI 辅助输入框 - 后端新增 `refine_outline` / `refine_content` MCP 工具 - 保留修改历史上下文,提升多轮迭代质量 - 详见 **P12 — AI 精炼交互** **3. 参考文件智能解析** banana-slides 的 `FileParserService` (`backend/services/file_parser_service.py`) 实现了强大的文件解析能力: | 文件类型 | 解析方式 | 说明 | |---------|---------|------| | TXT / MD | 直接读取 | 支持 UTF-8 / GBK 编码自动检测 | | XLSX / XLS / CSV | `MarkItDown` 库 | 表格转 Markdown 格式 | | PDF / DOCX / PPTX 等 | **MinerU** 在线 API | 复杂文档版面分析,保留结构 | MinerU 解析流程(4 步): 1. 获取上传 URL → 2. 上传文件 → 3. 轮询解析结果(最长 600s) → 4. **AI 增强图片描述** 关键创新:解析后自动为文档中无 alt text 的图片并行生成 AI caption(支持 Gemini / OpenAI),提升 AI 理解上下文的能力。解析结果以 Markdown 格式作为 AI 生成 PPT 的参考上下文,文档中的图片可被直接引用到 PPT 中(`![图片描述](/files/mineru/xxx/image.png)`)。 aitu 实现建议: - 复用现有文件上传能力 + 后端集成 MinerU 或类似的文档解析服务 - 参考文件内容作为 `ProjectContext.reference_files_content` 传入 AI prompt - 图片 caption 生成可复用现有 Gemini API **4. 分级 Prompt 设计体系** banana-slides 的 `prompts.py`(930 行,36KB)展示了精心设计的 17 个 prompt 函数,覆盖 PPT 生成全链路: | 阶段 | Prompt 函数 | 用途 | |------|-----------|------| | 大纲生成 | `get_outline_generation_prompt()` | idea → 结构化大纲(支持简单/章节两种格式) | | 大纲解析 | `get_outline_parsing_prompt()` | 用户文本 → 结构化大纲(保留原文不修改) | | 页面描述 | `get_page_description_prompt()` | 逐页生成详细视觉描述(含文字简洁要求、图片引用规则) | | 图片生成 | `get_image_generation_prompt()` | 描述 → AI 图片 prompt(含设计指南、模板参考、素材提示) | | 图片编辑 | `get_image_edit_prompt()` | 编辑指令 → 修改 prompt | | 大纲精炼 | `get_outline_refinement_prompt()` | 自然语言修改大纲(保留修改历史上下文) | | 描述精炼 | `get_descriptions_refinement_prompt()` | 自然语言修改描述 | | 描述转大纲 | `get_description_to_outline_prompt()` | 完整描述文本 → 结构化大纲 | | 描述切分 | `get_description_split_prompt()` | 完整描述 → 每页描述 | | 背景生成 | `get_clean_background_prompt()` | 纯背景图(用于可编辑 PPTX 导出) | | 文字属性提取 | `get_text_attribute_extraction_prompt()` | 单个文字元素的字体/颜色/大小提取 | | 批量文字提取 | `get_batch_text_attribute_extraction_prompt()` | 全图文字元素批量属性提取 | | 画质增强 | `get_quality_enhancement_prompt()` | Inpainting 后画质修复 | 语言配置支持 4 种:`zh`(中文) / `en`(English) / `ja`(日本語) / `auto`(自动检测) aitu 建议: - 建立类似的分级 prompt 管理模块,每个阶段独立 prompt 函数 - prompt 中内置语言控制和输出格式约束 - 为每种版式/布局类型定义专用的生成 prompt **5. 项目级额外要求** banana-slides 的 `Project` 模型包含 `extra_requirements` 字段,其内容会追加到每页 AI 生成的 prompt 中,影响全局生成风格。例如: - 「所有页面使用蓝色系配色」 - 「图片风格偏向扁平插画」 - 「文字内容偏向技术受众」 aitu 建议在 PPTGenerateOptions 中增加 `extraRequirements` 字段。 **6. 多 AI Provider 工厂模式** banana-slides 的 `AIService` (`backend/services/ai_service.py`) 实现了灵活的多 Provider 架构: | Provider 格式 | TextProvider | ImageProvider | |-------------|-------------|--------------| | `gemini` (默认) | `GenAITextProvider` | `GenAIImageProvider` | | `openai` | `OpenAITextProvider` | `OpenAIImageProvider` | | `vertex` | `GenAITextProvider` (vertexai=True) | `GenAIImageProvider` (vertexai=True) | 核心设计: - 文本和图像 provider **独立配置**,可混合使用(如文本用 Gemini、图片用 OpenAI) - 推理模式(thinking budget)独立控制:`enable_text_reasoning` / `enable_image_reasoning` - 运行时可通过设置页切换,无需重启应用 - 工厂函数:`get_text_provider(model)` / `get_image_provider(model)` aitu 建议: - 现有 Gemini API 可扩展为 Provider 工厂模式 - 文本理解和图片生成可选用不同模型,发挥各自优势 - 在系统设置中提供 Provider 切换入口 #### LandPPT 借鉴补充 > 以下内容借鉴自 [LandPPT](https://github.com/sligter/LandPPT) 项目分析(Python 3.11 + FastAPI + SQLAlchemy 全栈 AI PPT 平台) **1. 深度研究驱动生成(DEEP 方法论)** LandPPT 的 `DEEPResearchService` (`services/deep_research_service.py`) 实现了 **DEEP 研究方法论**(Define → Explore → Evaluate → Present),在 AI 生成 PPT 之前先对主题进行深度网络调研: | 阶段 | 含义 | 实现 | |------|------|------| | **D**efine | 定义研究范围 | 解析主题,生成多轮搜索查询 | | **E**xplore | 探索信息源 | Tavily API + SearXNG 双引擎搜索 | | **E**valuate | 评估分析 | AI 分析搜索结果,提取关键发现 | | **P**resent | 呈现报告 | 生成结构化研究报告作为 PPT 上下文 | **研究报告数据结构**: ```python @dataclass class ResearchReport: topic: str language: str # 'zh' / 'en' steps: List[ResearchStep] # 多轮搜索步骤 executive_summary: str # 执行摘要 key_findings: List[str] # 关键发现 recommendations: List[str] # 建议 sources: List[str] # 来源列表 total_duration: float # 总耗时 ``` 研究报告作为 `research_section` 参数传入大纲生成 prompt,显著提升内容的深度和准确性。 aitu 实现建议: - 在 PPT 生成流程中增加可选的「深度研究」步骤 - 复用现有网络搜索能力(如有),或集成 Tavily API - 研究报告作为 AI 生成 PPT 的上下文参考 - 详见 **P16 — 深度研究驱动 PPT** **2. 角色级 AI Provider 配置** LandPPT 的 `EnhancedPPTService` (`services/enhanced_ppt_service.py`, 7295 行) 实现了**角色级 AI 模型配置**——不同生成阶段可使用不同 AI 模型: | 角色 (Role) | 用途 | 典型配置 | |------------|------|---------| | `outline` | 大纲生成 | 推理能力强的模型(如 GPT-4o / Claude) | | `creative` | 创意内容 | 创造力强的模型 | | `image_prompt` | 图片提示词 | 适合视觉描述的模型 | | `slide` | 幻灯片内容 | 内容生成模型 | | `editor` | 编辑器助手 | 轻量快速模型(如 GPT-4o-mini) | | `template` | 模板生成 | 设计能力强的模型 | 核心方法: - `_get_current_ai_config(role)` → 获取角色配置(`llm_model`, `llm_provider`, `temperature`, `max_tokens`) - `_get_role_provider(role)` → 获取对应角色的 AI Provider 实例 - `_text_completion_for_role(role, prompt)` → 角色级文本补全 支持的 Provider 实现(`ai/providers.py`, 1094 行): - `OpenAIProvider(AIProvider)` — 兼容所有 OpenAI API 格式(DeepSeek/Kimi/MiniMax/302.AI) - `AnthropicProvider(AIProvider)` — Claude 系列 - `GoogleProvider(AIProvider)` — Gemini 系列 - `OllamaProvider(AIProvider)` — 本地模型 - 所有 Provider 支持多模态消息(文本 + 图片 URL)和流式输出 - 内置 `...` 标签过滤(兼容推理模型输出) aitu 建议: - 扩展现有 Gemini API 为角色级配置 - 大纲用强推理模型、内容用创意模型、编辑用快速模型 - 降低整体成本的同时提升各阶段生成质量 **3. 7 种场景模板** LandPPT 的 `AIService` (`services/ai_service.py`) 预定义了 7 种 PPT 场景模板,每种含 `style`、`tone`、`structure` 三个维度: | 场景 ID | 名称 | 风格 | 语调 | 结构 | |--------|------|------|------|------| | `general` | 通用 | 清晰简洁 | 友好专业 | 平衡叙述 | | `tourism` | 旅游 | 生动活泼 | 热情邀请 | 景点+体验+攻略 | | `education` | 教育 | 系统条理 | 循循善诱 | 知识点+案例+练习 | | `analysis` | 分析 | 数据驱动 | 客观理性 | 数据+趋势+建议 | | `history` | 历史 | 庄重叙事 | 深沉厚重 | 时间线+事件+影响 | | `technology` | 科技 | 前沿创新 | 专业前瞻 | 技术+应用+展望 | | `business` | 商务 | 专业正式 | 自信稳重 | 背景+方案+收益 | 每种场景会自动匹配对应的 prompt 策略,用户选择场景后 AI 生成更具针对性的内容。 aitu 建议在 `PPTGenerateOptions` 中增加 `scenario` 参数: ```typescript interface PPTGenerateOptions { scenario?: 'general' | 'tourism' | 'education' | 'analysis' | 'history' | 'technology' | 'business'; // ...existing options } ``` **4. 分级 Prompt 管理架构(6 类模块化 Prompt)** LandPPT 的 prompt 管理采用了精心设计的**模块化架构**,通过 `PPTPromptsManager` 统一管理 6 类 prompt 子模块: | Prompt 模块 | 类名 | 核心方法 | 用途 | |------------|------|---------|------| | **大纲** | `OutlinePrompts` | `get_outline_prompt_zh/en()`, `get_streaming_outline_prompt()` | 生成结构化大纲 JSON | | **内容** | `ContentPrompts` | `get_slide_content_prompt_zh/en()`, `get_enhancement_prompt_zh/en()` | 幻灯片内容+增强 | | **设计** | `DesignPrompts` | `get_style_gene_extraction_prompt()`, `get_creative_template_context_prompt()` | 设计基因提取+HTML生成 | | **系统** | `SystemPrompts` | `get_default_ppt_system_prompt()`, `get_html_generation_system_prompt()` | 系统角色定义 | | **修复** | `RepairPrompts` | `get_repair_prompt()`, `get_json_validation_prompt()`, `get_quality_check_prompt()` | 输出修复+质量检查 | | **演讲稿** | `SpeechScriptPrompts` | `get_single_slide_script_prompt()`, `get_opening_remarks_prompt()` | 演讲稿生成 | 统一管理器 `PPTPromptsManager` 聚合所有子类,通过委托模式暴露 30+ 个 prompt 方法。 大纲输出的 JSON 结构包含丰富的元数据: ```json { "title": "PPT标题", "total_pages": 10, "page_count_mode": "final", "slides": [{ "page_number": 1, "title": "页面标题", "content_points": ["要点1", "要点2"], "slide_type": "title|content|agenda|thankyou", "description": "页面说明", "chart_config": { "type": "bar", "data": {...} } }], "metadata": { "scenario", "language", "total_slides", "enhanced_with_charts", "content_depth" } } ``` **页面类型枚举**:`"title"` / `"content"` / `"agenda"` / `"thankyou"` **页数模式枚举**:`"custom_range"` / `"fixed"` / `"ai_decide"`(三种灵活的页数控制) aitu 建议: - 建立类似的 6 类模块化 prompt 管理架构 - 统一管理器入口,各模块独立维护 - 大纲 JSON 中加入 `chart_config` 支持图表预配置 - 引入修复 prompt 模块,提升 AI 输出质量和容错能力 **5. summeryanyfile 文档处理模块** LandPPT 包含独立的 `summeryanyfile` 子模块,专门处理文件上传 → 结构化摘要的完整流程: | 能力 | 实现 | 说明 | |------|------|------| | **32 种文件格式** | `DocumentProcessor.SUPPORTED_EXTENSIONS` | PDF/PPTX/DOCX/XLSX/图片/音频/压缩包等 | | **MarkItDown 转换** | `MarkItDownConverter` | 复杂文档 → Markdown | | **MinerU API** | `MineruAPIClient` | 高质量 PDF 解析(OCR 109种语言 + 表格 + LaTeX公式) | | **6 种分块策略** | `SemanticChunker` / `RecursiveChunker` / `ParagraphChunker` / `HybridChunker` / `FastChunker` | 适配不同文档类型的智能分块 | | **LangGraph 工作流** | `graph/workflow.py` + `graph/nodes.py` | 基于 LangGraph 的文档分析工作流 | | **7 天缓存** | `FileCacheManager` | 处理结果缓存避免重复解析 | 文档结构分析 prompt 输入变量:`project_topic`, `project_scenario`, `project_requirements`, `target_audience`, `ppt_style` 等 8 个维度。 aitu 建议: - 参考 summeryanyfile 的智能分块策略,优化长文档处理 - MinerU API 集成可同时参考 banana-slides 和 LandPPT 的实现 - 文档处理结果(结构分析 JSON)直接作为 PPT 大纲生成的输入 **6. 进度追踪系统** LandPPT 的 `ProgressTracker` (`services/progress_tracker.py`) 实现了线程安全的 PPT 生成进度追踪: ```python @dataclass class ProgressInfo: task_id: str project_id: str total_slides: int completed_slides: int failed_slides: int skipped_slides: int current_slide: int current_slide_title: str status: str # "running" / "completed" / "failed" message: str start_time: float last_update: float error_details: Dict @property def progress_percentage(self) -> float: ... @property def elapsed_time(self) -> float: ... ``` 支持单页粒度的状态追踪(completed/failed/skipped),全局实例 `progress_tracker = ProgressTracker()`,1 小时自动清理旧任务。 aitu 建议: - 复用现有 Service Worker 后台任务 + 进度追踪模式 - 详见 **P18 — TODO 任务板实时追踪** #### NanoBanana-PPT-Skills 借鉴补充 > 以下内容借鉴自 [NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) 项目分析(Python + Gemini 3 Pro + 可灵 AI 全图片/视频 PPT 生成工具,by 歸藏 @op7418) **1. AI 图片直出 PPT 方案** NanoBanana-PPT-Skills 采用了与前述所有项目截然不同的 PPT 生成范式——**不生成可编辑元素,而是由 AI 直接生成每页 PPT 的完整图片**: | 特性 | 传统方案(ai-to-pptx / banana-slides / LandPPT) | NanoBanana 方案 | |------|----------------------------------------------|----------------| | 输出格式 | 可编辑的 JSON/HTML/PPTX 元素 | 整页 PNG 图片(2K/4K) | | AI 模型 | 文本 LLM(GPT/Gemini/Claude)| 图片生成模型(`gemini-3-pro-image-preview`)| | 设计质量 | 受限于 HTML/CSS 排版能力 | **电影级渲染质量**,无 CSS 限制 | | 可编辑性 | ✅ 高 | ❌ 低(图片不可编辑) | | 生成速度 | 多轮 AI 调用(大纲→内容→模板→渲染)| **单次 AI 调用生成完整页面** | **核心生成流程** (`generate_ppt.py`, 452 行): ``` 用户文档 → Claude Code 内容规划 → 逐页生成 Prompt → Gemini 3 Pro 图片生成 → HTML 播放器 ``` **Prompt 构建逻辑** (`generate_prompt()`): 1. 加载风格模板 Markdown(`styles/*.md`) 2. 根据页面类型(`cover` / `data` / `content`)选择对应模板段落 3. 拼合:`基础风格提示词 + 页面类型模板 + 实际内容 + 分辨率指令` 4. 关键参数:`gemini-3-pro-image-preview` 模型、16:9 宽高比、2K(2048×1152) 或 4K(4096×2304) 分辨率 aitu 实现建议: - **双轨并行**:保留现有元素级 PPT 生成(可编辑)+ 新增「AI 图片直出」模式(高视觉质量) - 利用现有 Gemini 图片生成能力,新增 `generate_ppt_as_images` MCP 工具 - 图片直出模式适合快速演示、社交分享等不需要二次编辑的场景 - 详见 **P21 — PPT 视频导出** **2. Markdown 风格模板系统** NanoBanana 使用 **Markdown 文件** 定义视觉风格(`styles/` 目录),每个风格文件包含: | 字段 | 说明 | 示例 | |------|------|------| | `style_id` | 风格标识 | `gradient-glass` / `vector-illustration` | | `适配模型` | 推荐的图片生成模型 | `Nano Banana Pro`, `Seedream`, `Lovart` | | `基础提示词` | 全局视觉风格描述 | Apple Keynote 极简 + 玻璃拟态 + 虹彩渐变 | | 封面页模板 | cover 页面提示词 | 3D 玻璃物体 + 极光波浪 + 大字标题 | | 内容页模板 | content 页面提示词 | Bento 网格 + 磨砂玻璃卡片 + 霓虹高光 | | 数据页模板 | data 页面提示词 | 分屏布局 + 发光 3D 图表 + 数据标注 | | 技术参数 | 模型/比例/分辨率 | `gemini-3-pro-image-preview`, 16:9, 2K/4K | **当前内置 2 种风格**: - **渐变毛玻璃卡片** (`gradient-glass.md`):科技感、Apple 风格、虹彩渐变 + 玻璃拟态 - **矢量插画** (`vector-illustration.md`):温暖扁平化、统一黑色轮廓线、复古配色 aitu 建议: - 为 AI 图片直出模式设计 Markdown 风格模板体系 - 风格模板可作为 P2 模板系统的补充维度(元素布局模板 + 视觉风格模板) - 支持用户自定义风格描述或选择预设风格 **3. 6 阶段 Claude Code Skill 工作流** NanoBanana 设计了完整的 **Claude Code Skill 工作流**(`SKILL.md`, 675 行),适配不同页数的内容规划策略: | 页数范围 | 结构模板 | |---------|---------| | ~5 页 | 封面 + 3 内容 + 结尾 | | 5-10 页 | 封面 + 目录 + 5-7 内容 + 数据 + 结尾 | | 10-15 页 | 封面 + 目录 + 8-12 内容(含 2 数据) + 结尾 | | 20-25 页 | 封面 + 目录 + 16-22 内容(含 4 数据) + 结尾 | 每个阶段: 1. **收集用户输入**:文档内容、风格选择、页数、分辨率、是否生成视频 2. **文档分析与内容规划**:分析文档 → 按页数模板规划每页内容和类型 3. **生成 PPT 图片**:调用 `generate_ppt.py` 逐页生成 4. **生成转场提示词**:调用 Claude API 分析相邻图片差异,生成转场描述 5. **生成转场视频**:调用可灵 AI API 生成页间转场动画 6. **返回结果**:输出图片+视频+HTML播放器 aitu 建议: - 参考此页数自适应内容规划策略,在 P0 大纲生成中按页数范围调整结构模板 - 内容规划先于 AI 调用,提升生成效率和一致性 --- ### P1 — PPT 导出 (.pptx) **价值**:高,用户核心需求,完成 PPT 创作闭环 **复杂度**:中 **AiPPT 参考**:`json2ppt` API 将 JSON 转回 .pptx #### 实现方案 **技术选型**:使用 `pptxgenjs` (纯前端 JS 库,无需后端) **实现路径**: 1. **Frame 到 PPTX 转换器** (`services/pptx-export-service.ts`) - 遍历画布中所有 Frame,按顺序作为幻灯片页 - 将 Frame 内的 Plait 元素转换为 pptxgenjs 元素: - `geometry` (文本框/形状) → `addText()` / `addShape()` - `image` → `addImage()` (base64 / URL) - `line` / `arrow` → `addShape()` with connector - `mindmap` → 展开为文本+连线 - `freehand` → SVG path → `addShape()` - 保留填充、字体、颜色等样式 2. **元素映射表**: | Plait 元素 | pptxgenjs API | 说明 | |-----------|---------------|------| | geometry (rect/ellipse/...) | `addShape(type, opts)` | 形状类型映射 | | geometry + text | `addText(text, opts)` | 带文本的形状 | | image | `addImage({ data/path })` | 图片导出 | | arrow/line | `addShape('line', opts)` | 连接线 | | freehand | `addShape('custGeom', path)` | 自由画笔转路径 | | 背景 | `slide.background` | Frame 背景 | 3. **UI 入口** - FramePanel 操作栏增加"导出 PPT"按钮 - 支持选择导出范围(全部 Frame / 选中 Frame) #### banana-slides 借鉴补充 > 以下内容借鉴自 [banana-slides](https://github.com/snakeying/banana-slides)(蕉幻)项目分析 **1. 三种导出格式** banana-slides 的 `ExportService` (`backend/services/export_service.py`) 支持三种导出格式: | 导出格式 | 方法 | 实现方式 | 特点 | |---------|------|---------|------| | PPTX(图片版) | `create_pptx_from_images()` | `python-pptx` 库,每页一张全屏图片 (16:9) | 同步,快速,但不可编辑 | | PDF | `create_pdf_from_images()` | 优先 `img2pdf`(低内存),失败回退 `Pillow` | 同步,通用格式 | | **可编辑 PPTX** | `create_editable_pptx_with_recursive_analysis()` | 递归版面分析 + 背景分离 + 文本/图片分层 | **异步,最具创新性** | **2. 可编辑 PPTX 逆向导出(核心创新)** banana-slides 最具创新性的功能是将 AI 生成的**图片**逆向转换为**可编辑 PPTX**: **处理流程**(4 阶段): 1. **版面分析** (5%-40%):`ImageEditabilityService.make_image_editable()` 递归分析图片中的文字/图片/表格区域 2. **文本样式提取** (45%-70%):混合策略 `_batch_extract_text_styles_hybrid()` - 全局 AI 识别:`is_bold` / `is_italic` / `is_underline` / `text_alignment` - 单元素裁剪识别:精确提取 `font_color`(含 `colored_segments` 多色段) 3. **构建 PPTX** (75%-95%):`PPTXBuilder` 递归添加元素到幻灯片 4. **保存输出** (95%-100%) **背景修复(Inpainting)**:识别出文字/图片元素后,需要消除这些元素并重建背景: | Inpainting Provider | 实现 | 说明 | |--------------------|----|------| | `generative`(火山引擎/Gemini) | `InpaintingService` | AI 生成式修复,效果最好 | | `baidu`(百度) | `InpaintingService` | 传统图像修复算法 | | `hybrid` | 混合模式 | 结合两种方式,自动选择最优 | **错误处理**: - `ExportError` 异常含 `error_type` 枚举:`style_extraction` / `text_render` / `image_add` / `inpaint` / `config` / `service` - `ExportWarnings` 警告收集器:允许部分失败继续导出(`export_allow_partial` 配置) aitu 实现建议: - 虽然 aitu 是元素级编辑(不需要逆向解析),但 **Inpainting 能力** 可用于「删除元素后自动补全背景」 - **版面分析能力** 可用于 PPT 导入场景(P6),辅助识别导入 PPT 中的元素层次 - 考虑在导出时提供「图片版 PPTX」和「可编辑 PPTX」两种选项 #### LandPPT 借鉴补充 > 以下内容借鉴自 [LandPPT](https://github.com/sligter/LandPPT) 项目分析 **1. 五种导出格式** LandPPT 支持比 banana-slides 更丰富的导出格式: | 导出格式 | 实现方式 | 说明 | |---------|---------|------| | **PPTX** | `python-pptx` / Playwright HTML→PPTX | 可编辑幻灯片格式 | | **PDF** | Playwright 截图 → PDF 拼合;或 `pdfkit` (wkhtmltopdf) | 通用文档格式 | | **HTML** | 直接导出 HTML 模板渲染结果 | 可在浏览器直接演示 | | **DOCX** | `python-docx` 生成 Word 文档 | 适合内容再编辑 | | **Markdown** | 结构化导出大纲+内容 | 适合二次处理 | **2. Playwright + Apryse 双引擎导出** LandPPT 的 `PyppeteerPdfConverter` (`services/pyppeteer_pdf_converter.py`, 99.9KB) 使用 **Playwright** 浏览器引擎实现高保真 HTML → PDF 转换: - 每页 HTML 模板在无头浏览器中渲染 - 截取 1280×720 画布为高分辨率图片 - 拼合为 PDF 或插入 PPTX 同时集成 **Apryse SDK**(原 PDFTron,`pdf_to_pptx_converter.py`)实现专业级 PDF → PPTX 转换: - 自动下载平台对应 SDK(Windows/Linux/macOS) - 高质量保留原始排版和可编辑性 - 需要 `APRYSE_LICENSE_KEY` 授权 aitu 实现建议: - PPTX 导出优先使用前端 `pptxgenjs`(已规划) - PDF 导出可考虑 Playwright 无头浏览器方案作为高保真备选 - 新增 Markdown 导出选项(成本最低,适合二次处理) - HTML 导出可直接复用 PPT 播放器的渲染结果 --- ### P2 — PPT 模板/主题系统 **价值**:高,降低用户使用门槛 **复杂度**:中 **AiPPT 参考**:`slideMaster` → `slideLayout` → `page` 三级继承 #### 实现方案 1. **PPT 模板数据结构** (`types/ppt-template.types.ts`) ```typescript interface PPTTemplate { id: string; name: string; thumbnail: string; theme: PPTTheme; layouts: PPTLayout[]; // 版式集合 } interface PPTTheme { primaryColor: string; secondaryColor: string; backgroundColor: string; fontFamily: string; headingFontFamily: string; } interface PPTLayout { type: 'cover' | 'toc' | 'content' | 'image-text' | 'ending'; elements: PlaitElement[]; // 版式中的占位元素模板 } ``` 2. **内置模板库** - 5-10 套预设模板(商务/科技/教育/简约/创意等) - 每套包含 5-8 种版式 - 存储为 JSON,打包在应用中 3. **主题色提取**(借鉴 AiPPT `calcSubjectColor()`) - 分析上传图片的像素分布,提取主色调 - 自动生成配色方案应用到模板 4. **模板选择 UI** - AI 生成 PPT 流程第二步:选择模板 - 模板缩略图网格展示 #### ai-to-pptx 借鉴补充 **1. 模板制作规范** ai-to-pptx 的 `README_Make_Template.md` 定义了严格的模板规范,aitu 可参考建立自己的模板标准: | 页面类型 | 元素数量 | 布局要求 | |---------|---------|---------| | 首页 (cover) | 2 个文本 | 标题 + 副标题/作者 | | 目录页 (toc) | 13 个文本 | 目录标题 + 6 组(序号+内容) | | 章节标题页 (section) | 2 个文本 | 章节序号 + 章节标题 | | 内容页 (content) | 按布局变化 | 标题 + N×M 网格结构 | **2. 内容页 6 种网格布局** ai-to-pptx 定义了 6 种内容页网格布局,每种建议 2-8 种不同风格变体: | 布局 | 结构 | 适用场景 | 建议变体数 | |------|------|---------|-----------| | 2×2 | 标题 + 4 格 | 四象限对比 | 2-3 种 | | 2×3 | 标题 + 6 格 | 三列两行内容 | 2-3 种 | | 3×2 | 标题 + 6 格(3行2列) | 并排对比 | **5-8 种(推荐)** | | 3×3 | 标题 + 9 格 | 九宫格展示 | **5-8 种(推荐)** | | 4×2 | 标题 + 8 格 | 详细列表 | 2-3 种 | | 4×3 | 标题 + 12 格 | 密集信息 | 2-3 种 | aitu 实现建议: - 在 `PPTLayout.type` 中扩展支持网格布局类型 - 每种版式定义元素的坐标/尺寸比例规则,而非绝对像素值 - 使用 Frame 预设尺寸 (1920×1080) 下的百分比定位 **3. 更换模板(保留内容)** ai-to-pptx 的 `StepFiveGeneratePpt.tsx` 支持生成后更换模板: - 调用 `changePptxTemplate` 传入新模板 ID,保留已生成的文字内容 - 后端自动将内容重新映射到新模板的布局中 - 用户无需重新生成即可切换风格 aitu 建议: - 将 PPT 内容层(文字、数据)与样式层(模板、主题)分离 - 更换模板时只需重新应用版式规则和主题色 - 利用现有 Frame 容器机制,遍历 Frame 内元素重新布局 #### banana-slides 借鉴补充 > 以下内容借鉴自 [banana-slides](https://github.com/snakeying/banana-slides)(蕉幻)项目分析 **1. 预设风格系统(AI 风格描述替代传统 JSON 模板)** banana-slides 采用了一种与传统 JSON 模板截然不同的风格系统:**用自然语言描述视觉风格**,直接作为 AI 图片生成 prompt 的一部分。 `frontend/src/config/presetStyles.ts` 定义了 8 种预设风格: | # | 风格 ID | 中文名称 | 核心视觉特征 | |---|--------|---------|-------------| | 1 | `business-simple` | 简约商务 | 海军蓝+白色,麦肯锡风格,无衬线字体 | | 2 | `tech-modern` | 现代科技 | 赛博朋克,午夜黑+电光蓝,全息渐变 | | 3 | `academic-formal` | 严谨学术 | 米白纸张质感,衬线字体,学术排版 | | 4 | `creative-fun` | 活泼创意 | 孟菲斯风格,手绘涂鸦,不规则形状 | | 5 | `minimalist-clean` | 极简清爽 | 北欧设计,70%留白,细线条 | | 6 | `luxury-premium` | 高端奢华 | 曜石黑+香槟金,Art Deco 几何 | | 7 | `nature-fresh` | 自然清新 | 米色+森林绿,水彩植物元素 | | 8 | `gradient-vibrant` | 渐变活力 | 全息渐变色,玻璃拟态,流体形状 | 每种风格包含极其详细的视觉描述(配色方案、材质、排版规则、字体选择、渲染要求),例如「简约商务」风格描述涵盖: - 配色:海军蓝 (#1a365d) + 白色 + 浅灰辅助色 - 排版:大标题左对齐、正文区域限制在右 2/3、关键数字突出显示 - 材质:纯色背景、无渐变无纹理、细灰色分割线 - 渲染:4K 分辨率、干净锐利的矢量感 **接口定义**: ```typescript interface PresetStyle { id: string; nameKey: string; // i18n 翻译 key descriptionKey: string; // i18n 翻译 key(完整视觉描述) previewImage?: string; // 预览图路径(如 /preset-previews/business-simple.webp) } ``` **2. 自定义模板图片** 除了预设风格外,用户还可以: - 上传自定义模板图片(`Project.template_image_path`),AI 将参考该图片的风格生成 PPT - 输入纯文字风格描述(`Project.template_style`),无模板图时使用文字描述 aitu 实现建议: - **混合模板方案**:在传统 JSON 模板(定义布局和占位元素)的基础上,增加「AI 风格描述」层 - JSON 模板控制布局结构(元素位置/尺寸) - 风格描述控制视觉风格(配色/材质/字体/渲染风格) - 两者可独立切换,组合使用 - 预设 5-8 种风格描述,类似 banana-slides 的 `presetStyles` - 支持用户上传参考图片或输入自定义风格描述 - 风格描述通过 `extraRequirements` 或专用字段传入 AI prompt #### LandPPT 借鉴补充 > 以下内容借鉴自 [LandPPT](https://github.com/sligter/LandPPT) 项目分析 **1. AI 自动生成母版模板** LandPPT 的 `GlobalMasterTemplateService` (`services/global_master_template_service.py`, 47KB) 实现了一套完整的 **AI 驱动模板生成系统**: 核心流程: 1. **创建模板**:`create_template(template_data)` → 检查名称唯一 → AI 生成 HTML 模板 → 自动生成预览图 → 提取样式配置 2. **设计基因提取**:`DesignPrompts.get_style_gene_extraction_prompt(template_code)` 从 HTML 模板中提取 6 维设计基因(色彩、字体、布局、间距、装饰、动效) 3. **创意变化**:`get_creative_variation_prompt()` 和 `get_content_driven_design_prompt()` 生成同风格的变体页面 **数据库模型** (`database/models.py` → `GlobalMasterTemplate`): ```python class GlobalMasterTemplate: template_name: str # 唯一模板名 html_template: Text # 完整 HTML 模板代码 preview_image: Text # Base64 预览图 style_config: JSON # 提取的样式配置 tags: JSON # 标签列表 is_default: bool # 是否默认 is_active: bool # 是否启用 usage_count: int # 使用次数 created_by: str # 创建者 ``` **HTML 模板规范**: - 固定画布 `1280×720px`(16:9) - 使用 Tailwind CSS + Chart.js + Font Awesome - 支持占位符:`{{ page_title }}`, `{{ main_heading }}`, `{{ page_content }}`, `{{ current_page_number }}`, `{{ total_page_count }}` - 严格保留页眉/页脚结构 - 动态内容自适应布局 **2. 25 种预设模板 JSON 系统** LandPPT 的 `template_examples/` 目录包含 **25 种风格各异的预设模板**: | 风格类别 | 模板名称 | |---------|---------| | **中国风** | 中国风、中式书卷风、宣纸风、竹简风 | | **商务** | 商务、简约答辩风、素白风 | | **科技** | 科技风、赛博朋克风、终端风 | | **艺术** | 莫奈风、星月夜风、吉卜力风、Toy风 | | **自然** | 森林绿、清新风、清新笔记 | | **现代** | 模糊玻璃、拟态风、渐变活力(星月蓝)| | **特色** | 五彩斑斓的黑、大气红、速度黄、日落大道、饺子风 | 每个模板 JSON 包含完整 HTML 代码 + 样式配置 + 标签 + 导出信息,例如「商务」模板: ```json { "template_name": "默认商务模板", "description": "现代简约的商务PPT模板...", "html_template": "...(含完整 CSS + HTML + 占位符)...", "tags": ["默认", "商务", "现代", "简约", "深色"], "is_default": false } ``` aitu 实现建议: - **混合模板体系**:JSON 布局模板 + AI 风格描述 + HTML 渲染模板三层叠加 - 内置 10-15 种精选预设模板(覆盖商务/科技/学术/创意/中国风等主流场景) - 支持 AI 按用户描述自动生成新模板(参考 LandPPT 的母版模板生成流程) - 模板支持导入/导出 JSON 格式,方便社区共享 **3. 设计基因提取与创意模板生成** LandPPT 的 `DesignPrompts` (`services/prompts/design_prompts.py`, 581 行) 定义了精细的设计生成提示词体系: | Prompt 方法 | 参数量 | 用途 | |------------|--------|------| | `get_style_gene_extraction_prompt(template_code)` | 1 | 从模板提取设计基因(色彩/字体/布局等 6 维) | | `get_unified_design_guide_prompt(slide_data, page_number, total_pages)` | 3 | A-E 五维统一设计指导 | | `get_creative_variation_prompt(slide_data, page_number, total_pages)` | 3 | 创意变化指导 | | `get_content_driven_design_prompt(slide_data, page_number, total_pages)` | 3 | 内容驱动设计 | | `get_creative_template_context_prompt(...)` | **13** | 核心 HTML 生成(含 slide_data/template_html/style_genes/project 上下文等) | 核心的 `get_creative_template_context_prompt` 方法整合 13 个参数,包括当前幻灯片数据、HTML 模板、设计基因、项目主题/类型/受众/风格等完整上下文,生成单页 HTML。 aitu 建议: - 建立设计基因提取能力,用于模板风格分析和迁移 - 在切换模板时,提取源模板设计基因 → 应用到新模板 - 支持用户上传参考图片 → AI 提取设计基因 → 自动生成匹配风格的模板 --- ### P3 — 图表元素 **价值**:中高,PPT 中数据可视化是刚需 **复杂度**:中 **AiPPT 参考**:`chart.js` 柱状图/饼图/折线图/环形图 Canvas 原生绘制 #### 实现方案 **技术选型**:Mermaid 已有基础图表能力,但 PPT 场景需更专业的图表。两种路线: **路线 A — 移植 AiPPT chart.js(推荐)** - 优势:轻量、无依赖、与 PPT 导出兼容性好 - 实现: 1. 新增 Plait 元素类型 `chart` 2. 将 AiPPT 的 `chart.js` 改造为 TypeScript 模块 3. 创建 `withChart` 插件,在 Canvas 上渲染图表 4. 图表数据编辑面板(类似 Excel 的表格输入) 5. MCP 工具 `insert_chart`:AI 可通过对话插入图表 **路线 B — 集成 ECharts/Chart.js 库** - 优势:功能更强大、图表类型更多 - 劣势:包体积大、PPT 导出需要额外处理 **支持的图表类型(初期)**: - 柱状图 (bar) - 折线图 (line) - 饼图 (pie) - 环形图 (doughnut) #### ai-to-pptx 借鉴补充 **1. 表格元素** ai-to-pptx 的 `element.js` 中 `createTable()` 提供了完整的表格工厂,aitu 当前规划中缺少表格支持: ```typescript // 参考 ai-to-pptx createTable 签名 function createTable( rowColumnDataList: string[][], // 二维表格数据 rowFillStyles?: FillStyle[], // 交替行填充色(循环应用) borderColor?: number, // 边框颜色 fontColor?: FontColor // 字体颜色 ): TableElement ``` 表格样式能力: - 交替行背景色(斑马纹效果) - 自定义边框颜色和线宽 - 单元格文本对齐(水平/垂直) - 单元格内边距 (textInsets) - 字体大小和颜色配置 - 四边独立边框配置(上/右/下/左) aitu 实现建议: - 新增 Plait 元素类型 `table`,或用 `geometry` 组合实现 - 支持 AI 通过 MCP 工具 `insert_table` 自动插入数据表格 - 导出时映射为 `pptxgenjs` 的 `addTable()` API - 优先级可归入 P3,与图表一并实现 **2. 图表数据格式参考** ai-to-pptx `createChart()` 的数据格式值得借鉴: ```typescript // 柱状图/折线图数据格式 const barLineData = [ [' ', '系列1', '系列2', '系列3'], // 表头 ['类别1', '4.3', '2.4', '2'], ['类别2', '2.5', '4.4', '2'], ['类别3', '3.5', '1.8', '3'], ]; // 饼图/环形图数据格式 const pieData = [ [' ', '销售额'], ['第一季度', '8.2'], ['第二季度', '3.2'], ['第三季度', '1.4'], ]; ``` 这种类 Excel 二维数组格式对 AI 生成非常友好,建议作为 `insert_chart` MCP 工具的输入格式。 #### LandPPT 借鉴补充 > 以下内容借鉴自 [LandPPT](https://github.com/sligter/LandPPT) 项目分析 **1. 16+ 种图表类型(含专业图表)** LandPPT 的大纲生成 prompt (`services/prompts/outline_prompts.py`) 在大纲阶段即可为每页预配置 `chart_config`,支持的图表类型远超常规 PPT 工具: | 类别 | 图表类型 | 适用场景 | |------|---------|---------| | **基础** | 柱状图 (bar)、折线图 (line)、饼图 (pie)、环形图 (doughnut) | 通用数据展示 | | **对比** | 条形图 (horizontal bar)、面积图 (area)、瀑布图 (waterfall) | 趋势对比 | | **关系** | 韦恩图 (venn)、和弦图 (chord)、关联图 (network) | 关系展示 | | **统计** | 森林图 (forest)、生存曲线图 (survival)、漏斗图 (funnel) | 学术/医学统计 | | **流程** | 甘特图 (gantt)、词云图 (wordcloud) | 项目管理/文本分析 | | **复杂** | UpSet 图 (upset) | 集合交集可视化 | **大纲中的图表预配置**(AI 在生成大纲时自动建议): ```json { "page_number": 3, "title": "市场分析", "chart_config": { "type": "bar", "data": { "labels": ["Q1", "Q2", "Q3"], "datasets": [...] }, "options": { "title": "季度营收对比" } } } ``` aitu 建议: - 在大纲 JSON 中支持 `chart_config` 字段,AI 大纲阶段即建议图表 - 初期支持 6 种基础图表(bar/line/pie/doughnut/area/funnel) - 中期扩展专业图表(甘特图/瀑布图/韦恩图) - 图表数据格式统一为类 Excel 二维数组 + Chart.js 兼容配置 --- ### P4 — 幻灯片切换动画 **价值**:中,提升演示体验 **复杂度**:中低 **AiPPT 参考**:`animation.js` 进入/退出/强调动画 #### 实现方案 1. **Frame 扩展 transition 属性** ```typescript interface PlaitFrame extends PlaitElement { type: 'frame'; name: string; points: [Point, Point]; transition?: FrameTransition; // 新增 } interface FrameTransition { type: 'none' | 'fade' | 'slide-left' | 'slide-right' | 'slide-up' | 'zoom' | 'dissolve'; duration: number; // ms } ``` 2. **FrameSlideshow 增加过渡效果** - 切换 Frame 时,根据 `transition.type` 应用 CSS 动画 - 方案:在遮罩层和 viewport 切换之间插入过渡动画帧 - 利用 CSS `transition` / `@keyframes` 实现 3. **UI** - FramePanel 中每个 Frame 可设置切换效果 - 下拉选择动画类型 + 时长滑块 #### ai-to-pptx 借鉴补充 **1. 更丰富的页面切场动画** ai-to-pptx `animation.js` 定义了 16 种页面切场动画(`transitionList`),比当前规划的 6 种更丰富: | # | 动画名称 | key | 参数 | |---|---------|-----|------| | 1 | 分割 | split | dir: in | | 2 | 切出 | cut | - | | 3 | 形状 | wedge | - | | 4 | 抽出 | pull | dir: l/r/u/d | | 5 | 推出 | push | dir: u/d/l/r | | 6 | 插入 | cover | dir: d/u/l/r | | 7 | 擦除 | wipe | dir: l/r/u/d | | 8 | 新闻快报 | newsflash | - | | 9 | 梳理 | comb | dir: horz/vert | | 10 | 棋盘 | checker | dir: horz/vert | | 11 | 淡出 | fade | - | | 12 | 溶解 | dissolve | - | | 13 | 百叶窗 | blinds | dir: horz/vert | | 14 | 线条 | randomBar | dir: vert/horz | | 15 | 轮幅 | wheel | spokes: 8 | | 16 | 随机 | random | - | 每种动画支持速度参数:`slow` / `med` / `fast` 建议 aitu 扩展 `FrameTransition.type` 枚举,至少支持前 12 种常用切场效果。 **2. 元素级动画(重要扩展)** ai-to-pptx 除了页面切场,还定义了完整的**元素级动画**体系(`animationList`,共 226 个动画预设),分为三大类: **退场动画 (exit)** — 20 种效果: 消失、飞出(8方向)、百叶窗、盒状、棋盘、圆形扩展、缓慢移除、菱形、向外溶解、渐变、闪烁一次、切出(4方向)、十字形扩展、随机线条、阶梯状、轮子、擦除、缩放、收缩并旋转、螺旋飞出、劈裂 **入场动画 (entrance)** — 与退场动画对称的 20+ 种效果: 出现、飞入(8方向)、百叶窗、盒状、棋盘、圆形扩展、缓慢进入、菱形、溶解、渐变、闪烁一次、切入(4方向)、十字形扩展、随机线条、阶梯状、轮子、擦除、缩放、旋转飞入、螺旋飞入、劈裂、弹跳 **强调动画 (emphasis)** — 24 种效果: 更改填充颜色、更改字体、更改字体颜色、更改字号、更改字形(7个子类型)、放大缩小、更改线条颜色、陀螺旋、透明、加粗闪烁、爆炸、加粗展示、着色、添加下划线、混色、彩色波纹、补色、补色2、对比色、加深、不饱和、忽明忽暗、闪动、颜色延伸、变淡、样式强调、跷跷板、垂直突出显示、波浪线、闪烁、闪现 **动画路径 (path)** — 8 种运动轨迹: 向右、向左、向上、向下、自定义路径等 aitu 实现建议: 1. **Phase 1**(与 P4 同期):先实现 6 种基础切场 + 入场/退场各 5 种基础效果 2. **Phase 2**:扩展完整切场列表 + 强调动画 3. **数据结构扩展**: ```typescript interface ElementAnimation { presetClass: 'entr' | 'exit' | 'emph' | 'path'; // 动画类别 presetId: number; // 动画类型 ID presetSubtype: number; // 方向/变体 duration?: number; // 时长 (ms) startType: number; // 触发方式 (1=单击, 2=与前一动画同时, 3=前一动画之后) text?: boolean; // 是否应用于文本 attr?: Record; // 额外参数(颜色、字体等) } interface PlaitFrame extends PlaitElement { type: 'frame'; name: string; points: [Point, Point]; transition?: FrameTransition; elementAnimations?: Record; // elementId → 动画序列 } ``` #### NanoBanana-PPT-Skills 借鉴补充 > 以下内容借鉴自 [NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) 项目分析 **1. AI 视频转场(图生视频方案)** NanoBanana 在传统 CSS 切换动画之上,开创了 **AI 视频转场**——使用可灵 AI(Kling)将相邻两页 PPT 图片生成转场视频: | 特性 | 传统 CSS 切换动画 | NanoBanana AI 视频转场 | |------|-----------------|---------------------| | 效果 | 淡入淡出/推入/缩放等预设 | **电影级 3D 变形/物理解构** | | 实现 | CSS animation/transition | AI 图生视频(首帧→尾帧) | | 定制性 | 固定预设参数 | 每对页面**独立生成**匹配转场 | | 成本 | 无 | API 调用费用 | **可灵 AI API 封装** (`kling_api.py`, 431 行): ```python class KlingVideoGenerator: API_BASE = "https://api-beijing.klingai.com" def create_video_task( first_frame_image, # 首帧图片(当前页截图) last_frame_image, # 尾帧图片(下一页截图) prompt, # 转场描述提示词 model_name="kling-v2-6", # 可灵 v2.6 模型 duration="5", # 视频时长 5s/10s mode="std", # 标准/专业模式 ) -> task_id def wait_for_completion(task_id, timeout=300, interval=5) -> video_url def download_video(video_url, output_path) ``` **2. 智能转场提示词生成** NanoBanana 提供两种转场提示词生成策略: **策略 A:Claude AI 分析生成** (`transition_prompt_generator.py`, 314 行) - 将两张相邻页面图片(Base64)发送给 Claude(`claude-sonnet-4-5-20250929`) - Claude 分析两页视觉差异,生成匹配的转场描述 - 遵循转场模板框架(`prompts/transition_template.md`) **转场模板框架**: 1. **分析差异**:A 类(关联性强→原地演变)vs B 类(差异巨大→运镜驱动转场) 2. **选择策略**:A 类保持主体位置,微调细节;B 类用推/拉/横移镜头切换场景 3. **构思变化**:主体变化 + 环境变化 + 风格/特效变化 4. **输出规则**:连贯段落、具体画面感、遵守摄像机策略 **策略 B:预设通用模板** (`simple_transition_prompt_generator.py`, 106 行) - 无需 Claude API,使用内置的通用转场描述 - 适用于所有毛玻璃风格 PPT 的默认转场效果 - 包含极光波浪、3D 玻璃解构/重组、磨砂卡片滑入等通用动效 aitu 实现建议: - 在现有 CSS 切换动画(P4)基础上,新增「AI 视频转场」高级选项 - 利用现有 Gemini API 或集成可灵 AI API,实现图生视频转场 - 预设 5-10 种通用转场描述模板,同时支持 AI 自动分析生成 - 详见 **P21 — PPT 视频导出** --- ### P5 — 演讲者备注 **价值**:中,专业演示场景需要 **复杂度**:低 #### 实现方案 1. **Frame 扩展 notes 属性** ```typescript interface PlaitFrame extends PlaitElement { notes?: string; // Markdown 格式备注 } ``` 2. **备注编辑入口** - FramePanel 中 Frame 项展开后显示备注编辑区 - 或双击 Frame 标题栏下方区域编辑 3. **演讲者视图** - 幻灯片播放时,支持"演讲者视图"模式(需要双屏或分窗口) - 主窗口显示幻灯片,副窗口显示备注 + 下一页预览 + 计时器 #### LandPPT 借鉴补充 > 以下内容借鉴自 [LandPPT](https://github.com/sligter/LandPPT) 项目分析 **1. 完整的 AI 演讲稿生成系统** LandPPT 的 `SpeechScriptService` (`services/speech_script_service.py`, 793 行) 实现了远超简单备注的**专业演讲稿生成系统**: **三种生成类型**:`single`(单页)/ `multi`(多页批量)/ `full`(全套含开场白+结束语) **7 种语气风格** (`SpeechTone` 枚举): | 语气 | 枚举值 | 适用场景 | |------|--------|---------| | 正式 | `FORMAL` | 学术报告、商务汇报 | | 随意 | `CASUAL` | 团队分享、内部沟通 | | 说服性 | `PERSUASIVE` | 方案推介、融资路演 | | 教育性 | `EDUCATIONAL` | 培训课程、知识分享 | | 对话式 | `CONVERSATIONAL` | 沙龙分享、圆桌讨论 | | 权威性 | `AUTHORITATIVE` | 行业报告、专家演讲 | | 叙事性 | `STORYTELLING` | 品牌故事、案例分享 | **7 种目标受众** (`TargetAudience` 枚举): `EXECUTIVES` / `STUDENTS` / `GENERAL_PUBLIC` / `TECHNICAL_EXPERTS` / `COLLEAGUES` / `CLIENTS` / `INVESTORS` **3 种语言复杂度** (`LanguageComplexity` 枚举): `SIMPLE`(通俗易懂)/ `MODERATE`(适中专业)/ `ADVANCED`(高度专业) **自定义配置数据结构**: ```python @dataclass class SpeechScriptCustomization: tone: SpeechTone target_audience: TargetAudience language_complexity: LanguageComplexity custom_style_prompt: str # 自定义风格提示(如"幽默轻松") include_transitions: bool # 是否包含过渡语句 include_timing_notes: bool # 是否包含时间标注 speaking_pace: str # 'slow' / 'normal' / 'fast' ``` **演讲稿生成结果**: ```python @dataclass class SlideScriptData: slide_index: int slide_title: str script_content: str # 完整演讲稿文本 estimated_duration: float # 预估时长(秒) speaker_notes: str # 简要提示语 ``` **Prompt 设计** (`services/prompts/speech_script_prompts.py`): - `get_single_slide_script_prompt()` — 单页演讲稿(含上下文:前一页内容、整体结构位置) - `get_opening_remarks_prompt()` — 开场白(含项目主题、受众分析) - `get_closing_remarks_prompt()` — 结束语(含总结回顾、号召行动) - 从 HTML 模板中自动提取文本内容作为演讲稿参考 **数据库持久化** (`database/models.py` → `SpeechScript`): - 支持按幻灯片索引存储/查询 - 记录生成参数(tone/audience/complexity)便于重新生成 - 支持多格式导出(独立的 `SpeechScriptExporter` 服务) aitu 实现建议: - 将当前 P5 从简单的「备注字段」升级为「AI 演讲稿生成」 - 新增 MCP 工具 `generate_speech_script`(支持单页/全套两种模式) - UI 中提供语气/受众/复杂度的快捷选择 - 演讲稿与幻灯片独立管理,支持按页查看和编辑 - 演讲者视图中显示 AI 生成的演讲稿 + 预估时长 --- ### P6 — PPT 导入 (.pptx) **价值**:中,用户可编辑已有 PPT **复杂度**:高 **AiPPT 参考**:`pptxObj` JSON 数据结构(完整的 PPT 元素 Schema) #### 实现方案 **技术选型**:无成熟的纯前端 .pptx 解析库,需组合使用 1. **解析 .pptx 文件**(本质是 ZIP + XML) - 使用 `JSZip`(已有依赖)解压 .pptx - 解析 XML:`presentation.xml` → 幻灯片列表, `slide{n}.xml` → 页面内容 - 参考 AiPPT 的 `pptxObj` JSON 结构作为中间格式 2. **PPTX → Plait 元素映射** | PPTX 元素 | XML 标签 | Plait 元素 | |-----------|----------|-----------| | 文本框 | `` | geometry + text | | 形状 | `` + `` | geometry (对应 shape type) | | 图片 | `` | image | | 表格 | `` | 多个 geometry 组合 | | 图表 | `` | chart 元素 (P3 完成后) | | 连线 | `` | arrow/line | | 组合 | `` | group | 3. **PPT 形状库扩充** - 借鉴 AiPPT `geometry.js` 中 100+ 种标准 PPT 形状的 SVG path 生成代码 - 建立 PPT `prstGeom` 名称到 Plait 几何形状的映射 4. **实现优先级** - Phase 1:文本框 + 形状 + 图片(覆盖 80% 场景) - Phase 2:表格 + 连线 + 组合 - Phase 3:图表 + 动画 --- ### P7 — PDF 导出 **价值**:中低,补充导出格式 **复杂度**:低 #### 实现方案 1. 利用浏览器 `window.print()` + CSS `@media print` 方案 2. 遍历 Frame,逐页 viewport 对准 → `html2canvas` 截图 → 拼合 PDF 3. 使用 `jspdf` 库生成 PDF 文件 4. 或直接在幻灯片播放模式下调用浏览器打印功能 --- ### P8 — 形状库扩充 **价值**:低,丰富编辑能力 **复杂度**:低 **AiPPT 参考**:`geometry.js` 100+ 种 PPT 标准形状 #### 实现方案 1. 从 AiPPT `geometry.js` 提取形状 SVG path 定义 2. 转换为 Plait 的 `BasicShapes` / `FlowchartSymbols` 格式 3. 扩充 `shape-picker.tsx` 中的形状选择面板 4. 重点补充 PPT 常用形状: - 箭头变体(左/右/上/下/双向/弯曲) - 标注框(圆角/云朵/爆炸) - 星形/旗帜/括号/数学符号 - 流程图补充形状 --- ### P9 — 封面/缩略图自动生成 **价值**:中低,提升模板预览和分享体验 **复杂度**:低 **ai-to-pptx 参考**:`cover.js` drawCover() 函数 #### 实现方案 ai-to-pptx 的 `cover.js` 实现了自动生成 PPT 封面缩略图的功能: **算法**: - 画布尺寸:600×338 (16:9) - 灰色底色 rgb(212, 212, 212) - 首页大图居中,占画布 65% 宽高 - 周围以 3×3 宫格布局排列最多 8 个子页面缩略图(每个占画布 1/3.3 宽高) - 首页叠加在子页面之上,形成层叠预览效果 - 支持灰度模式(用于禁用/只读状态),使用 luminance 算法灰度化 **用途**: - 模板选择列表的缩略图 - PPT 分享/导出时的封面预览 - 项目列表中的 PPT 预览卡片 **aitu 实现建议**: 1. **新增服务** `services/ppt-cover-service.ts` ```typescript interface CoverOptions { width?: number; // 封面宽度,默认 600 height?: number; // 封面高度,默认 338 maxSubPages?: number; // 最大子页面数,默认 8 grayScale?: boolean; // 是否灰度 } async function generateCover( frames: PlaitFrame[], options?: CoverOptions ): Promise // 返回 DataURL ``` 2. **利用现有能力** - 复用 `html2canvas` (P7 依赖) 截取 Frame 内容 - 或利用 Plait 的 SVG 导出能力截取 Frame - 缩略图缓存在 `unified-cache-service` 中 3. **UI 集成** - FramePanel 中显示 PPT 封面缩略图 - 模板选择页显示模板封面 - 项目列表卡片显示 PPT 封面预览 --- ### P10 — PPT JSON 中间格式与传输优化 **价值**:中,统一数据格式,提升性能 **复杂度**:中低 **ai-to-pptx 参考**:`element.js` 元素工厂 + pako gzip 压缩传输 #### 实现方案 **1. PPT JSON 中间格式** ai-to-pptx 使用 JSON 作为 PPT 数据的统一中间表示(由 [ppt2json](https://github.com/veasion/ppt2json) 工具转换),包含完整的页面、元素、样式定义。aitu 可建立类似的中间格式标准: ```typescript interface PPTJsonDocument { version: string; width: number; // PPT 宽度 (如 1920) height: number; // PPT 高度 (如 1080) theme: PPTTheme; // 主题信息 pages: PPTJsonPage[]; // 页面列表 } interface PPTJsonPage { id: string; name: string; transition?: FrameTransition; notes?: string; background?: FillConfig; elements: PPTJsonElement[]; // 页面内元素 } interface PPTJsonElement { id: string; type: 'text' | 'image' | 'shape' | 'table' | 'chart' | 'group'; anchor: [number, number, number, number]; // [x, y, width, height] fillStyle?: FillConfig; strokeStyle?: StrokeConfig; // 类型特有属性... [key: string]: any; } ``` **用途**: - AI 生成 PPT 的统一输出格式 - PPTX 导入/导出的中间转换层 - 模板定义的存储格式 - 前后端数据交互的标准协议 - 项目文件的持久化格式 **2. gzip 压缩传输** 当 PPT JSON 数据量较大时(20+ 页,含图片 base64),启用压缩传输: ```typescript // 压缩 import pako from 'pako'; const compressed = pako.gzip(JSON.stringify(pptJson)); const base64 = btoa(String.fromCharCode(...compressed)); // 解压 const binary = atob(base64); const bytes = new Uint8Array(binary.length); for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i); const decompressed = JSON.parse(pako.ungzip(bytes, { to: 'string' })); ``` 建议:在数据超过 100KB 时自动启用 gzip 压缩。 --- ### P11 — 国际化/多语言 PPT 生成 **价值**:中低,扩大用户群体 **复杂度**:低 **ai-to-pptx 参考**:`StepOneInputData.tsx` 语言选择 + `i18n.ts` 国际化配置 #### 实现方案 1. **AI 生成内容的语言控制** - 在 `generate_ppt` MCP 工具中增加 `language` 参数 - AI Prompt 中指定生成内容的语言 - 支持语言:中文(zh)、英文(en)、日文(ja)、韩文(ko) 等 2. **模板中的多语言文案** - 模板中的固定文案("目录"、"感谢"等)根据语言切换 - 建立模板文案的 i18n 映射表 3. **字体自动适配** - 根据目标语言自动选择合适字体 - 中文:思源黑体/微软雅黑 - 英文:Inter/Roboto - 日文:Noto Sans JP - 利用现有 `font-manager-service.ts` 能力 --- ### P12 — AI 精炼交互(自然语言迭代修改) **价值**:高,显著提升 AI 辅助编辑的交互体验和内容质量 **复杂度**:中 **banana-slides 参考**:`AiRefineInput` 组件 + `get_outline_refinement_prompt()` / `get_descriptions_refinement_prompt()` #### 实现方案 **核心概念**:在 PPT 生成的各个阶段(大纲、内容、布局),用户可以用自然语言指令对 AI 生成结果进行迭代修改,且系统保留完整修改历史作为上下文,支持多轮对话式精炼。 **1. 精炼输入组件** (`components/ppt/ai-refine-input.tsx`) 参考 banana-slides 的 `AiRefineInput` 组件设计: ```typescript interface AiRefineInputProps { title: string; // 标题(如"AI 优化大纲") placeholder: string; // 占位文字 onSubmit: (requirement: string, previousRequirements: string[]) => Promise; disabled?: boolean; onStatusChange?: (isSubmitting: boolean) => void; } ``` 组件特性: - 内置修改历史记录管理(展开/收起查看) - 支持 Ctrl+Enter / Cmd+Enter 快捷键提交 - 提交中动画效果(加载态反馈) - 紧凑模式(无标题时自动切换) **2. 精炼 MCP 工具** 新增两个 MCP 工具: ```typescript // 大纲精炼 interface RefineOutlineInput { currentOutline: PPTOutline; // 当前大纲 requirement: string; // 用户修改需求 previousRequirements?: string[]; // 历史修改记录 } // 内容精炼 interface RefineContentInput { pageId: string; // 目标页面 ID currentContent: PPTPageSpec; // 当前页面内容 requirement: string; // 用户修改需求 previousRequirements?: string[]; // 历史修改记录 outline: PPTOutline; // 完整大纲(上下文) } ``` **3. 精炼 Prompt 设计** 参考 banana-slides 的精炼 prompt 设计要点: - 将当前内容(大纲/描述)完整传入 - 附带所有历史修改请求作为上下文(避免 AI 遗忘之前的修改) - 明确指示"只修改用户要求的部分,保留其他内容不变" - 输出格式与原内容结构一致 **4. UI 集成** - 大纲编辑器底部:嵌入精炼输入框 - Frame 内容编辑面板:嵌入精炼输入框 - 全局修改入口:Chat Drawer 中支持对整个 PPT 进行自然语言修改 **用例示例**: - 「增加一页关于市场分析的内容」→ AI 在大纲中插入新章节 - 「将第三页的文字精简到 5 条要点」→ AI 重写该页内容 - 「整体风格改为更轻松活泼」→ AI 调整所有页面的措辞和描述 - 「删除第 5 页,将第 6-7 页合并」→ AI 重组大纲结构 --- ### P13 — 内容版本管理与回退 **价值**:中高,提升用户编辑信心和容错能力 **复杂度**:中低 **banana-slides 参考**:`PageImageVersion` 模型 (`backend/models/page_image_version.py`) #### 实现方案 **核心概念**:每次 AI 生成或用户修改 Frame 内容时,自动保存一个版本快照,用户可查看历史版本并随时回退。 **1. 版本数据结构** ```typescript interface FrameContentVersion { id: string; // 版本 UUID frameId: string; // 所属 Frame ID versionNumber: number; // 版本号,从 1 开始递增 isCurrent: boolean; // 是否为当前使用版本 elements: PlaitElement[]; // 该版本的元素快照 createdAt: string; // 创建时间 source: 'ai_generate' | 'ai_refine' | 'user_edit' | 'template_change'; // 版本来源 description?: string; // 版本描述(如"AI 精炼:增加市场分析") } ``` 参考 banana-slides `PageImageVersion` 模型: - `version_number`:递增整数 - `is_current`:布尔标记当前版本 - `page_id`:关联所属页面 - 切换版本时只需更新 `is_current` 标记 **2. 版本管理服务** (`services/frame-version-service.ts`) ```typescript class FrameVersionService { // 保存新版本(AI 生成/精炼/用户编辑后自动调用) saveVersion(frameId: string, elements: PlaitElement[], source: string, description?: string): void; // 获取所有版本列表 getVersions(frameId: string): FrameContentVersion[]; // 切换到指定版本 switchToVersion(frameId: string, versionId: string): void; // 获取当前版本号 getCurrentVersion(frameId: string): number; } ``` **3. 版本触发时机** | 触发场景 | `source` | 说明 | |---------|----------|------| | AI 首次生成 | `ai_generate` | 初始版本 | | AI 精炼修改 | `ai_refine` | 每次精炼创建新版本 | | 用户手动编辑 | `user_edit` | 防抖合并(如 5 秒内连续编辑合为一个版本) | | 更换模板/主题 | `template_change` | 模板切换前自动保存 | **4. UI 集成** - FramePanel 中每个 Frame 显示版本计数标记 - 展开 Frame 可查看版本时间线(列表/缩略图形式) - 点击历史版本可预览,确认后切换 - 存储策略:每个 Frame 最多保留 20 个版本,超出时删除最旧的 --- ### P14 — 素材系统 **价值**:中,提升 PPT 内容丰富度和个性化能力 **复杂度**:中 **banana-slides 参考**:`Material` 模型 + `MaterialCenterModal` + `MaterialSelector` #### 实现方案 **核心概念**:建立素材中心,用户可上传、AI 可生成、从参考文件中提取素材图片,供 PPT 生成和编辑时引用。 **1. 素材数据结构** ```typescript interface Material { id: string; // 素材 UUID projectId?: string; // 所属项目 ID(null 为全局素材) filename: string; // 文件名 url: string; // 访问 URL source: 'upload' | 'ai_generate' | 'file_extract'; // 素材来源 tags?: string[]; // 标签(便于检索) createdAt: string; } ``` 参考 banana-slides `Material` 模型: - `project_id`:外键,可为 null(区分项目级和全局素材) - `relative_path` + `url`:文件存储和访问路径 - 关联关系:`Project.materials` (cascade delete) **2. 素材来源** | 来源 | 说明 | 实现方式 | |------|------|---------| | 用户上传 | 拖拽/选择上传图片 | 复用现有文件上传能力 | | AI 生成 | 通过提示词生成素材图片 | 异步任务,复用 Gemini 图片生成 | | 参考文件提取 | 从上传的 PDF/PPTX 中提取图片 | FileParserService 解析时提取 | | 网络搜索 | 从网络搜索相关图片(可选) | 后续扩展 | **3. 素材中心 UI** (`components/ppt/material-center-modal.tsx`) 参考 banana-slides 的 `MaterialCenterModal` + `MaterialSelector`: - 网格布局展示素材缩略图 - 支持按来源/标签筛选 - AI 生成入口:输入提示词,异步生成素材 - 拖拽素材到 Frame 中直接使用 - 生成 PPT 时可选择素材作为参考图片 **4. AI 生成集成** - PPT 生成 prompt 中附带可用素材列表(图片 URL + 描述) - AI 可在生成内容时引用素材库中的图片 - 参考 banana-slides:素材图片路径以 Markdown 图片语法传入 prompt --- ### P15 — AI 自然语言编辑 **价值**:高,实现真正的"对话式 PPT 编辑" **复杂度**:高 **banana-slides 参考**:`get_image_edit_prompt()` + 图片编辑流程 #### 实现方案 **核心概念**:用户可以用自然语言指令修改已生成的 PPT 页面内容,AI 智能判断修改意图并执行编辑操作。 **1. 编辑指令解析** 参考 banana-slides 的 `get_image_edit_prompt(edit_instruction, original_description)`,AI 需要: - 理解用户编辑意图(修改文字、调整布局、替换图片、改变样式等) - 定位目标元素("标题"、"第二个要点"、"右侧图片"等自然语言定位) - 生成具体的编辑操作 **2. 编辑 MCP 工具** ```typescript interface EditFrameByNaturalLanguage { frameId: string; // 目标 Frame ID instruction: string; // 自然语言编辑指令 referenceImages?: string[]; // 参考图片(可选) originalDescription?: string; // 页面原始描述(上下文) } ``` **3. AI 编辑能力分层** | 编辑层级 | 示例指令 | 实现方式 | |---------|---------|---------| | 文字修改 | 「将标题改为"2025年度报告"」 | 定位文本元素 → 更新 text 属性 | | 样式调整 | 「把标题颜色改成红色」「放大正文字号」 | 定位元素 → 更新 style 属性 | | 布局变更 | 「将图文从左右布局改为上下布局」 | 重新计算元素 position/size | | 内容增删 | 「增加一个数据图表」「删除底部备注」 | 添加/移除 Frame 内元素 | | 图片替换 | 「将背景图换成科技感更强的」 | AI 重新生成图片 → 替换 image 元素 | | 整体重做 | 「这页重新生成,风格要更简洁」 | 保留大纲信息,重新生成整页内容 | **4. 参考图片支持** 参考 banana-slides 的图片编辑流程,支持附加参考图片: - 用户可从素材库选择参考图片 - 用户可框选 Frame 中的区域作为编辑目标 - AI 判断用户意图:修改选中区域 vs 在选中位置添加素材 **5. 与版本管理联动** 每次 AI 编辑操作自动创建新版本(P13),用户不满意可随时回退。 --- ### P16 — 深度研究驱动 PPT **价值**:高,显著提升 AI 生成内容的深度和准确性 **复杂度**:中 **LandPPT 参考**:`DEEPResearchService` + `EnhancedResearchService` + Tavily/SearXNG 双引擎 #### 实现方案 **核心概念**:在 PPT 生成之前,先对用户主题进行自动化网络调研,生成结构化研究报告,作为 AI 生成 PPT 的知识基础。 **1. DEEP 研究方法论** 参考 LandPPT 的 `DEEPResearchService` 实现,采用 4 阶段研究流程: ``` 用户输入主题 → [Define] 解析主题范围 → [Explore] 多轮搜索(Tavily + SearXNG) → [Evaluate] AI 分析提取关键发现 → [Present] 生成研究报告 → 研究报告作为上下文传入大纲生成 prompt ``` **2. 增强研究服务** LandPPT 的 `EnhancedResearchService` (`services/research/enhanced_research_service.py`, 25KB) 进一步增强了研究能力: - 深度内容提取(`ContentExtractor`):从搜索结果 URL 中抓取完整文章内容 - 增强报告生成(`EnhancedReportGenerator`):多维度分析 + 引用来源 - SearXNG 自托管搜索(`SearXNGProvider`):开源搜索聚合引擎,支持多搜索引擎并行 **3. MCP 工具设计** ```typescript interface ResearchForPPT { topic: string; // 研究主题 language?: 'zh' | 'en'; // 研究语言 depth?: 'quick' | 'standard' | 'deep'; // 研究深度 maxSources?: number; // 最大来源数 } interface ResearchReport { executiveSummary: string; // 执行摘要 keyFindings: string[]; // 关键发现 recommendations: string[]; // 建议 sources: string[]; // 来源列表 totalDuration: number; // 耗时(秒) } ``` **4. 与 P0 生成流程的集成** 研究报告通过 `research_section` 参数传入大纲生成 prompt(参考 LandPPT `OutlinePrompts.get_outline_prompt_zh()` 的 `research_section` 参数),AI 基于真实数据生成更有深度的内容。 aitu 实现建议: - 在生成 PPT 对话流程中增加可选的「先研究再生成」步骤 - 集成 Tavily API 或类似搜索 API(如 Perplexity、Exa) - 研究报告可缓存复用,避免重复搜索 - UI 中展示研究进度和来源列表,增强用户信任感 --- ### P17 — 智能配图系统 **价值**:高,配图质量直接影响 PPT 专业感 **复杂度**:高 **LandPPT 参考**:`PPTImageProcessor` + `ImageService`(11 个图像 Provider)+ 三合一配图策略 #### 实现方案 **核心概念**:为每页 PPT 智能匹配或生成配图,采用「本地图库 + 网络搜索 + AI 生成」三合一策略。 **1. 三合一配图策略** 参考 LandPPT 的 `PPTImageProcessor` (`services/ppt_image_processor.py`, 83KB) 和 `ImageService` (`services/image/image_service.py`, 42KB) 的分层架构: | 图片来源 | Provider | 适用场景 | 成本 | |---------|----------|---------|------| | **本地图库** | `FileSystemStorageProvider` | 用户上传、历史素材 | 免费 | | **网络搜索** | `PixabayProvider`, `UnsplashProvider`, `SearXNGImageProvider` | 通用场景图、风景、人物 | 免费/低 | | **AI 生成** | `DalleProvider`, `GeminiProvider`, `OpenAIImageProvider`, `SiliconFlowProvider`, `StableDiffusionProvider`, `PollinationsProvider` | 定制化、创意图、抽象概念 | 中高 | LandPPT 共实现了 **11 个图像 Provider**,通过 `provider_registry` 统一管理。 **2. 配图适配器** LandPPT 的 `PPTPromptAdapter` (`services/image/adapters/ppt_prompt_adapter.py`, 14KB) 将 PPT 内容转换为图片搜索/生成的 prompt: - 分析幻灯片标题和内容点 - 生成适合搜索的关键词 - 生成适合 AI 图片模型的描述性 prompt - 考虑图片用途(背景/配图/图标/数据可视化) **3. 图片匹配与缓存** LandPPT 的 `ImageMatcher` (`services/image/matching/image_matcher.py`, 23KB) 实现智能匹配: - 语义匹配:根据内容语义选择最相关的图片 - 搜索缓存:避免重复搜索相同关键词 - 图片处理:`ImageProcessor` 支持缩放、裁剪、格式转换 - 缓存管理:`ImageCacheManager` (22KB) 管理图片缓存生命周期 **4. 数据模型** ```typescript // 参考 LandPPT SlideImageInfo 模型 interface SlideImageInfo { slideIndex: number; imageSource: 'local' | 'network' | 'ai_generated'; imagePurpose: 'background' | 'illustration' | 'icon' | 'chart'; originalUrl: string; processedUrl: string; searchQuery?: string; generationPrompt?: string; } ``` **5. 每页图片限制与开关控制** LandPPT 通过配置控制: - `IMAGE_MAX_PER_SLIDE`:每页最大图片数 - 各来源独立开关(`ENABLE_PIXABAY` / `ENABLE_DALLE` / ...) - 默认 Provider 选择:`DEFAULT_IMAGE_PROVIDER` aitu 实现建议: - 在 PPT 生成流程中增加配图阶段(大纲 → 内容 → **配图** → 渲染) - 优先使用免费搜索 API(Pixabay / Unsplash),AI 生成作为高级选项 - 复用现有 Gemini 图片生成能力 - 图片适配器将幻灯片内容自动转换为搜索/生成 prompt - 用户可手动替换或重新生成单页配图 --- ### P18 — TODO 任务板实时追踪 **价值**:中高,提升长任务(多页 PPT 生成)的用户体验 **复杂度**:中 **LandPPT 参考**:`ProgressTracker` + `TodoBoard` + `TodoStage` 模型 #### 实现方案 **核心概念**:PPT 生成是多阶段长任务(研究 → 大纲 → 内容 → 配图 → 渲染),需要可视化的进度追踪面板。 **1. 进度追踪模型** 参考 LandPPT 的 `TodoBoard` + `TodoStage` 数据库模型: ```typescript interface PPTGenerationBoard { projectId: string; currentStageIndex: number; overallProgress: number; // 0-100 stages: PPTGenerationStage[]; } interface PPTGenerationStage { stageId: string; stageIndex: number; title: string; // 如"生成大纲"、"生成第3页内容" description?: string; status: 'pending' | 'running' | 'completed' | 'failed' | 'skipped'; progress: number; // 0-100 result?: any; // 阶段结果数据 } ``` **2. 生成阶段定义** | 阶段 | 标题 | 说明 | |------|------|------| | 1 | 深度研究 | (可选)网络调研主题 | | 2 | 生成大纲 | AI 生成结构化大纲 | | 3 | 选择模板 | 自动/手动选择模板 | | 4-N | 生成第 X 页 | 逐页生成内容+布局 | | N+1 | 智能配图 | (可选)为各页匹配图片 | | N+2 | 质量检查 | AI 检查输出质量 | **3. 实时进度推送** 参考 LandPPT 的 SSE 进度推送: - 后端每完成一个阶段/子阶段,推送进度更新 - 前端实时更新进度面板 - 支持单页粒度的完成/失败/跳过状态 **4. UI 集成** 参考 LandPPT 的 `todo_board.html` (276KB): - 左侧阶段列表(带状态图标和进度条) - 右侧当前阶段详情 - 底部总体进度条 - 失败阶段支持重试 - 集成在 Chat Drawer 侧边栏或独立面板中 aitu 实现建议: - 复用现有 WorkZone 进度展示机制 - 在 Chat Drawer 中嵌入进度面板 - 生成完成后进度面板自动转为结果预览 --- ### P19 — AI 聊天编辑(视觉参考) **价值**:高,提供基于视觉的智能编辑体验 **复杂度**:高 **LandPPT 参考**:`project_slides_editor.html` (657KB) 在线编辑器 + 视觉参考聊天 #### 实现方案 **核心概念**:用户可以在查看 PPT 页面的同时,通过 AI 聊天界面描述修改需求,AI 理解当前页面视觉内容后执行精确编辑。 **1. 视觉参考编辑** LandPPT 的 AI 聊天编辑支持**视觉参考**——AI 不仅理解文本内容,还能"看到"当前幻灯片的渲染效果: - 将当前页面截图作为多模态消息附加给 AI - AI 基于视觉+文本双重理解,精确定位和修改元素 - 支持 `AIMessage` 中的 `ImageContent` 多模态消息 **2. 场景化编辑** LandPPT 的 `AIService` 根据 PPT 关键词自动判断用户意图并注入专业系统提示词: ```python ppt_keywords = [ "PPT", "幻灯片", "演示文稿", "slide", "presentation", "ppt", "修改", "调整", "优化", "美化", "设计", "布局" ] ``` 当检测到 PPT 编辑意图时,自动切换为 PPT 编辑专家角色。 **3. 编辑能力层次** | 编辑维度 | 示例 | LandPPT 实现 | |---------|------|-------------| | 文字内容 | "修改标题为..." | 直接编辑 HTML 文本内容 | | 视觉样式 | "改为蓝色主题" | 修改 CSS 变量 / 模板配色 | | 布局调整 | "改为两栏布局" | 重新生成 HTML 模板 | | 图表更新 | "更新图表数据" | 修改 Chart.js 数据 | | 整页重做 | "重新生成这一页" | 重新调用内容+模板生成 | aitu 实现建议: - 复用现有 Chat Drawer 作为编辑聊天入口 - 利用 Gemini 多模态能力,将当前 Frame 截图附加到聊天消息 - AI 返回结构化编辑指令(而非直接返回 HTML),由前端执行 - 与 P15 AI 自然语言编辑融合,统一编辑入口 --- ### P20 — 项目管理与协作 **价值**:中,提升多 PPT 项目的管理效率 **复杂度**:中 **LandPPT 参考**:`Project` 模型 + `ProjectManager` + 项目分享功能 #### 实现方案 **核心概念**:建立 PPT 项目管理体系,支持项目列表、状态追踪、版本历史、分享协作。 **1. 项目数据模型** 参考 LandPPT 的 `Project` 模型 (`database/models.py`): ```typescript interface PPTProject { id: string; projectId: string; // UUID title: string; scenario?: string; // 场景类型 topic: string; // 主题 requirements?: string; // 需求描述 status: 'draft' | 'generating' | 'completed' | 'failed'; outline?: PPTOutline; // 大纲 JSON confirmedRequirements?: object; // 确认的需求配置 metadata?: object; // 项目元数据 version: number; // 版本号 shareToken?: string; // 分享令牌 shareEnabled: boolean; // 是否启用分享 createdAt: string; updatedAt: string; } ``` **2. 项目版本管理** 参考 LandPPT 的 `ProjectVersion` 模型: - 每次重大操作(生成/重新生成/模板切换)自动保存项目版本 - 版本包含完整数据快照 + 版本描述 - 支持回退到任意历史版本 **3. 项目分享** LandPPT 支持通过 `share_token` 分享项目: - 生成唯一分享链接 - 访问者可查看 PPT(只读模式) - 可选择是否启用分享 **4. 项目列表与仪表板** 参考 LandPPT 的 `projects_list.html` + `project_dashboard.html`: - 项目卡片列表(含封面缩略图 + 状态 + 创建时间) - 项目仪表板(统计信息 + 最近编辑 + 快捷操作) - 支持搜索和筛选 aitu 实现建议: - 将现有画布文档扩展为「PPT 项目」概念 - 每个 PPT 项目关联一组 Frame + 大纲 + 模板配置 - 支持项目导出/导入(JSON 格式) - 分享功能可复用现有协作基础设施 --- ### P21 — PPT 视频导出与 AI 图片直出 **价值**:中高,为 PPT 提供视频化传播和极致视觉质量的新通道 **复杂度**:中高 **NanoBanana 参考**:`generate_ppt.py` + `generate_ppt_video.py` + `video_composer.py` + `kling_api.py` #### 实现方案 **核心概念**:在传统可编辑 PPT 之外,提供两种增值输出模式——AI 图片直出(每页为高品质图片)和 PPT 视频导出(含 AI 转场动画的完整演示视频)。 **1. AI 图片直出模式** 参考 NanoBanana 的 `generate_ppt.py` (452 行) 实现,利用 Gemini 图片生成模型直接生成每页 PPT 的完整图片: ```typescript interface PPTImageGenerationOptions { topic: string; // 主题 pages: PPTPagePlan[]; // 每页内容规划 style: 'gradient-glass' | 'vector-illustration' | string; // 视觉风格 resolution: '2K' | '4K'; // 输出分辨率 model?: string; // 图片模型(默认 Gemini) } interface PPTPagePlan { pageNumber: number; pageType: 'cover' | 'content' | 'data'; // 页面类型 title: string; contentPoints: string[]; } interface PPTImageResult { pages: { pageNumber: number; imageUrl: string; prompt: string }[]; viewerHtml: string; // HTML 播放器 } ``` **Prompt 构建流程**: 1. 加载风格模板(Markdown 文件定义的基础提示词 + 页面类型模板) 2. 拼合最终 prompt:`基础风格 + 页面类型模板 + 实际内容 + 分辨率指令` 3. 调用图片生成模型(16:9 宽高比) **2. PPT 视频导出** 参考 NanoBanana 的视频生成流水线(`generate_ppt_video.py`, 462 行),实现 PPT → 视频的完整转换: ``` PPT 页面截图 → 页间转场视频生成 → FFmpeg 合成完整视频 ``` **视频合成模块** (`video_composer.py`, 493 行): | 功能 | 实现 | 参数 | |------|------|------| | 静态页面视频 | 图片 → 指定时长的视频片段 | H.264, CRF 23, 24fps | | 视频拼接(快速) | FFmpeg concat demuxer | 无重编码 | | 视频拼接(标准化) | FFmpeg filter_complex | 统一分辨率/帧率/宽高比 | | 完整合成 | 预览 + (静态页 + 转场) × N | 可选是否包含预览和转场 | **视频素材管理** (`video_materials.py`, 459 行): - `generate_preview_video()`:首页循环预览视频(首尾帧相同) - `generate_transition_videos()`:页间转场视频(并发生成,`max_concurrent=3`) - 支持 `ThreadPoolExecutor` 并发执行多个视频生成任务 **3. 交互式 HTML 播放器** NanoBanana 提供两种 HTML 播放器模板: **图片播放器** (`templates/viewer.html`, 337 行): - 全屏黑色背景,`object-fit: contain` - 键盘导航:方向键/Home/End/空格自动播放/ESC 全屏/H 隐藏控件 - 触摸滑动支持(移动设备) - 鼠标移动自动显示/隐藏控件(3 秒超时) **视频播放器** (`templates/video_viewer.html`, 438 行): - `VideoPPTPlayer` 类,视频+图片混合播放 - 状态管理:`isPreviewMode` → `isTransitioning` → 静态页面 - 播放逻辑:首页播放预览视频(循环)→ 右键播放转场视频 → 视频结束显示目标页 - 加载动画 + 错误处理 aitu 实现建议: - **图片直出模式**:作为 P0 AI 生成 PPT 的「极致视觉」选项,复用现有 Gemini 图片生成能力 - **视频导出**:作为 P7(PDF 导出)的扩展,新增「导出为视频」选项 - AI 视频转场可作为高级付费功能(API 成本较高) - 简单模式:无转场,直接拼合每页静态视频(FFmpeg 即可实现,无需视频 API) - 高级模式:AI 视频转场(可灵 AI / Veo / Sora 等图生视频 API) - HTML 播放器可嵌入分享链接,实现在线演示 --- ## 实施路线图 ``` Phase 1 (P0 + P1) → AI 生成 PPT + PPTX 导出 = 完整的 PPT 创作闭环 Phase 2 (P2 + P3 + P10) → 模板系统 + 图表/表格 + JSON 格式 = 提升生成质量 Phase 3 (P4 + P5 + P9) → 切换/元素动画 + 演讲稿生成 + 封面 = 专业演示体验 Phase 4 (P6 + P7 + P8 + P11) → 导入 + PDF + 形状库 + 多语言 = 完善生态 Phase 5 (P12 + P13) → AI 精炼交互 + 版本管理 = 智能迭代体验 Phase 6 (P14 + P15) → 素材系统 + AI 自然语言编辑 = 高级 AI 编辑 Phase 7 (P16 + P17 + P18) → 深度研究 + 智能配图 + 任务追踪 = 智能生成增强 Phase 8 (P19 + P20) → AI 聊天编辑 + 项目管理 = 完整产品体验 Phase 9 (P21) → PPT 视频导出 + AI 图片直出 = 视频化传播 ``` > 注: > - P12/P13 建议在 Phase 1 完成后尽早启动,因为精炼交互和版本管理能显著提升 P0 的用户体验。可与 Phase 2 并行开发。 > - P16(深度研究)和 P17(智能配图)可在 Phase 1 完成后作为 P0 的增强模块独立开发,与 Phase 2 并行。 > - P18(任务追踪)建议与 P0 同期开发,提升长任务的用户体验。 > - P21(PPT 视频导出)中的图片直出模式可与 Phase 1 并行开发(仅需 Gemini 图片生成能力),视频转场部分可延后。 ## 技术依赖 | 新增依赖 | 用途 | 包大小 | |---------|------|--------| | `pptxgenjs` | PPTX 导出 (P1) | ~300KB | | `pako` | gzip 压缩传输 (P10) | ~45KB | | `jspdf` | PDF 导出 (P7) | ~300KB | | `html2canvas` | Frame 截图 (P7/P9/P19) | ~40KB | > 注:P0-P20 中大部分能力不需要额外第三方依赖。P5 演讲稿生成、P12 精炼交互、P13 版本管理、P14 素材系统、P15-P20 均依赖现有 AI API 能力实现。 **banana-slides 相关技术参考**: | 技术/服务 | banana-slides 用途 | aitu 参考价值 | |---------|-------------------|-------------| | MinerU API | 文档解析(PDF/DOCX/PPTX → Markdown) | P0 参考文件解析、P6 导入辅助 | | MarkItDown | Excel/CSV 转 Markdown | P0 表格文件输入 | | Inpainting (火山引擎/Gemini/百度) | 删除元素后背景修复 | P1 可编辑导出、元素删除后背景补全 | | ThreadPoolExecutor | 异步任务管理 | P0 批量生成、P14 素材生成 | **LandPPT 相关技术参考**: | 技术/服务 | LandPPT 用途 | aitu 参考价值 | |---------|-------------|-------------| | Tavily API | 深度研究搜索引擎 | P16 深度研究驱动 PPT | | SearXNG | 自托管搜索聚合引擎 | P16 备选搜索引擎 | | Playwright | 无头浏览器 HTML→PDF/PPTX 导出 | P1 高保真导出备选方案 | | Apryse SDK | 专业级 PDF→PPTX 转换 | P6 PPT 导入辅助 | | LangGraph / LangChain | 文档分析工作流编排 | P0 文档处理工作流 | | Pixabay / Unsplash API | 免费图片搜索 | P17 智能配图(网络搜索) | | DALL-E / Stable Diffusion / SiliconFlow | AI 图片生成 | P17 智能配图(AI 生成) | | Chart.js | HTML 幻灯片中图表渲染 | P3 图表元素渲染 | | Tailwind CSS | HTML 模板样式系统 | P2 模板渲染 | **NanoBanana-PPT-Skills 相关技术参考**: | 技术/服务 | NanoBanana 用途 | aitu 参考价值 | |---------|---------------|-------------| | Gemini 3 Pro (`gemini-3-pro-image-preview`) | AI 图片直出 PPT(每页完整图片) | P0 AI 图片直出模式、P21 图片直出 | | 可灵 AI API (`kling-v2-6`) | 图生视频(首尾帧 → 转场视频) | P4 AI 视频转场、P21 视频导出 | | Claude API (`claude-sonnet-4-5-20250929`) | 智能分析图片差异生成转场提示词 | P4 AI 视频转场提示词自动生成 | | FFmpeg | 静态图 → 视频 + 多视频拼接合成 | P21 PPT 视频导出 | | JWT (HS256) | 可灵 AI API 认证 | P21 视频 API 集成 | | Markdown 风格模板 | 定义 AI 图片生成的视觉风格 | P2 风格模板体系补充 | | HTML5 播放器 | 图片/视频交互式播放 | P21 在线演示播放器 | --- ## 附录:ai-to-pptx 项目能力对照表 > 以下汇总了从 [ai-to-pptx](https://github.com/SmartSchoolAI/ai-to-pptx) 项目中识别的所有可借鉴能力及其在本文档中的对应位置。 | ai-to-pptx 能力 | 源文件 | aitu 对应规划 | 状态 | |-----------------|--------|-------------|------| | 五步向导式生成流程 | `AiPPTX.tsx` | P0 — AI 一键生成 PPT | 已覆盖 | | SSE 流式大纲生成 | `sse.ts` | P0 — 流式生成体验 | 已覆盖 | | 三层大纲编辑 | `OutlineEdit.tsx` | P0 — 大纲编辑器 UI | 已覆盖 | | 多种输入源(文本/文件/URL/大纲) | `StepOneInputData.tsx` | P0 — **借鉴补充** | 新增 | | 生成选项(篇幅/语言/要求) | `StepOneInputData.tsx` | P0 — **借鉴补充** | 新增 | | 异步生成 + 进度追踪 | `StepFiveGeneratePpt.tsx` | P0 — **借鉴补充** | 新增 | | gzip 压缩传输 | pako + base64 | P10 — **新增** | 新增 | | PPTX 下载导出 | `downloadPptx.php` | P1 — PPT 导出 | 已覆盖 | | 模板选择系统 | `SelectTemplate.tsx` | P2 — 模板系统 | 已覆盖 | | 主题色提取 | `calcSubjectColor()` | P2 — 主题色提取 | 已覆盖 | | 模板制作规范(页面类型/元素数量) | `README_Make_Template.md` | P2 — **借鉴补充** | 新增 | | 6 种内容页网格布局 | `README_Make_Template.md` | P2 — **借鉴补充** | 新增 | | 更换模板保留内容 | `changePptxTemplate` | P2 — **借鉴补充** | 新增 | | 图表渲染(柱/饼/线/环) | `chart.js` | P3 — 图表元素 | 已覆盖 | | 表格元素 | `element.js createTable()` | P3 — **借鉴补充** | 新增 | | 图表数据格式(类 Excel 二维数组) | `element.js createChart()` | P3 — **借鉴补充** | 新增 | | 16 种页面切场动画 | `animation.js transitionList` | P4 — **借鉴补充** | 新增 | | 元素级动画(入场/退场/强调/路径 226 个预设) | `animation.js animationList` | P4 — **借鉴补充** | 新增 | | 100+ 标准几何形状 | `geometry.js` | P8 — 形状库扩充 | 已覆盖 | | 封面缩略图自动生成 | `cover.js` | P9 — **新增** | 新增 | | PPT JSON 中间格式 | `element.js` 元素工厂 | P10 — **新增** | 新增 | | 国际化/多语言生成 | `i18n.ts` + 语言选择 | P11 — **新增** | 新增 | | SVG + Canvas 双引擎渲染 | `ppt2svg.js` + `ppt2canvas.js` | — | aitu 已有 Plait 渲染引擎 | | SVG 编辑模式(选中/拖拽/文字编辑) | `ppt2svg.js` edit mode | — | aitu 已有 Plait 编辑能力 | | AI 模型配置(DeepSeek/OpenAI) | `Setting.tsx` | — | aitu 已有 Gemini API 配置 | --- ## 附录:banana-slides 项目能力对照表 > 以下汇总了从 [banana-slides](https://github.com/snakeying/banana-slides)(蕉幻)项目中识别的所有可借鉴能力及其在本文档中的对应位置。 | banana-slides 能力 | 源文件 | aitu 对应规划 | 状态 | |-------------------|--------|-------------|------| | 三种创建模式(idea/outline/description) | `models/project.py` `creation_type` | P0 — **借鉴补充** | 新增 | | AI 精炼交互(自然语言修改大纲/描述) | `AiRefineInput.tsx` + `prompts.py` `get_*_refinement_prompt()` | P0 — **借鉴补充** + P12 — **新增** | 新增 | | 参考文件智能解析(MinerU + MarkItDown) | `file_parser_service.py` | P0 — **借鉴补充** | 新增 | | 17 种分级 Prompt 设计 | `prompts.py` (930 行) | P0 — **借鉴补充** | 新增 | | 项目级额外要求(extra_requirements) | `models/project.py` | P0 — **借鉴补充** | 新增 | | 多 AI Provider 工厂模式(Gemini/OpenAI/Vertex) | `ai_service.py` + `ai_providers/` | P0 — **借鉴补充** | 新增 | | 三种导出格式(图片PPTX/PDF/可编辑PPTX) | `export_service.py` | P1 — **借鉴补充** | 新增 | | 可编辑 PPTX 逆向导出(版面分析 + Inpainting) | `image_editability/service.py` + `inpainting_service.py` | P1 — **借鉴补充** | 新增 | | 8 种预设 AI 风格描述 | `presetStyles.ts` + `Home.tsx` | P2 — **借鉴补充** | 新增 | | 自定义模板图片 + 纯文字风格描述 | `models/project.py` `template_image_path` / `template_style` | P2 — **借鉴补充** | 新增 | | AI 精炼交互系统(多轮对话 + 历史上下文) | `AiRefineInput.tsx` + `get_outline_refinement_prompt()` | P12 — **新增** | 新增 | | 内容版本管理与回退 | `page_image_version.py` `PageImageVersion` | P13 — **新增** | 新增 | | 素材系统(项目级/全局 + AI 生成) | `material.py` + `MaterialCenterModal.tsx` + `MaterialSelector.tsx` | P14 — **新增** | 新增 | | AI 自然语言图片编辑 | `prompts.py` `get_image_edit_prompt()` + `ai_service.py` `edit_image()` | P15 — **新增** | 新增 | | 异步任务管理(ThreadPoolExecutor + 进度追踪) | `task_manager.py` | P0 — 借鉴补充(异步生成) | 参考 | | 文本属性提取(字体/颜色/大小) | `prompts.py` `get_text_attribute_extraction_prompt()` | P1 — 借鉴补充(可编辑导出) | 参考 | | Inpainting 背景修复(火山引擎/Gemini/百度) | `inpainting_service.py` | P1 — 借鉴补充 | 参考 | | 导出错误处理(ExportError + ExportWarnings) | `export_service.py` | P1 — 借鉴补充 | 参考 | | 图片 caption 自动生成 | `file_parser_service.py` `_enhance_image_descriptions()` | P0 — 借鉴补充(参考文件解析) | 参考 | | 语言配置(zh/en/ja/auto) | `prompts.py` `LANGUAGE_CONFIG` | P11 — 多语言 | 已覆盖(扩展) | | 推理模式控制(thinking budget) | `ai_providers/__init__.py` | — | aitu 已有 Gemini API 配置 | | React 18 + Zustand + Tailwind 前端架构 | `frontend/` | — | aitu 已有 Angular + Plait 架构 | | Flask + SQLite 后端架构 | `backend/` | — | aitu 已有 Hono 后端架构 | --- ## 附录:LandPPT 项目能力对照表 > 以下汇总了从 [LandPPT](https://github.com/sligter/LandPPT) 项目中识别的所有可借鉴能力及其在本文档中的对应位置。 | LandPPT 能力 | 源文件 | aitu 对应规划 | 状态 | |-------------|--------|-------------|------| | DEEP 研究方法论(Define/Explore/Evaluate/Present) | `deep_research_service.py` + `enhanced_research_service.py` | P0 — **借鉴补充** + P16 — **新增** | 新增 | | 角色级 AI Provider 配置(6 种角色独立模型) | `enhanced_ppt_service.py` `_get_role_provider(role)` | P0 — **借鉴补充** | 新增 | | 7 种场景模板(tourism/education/analysis 等) | `ai_service.py` `scenario_templates` | P0 — **借鉴补充** | 新增 | | 6 类模块化 Prompt 管理架构(PPTPromptsManager) | `services/prompts/` 6 个模块 | P0 — **借鉴补充** | 新增 | | summeryanyfile 文档处理模块(32 种格式 + 6 种分块策略) | `summeryanyfile/` 独立模块 | P0 — **借鉴补充** | 新增 | | 进度追踪系统(ProgressTracker 线程安全) | `progress_tracker.py` | P0 — **借鉴补充** + P18 — **新增** | 新增 | | 5 种导出格式(PPTX/PDF/HTML/DOCX/Markdown) | `pyppeteer_pdf_converter.py` + `pdf_to_pptx_converter.py` | P1 — **借鉴补充** | 新增 | | Playwright + Apryse 双引擎导出 | `pyppeteer_pdf_converter.py` (99.9KB) + `pdf_to_pptx_converter.py` | P1 — **借鉴补充** | 新增 | | AI 自动生成母版模板(设计基因提取) | `global_master_template_service.py` (47KB) | P2 — **借鉴补充** | 新增 | | 25 种预设模板 JSON 系统 | `template_examples/` 25 个 JSON | P2 — **借鉴补充** | 新增 | | 设计基因提取与创意变化 Prompt 体系 | `design_prompts.py` (581 行) | P2 — **借鉴补充** | 新增 | | 16+ 种图表类型(含甘特图/森林图/韦恩图等) | `outline_prompts.py` `chart_config` | P3 — **借鉴补充** | 新增 | | 大纲阶段图表预配置 | `outline_prompts.py` slides[].chart_config | P3 — **借鉴补充** | 新增 | | 完整演讲稿生成系统(7 语气 × 7 受众 × 3 复杂度) | `speech_script_service.py` (793 行) | P5 — **借鉴补充** | 新增 | | 演讲稿 Prompt 设计(开场白/正文/结束语) | `speech_script_prompts.py` | P5 — **借鉴补充** | 新增 | | 深度研究驱动 PPT(Tavily + SearXNG 双引擎) | `deep_research_service.py` + `research/` | P16 — **新增** | 新增 | | 智能配图三合一(本地+网络+AI 生成) | `ppt_image_processor.py` (83KB) + `image/` (11 个 Provider) | P17 — **新增** | 新增 | | TODO 任务板实时追踪 | `todo_board.html` (276KB) + `TodoBoard`/`TodoStage` 模型 | P18 — **新增** | 新增 | | AI 聊天编辑(视觉参考) | `project_slides_editor.html` (657KB) + `ai_service.py` | P19 — **新增** | 新增 | | 项目管理与版本历史 | `Project` + `ProjectVersion` 模型 + `project_manager.py` | P20 — **新增** | 新增 | | 项目分享功能(share_token) | `share_service.py` + `Project.share_token` | P20 — **新增** | 新增 | | 4 Provider AI 抽象层(OpenAI/Anthropic/Google/Ollama) | `ai/providers.py` (1094 行) | P0 — 借鉴补充(多 Provider) | 参考 | | 多模态消息支持(文本+图片) | `ai/base.py` `AIMessage` + `ImageContent` | P19 — AI 聊天编辑 | 参考 | | Think 标签过滤(推理模型兼容) | `providers.py` `_filter_think_content()` | — | 参考 | | 修复/验证 Prompt 体系(6 种修复) | `repair_prompts.py` | P0 — 借鉴补充(质量保证) | 参考 | | 文件处理(FileProcessor 7 种场景检测) | `file_processor.py` | P0 — 借鉴补充(文件输入) | 参考 | | OpenAI 兼容 API(兼容 DeepSeek/Kimi/MiniMax/302.AI) | `api/openai_compat.py` | — | aitu 已有 Gemini API 配置 | | 用户认证系统(JWT + SHA256) | `auth/` | — | aitu 已有认证体系 | | FastAPI + SQLAlchemy + SQLite 后端架构 | `src/landppt/` | — | aitu 已有 Hono 后端架构 | | Jinja2 + 原生 JS 前端架构 | `web/templates/` + `web/static/` | — | aitu 已有 Angular + Plait 架构 | --- ## 附录:NanoBanana-PPT-Skills 项目能力对照表 > 以下汇总了从 [NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) 项目中识别的所有可借鉴能力及其在本文档中的对应位置。 > > 项目特点:与其他项目(ai-to-pptx / banana-slides / LandPPT)生成可编辑元素不同,NanoBanana 采用 **AI 图片直接生成整页 PPT** 的范式,并首创了 **AI 视频转场** 能力。 | NanoBanana 能力 | 源文件 | aitu 对应规划 | 状态 | |----------------|--------|-------------|------| | AI 图片直出 PPT(Gemini 3 Pro 全页图片生成) | `generate_ppt.py` (452 行) | P0 — **借鉴补充** + P21 — **新增** | 新增 | | Markdown 风格模板系统(页面类型分模板) | `styles/gradient-glass.md` + `styles/vector-illustration.md` | P0 — **借鉴补充** | 新增 | | 6 阶段 Claude Code Skill 工作流 | `SKILL.md` (675 行) | P0 — **借鉴补充** | 新增 | | 页数自适应内容规划策略(5/10/15/25 页模板) | `SKILL.md` 内容规划策略 | P0 — **借鉴补充** | 新增 | | AI 视频转场(可灵 AI 图生视频) | `kling_api.py` (431 行) + `video_materials.py` (459 行) | P4 — **借鉴补充** + P21 — **新增** | 新增 | | 智能转场提示词生成(Claude 分析图片差异) | `transition_prompt_generator.py` (314 行) | P4 — **借鉴补充** | 新增 | | 转场提示词模板框架(A/B 类策略) | `prompts/transition_template.md` (42 行) | P4 — **借鉴补充** | 新增 | | 预设通用转场描述(无需 API) | `simple_transition_prompt_generator.py` (106 行) | P4 — **借鉴补充** | 新增 | | FFmpeg 视频合成(静态页+转场拼接) | `video_composer.py` (493 行) | P21 — **新增** | 新增 | | PPT 视频完整导出流水线 | `generate_ppt_video.py` (462 行) | P21 — **新增** | 新增 | | 交互式图片播放器(HTML5 + 键盘/触摸) | `templates/viewer.html` (337 行) | P21 — **新增** | 新增 | | 交互式视频播放器(视频+图片混合播放) | `templates/video_viewer.html` (438 行) | P21 — **新增** | 新增 | | 视频素材并发管理(ThreadPoolExecutor) | `video_materials.py` `generate_all_materials()` | P21 — 新增(并发生成) | 参考 | | 渐变毛玻璃卡片风格 | `styles/gradient-glass.md` (91 行) | P2 — 模板系统(风格参考) | 参考 | | 矢量插画风格 | `styles/vector-illustration.md` (132 行) | P2 — 模板系统(风格参考) | 参考 | | Prompt 文件读取器 | `prompt_file_reader.py` (118 行) | — | 参考 | | 可灵 AI JWT 认证封装 | `kling_api.py` `KlingVideoGenerator` | — | 参考 | | Claude Code Skill 安装脚本 | `install_as_skill.sh` (203 行) | — | aitu 已有 MCP 工具体系 | | Python 3.8+ CLI 工具架构 | `generate_ppt.py` + `generate_ppt_video.py` | — | aitu 已有 Node.js 后端架构 |