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.4.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.4-py2.py3-none-any.whl (47.1 MB view details)

Uploaded Python 2Python 3

File details

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

File metadata

  • Download URL: ii_slide-0.1.4.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.4.tar.gz
Algorithm Hash digest
SHA256 9e2a32f47a21890b86f0ab2b2d30cc444a5bab61926cc17308ef153bd984b107
MD5 dcf20176341df219e0b54ba64385caf0
BLAKE2b-256 4f61df09ea65e6c4dc9ad87ecc53ded584c5d5553f9ec2ba94aba6782b06745b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ii_slide-0.1.4-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.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 bbc50b729c3cc2edd8d22f89001597cc557dc24d409394e29df32df8da587863
MD5 c3a1b6b4ee6f5cf4e14563b52b76df31
BLAKE2b-256 7def5838a4fd7a85e9850c0254f999dc3707792c35425a8f4924526d4e2e14f2

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