PresentationPPT

AI PowerPoint generator / Why AI decks break

Technical teardown

Why AI-generated decks break in PowerPoint

The complaint is always the same: the preview looked fine, the download did not. Here are the five things that go wrong inside the file, why each one happens, and how to check a deck before you stand up with it.

Published 2026-08-04 · Includes measurements from 30 decks generated and rendered for this article

A .pptx is a zip archive of XML. When an AI tool hands you one that opens with text spilling off the slide, charts that cannot be edited, or a dialog telling you the file is corrupt, the cause is almost always one of five specific things. None of them are mysterious. All of them are preventable. Most tools don't prevent them, because the fix has to happen before the file is written.

1. The slide is not actually 16:9

A widescreen PowerPoint slide is 13.33 × 7.5 inches. Two of the most common libraries used to generate decks do not default to that.

python-pptx creates a presentation at 10 × 7.5 inches, which is 4:3. PptxGenJS has a layout named LAYOUT_16x9 that is 10 × 5.625 inches — the right ratio, the wrong size. If a tool assumes 13.333 and the file says 10, every shape is written to coordinates that fall off the right-hand edge and simply vanish.

The symptom is black bars on a projector, or content that is mysteriously missing on some slides. It cannot be repaired by resizing afterwards, because every text-fitting decision was computed against the wrong width.

Check it yourself: in PowerPoint, Design → Slide Size → Custom Slide Size. It should read 13.33in × 7.5in, or 33.87cm × 19.05cm.

2. Text overflow, and why autofit does not save you

PowerPoint has a shrink-to-fit mechanism. In the XML it is <a:normAutofit fontScale="62500" lnSpcReduction="10000"/> — a percentage in thousandths, not a computed font size.

That distinction is the whole problem. PowerPoint stores only the ratio and recalculates the actual size at edit time, using its own text renderer against whatever font metrics exist on the machine that opens the file. A generator cannot predict the result, because the result depends on a computation it does not control. Setting normAutofit is a bet that the recipient's copy of PowerPoint will rescue the layout.

So tools do one of two things. They ignore the problem, and text runs off the slide. Or they shrink aggressively, and you get a deck where every slide has a different body size — which is precisely the tell that makes a presentation look generated rather than designed.

What works instead

Measure the text before writing the file. Every layout slot has a known width and height in inches, so the number of wrapped lines at a given point size is computable in advance — if you have the font metrics.

The trick that makes this exact rather than approximate is metric-compatible fonts. Carlito has identical character advance widths to Calibri; Caladea matches Cambria, and the Liberation family matches Arial, Times New Roman and Courier New. Measure against Carlito on a Linux server, write Calibri into the file, and the line breaks predicted on the server are the line breaks PowerPoint produces on a Windows laptop.

Then fit within a narrow band rather than an open-ended one. Searching between 85% and 100% of the design size keeps the deck visually consistent. Below that floor, the honest move is to change the layout or shorten the text, not to keep shrinking.

3. The charts are pictures of charts

This is the one people discover in the meeting. You right-click a chart, choose Edit Data, and nothing happens — because it is a PNG.

Any tool that builds slides as HTML and converts them is very likely doing this. Converting complex CSS layout into editable PowerPoint shapes is genuinely hard — CSS has no PowerPoint equivalent for flexbox, grid, gradients or shadows, and line breaking in a browser is not line breaking in PowerPoint. Rasterising is the pragmatic escape hatch, and it costs you every bit of editability.

A real chart looks like this inside the archive:

ppt/charts/chart1.xml
ppt/charts/_rels/chart1.xml.rels
ppt/embeddings/Microsoft_Excel_Worksheet1.xlsx   <- the data lives here

A rasterised one looks like ppt/media/image3.png and nothing else. If you are comfortable checking, rename the file to .zip, open it, and look for a ppt/charts/ folder.

4. Fonts that do not exist on the machine you present from

A deck built with a designer font renders correctly for the person who made it and substitutes for everyone else. Substitution changes advance widths, which changes line breaks, which reintroduces the overflow from section two even in a file that was measured correctly.

Office's own post-2023 default, Aptos, is a particular trap: it has no metric-compatible free substitute and is absent from older Office installs, so it is unreliable on both ends.

Embedding is possible — OOXML supports it through <p:embeddedFontLst> — but it is narrow. Only TrueType outlines can be embedded; OpenType CFF fonts cannot. The font's own OS/2.fsType bits have to permit it. Windows PowerPoint has honoured embedded fonts for two decades, recent Microsoft 365 builds on Mac do, and Web and mobile are undocumented. Sticking to standard Office typefaces sidesteps all of it.

5. Files PowerPoint refuses to open at all

The nastiest category. XML that validates against the schema, opens in LibreOffice, parses in every library you test with — and makes PowerPoint show a repair dialog. A few specific offenders:

Validating against the OOXML schema is not sufficient here, because every one of these passes the schema. They need an explicit list of things PowerPoint rejects.

What we measured

Everything above is the theory. Here is what came out of running it. We generated 30 decks across nine categories — business reviews, investor pitches, university lessons, technical explainers, data analyses, raw meeting notes, long pasted prose, bare topics, and deliberately awkward edge cases — then exported each one, rendered every slide through LibreOffice at 100 DPI, and compared the rendered ink of every text frame against the box it was declared in.

1,122text frames measured against their box
0frames that overflowed
30/30decks at 13.33 × 7.5in
26/26charts native, with an embedded worksheet
100%of slides carry speaker notes
7distinct layouts in a typical deck

A deck that is nothing but bullet slides is the complaint we hear most after export problems. Across the corpus the median deck used 7 different layouts and the least varied used 5, because the generator refuses to place the same layout three times consecutively and turns a long bullet list into two columns instead.

Where it fell short

Slide counts are approximate. 24 of 30 decks returned exactly the number of slides requested; the rest were one or two over or under, usually on longer requests. If you need exactly twelve slides you will sometimes get thirteen. That is a real limitation and no amount of validation downstream fixes it, because it is a property of what the model chose to write.

Method

The harness is scripts/benchmark.py and the gate is scripts/qa.py. The check works on rendered pixels rather than on the model's own claims: it finds the modal background colour, treats anything sufficiently far from it as ink, masks out the regions claimed by other shapes so a neighbouring element cannot be mistaken for a spill, and then looks for ink in the band just outside each text box. A frame fails at more than 50 stray pixels.

One detail matters for anyone reproducing this: LibreOffice substitutes fonts it does not have, and substitutes have different widths. Install Carlito, Caladea and Liberation in the rendering environment, or the check reports overflow that PowerPoint would never show.

How to check a deck you already have

  1. Open it in desktop PowerPoint, not the web version. The web viewer is forgiving in ways the desktop app is not.
  2. Design → Slide Size. Confirm 13.33 × 7.5in.
  3. Right-click a chart → Edit Data. If a worksheet opens, the chart is real. If nothing happens, it is an image.
  4. Run it in Presenter View. Overflow that is invisible in the editing canvas shows up when the slide is rendered full-screen.
  5. Open the Notes pane. A deck with no speaker notes was written to look finished, not to be presented.
  6. Check every number against your source. No structural test catches an invented statistic.

The numbers in “What we measured” come from scripts/benchmark.py and are gated by scripts/qa.py on every build of our AI PowerPoint generator.

Generate a deck

Related: how to make a PowerPoint with AI · example presentations with the files to download