Skip to main content

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

  1. Full PowerPoint JSON - Complete presentation with styling and positioning
  2. AI Skeleton - Simplified content structure for AI editing

Data Flow

  1. Frontend → Backend: User edits trigger updates to both presentation and skeleton
  2. AI → Backend: AI modifies skeleton file, changes sync to presentation
  3. 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 status
  • GET /api/presentation - Get full presentation JSON
  • GET /api/skeleton - Get AI-friendly skeleton
  • POST /api/frontend-change - Submit frontend changes
  • POST /api/sync-from-skeleton - Force sync from skeleton
  • POST /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:

  1. AI writes to skeleton.json
  2. File watcher detects change
  3. Backend applies changes to presentation
  4. 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:

  1. Check error logs for full element structure
  2. Add new element class in src/ii_slide/models.py
  3. Update Slide.from_dict() to handle the new type
  4. Implement to_skeleton() and update_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 parsing
  • src/ii_slide/sync_manager.py - File watching and sync logic
  • src/ii_slide/backend.py - FastAPI server with WebSocket
  • src/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

ii_slide-0.1.2.tar.gz (47.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ii_slide-0.1.2-py2.py3-none-any.whl (47.1 MB view details)

Uploaded Python 2Python 3

File details

Details for the file ii_slide-0.1.2.tar.gz.

File metadata

  • Download URL: ii_slide-0.1.2.tar.gz
  • Upload date:
  • Size: 47.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.27

File hashes

Hashes for ii_slide-0.1.2.tar.gz
Algorithm Hash digest
SHA256 6d6d08a61b509ede25fcc728022aa16533ee60773fba6db921f9beec34c3af1a
MD5 a034a0b48a954f938fc651f88b7aa0d0
BLAKE2b-256 c5525cf3048f232023b20f63702b20618e5538e35951ca417ba74f431229b279

See more details on using hashes here.

File details

Details for the file ii_slide-0.1.2-py2.py3-none-any.whl.

File metadata

  • Download URL: ii_slide-0.1.2-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

Hashes for ii_slide-0.1.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 37de86255c51ebf55561fc923d3b6a21ecf66f83679cfcd1d85e643bf33b802f
MD5 4d7ccb9798fb3ccb47614db9bb2078d1
BLAKE2b-256 239169d703915b3480db8b08d0ccd99c4aead38dbdf4a90723ee842cdc5115e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page