# OpenMAIC Export Formats: PowerPoint, HTML, ZIP, and MP4 Explained

> Explore OpenMAIC export formats including PowerPoint, HTML, ZIP, and MP4. Share and back up your MAIC classrooms easily offline and across platforms.

- Repository: [MAIC/OpenMAIC](https://github.com/THU-MAIC/OpenMAIC)
- Tags: api-reference
- Published: 2026-09-12

---

**OpenMAIC supports four self-contained export formats—PowerPoint (.pptx), Interactive HTML (.html), Classroom ZIP (.maic.zip), and MP4 video—enabling offline sharing, backups, and cross-platform publishing of generated classrooms.**

The THU-MAIC/OpenMAIC repository provides a comprehensive export subsystem that allows educators and developers to extract generated classroom content into portable, distributable formats. Understanding what export formats are supported by OpenMAIC is essential for integrating course materials into existing workflows or deploying them in offline environments.

## PowerPoint (.pptx) Export

OpenMAIC generates fully editable PowerPoint decks that preserve all visual elements from the classroom session. The export includes images, charts, LaTeX formulas, and any embedded media, making it suitable for traditional presentation workflows.

The PPTX generation logic is implemented in [[`app/api/export/pptx.ts`](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export/pptx.ts)](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export/pptx.ts) and relies on the `@openmaic/pptxgenjs` package to construct the slide deck programmatically.

## Interactive HTML (.html) Export

The Interactive HTML export produces a single, self-contained `.html` file that preserves all interactive elements from the classroom. This includes embedded simulations, quizzes, Three.js scenes, KaTeX rendering, Tailwind CSS styling, and Google Fonts.

According to the source code in [[`app/api/export/html.ts`](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export/html.ts)](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export/html.ts), OpenMAIC achieves true offline capability by inlining external assets as `data:` URIs. The system processes assets through the contract defined in [`packages/@openmaic/storage/docs/asset-http-contract.md`](https://github.com/THU-MAIC/OpenMAIC/blob/main/packages/@openmaic/storage/docs/asset-http-contract.md), converting fonts, images, and Three.js addons into base64-encoded data URLs. Assets that cannot be retrieved due to CORS restrictions remain as external URLs, and the system reports these exceptions to the user.

## Classroom ZIP (.maic.zip) Export

The Classroom ZIP format packages the entire course structure—including stages, scenes, and assets—into a single `.maic.zip` archive. This format serves dual purposes: as a complete backup mechanism and as a migration tool for importing classrooms into other OpenMAIC instances.

The archive contains a [`manifest.json`](https://github.com/THU-MAIC/OpenMAIC/blob/main/manifest.json) file that describes the course structure and relative asset paths. The bundling logic resides in [[`app/api/export/zip.ts`](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export/zip.ts)](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export/zip.ts), which follows the runtime HTTP contract documented in [`packages/@openmaic/storage/docs/runtime-http-contract.md`](https://github.com/THU-MAIC/OpenMAIC/blob/main/packages/@openmaic/storage/docs/runtime-http-contract.md).

## MP4 Video (.mp4) Export

For video distribution, OpenMAIC can render the entire classroom as an MP4 file. This export requires the optional **render-service** container, which orchestrates Chromium and FFmpeg to capture and encode the video stream.

The implementation in [[`app/api/export-video/render.ts`](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export-video/render.ts)](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export-video/render.ts) handles the rendering pipeline. Because this process executes server-side with significant resource requirements, it operates as a separate service profile that must be explicitly enabled in the deployment configuration.

## Programmatic Export via the OpenMAIC API

Each export format is accessible through RESTful endpoints under the `/api` namespace. The client-side interface ultimately invokes these endpoints via standard HTTP POST requests.

### Export to PowerPoint

```typescript
await fetch('/api/export/pptx', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ courseId: currentCourse.id })
})
  .then(r => r.blob())
  .then(blob => {
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = `${currentCourse.title}.pptx`;
    a.click();
    URL.revokeObjectURL(url);
  });

```

### Export to Interactive HTML

```typescript
await fetch('/api/export/html', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ courseId: currentCourse.id })
})
  .then(r => r.blob())
  .then(blob => {
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = `${currentCourse.title}.html`;
    a.click();
    URL.revokeObjectURL(url);
  });

```

### Export to Classroom ZIP

```typescript
await fetch('/api/export/zip', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ courseId: currentCourse.id })
})
  .then(r => r.blob())
  .then(blob => {
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = `${currentCourse.title}.maic.zip`;
    a.click();
    URL.revokeObjectURL(url);
  });

```

### Export to MP4 Video

```typescript
await fetch('/api/export-video/render', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ courseId: currentCourse.id })
})
  .then(r => r.blob())
  .then(blob => {
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = `${currentCourse.title}.mp4`;
    a.click();
    URL.revokeObjectURL(url);
  });

```

## Summary

- **PowerPoint (.pptx)**: Fully editable slides generated via `@openmaic/pptxgenjs` in [`app/api/export/pptx.ts`](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export/pptx.ts).
- **Interactive HTML (.html)**: Self-contained offline web pages with inlined `data:` URIs, implemented in [`app/api/export/html.ts`](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export/html.ts).
- **Classroom ZIP (.maic.zip)**: Portable archives containing course structure and [`manifest.json`](https://github.com/THU-MAIC/OpenMAIC/blob/main/manifest.json), handled by [`app/api/export/zip.ts`](https://github.com/THU-MAIC/OpenMAIC/blob/main/app/api/export/zip.ts).
- **MP4 Video (.mp4)**: Server-side rendered video requiring the optional render-service container running Chromium and FFmpeg.

## Frequently Asked Questions

### Does the Interactive HTML export work completely offline?

Yes. OpenMAIC inlines external assets—including Google Fonts, images, and Three.js addons—as base64-encoded `data:` URIs during HTML generation. Only assets blocked by CORS restrictions remain as external URLs, and the system alerts you to these exceptions.

### What infrastructure is required for MP4 video export?

MP4 export requires deploying the optional **render-service** container, which is not enabled by default. This container bundles Chromium for headless rendering and FFmpeg for video encoding, consuming significant server resources during the capture process.

### Can I import a Classroom ZIP into a different OpenMAIC instance?

Yes. The `.maic.zip` format is designed for cross-instance portability. The archive contains a [`manifest.json`](https://github.com/THU-MAIC/OpenMAIC/blob/main/manifest.json) file that describes the course structure, allowing you to restore or migrate classrooms between separate OpenMAIC deployments.

### Are PowerPoint exports editable after download?

Yes. The PPTX files generated by OpenMAIC are fully editable PowerPoint presentations. They preserve vector graphics, text layers, and LaTeX-rendered formulas as native PowerPoint objects rather than flattened images.