AI-powered PowerPoint synchronization backend
Project description
ii-slide
AI-powered PowerPoint synchronization backend that enables bidirectional editing between AI and user interfaces.
Project Structure
ii-slide/
├── src/ii_slide/ # Main package source code
│ ├── __init__.py # Package exports
│ ├── models.py # Data models for PowerPoint elements
│ ├── sync_manager.py # File watcher and sync logic
│ └── backend.py # FastAPI server with WebSocket support
├── examples/ # Example files and demos
│ ├── test_parser.py # Test script for parsing PowerPoint JSON
│ ├── frontend_example.html # WebSocket client demo
│ └── updated_presentation.json # Sample output
├── pyproject.toml # Modern Python packaging configuration
├── requirements.txt # Dependencies
└── README.md # This file
Installation
Development Installation
cd ii-slide
pip install -e .
Production Installation
pip install .
Quick Start
1. Start the Backend Server
cd ii-slide
python -m ii_slide.backend
The server runs on http://localhost:8000
2. Test with Example
Open examples/frontend_example.html in your browser to test the WebSocket connection.
3. Parse PowerPoint JSON
cd examples
python test_parser.py
How It Works
Two-Layer Architecture
- Full PowerPoint JSON - Complete presentation with styling and positioning
- AI Skeleton - Simplified content structure for AI editing
Data Flow
- Frontend → Backend: User edits trigger updates to both presentation and skeleton
- AI → Backend: AI modifies skeleton file, changes sync to presentation
- Real-time Sync: All clients receive updates via WebSocket
Example Skeleton Format
{
"presentationType": "traditional",
"slideCount": 1,
"slides": [
{
"id": "slide_id",
"type": "end",
"texts": [
{
"type": "text",
"id": "element_id",
"content": "Hello World",
"role": "title"
}
],
"images": [
{
"type": "image",
"id": "img_id",
"src": "https://example.com/image.png"
}
]
}
]
}
API Usage
REST Endpoints
GET /api/status- Get sync statusGET /api/presentation- Get full presentation JSONGET /api/skeleton- Get AI-friendly skeletonPOST /api/frontend-change- Submit frontend changesPOST /api/sync-from-skeleton- Force sync from skeletonPOST /api/reset-skeleton- Reset skeleton from presentation
WebSocket
Connect to ws://localhost:8000/ws for real-time updates.
Send Message (Frontend → Backend)
ws.send(JSON.stringify({
type: 'frontend_change',
element_id: 'text_element_id',
change_type: 'content_edit',
changes: { content: 'New text content' }
}));
Receive Message (Backend → Frontend)
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'skeleton_update') {
// AI has updated the skeleton
console.log('AI updated content');
}
};
File Watching
The system automatically watches skeleton.json for changes:
- AI writes to
skeleton.json - File watcher detects change
- Backend applies changes to presentation
- All clients receive updates
Supported Elements
Currently supports:
- Text: Title, body text with HTML formatting
- Image: Images with URLs and positioning
- Shape: Basic shapes with optional text content
Adding New Element Types
When you encounter unsupported elements:
- Check error logs for full element structure
- Add new element class in
src/ii_slide/models.py - Update
Slide.from_dict()to handle the new type - Implement
to_skeleton()andupdate_from_skeleton()methods
Configuration
Change Sync Behavior
Edit sync_manager.py to modify:
- Debounce timing
- Conflict resolution strategy
- File paths
Customize Skeleton Format
Modify the to_skeleton() methods in models.py to change how content is represented for AI.
Development
Running Examples
# Test JSON parsing
cd examples && python test_parser.py
# Start server and open frontend example
python -m ii_slide.backend &
open examples/frontend_example.html
Package Structure
src/ii_slide/models.py- Data models and JSON parsingsrc/ii_slide/sync_manager.py- File watching and sync logicsrc/ii_slide/backend.py- FastAPI server with WebSocketsrc/ii_slide/__init__.py- Package exports
The package follows modern Python packaging standards with pyproject.toml and the src/ layout.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ii_slide-0.1.1.tar.gz.
File metadata
- Download URL: ii_slide-0.1.1.tar.gz
- Upload date:
- Size: 47.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.27
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6cc520a3041b2dfceadd17051f1c869976efd411380d20f383881c3d59abbd1
|
|
| MD5 |
2752b96c673b77d1b26b7a54a02b6488
|
|
| BLAKE2b-256 |
b9fda5ca6aeddd12b8e18ca5b75c19ededbff00927c97f819527d13863420f08
|
File details
Details for the file ii_slide-0.1.1-py2.py3-none-any.whl.
File metadata
- Download URL: ii_slide-0.1.1-py2.py3-none-any.whl
- Upload date:
- Size: 47.1 MB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.27
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
946b9cd9e55ab84841e5d32b288e05dec49f0f43585f21f60d454fb1e28b4d80
|
|
| MD5 |
541156dc8c0ad5051b5019687c9fa53f
|
|
| BLAKE2b-256 |
aa8ee87259840cc6b93a9b5b9165a0c52493e5ca955339b5545cbbee4781fe98
|