Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 41 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,43 @@

[English](README.md) | [中文](README_zh.md)

Recreate NotebookLM's AI PPT feature and extend it into a controllable, editable, model-configurable PPT workbench that converts papers, documents, and other materials into beautiful PPT images.
Build a controllable, editable, model-configurable AI PPT workbench inspired by NotebookLM. AIPPT converts papers, documents, and other materials into presentation decks, then exports them as PDF, raster PPTX, or editable PPTX with editable text, native lines/table borders, and separated image assets.

![AIPPT workbench demo](docs/assets/aippt-demo.gif)

[Watch the HD demo video](docs/assets/aippt-demo.webm)

The demo covers uploading `doc/L9.md`, entering custom requirements, generating and editing the design outline, confirming page designs, generating a 6-slide deck, editing one slide, confirming the replacement, and exporting PDF/PPTX. Model waiting time is fast-forwarded.

## Latest Update: Editable PPTX Export

Editable PPTX export is now supported. Generated slide images can be reconstructed into PowerPoint-editable pages: OCR text becomes editable text boxes, simple lines and table borders are rebuilt as native shapes, and backgrounds, icons, illustrations, and visual components are separated into movable image assets instead of remaining one full-page bitmap.

| Generated PPT image | After conversion to editable PPTX |
| :--------------------------------------------------------: | :------------------------------------------------------------------------------------: |
| ![Generated PPT image](docs/assets/gen_ppt_pic.png) | ![Converted editable PPTX with separated elements](docs/assets/gen_ppt_edit.png) |

## More Than A Clone

NotebookLM's PPT feature is closer to a one-click result generator, with limited visibility into the design process and limited per-slide control. This project turns the workflow into an understandable, editable workbench:

- **Visible process**: Review the deck outline and page-by-page design notes before image generation
- **Visible process**: Review the deck outline and page-by-page design notes before slide generation
- **Per-slide control**: Edit any slide independently, generate new versions, revert history, and confirm replacements
- **Model control**: Configure separate OpenAI-compatible models for text planning, image generation, and image editing
- **Model control**: Configure separate OpenAI-compatible models for text planning, visual understanding, OCR, image generation, and image editing
- **Local-first config**: Manage model connections through local `config.yaml` or WebUI local API configuration; saved projects and exported files do not include API keys
- **Export-ready output**: Export generated decks to PDF/PPTX for presentation or further editing
- **Experimental high-fidelity editable PPTX export**: Rebuild slide images into editable PowerPoint text boxes, conservative native shapes, and positioned bitmap assets through a provider-gated generative editable export path
- **Export-ready output**: Export generated decks to PDF, raster PPTX, or editable PPTX for presentation and downstream editing
- **Editable PPTX reconstruction**: Rebuild slide images into editable PowerPoint text boxes, native line/table-border shapes, and positioned bitmap assets through a provider-gated reconstruction path

## ✨ Features

- 🎨 **Per-slide image generation**: Create an editable outline and page designs before converting them into PPT page images
- 🌐 **PPT Workbench**: Upload sources, configure model roles, preview slides, edit pages, track history, and export
- 🎨 **Per-slide generation**: Create an editable outline and page designs before generating polished PPT pages
- 🌐 **PPT Workbench**: Upload sources, configure model roles, preview slides, edit pages, track history, and export PDF/PPTX
- 📝 **Multi-format parsing**: Supports `.md/.txt/.pdf/.docx/.pptx` input and converts content to Markdown
- ✏️ **Full-page image editing**: Edit each generated slide independently, revert history, and confirm replacements
- 🔀 **Three model roles**: Configure `prompt_model`, `image_model`, and `edit_model` separately
- 🔀 **Multi-model roles**: Configure `text_model`/`prompt_model`, `vlm_model`, `ocr_model`, `image_model`, and `edit_model` separately as needed
- 🖼️ **Image result compatibility**: Accepts URLs, Markdown image links, data URLs, `b64_json`, and raw base64
- 💾 **Local multi-project persistence**: Save multiple PPT projects in the browser, including source content, outline, page designs, generated images, and per-slide edit history
- 📤 **Editable PPTX reconstruction**: Export a separate experimental high-fidelity editable PPTX mode after provider verification; see [Generative Editable PPTX Export](docs/generative-editable-pptx.md)
- 💾 **Local multi-project persistence**: Save multiple PPT projects in the browser, including source content, outline, page designs, generated slides, and per-slide edit history
- 📤 **Editable PPTX reconstruction**: Export editable PPTX with editable text, separated image assets, and native simple shapes after provider verification; see [Generative Editable PPTX Export](docs/generative-editable-pptx.md)

## 🚀 Quick Start

Expand Down Expand Up @@ -87,7 +95,7 @@ python main.py --from-prompt prompts.json

### Local Project Persistence

