Files
TrueGrowth/docs/PPT_CAPABILITY_PLAN.md

102 KiB
Raw Permalink Blame History

Opentu (开图) PPT 能力规划与实现方案

基于 AiPPT (docmee.cn) + ai-to-pptx + banana-slides(蕉幻)+ LandPPT + 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 展示生成进度

数据结构参考

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 项目分析

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 参数:

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(蕉幻)项目分析

1. 三种创建模式

banana-slides 的 Project 模型 (backend/models/project.py) 定义了 creation_type 字段,支持三种输入模式:

创建模式 creation_type 说明 aitu 实现建议
灵感模式 'idea' 一句话输入AI 自动生成完整大纲 已在 P0 流程中覆盖
大纲模式 'outline' 粘贴大纲文本AI 解析为结构化格式(保留原文不修改) 新增:支持直接导入大纲文本,调用 parse_outline_text 解析
描述模式 'descriptions' 提供完整页面描述AI 解析出大纲并切分每页描述 新增:高级输入模式,用户可精确控制每页内容

每种模式对应不同的 prompt 路径:

  • ideaget_outline_generation_prompt()get_page_description_prompt()
  • outlineget_outline_parsing_prompt()(保留原文) → get_page_description_prompt()
  • descriptionsget_description_to_outline_prompt() + get_description_split_prompt()

aitu 建议在 generate_ppt MCP 工具中增加 mode 参数:

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.py930 行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 项目分析Python 3.11 + FastAPI + SQLAlchemy 全栈 AI PPT 平台)

1. 深度研究驱动生成DEEP 方法论)

LandPPT 的 DEEPResearchService (services/deep_research_service.py) 实现了 DEEP 研究方法论Define → Explore → Evaluate → Present在 AI 生成 PPT 之前先对主题进行深度网络调研:

阶段 含义 实现
Define 定义研究范围 解析主题,生成多轮搜索查询
Explore 探索信息源 Tavily API + SearXNG 双引擎搜索
Evaluate 评估分析 AI 分析搜索结果,提取关键发现
Present 呈现报告 生成结构化研究报告作为 PPT 上下文

研究报告数据结构

@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和流式输出
  • 内置 <think>...</think> 标签过滤(兼容推理模型输出)

aitu 建议:

  • 扩展现有 Gemini API 为角色级配置
  • 大纲用强推理模型、内容用创意模型、编辑用快速模型
  • 降低整体成本的同时提升各阶段生成质量

3. 7 种场景模板

LandPPT 的 AIService (services/ai_service.py) 预定义了 7 种 PPT 场景模板,每种含 styletonestructure 三个维度:

场景 ID 名称 风格 语调 结构
general 通用 清晰简洁 友好专业 平衡叙述
tourism 旅游 生动活泼 热情邀请 景点+体验+攻略
education 教育 系统条理 循循善诱 知识点+案例+练习
analysis 分析 数据驱动 客观理性 数据+趋势+建议
history 历史 庄重叙事 深沉厚重 时间线+事件+影响
technology 科技 前沿创新 专业前瞻 技术+应用+展望
business 商务 专业正式 自信稳重 背景+方案+收益

每种场景会自动匹配对应的 prompt 策略,用户选择场景后 AI 生成更具针对性的内容。

aitu 建议在 PPTGenerateOptions 中增加 scenario 参数:

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 结构包含丰富的元数据:

