Importing slides
You don't have to rebuild your existing decks from scratch. The slide editor imports PDF and PPTX files and emits a fully-editable V2 SlideDoc — text, images, and positions preserved.
Where to start
On a brand-new agent's slides page, the get-started cluster offers Import as the first option. On an agent with an existing deck, the same Import button lives behind the Use template menu in the top toolbar.
Drag a file onto the Import zone or click to browse. Max file size: 50 MB.
Supported formats
| Format | Behavior |
|---|---|
| Each page becomes a slide. Text is OCR'd into editable text elements; images are extracted and placed at their original positions. Vector content rasters at high DPI. | |
| PPTX | Each slide becomes a slide. Text runs preserve fonts, sizes, weights, colors. Images, shapes, and embedded video carry over. Speaker notes carry into speaker notes. |
Other formats (Keynote .key, Google Slides) aren't supported directly. Export those to PDF or PPTX first.
What happens during import
Upload
The file POSTs to
/api/onboarding/upload-presentation. The server validates the format, virus-scans, and returns a job ID.Process
A background worker parses the deck (PDF: OCR + image extraction; PPTX: schema-faithful conversion). The editor polls the job status every 2 seconds.
Font resolution
For PPTX, fonts that aren't in our curated whitelist get substituted with the closest match. Substitutions are tracked.
Materialize
The processed slides become a SlideDoc on your agent. The editor reloads to show them.
A progress indicator shows "Processed N of M slides" during the run. Imports of 50-slide decks typically complete in under 30 seconds.
Font review
If your PPTX referenced fonts not in our whitelist, the editor surfaces a Font review banner above the top toolbar after import:
2 fonts were substituted. [Review →]
Click the banner to open the Font review modal, which shows each substitution as a row:
| Requested | Resolved |
|---|---|
ProximaNova-Regular | Inter |
Avenir Next | Avenir |
You can:
- Accept all — confirm the substitutions and dismiss the banner.
- Override individually — pick a different font from the curated list for any row.
- Dismiss — leave substitutions as-is and ignore the banner. (It won't reappear.)
Font substitutions are stored in metadata.importedFrom.fontReplacements so you can re-review later.
Migrating from legacy Workflow slides
If you started building your agent before the V2 SlideDoc framework shipped, you may have slides in the legacy Workflow format (each "slide" was a Workflow node with a SlideContentBlock array). The get-started cluster shows a "Migrate from Workflow" option in this case.
Click it and the editor:
- Pulls all Workflow slides from the agent's draft.
- Translates each
SlideContentBlockto a V2 element (text → text, image → image, etc.). - Preserves positions where possible (legacy slides used a fixed two-pane layout, so most elements snap to a default grid).
- Replaces the agent's SlideDoc with the migrated version.
The legacy Workflow slides remain on the agent until you publish — so you can compare and roll back.
What doesn't import perfectly
A few things to check post-import:
- Custom fonts — replaced with whitelist fonts. See font review above.
- Slide animations — PPTX entrance/exit animations don't translate. The schema's
enterfield exists but the importer doesn't populate it. - SmartArt / charts — PPTX SmartArt and charts come in as flattened images. They're not editable as native shape groups.
- Embedded video in PPTX — extracted and uploaded as a Video element when the source is MP4/WebM. Other codecs become a static image of the first frame.
- Speaker notes — preserved into the slide's speaker notes. The agent script and AI instructions are NOT auto-populated — you'll add those after import.
Schema reference
After a successful import, the deck's metadata records the source:
{
"source": "pptx",
"originalFilename": "sales-deck-q2.pptx",
"importedAt": "2026-05-08T14:23:11Z",
"fontReplacements": [
{ "requested": "ProximaNova-Regular", "resolved": "Inter" }
],
"fontReplacementsConfirmed": true
}
| Name | Type | Description |
|---|---|---|
| source* | "pptx" | "pdf" | "manual" | "template" | Where the deck came from. |
| originalFilename | string | The name of the imported file. |
| importedAt | ISO 8601 string | When the import ran. |
| fontReplacements | Array<{ requested, resolved }> | Font substitutions made during import. |
| fontReplacementsConfirmed | boolean | True once the user has accepted/overridden via the font review modal. |