Tekilio Frames

Extract PowerPoint speaker notes as JSON

Get the presenter notes out of a .pptx as clean, structured data — a single notes.json keyed by slide number, ready to parse. No PowerPoint, no digging through OOXML.

Export notes from a deck →

The notes.json schema

Tekilio Frames emits one object whose keys are source slide numbers and whose values are the notes text for that slide:

{
  "1": "Opening — welcome the room",
  "2": "Q3 numbers; pause on the dip",
  "7": "Hidden slides are skipped, so numbers can gap"
}

The keys are the same slide numbers used by the exported slide-NNN-stepN.png images, so notes and visuals line up by number with no extra bookkeeping.

Encoding rules that keep it valid

The file is UTF-8. All control characters are escaped — newlines (\n), tabs (\t), and the vertical-tab soft line breaks PowerPoint inserts on Shift+Enter (U+000B). That last one trips up naive exporters: an unescaped control character makes the whole JSON invalid. Tekilio Frames escapes them, so JSON.parse never chokes.

How it pairs with the images

Because Tekilio Frames renders the deck and reads the notes in one pass, the PNGs and notes.json come from the same source-of-truth slide numbering. Iterate the JSON keys, grab the matching slide-NNN-step*.png files, and you have a fully paired record of each slide's visuals and narration.

Related

Want the visuals as well? See PPTX to PNG and animation states to images. Building an AI workflow? The notes plus per-state images are exactly what LLM and vision pipelines want.

FAQ

How do I extract PowerPoint notes programmatically?
Upload the .pptx to Tekilio Frames. The result zip includes notes.json — a single object keyed by slide number — so you can parse the notes without opening PowerPoint or reading the OOXML yourself.
What format are the notes in?
notes.json is UTF-8 and shaped as { "<slideNumber>": "<notes text>" }. Control characters are escaped (newlines, tabs, and PowerPoint soft line breaks), so the JSON is always valid.
Are slides without notes included?
No. Slides with empty notes are omitted from notes.json, so every key corresponds to a slide that actually has narration. Keys match the slide numbers used by the exported PNGs.