How to Export OpenMAIC Content as a PowerPoint (.pptx) File
OpenMAIC ships with a built-in PPTX export pipeline that transforms workspace slides, media, and annotations into downloadable .pptx files using the pptxgenjs library through the buildPptxBlob function.
The THU-MAIC/OpenMAIC repository provides a comprehensive framework for converting interactive MAIC workspaces into standard PowerPoint presentations. Understanding how to export OpenMAIC content as a PowerPoint (.pptx) file enables developers to integrate automated slide generation into custom workflows, conversational agents, or direct user interfaces. The system implements a three-layer architecture that handles everything from slide creation to resource bundling.
Understanding the PPTX Export Architecture
According to the THU-MAIC/OpenMAIC source code, the export system separates concerns across three distinct layers to ensure modularity and testability.
Export Core (lib/export/use-export-pptx.ts)
The primary export logic resides in lib/export/use-export-pptx.ts, where the buildPptxBlob function serves as the main entry point. This module instantiates the PptxGenJS class, iterates through the workspace model associated with a given sessionId, and translates each MAIC slide into a PPTX slide using pptx.addSlide().
The mapping process converts MAIC components into their PPTX equivalents:
- Text boxes render via
addTextcalls using coordinate data from the workspace model. - Images embed through
addImageafter conversion to data-URL blobs to ensure portability. - Shapes draw via
addShapemethods with layout-preserving positioning.
After processing all slides, the exporter calls pptx.write({ outputType: 'blob' }) to generate the final Blob object for download.
Resource Packaging (lib/export/resource-pack.ts)
When workflows require bundling auxiliary assets, lib/export/resource-pack.ts packages the generated PPTX with embedded media into a single ZIP archive. This ensures users download one comprehensive file containing both the presentation and any related resources.
Skill and UI Integration (skills/agent-runtime/pptx-import/)
The pptx-import skill defined in skills/agent-runtime/pptx-import/skill.yml exposes export functionality to the conversational agent runtime. Frontend components implement this capability through actions like the "Export → PowerPoint" button, which triggers calls to the internal /api/export/pptx endpoint.
Programmatic Export Methods
Developers can invoke the export pipeline through multiple interfaces depending on their integration requirements.
Direct Function Invocation
Import buildPptxBlob to generate PPTX files server-side or in custom scripts:
import { buildPptxBlob } from '@/lib/export/use-export-pptx';
async function exportCurrentWorkspace(sessionId: string) {
// Generates Blob containing the complete PPTX file
const pptxBlob = await buildPptxBlob({ sessionId });
// Trigger browser download client-side
const url = URL.createObjectURL(pptxBlob);
const anchor = document.createElement('a');
anchor.href = url;
anchor.download = 'my-workspace.pptx';
anchor.click();
URL.revokeObjectURL(url);
}
REST API Endpoint
For decoupled clients, call the HTTP endpoint with the session identifier:
async function downloadViaApi(sessionId: string) {
const response = await fetch(`/api/export/pptx?session=${sessionId}`);
if (!response.ok) throw new Error('Export failed');
const blob = await response.blob();
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'workspace.pptx';
link.click();
URL.revokeObjectURL(url);
}
Export Method Comparison
Select the integration path based on your technical constraints and deployment context.
Direct Function Call (buildPptxBlob): Best suited for server-side rendering pipelines or custom scripts requiring workspace manipulation before export. This method requires direct access to the OpenMAIC library internals and the Node.js environment.
REST API Endpoint (/api/export/pptx): Ideal for browser-based applications and third-party integrations. This approach handles session management automatically and streams the generated Blob through standard HTTP protocols.
Skill-Based Export (pptx-import skill): Optimized for conversational AI workflows where exports trigger automatically following chat-based editing sessions. The skill interfaces with the runtime to generate and attach PPTX files to agent responses.
Media Handling and Data Integrity
The export pipeline in lib/export/use-export-pptx.ts ensures all media assets survive transit by converting images to data-URL blobs before embedding them via addImage. This technique guarantees that presentations function correctly offline without external dependencies. The test suite in tests/export/pptx-media-fallback.test.ts validates this behavior, verifying that fallback mechanisms activate when assets are missing or corrupted.
Summary
- The core export logic lives in
lib/export/use-export-pptx.ts, utilizingpptxgenjsto convert MAIC slides to PPTX format. - Call
buildPptxBlob({ sessionId })to programmatically generate PPTX files from active workspace sessions. - Use the
/api/export/pptxendpoint for HTTP-based export requests from browser clients. - The
pptx-importskill enables conversation-driven export workflows within the agent runtime. - Media assets embed as data-URL blobs to ensure complete file portability.
Frequently Asked Questions
What library does OpenMAIC use for PowerPoint generation?
OpenMAIC uses pptxgenjs according to the source code in lib/export/use-export-pptx.ts. This library provides the PptxGenJS class with methods including addSlide(), addText(), addImage(), and write() that the exporter leverages to construct the final .pptx file structure.
Can I export OpenMAIC content without using the UI button?
Yes. Import buildPptxBlob from @/lib/export/use-export-pptx and invoke it with a valid sessionId to generate a Blob programmatically. Alternatively, send an HTTP request to /api/export/pptx?session=${sessionId} to retrieve the file via the REST API.
How does OpenMAIC handle images during PPTX export?
The exporter converts image assets to data-URL blobs before calling addImage. This process ensures all media resides within the .pptx file itself rather than linking to external URLs, guaranteeing the presentation displays correctly when shared or viewed offline.
Where are the PPTX export tests located?
The test suite resides in tests/export/pptx-media-fallback.test.ts. These tests verify that media embeds correctly into slides and that fallback mechanisms function properly when assets are unavailable or corrupted during the export process.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →