FrameSeq

Export PowerPoint#

FrameSeq can export slides as a .pptx file without requiring Microsoft PowerPoint. The exporter asks the browser to complete the normal FrameSeq layout, then maps the measured slide objects into PowerPoint coordinates.

Editable export#

Run:

npm run pptx

Or use the CLI directly:

npx frameseq pptx slides.ts
npx frameseq pptx slides.ts --output output/my-talk.pptx

The default output is output/pptx/<entry-name>.pptx.

Editable export uses a hybrid mapping:

FrameSeq content PowerPoint result
Plain text, lists, and code Editable text boxes
Rectangles and circles Editable PowerPoint shapes
Lines and arrows Editable PowerPoint lines
Complete borders Native PowerPoint shape borders
Partial borders such as border-bottom Editable line objects on the corresponding edges
Images PowerPoint image objects
LaTeX math, inline math, Typst, and compiled LaTeX fragments High-resolution image objects
Speaker notes PowerPoint speaker notes

Structured layouts and position() use the final browser geometry, so the PowerPoint coordinates follow the same split(), grid(), canvas(), and theme layout used by HTML and PDF.

Flattened export#

Use flattened mode when exact visual fidelity matters more than object-level editing:

npx frameseq pptx slides.ts --flatten

Each slide becomes one high-resolution image filling the PowerPoint page. Speaker notes are still preserved, but the visible slide content is not editable as separate objects.

Flattened mode is recommended for slides that rely heavily on gradients, shadows, filters, complex arbitrary HTML, or CSS effects that PowerPoint cannot represent directly.

Fonts and visual differences#

Editable PowerPoint text uses the font family reported by the browser. Install the same fonts on the computer opening the .pptx; otherwise PowerPoint may substitute another font and change line wrapping. Use --flatten when the recipient cannot install the presentation fonts.

PowerPoint stores one typeface per text run, so a run that contains Chinese, Japanese, or Korean characters is exported with the first CJK family from the theme's font stack rather than the Latin family that leads it. Those faces carry Latin glyphs too, so a mixed run stays consistent. To control which name reaches PowerPoint, put your preferred family first:

presentation({ font: { family: '"Microsoft YaHei", Inter, sans-serif' } });

CSS layout and coordinates are preserved, but not every browser visual effect has a native PowerPoint equivalent. Solid fills, typography, basic shapes, and connectors map directly. When all four CSS borders match, FrameSeq uses a native PowerPoint shape border. When only some edges are visible or the edges differ, it emits separate editable line objects for those edges. Formula, Typst, and compiled LaTeX fragments remain visually stable as high-resolution images.

Reveal steps#

PPTX export creates one PowerPoint slide for each FrameSeq slide. All steps() and showAt() content is visible, matching PDF and print behavior. Interactive reveal state remains an HTML presentation feature.