AIPPT stores project content and image assets in the current browser profile's IndexedDB, and uses localStorage for the active project id, UI preferences, and local API configuration. Saved project data includes uploaded sources, content settings, design outlines, page designs, generated images, edited versions, and image data needed for export.
AIPPT stores project content and image assets in the current browser profile's IndexedDB, and uses localStorage for the active project id, UI preferences, and local API configuration. Saved project data includes uploaded sources, content settings, design outlines, page designs, generated pages, edited versions, and image assets needed for export.

Notes:
- Clearing browser site data removes local projects.
Expand All @@ -97,14 +105,14 @@ Notes:
### 3. WebUI Usage Flow

1. **Upload Document**: Drag and drop or click to upload a source file in the left panel
2. **Configure Models**: Configure text, image generation, and image editing model roles
2. **Configure Models**: Configure text, visual understanding/OCR, image generation, and image editing model roles as needed
3. **Set Parameters & Requirements**: Choose page count, resolution, aspect ratio, language, style, audience, and custom requirements
4. **Confirm Design**: Generate an editable outline, confirm it, then review the generated page designs
5. **Generate PPT**: Generate slide images after page-design confirmation and watch real-time progress
5. **Generate PPT**: Generate slide pages after page-design confirmation and watch real-time progress
6. **Preview & Edit**: Preview generated slides in the right panel and edit a single page when needed
7. **Export**: Export to PDF or PPTX
7. **Export**: Export to PDF, raster PPTX, or editable PPTX

The export menu keeps the existing raster PPTX option and adds a separate experimental high-fidelity editable PPTX option. The editable mode uses OCR plus image editing/image generation providers and is quality-gated by default; it fails rather than silently returning a low-fidelity deck unless an explicit fallback policy is requested. Strict live provider verification is still pending for the currently tested provider set. See [Generative Editable PPTX Export](docs/generative-editable-pptx.md).
The export menu keeps the existing raster PPTX option and adds a separate editable PPTX option. Editable mode uses VLM/OCR plus image editing/image generation providers to reconstruct slides into editable text boxes, native simple shapes, and separated bitmap assets. It is quality-gated by default and fails rather than silently returning a low-fidelity deck unless an explicit fallback policy is requested. See [Generative Editable PPTX Export](docs/generative-editable-pptx.md).

The built-in demo source is `doc/L9.md`. This is a repository-relative path, so a fresh clone can use it directly in the WebUI or CLI examples.

Expand All @@ -126,8 +134,8 @@ OpenNotebookLM-AIPPT/
## ⚙️ Configuration

All configurations are managed in `config.yaml`, including:
- API configuration (`prompt_model`, `image_model`, `edit_model`)
- Generative editable PPTX provider roles and quality gates (`ocr_model`, cleanup, asset generation, repair, validation)
- API configuration (`text_model`/`prompt_model`, `vlm_model`, `ocr_model`, `image_model`, `edit_model`)
- Generative editable PPTX provider roles and quality gates (visual analysis, OCR, cleanup, asset generation, repair, validation)
- PPT default settings (language, style, page count)
- Timeout and retry settings

Expand All @@ -142,10 +150,18 @@ return an image URL, data URL, or base64 payload.
```yaml
api:
models:
prompt_model:
text_model:
model: "gpt-4o"
base_url: "https://api.openai.com/v1"
api_key: "sk-xxx"
vlm_model:
model: "gpt-4o"
base_url: "https://api.openai.com/v1"
api_key: "sk-xxx"
ocr_model:
model: "ocr-model"
base_url: "https://api.example.com/v1"
api_key: "sk-xxx"
image_model:
model: "gpt-image-2"
base_url: "https://api.example.com/v1"
Expand All @@ -164,7 +180,8 @@ output/ppt_20241201_123456/
├── prompts.json # Generated prompts
├── result.json # Generation result
├── presentation.pdf # Exported PDF
└── images/ # Slide images
├── presentation.pptx # Exported raster or editable PPTX
└── images/ # Generated slide images and assets
```

## 🧪 Development Checks
Expand Down Expand Up @@ -196,15 +213,15 @@ GitHub Actions runs the same default checks on `main` and `dev` pull requests an

## 📋 TODO

- [ ] Upgrade generated PPT images into structured, editable PPT content
- [ ] Support region selection for partial slide editing
- [ ] Add more provider profile templates
- [ ] Improve editable PPTX element grouping, layer ordering, and native-shape coverage for complex slides
- [ ] Add more VLM, OCR, image generation, and image editing provider presets

## 🙏 Acknowledgements
## Acknowledgements

The editable PPTX reconstruction design references ideas from:
- [LRriver/slide-alchemy](https://github.com/LRriver/slide-alchemy)
- [ningzimu/image-to-editable-ppt-skill](https://github.com/ningzimu/image-to-editable-ppt-skill)
- [slide-alchemy](https://github.com/CodingFeng101/slide-alchemy)
- [image-to-editable-ppt-skill](https://github.com/ningzimu/image-to-editable-ppt-skill)

## 📄 License

Expand Down
Loading
Loading