opened in error - please delete
Resolved 💬 2 comments Opened Sep 21, 2025 by jduncan-rva Closed Sep 21, 2025
Enhancement: PowerPoint/PPTX Upload and Display Support
Overview
Add support for uploading PowerPoint presentations (.ppt/.pptx) to the library and displaying them on digital signage displays with animation preservation.
Context
Currently, the platform only supports Google Slides via API integration (GOOGLE_SLIDES integration type). This enhancement would allow users to upload PowerPoint files directly to their library and display them with preserved animations and transitions.
Requirements
- Primary Goal: Preserve animations and transitions from PowerPoint presentations
- Target Environment: Digital signage displays (no mobile optimization needed)
- File Types: .ppt and .pptx support
- Quality: High fidelity rendering for professional displays
Current Architecture Analysis
Existing Google Slides Implementation
- Uses Google Slides API for metadata extraction and thumbnail generation
- Supports both iframe embedding and static image slideshow fallback
- Has sophisticated aspect ratio handling (
apps/backend/src/services/slidesRenderer.ts) - Frontend components:
GoogleSlidesDisplay.tsx,EnhancedGoogleSlidesDisplay.tsx
Current Library Constraints
- Only supports
IMAGEandVIDEOinLibraryTypeenum - File upload middleware limited to image/video MIME types (
apps/backend/src/routes/library.ts) - No document processing pipeline for presentations
Proposed Implementation
1. Database Schema Updates
-- Add SLIDES to LibraryType enum
enum LibraryType {
IMAGE
VIDEO
SLIDES -- New type
}
-- Add POWERPOINT_PRESENTATION to IntegrationType
enum IntegrationType {
// ... existing types
POWERPOINT_PRESENTATION
}
2. Processing Pipeline Options
Option A: LibreOffice HTML Export (Recommended)
- Convert PowerPoint to HTML with animation preservation
- Generate static image fallbacks
- Overhead: 200-500MB memory, 30-60s processing time per file
- Implementation: Docker container or cloud service
Option B: Cloud-Based Conversion
- Use Google Cloud Document AI or AWS Textract
- Lower server overhead, network dependency
- Overhead: 2-5s processing, minimal local resources
Option C: Video Export
- Convert presentations to MP4 with timing preservation
- Leverage existing video display infrastructure
- Overhead: Similar to LibreOffice but different output format
3. Code Changes Required
Backend Changes
- File Upload: Extend MIME type support in
apps/backend/src/routes/library.ts - Processing Service: New
PowerPointProcessorclass - Content Source: Add support for
POWERPOINT_PRESENTATIONintegration type - Database: Update Prisma schema with new enums
Frontend Changes
- Upload UI: Accept .ppt/.pptx files in library upload
- Display Component: New
PowerPointDisplay.tsxcomponent - Content Source Form: Support for PowerPoint library items
4. Metadata Structure
// Library.metadata for PowerPoint files
{
"slideCount": 20,
"aspectRatio": "16:9",
"duration": 180000, // Total estimated duration in ms
"hasAnimations": true,
"renderType": "html", // "html", "images", or "video"
"htmlPath": "/presentations/abc123/index.html",
"fallbackImages": ["/presentations/abc123/slide1.jpg", ...],
"autoAdvanceTimings": [5000, 3000, 7000, ...] // Per-slide timings
}
Implementation Phases
Phase 1: Basic Upload and Image Conversion
- [ ] Update database schema (
LibraryType.SLIDES) - [ ] Extend file upload to accept PowerPoint files
- [ ] Implement basic LibreOffice image conversion
- [ ] Create static slideshow display component
Phase 2: Animation Preservation
- [ ] Implement HTML export with LibreOffice
- [ ] Create PowerPoint-specific display component
- [ ] Add iframe rendering with fallback to images
- [ ] Extract and preserve slide timing data
Phase 3: Production Optimization
- [ ] Add cloud-based conversion option
- [ ] Implement caching for processed presentations
- [ ] Add video export alternative for complex animations
- [ ] Performance monitoring and optimization
Phase 4: Integration and Polish
- [ ] Integrate with existing Google Slides workflow
- [ ] Unified presentation management interface
- [ ] Comprehensive error handling and logging
- [ ] Documentation and user guides
Technical Considerations
Resource Overhead
- LibreOffice: 200-500MB memory per conversion, 3-5s startup time
- Processing Time: 30-60s for complex presentations
- Storage: Original file + converted outputs + thumbnails
- Scaling: Consider queue-based processing for multiple uploads
Alternative Approaches Evaluated
- PDF Conversion: Lower fidelity, loses animations
- WebAssembly: Large bundle sizes, browser compatibility issues
- Third-party Services: External dependencies, cost considerations
- Office Online Embedding: Highest fidelity but requires Office 365 integration
Files to Modify
Backend
apps/backend/prisma/schema.prisma- Add enums and typesapps/backend/src/routes/library.ts- File upload supportapps/backend/src/services/powerPointProcessor.ts- New processing servicepackages/shared-backend/src/types/contentSource.ts- Type definitions
Frontend
packages/shared-frontend/src/components/PowerPointDisplay.tsx- New componentapps/brandcast-frontend/src/components/admin/LibraryManager.tsx- Upload UIpackages/shared-frontend/src/constants/contentTypes.ts- Content type support
Acceptance Criteria
- [ ] Users can upload .ppt/.pptx files to library
- [ ] Presentations display with preserved animations on digital signage
- [ ] Fallback to static images when animations fail to load
- [ ] Processing completes within reasonable time (< 2 minutes)
- [ ] Supports standard PowerPoint features (transitions, animations, embedded media)
- [ ] Integration with existing content source and layout system
Related Issues
- Extends existing Google Slides functionality
- Builds on current library upload infrastructure
- Integrates with display rendering pipeline
---
Priority: High
Estimated Effort: 3-4 sprints
Dependencies: Cloud service evaluation, LibreOffice containerization
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