{
  "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 生成进度追踪:

@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 项目分析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 模型 文本 LLMGPT/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. 加载风格模板 Markdownstyles/*.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()
      • imageaddImage() (base64 / URL)
      • line / arrowaddShape() 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 背景
  1. UI 入口
    • FramePanel 操作栏增加"导出 PPT"按钮
    • 支持选择导出范围(全部 Frame / 选中 Frame

banana-slides 借鉴补充

以下内容借鉴自 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 项目分析

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(原 PDFTronpdf_to_pptx_converter.py)实现专业级 PDF → PPTX 转换:

  • 自动下载平台对应 SDKWindows/Linux/macOS
  • 高质量保留原始排版和可编辑性
  • 需要 APRYSE_LICENSE_KEY 授权

aitu 实现建议:

  • PPTX 导出优先使用前端 pptxgenjs(已规划)
  • PDF 导出可考虑 Playwright 无头浏览器方案作为高保真备选
  • 新增 Markdown 导出选项(成本最低,适合二次处理)
  • HTML 导出可直接复用 PPT 播放器的渲染结果

P2 — PPT 模板/主题系统

价值:高,降低用户使用门槛
复杂度:中
AiPPT 参考slideMasterslideLayoutpage 三级继承

实现方案

  1. PPT 模板数据结构 (types/ppt-template.types.ts)

    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(蕉幻)项目分析

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 分辨率、干净锐利的矢量感

接口定义

interface PresetStyle {
  id: string;
  nameKey: string;           // i18n 翻译 key
  descriptionKey: string;    // i18n 翻译 key完整视觉描述
  previewImage?: string;     // 预览图路径(如 /preset-previews/business-simple.webp
}

2. 自定义模板图片

除了预设风格外,用户还可以:

  • 上传自定义模板图片(Project.template_image_pathAI 将参考该图片的风格生成 PPT
  • 输入纯文字风格描述(Project.template_style),无模板图时使用文字描述

aitu 实现建议:

  • 混合模板方案:在传统 JSON 模板定义布局和占位元素的基础上增加「AI 风格描述」层
    • JSON 模板控制布局结构(元素位置/尺寸)
    • 风格描述控制视觉风格(配色/材质/字体/渲染风格)
    • 两者可独立切换,组合使用
  • 预设 5-8 种风格描述,类似 banana-slides 的 presetStyles
  • 支持用户上传参考图片或输入自定义风格描述
  • 风格描述通过 extraRequirements 或专用字段传入 AI prompt

LandPPT 借鉴补充

以下内容借鉴自 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.pyGlobalMasterTemplate)

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×720px16: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 代码 + 样式配置 + 标签 + 导出信息,例如「商务」模板:

{
  "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_chartAI 可通过对话插入图表

路线 B — 集成 ECharts/Chart.js 库

  • 优势:功能更强大、图表类型更多
  • 劣势包体积大、PPT 导出需要额外处理

支持的图表类型(初期)

  • 柱状图 (bar)
  • 折线图 (line)
  • 饼图 (pie)
  • 环形图 (doughnut)

ai-to-pptx 借鉴补充

1. 表格元素

ai-to-pptx 的 element.jscreateTable() 提供了完整的表格工厂aitu 当前规划中缺少表格支持:

// 参考 ai-to-pptx createTable 签名
function createTable(
  rowColumnDataList: string[][],   // 二维表格数据
  rowFillStyles?: FillStyle[],     // 交替行填充色(循环应用)
  borderColor?: number,            // 边框颜色
  fontColor?: FontColor            // 字体颜色
): TableElement

表格样式能力:

  • 交替行背景色(斑马纹效果)
  • 自定义边框颜色和线宽
  • 单元格文本对齐(水平/垂直)
  • 单元格内边距 (textInsets)
  • 字体大小和颜色配置
  • 四边独立边框配置(上/右/下/左)

aitu 实现建议:

  • 新增 Plait 元素类型 table,或用 geometry 组合实现
  • 支持 AI 通过 MCP 工具 insert_table 自动插入数据表格
  • 导出时映射为 pptxgenjsaddTable() API
  • 优先级可归入 P3与图表一并实现

2. 图表数据格式参考

ai-to-pptx createChart() 的数据格式值得借鉴:

// 柱状图/折线图数据格式
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 项目分析

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 在生成大纲时自动建议):

{
  "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 属性

    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. 数据结构扩展
interface ElementAnimation {
  presetClass: 'entr' | 'exit' | 'emph' | 'path';  // 动画类别
  presetId: number;        // 动画类型 ID
  presetSubtype: number;   // 方向/变体
  duration?: number;       // 时长 (ms)
  startType: number;       // 触发方式 (1=单击, 2=与前一动画同时, 3=前一动画之后)
  text?: boolean;          // 是否应用于文本
  attr?: Record<string, any>; // 额外参数(颜色、字体等)
}

interface PlaitFrame extends PlaitElement {
  type: 'frame';
  name: string;
  points: [Point, Point];
  transition?: FrameTransition;
  elementAnimations?: Record<string, ElementAnimation[]>; // elementId → 动画序列
}

NanoBanana-PPT-Skills 借鉴补充

以下内容借鉴自 NanoBanana-PPT-Skills 项目分析

1. AI 视频转场(图生视频方案)

NanoBanana 在传统 CSS 切换动画之上,开创了 AI 视频转场——使用可灵 AIKling将相邻两页 PPT 图片生成转场视频:

特性 传统 CSS 切换动画 NanoBanana AI 视频转场
效果 淡入淡出/推入/缩放等预设 电影级 3D 变形/物理解构
实现 CSS animation/transition AI 图生视频(首帧→尾帧)
定制性 固定预设参数 每对页面独立生成匹配转场
成本 API 调用费用

可灵 AI API 封装 (kling_api.py, 431 行)

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 提供两种转场提示词生成策略:

策略 AClaude AI 分析生成 (transition_prompt_generator.py, 314 行)

  • 将两张相邻页面图片Base64发送给 Claudeclaude-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 属性

    interface PlaitFrame extends PlaitElement {
      notes?: string;  // Markdown 格式备注
    }
    
  2. 备注编辑入口

    • FramePanel 中 Frame 项展开后显示备注编辑区
    • 或双击 Frame 标题栏下方区域编辑
  3. 演讲者视图

    • 幻灯片播放时,支持"演讲者视图"模式(需要双屏或分窗口)
    • 主窗口显示幻灯片,副窗口显示备注 + 下一页预览 + 计时器

LandPPT 借鉴补充

以下内容借鉴自 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(高度专业)

自定义配置数据结构

@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'

演讲稿生成结果

@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.pySpeechScript)

  • 支持按幻灯片索引存储/查询
  • 记录生成参数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
    • 解析 XMLpresentation.xml → 幻灯片列表, slide{n}.xml → 页面内容
    • 参考 AiPPT 的 pptxObj JSON 结构作为中间格式
  2. PPTX → Plait 元素映射

PPTX 元素 XML 标签 Plait 元素
文本框 <p:txBody> geometry + text
形状 <p:sp> + <a:prstGeom> geometry (对应 shape type)
图片 <p:pic> image
表格 <a:tbl> 多个 geometry 组合
图表 <c:chartSpace> chart 元素 (P3 完成后)
连线 <p:cxnSp> arrow/line
组合 <p:grpSp> group
  1. PPT 形状库扩充

    • 借鉴 AiPPT geometry.js 中 100+ 种标准 PPT 形状的 SVG path 生成代码
    • 建立 PPT prstGeom 名称到 Plait 几何形状的映射
  2. 实现优先级

    • 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

    interface CoverOptions {
      width?: number;       // 封面宽度,默认 600
      height?: number;      // 封面高度,默认 338
      maxSubPages?: number; // 最大子页面数,默认 8
      grayScale?: boolean;  // 是否灰度
    }
    
    async function generateCover(
      frames: PlaitFrame[],
      options?: CoverOptions
    ): Promise<string>  // 返回 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 工具转换包含完整的页面、元素、样式定义。aitu 可建立类似的中间格式标准:

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启用压缩传输

// 压缩
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 组件设计:

interface AiRefineInputProps {
  title: string;                          // 标题(如"AI 优化大纲"
  placeholder: string;                     // 占位文字
  onSubmit: (requirement: string, previousRequirements: string[]) => Promise<void>;
  disabled?: boolean;
  onStatusChange?: (isSubmitting: boolean) => void;
}

组件特性:

  • 内置修改历史记录管理(展开/收起查看)
  • 支持 Ctrl+Enter / Cmd+Enter 快捷键提交
  • 提交中动画效果(加载态反馈)
  • 紧凑模式(无标题时自动切换)

2. 精炼 MCP 工具

新增两个 MCP 工具:

// 大纲精炼
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. 版本数据结构

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)

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. 素材数据结构

interface Material {
  id: string;                       // 素材 UUID
  projectId?: string;               // 所属项目 IDnull 为全局素材)
  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 工具

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 工具设计

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 + ImageService11 个图像 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. 数据模型

// 参考 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 生成流程中增加配图阶段(大纲 → 内容 → 配图 → 渲染)
  • 优先使用免费搜索 APIPixabay / UnsplashAI 生成作为高级选项
  • 复用现有 Gemini 图片生成能力
  • 图片适配器将幻灯片内容自动转换为搜索/生成 prompt
  • 用户可手动替换或重新生成单页配图

P18 — TODO 任务板实时追踪

价值:中高,提升长任务(多页 PPT 生成)的用户体验
复杂度:中
LandPPT 参考ProgressTracker + TodoBoard + TodoStage 模型

实现方案

核心概念PPT 生成是多阶段长任务(研究 → 大纲 → 内容 → 配图 → 渲染),需要可视化的进度追踪面板。

1. 进度追踪模型

参考 LandPPT 的 TodoBoard + TodoStage 数据库模型:

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 关键词自动判断用户意图并注入专业系统提示词:

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)

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 的完整图片:

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 类,视频+图片混合播放
  • 状态管理:isPreviewModeisTransitioning → 静态页面
  • 播放逻辑:首页播放预览视频(循环)→ 右键播放转场视频 → 视频结束显示目标页
  • 加载动画 + 错误处理

aitu 实现建议:

  • 图片直出模式:作为 P0 AI 生成 PPT 的「极致视觉」选项,复用现有 Gemini 图片生成能力
  • 视频导出:作为 P7PDF 导出)的扩展,新增「导出为视频」选项
  • 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 同期开发,提升长任务的用户体验。
  • P21PPT 视频导出)中的图片直出模式可与 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 项目中识别的所有可借鉴能力及其在本文档中的对应位置。

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(蕉幻)项目中识别的所有可借鉴能力及其在本文档中的对应位置。

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 项目中识别的所有可借鉴能力及其在本文档中的对应位置。

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 — 借鉴补充 新增
深度研究驱动 PPTTavily + 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 项目中识别的所有可借鉴能力及其在本文档中的对应位置。

项目特点与其他项目ai-to-pptx / banana-slides / LandPPT生成可编辑元素不同NanoBanana 采用 AI 图片直接生成整页 PPT 的范式,并首创了 AI 视频转场 能力。

NanoBanana 能力 源文件 aitu 对应规划 状态
AI 图片直出 PPTGemini 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 后端架构