> A PowerPoint file is a ZIP package containing XML files and binary assets.
> It stores all the properties you set in a PowerPoint presentation, and tries to organize them into separate files to avoid repetition and make things easier to locate.
The old ones IIRC were MCDF files which you could dig into with a tool called OpenMCDF. MCDF was also the file format *.MSI files were based on for installing packages.
OOXML is incredibly complicated, but LLMs can write it well enough. One of my colleagues was using an LLM to generate PNG slides for a presentation. They looked pretty, but changing anything was a pain. I fed the images to free ChatGPT and asked for a PPTX with every text box, frame and image split into its own object, and it spat out a real, editable presentation.
You could probably then copy-and-paste those into a PPTX file created by PowerPoint to make sure there were no weird things going on with the file(structure) that might cause problems later.
They added a whole set of skills and python scripts for interacting with office files using libreoffice headless, it's not writing the XML files directly
The complication of PPT led me, with the assistance of LLMs, to design a simple but powerful enough alternative editor of slides based on a markdown format that uses reveal.js as presentation engine https://github.com/juanjosegarciaripoll/quarkfoil
The markdown format is very useful because I can edit the human readable content easily enough and it is easy to get assistance from the LLM in tasks such as designing diagrams, finding typos, completing bibliography, adding paper crops, etc.
This looks nice. In your looking around, did you encounter iA Presenter (https://ia.net/presenter)? I'm a huge fan of their very opinionated way of building a good presentation.
Probably not the best for the types of decks you shared though.
No, I did not dig around into commercial software. I wanted a simple open format precisely because I've had both Libreoffice and PowerPoint break large sets of slides in weird ways.
I’ve done a lot of work with the Office file formats over the years, flipping to .zip and messing with the format manually. Lately, because I’ve made courses with 500+ PowerPoint slides with lots of morph transitions, I iterated to find an approach that generally worked with Claude but is never perfect (using the Claude for PowerPoint plugin).
I switched to https://bento.page/ when it showed up here on HN and that’s been much more accurate I think because HTML and CSS is even more represented in training data.
I had to build a diffing engine for PowerPoint files in my first start-up. I initially tried to do this at the OOXML level, and one the weirdest things I found about the format is that the GUIDs are mutated by PowerPoint even if there have been no changes. The serialized OOXML is not really canonical and constantly changes as clients open and save it.
The simplest solution ended up being rendering images of the slides (not easy) and doing it with a slider.
Don’t know if anyone else here has mentioned it, but there is a JavaScript object model that you can call against https://learn.microsoft.com/en-us/office/dev/add-ins/powerpo... And a reference for that https://learn.microsoft.com/en-us/javascript/api/powerpoint?... I was involved in a project where we were trying to use all of this to build PowerPoints and Word documents programmatically and in the end we moved to a simpler approach (this was before LLM times). But knowing how the PPTX is constructed is a useful starting point for anyone.
I've done PowerPoint automation on and off for at least 20 years. Between services and consulting, I've accrued $2m in revenue from that work. There's definitely a market for tools and services around PowerPoint still because it's so ingrained in corporate America.
The biggest project I did was automating the monthly reporting for several Fortune 500 companies. I uses the JavaScript API. The scripts were generated programmatically using XSLT and then run via serialized message queue on a dedicated PowerPoint automation server.
The second biggest project I did was a PowerPoint add-on for a big financial concern. What the add-on did was to enforce styling and branding on presentations.
I will push back on your last statement about knowing how a PPTX is constructed. I've always treated that as basically a black box because it is - and only manipulate it through the API.
I’ve been asking Claude to create PPTX (and DOCX) as a mechanism for collecting precise feedback from colleagues[^1]. Inline comments and edit suggestions using tools they’re familiar with (we use Google Suite which provides a serviceable interface for theses features on DOCX and PPTX). It’s all possible because it’s just reading XML files.
I do this even if the final product isn’t actually a doc or presentation.
That said: would love to hear of other ways people collect feedback and suggestions (in a Claude ecosystem).
[^1] or myself when I have tokens to burn and can’t be bothered to use a GitHub PR review against a markdown file…
Back in the day I supported Aldus Persuasion which was a competitor to Microsoft PowerPoint along with Harvard Graphics. The industry was moving from having service bureaus rasterize slides onto film slides to using computer screens.
When Microsoft started bundling Word, Excel and PowerPoint on the Mac platform where we dominated we realized we couldn't compete against a product that was basically being given away for free. The experience with slide and text animation lead to the purchase of Cosa After Effects which is still around and took full advantage of animating Photoshop and Illustrator files after the Adobe merger.
Learning it was a simple archive was the best discovery I had when I wanted to draft slides in another format (markdown) that were respecting a given graphical chart, with something written in powerpoint originally.
I knew a powerpoint is basically a zip file when I was trying to crack a pptx file last year, the AI basically said “pptx file is basically a zip file, let’s do …”, when I unzipped it, turned out the password protection is useless, all assets and everything are in there unprotected, including the 3D models inside. And you can pack it to a file again, just like the protected one but with no password.
Why “obviously”? The file could contain two parts, one encrypted PowerPoint part with all data and original assets, and the latter just the “rendered” version with everything pruned down to what is needed to display the content. Pair this with some hashing which is signed/stuffed in the encrypted part and any PowerPoint copy would be able to detect tampering as well. Seems obviously trivial.
It's non-trivial to determine "what is needed to display the content". The closest you have is something like "print/save to pdf", which is too lossy for some (eg. you lose animations and comments), and isn't 100% foolproof either (eg. if you use rectangle tool to redact some text, you can still recover what's underneath).
This is a great read. One of the most requested AI features I’ve seen is PPTX slide generation that matches a corporate template and assets perfectly. Claude with skills comes close but not close enough. The amount of fiddling needed to adjust is nearly equal to doing it yourself from scratch. It’s a very tricky standard to work with!
Didn't use AI for it, but had similar request for our team and we found it easier to build a tool that checks against our defined style-guide and auto-fixes what it can as opposed to generating and reporting on other violations of style guide. The idea was similar to latex, don't think about design while creating and let the tool flag / enforce the style-guide and design, and reviewers don't need to focus so much on what's wrong with slides and can pretty much focus on content
We use a simple PowerShell script to run the check (you can interact with any office doc as a ComApplication object) and it took only a few hours of digging through the properties / MS docs to get what we needed.
As in how to interact with office docs programmatically? It's in the second text blurb, you can make a new COM object. For example new Excel Workbook:
$excel = New-Object -ComObject excel.application
From there you have full access to all parts of the document as properties & can call whatever methods are available to edit the document.
As for how we enforce style guide on a presentation, each slide runs through a workflow checking the various style-guide rules that we have / corporate has
- Ensure correct template is used
- Set and enforce correct font
- Check text boxes for font size to check verbosity / readability
- Flag / remove animations (not accessible)
- Flag images without alt-text
and so on
for a 300 slide new release presentation, it takes about 45 seconds for the script to process and auto-fixes what makes sense to auto-fix (e.g., wrong fonts) and adds comments / generates report on what needs to be reviewed and adjusted
i've been struggling a lot with my team to standardize our presentation systems. as soon as we got claude people just started making adhoc, non-standard, slides. This is good because they're 10x better than the bullshit one offs PMs used to make. But as a result we've got 80 different ways of conveying the same type of information to our leadership. And its pissing those leaders off.
Getting people aligned on a single template is our biggest headache for the ops side of the house. Will definitely need to research this further. Thanks for the post.
Oh man the masters and layout proliferation is the biggest pain.
If you can, I'd do a bare bones starting template with like Cover, section divider, and title only layouts. Lock in slide dimensions, fonts, colors. Then ask (and pray) people upload that instead of letting Claude work from scratch.
Even if everyone goes in a different direction, it's much easier to merge and conform styles if you're working on the same template with minimal placeholders.
Ideally you get a library of "best practice" slides that people use as a starting point, but realistically people love doing their thing. Key is to set yourself up for an easy cleanup.
You might find my open source project SmallDocs useful. It lets Claude make presentations in Markdown which can be exported to PPT. You can define styles and make them defaults. (You can also share the native SmallDoc presentations by just sending a url.)
> Getting people aligned on a single template is our biggest headache
I’m of the opinion that this is one of those things where the juice isn’t worth the squeeze. It’s a lot of work. And for what? There is no tangible benefit to having presentation look the same.
It might even be value negative. When I watch back to back presentations, having each presenter present in their own unique style makes the experience more interesting and helps keep me engaged.
An interesting bit of schadenfreude, How does management feel when you try and communicate with them via AI?
In my experience communication via LLM is easily the worst part of them, it feels absolutely miserable to receive that big blob of machine generated fluff. This is especially interesting due to the duality present, it feels pretty great to run them, just sit there and let the machine handle the fluff while you handle the big picture.
Anyhow, usually the flow is the reverse, the boss gives you that big ball of machine fluff and you just have to sit there and take it, fun seeing it go the other way, but seeing as they are in charge I would not be surprised to see directives along the lines of "use more AI it makes you more productive, but don't use it with my reports"
It doesnt help that PowerPoint itself has a truly horrible templating system. Try building a template from scratch and you'll see the ur-template has about 8 styles which are themselves very fragile and whose objects carry different degrees of semantic meaning. This is why, for example, it's stupidly difficult to take a deck produced in one template, paste it into another, and have the new template take effect across the copied slides.
PowerPoint has quite a lot of deep features, and you'll prise it out of my cold dead hands, but the template system is a horror show.
all files are either text, binary blobs or archives (zip), no exception
I personally knew about this when I needed to extract all images from a Word document in 2015, I had the idea to rename the extension to .zip and wow a conveniently placed media folder !
since then I renamed countless file extensions to zip, just to test. it worked nearly every single time
Hah! That's also how I first learned about the zip trick with pptx.
Had never considered it generalizes outside of OOXML files. I'll give it a try next time I'm poking around another file format
Zip is a known format, so library support is mature. It can contain a local file system. And no one is going to casually muck about in it, so you can trust the structure.
Software like 7-Zip supports many formats, even ones that are not usually treated as archives, and recognises them by magic bytes rather than extension. You can for example add a zip extension an EXE file, and 7-Zip will open it.
A much more robust way to figure out what's in a file is using libmagic, accessible through the `file` command on *nix. I don't know if there's an alternative Windows though.
A lot of of the library-as-a-service startups doing excel/PowerPoint/PDF editing libs are gonna die with how ubiquitous and powerful modern LLMs are. I expect a lot of such companies to write sob blog posts similar to what the tailwind founder did about having to lay off most of their team and reinvent themselves for the agentic era. It's a sad time to be a dev right now.
> A PowerPoint file is a ZIP package containing XML files and binary assets.
> It stores all the properties you set in a PowerPoint presentation, and tries to organize them into separate files to avoid repetition and make things easier to locate.
Very informative read overall.
Thanks! Glad it was useful.
This is all MS Office file formats ending in “x”; xlsx, docx, pptx, etc
The old ones IIRC were MCDF files which you could dig into with a tool called OpenMCDF. MCDF was also the file format *.MSI files were based on for installing packages.
By, "the old ones" you mean those file types without the "x"?
Yes, Office 2003 and prior used proprietary file formats
OOXML is incredibly complicated, but LLMs can write it well enough. One of my colleagues was using an LLM to generate PNG slides for a presentation. They looked pretty, but changing anything was a pain. I fed the images to free ChatGPT and asked for a PPTX with every text box, frame and image split into its own object, and it spat out a real, editable presentation.
You could probably then copy-and-paste those into a PPTX file created by PowerPoint to make sure there were no weird things going on with the file(structure) that might cause problems later.
They added a whole set of skills and python scripts for interacting with office files using libreoffice headless, it's not writing the XML files directly
ChatGPT has a very sophisticated Office doc renderer these days, to be fair.
The complication of PPT led me, with the assistance of LLMs, to design a simple but powerful enough alternative editor of slides based on a markdown format that uses reveal.js as presentation engine https://github.com/juanjosegarciaripoll/quarkfoil
Good enough for my work as scientist and also as science communicator. Some slide decks from a recent course can be seen here https://juanjose.garciaripoll.com/cern-lectures/
The markdown format is very useful because I can edit the human readable content easily enough and it is easy to get assistance from the LLM in tasks such as designing diagrams, finding typos, completing bibliography, adding paper crops, etc.
This looks nice. In your looking around, did you encounter iA Presenter (https://ia.net/presenter)? I'm a huge fan of their very opinionated way of building a good presentation.
Probably not the best for the types of decks you shared though.
No, I did not dig around into commercial software. I wanted a simple open format precisely because I've had both Libreoffice and PowerPoint break large sets of slides in weird ways.
I’ve done a lot of work with the Office file formats over the years, flipping to .zip and messing with the format manually. Lately, because I’ve made courses with 500+ PowerPoint slides with lots of morph transitions, I iterated to find an approach that generally worked with Claude but is never perfect (using the Claude for PowerPoint plugin).
I switched to https://bento.page/ when it showed up here on HN and that’s been much more accurate I think because HTML and CSS is even more represented in training data.
I had to build a diffing engine for PowerPoint files in my first start-up. I initially tried to do this at the OOXML level, and one the weirdest things I found about the format is that the GUIDs are mutated by PowerPoint even if there have been no changes. The serialized OOXML is not really canonical and constantly changes as clients open and save it.
The simplest solution ended up being rendering images of the slides (not easy) and doing it with a slider.
Yup. Microsoft loves mutating GUIDs.
Orgmode also does this on HTML export. Makes it impossible to get good diffs
Granted they started doing this several years ago and as a result I moved to asciidoc, so it might have made a fix by now..
Don’t know if anyone else here has mentioned it, but there is a JavaScript object model that you can call against https://learn.microsoft.com/en-us/office/dev/add-ins/powerpo... And a reference for that https://learn.microsoft.com/en-us/javascript/api/powerpoint?... I was involved in a project where we were trying to use all of this to build PowerPoints and Word documents programmatically and in the end we moved to a simpler approach (this was before LLM times). But knowing how the PPTX is constructed is a useful starting point for anyone.
I've done PowerPoint automation on and off for at least 20 years. Between services and consulting, I've accrued $2m in revenue from that work. There's definitely a market for tools and services around PowerPoint still because it's so ingrained in corporate America.
The biggest project I did was automating the monthly reporting for several Fortune 500 companies. I uses the JavaScript API. The scripts were generated programmatically using XSLT and then run via serialized message queue on a dedicated PowerPoint automation server.
The second biggest project I did was a PowerPoint add-on for a big financial concern. What the add-on did was to enforce styling and branding on presentations.
I will push back on your last statement about knowing how a PPTX is constructed. I've always treated that as basically a black box because it is - and only manipulate it through the API.
I’ve been asking Claude to create PPTX (and DOCX) as a mechanism for collecting precise feedback from colleagues[^1]. Inline comments and edit suggestions using tools they’re familiar with (we use Google Suite which provides a serviceable interface for theses features on DOCX and PPTX). It’s all possible because it’s just reading XML files.
I do this even if the final product isn’t actually a doc or presentation.
That said: would love to hear of other ways people collect feedback and suggestions (in a Claude ecosystem).
[^1] or myself when I have tokens to burn and can’t be bothered to use a GitHub PR review against a markdown file…
Back in the day I supported Aldus Persuasion which was a competitor to Microsoft PowerPoint along with Harvard Graphics. The industry was moving from having service bureaus rasterize slides onto film slides to using computer screens.
When Microsoft started bundling Word, Excel and PowerPoint on the Mac platform where we dominated we realized we couldn't compete against a product that was basically being given away for free. The experience with slide and text animation lead to the purchase of Cosa After Effects which is still around and took full advantage of animating Photoshop and Illustrator files after the Adobe merger.
Learning it was a simple archive was the best discovery I had when I wanted to draft slides in another format (markdown) that were respecting a given graphical chart, with something written in powerpoint originally.
I knew a powerpoint is basically a zip file when I was trying to crack a pptx file last year, the AI basically said “pptx file is basically a zip file, let’s do …”, when I unzipped it, turned out the password protection is useless, all assets and everything are in there unprotected, including the 3D models inside. And you can pack it to a file again, just like the protected one but with no password.
is password also included along with the assets?
>turned out the password protection is useless, all assets and everything are in there unprotected, including the 3D models inside
That's only true for the edit protection password, which obviously can't be implemented in a foolproof way, and therefore it's an honor system.
https://en.wikipedia.org/wiki/Microsoft_Office_password_prot...
Why “obviously”? The file could contain two parts, one encrypted PowerPoint part with all data and original assets, and the latter just the “rendered” version with everything pruned down to what is needed to display the content. Pair this with some hashing which is signed/stuffed in the encrypted part and any PowerPoint copy would be able to detect tampering as well. Seems obviously trivial.
It's non-trivial to determine "what is needed to display the content". The closest you have is something like "print/save to pdf", which is too lossy for some (eg. you lose animations and comments), and isn't 100% foolproof either (eg. if you use rectangle tool to redact some text, you can still recover what's underneath).
> you lose animations
lol. lmao, even.
https://mirrors.mit.edu/CTAN/macros/latex/contrib/animate/an...
If you have animations the result can be rendered as a video before storing.
One could argue that the reader of a password protected presentation also shouldn’t have access to the contents etc.
If it is allowed to, this could even be exported to a separate section with a different password.
This is a great read. One of the most requested AI features I’ve seen is PPTX slide generation that matches a corporate template and assets perfectly. Claude with skills comes close but not close enough. The amount of fiddling needed to adjust is nearly equal to doing it yourself from scratch. It’s a very tricky standard to work with!
Didn't use AI for it, but had similar request for our team and we found it easier to build a tool that checks against our defined style-guide and auto-fixes what it can as opposed to generating and reporting on other violations of style guide. The idea was similar to latex, don't think about design while creating and let the tool flag / enforce the style-guide and design, and reviewers don't need to focus so much on what's wrong with slides and can pretty much focus on content
We use a simple PowerShell script to run the check (you can interact with any office doc as a ComApplication object) and it took only a few hours of digging through the properties / MS docs to get what we needed.
How do you check style via PowerShell? You’ve pulled me in.
As in how to interact with office docs programmatically? It's in the second text blurb, you can make a new COM object. For example new Excel Workbook:
From there you have full access to all parts of the document as properties & can call whatever methods are available to edit the document.
As for how we enforce style guide on a presentation, each slide runs through a workflow checking the various style-guide rules that we have / corporate has
- Ensure correct template is used
- Set and enforce correct font
- Check text boxes for font size to check verbosity / readability
- Flag / remove animations (not accessible)
- Flag images without alt-text
and so on
for a 300 slide new release presentation, it takes about 45 seconds for the script to process and auto-fixes what makes sense to auto-fix (e.g., wrong fonts) and adds comments / generates report on what needs to be reviewed and adjusted
I had to programmatically generate PPT files a while back. Don’t recommend. Maybe better with LLMs now
Cool post. Having text animations on a blog post is REALLY distracting for me tho.
i've been struggling a lot with my team to standardize our presentation systems. as soon as we got claude people just started making adhoc, non-standard, slides. This is good because they're 10x better than the bullshit one offs PMs used to make. But as a result we've got 80 different ways of conveying the same type of information to our leadership. And its pissing those leaders off.
Getting people aligned on a single template is our biggest headache for the ops side of the house. Will definitely need to research this further. Thanks for the post.
Oh man the masters and layout proliferation is the biggest pain.
If you can, I'd do a bare bones starting template with like Cover, section divider, and title only layouts. Lock in slide dimensions, fonts, colors. Then ask (and pray) people upload that instead of letting Claude work from scratch.
Even if everyone goes in a different direction, it's much easier to merge and conform styles if you're working on the same template with minimal placeholders.
Ideally you get a library of "best practice" slides that people use as a starting point, but realistically people love doing their thing. Key is to set yourself up for an easy cleanup.
You might find my open source project SmallDocs useful. It lets Claude make presentations in Markdown which can be exported to PPT. You can define styles and make them defaults. (You can also share the native SmallDoc presentations by just sending a url.)
Homepage: https://smalldocs.org/
Example presentations:
https://smalldocs.org/s/mTBw58ut_eTAIlGkYePw6-#k=4MotlKf-sLc...
https://smalldocs.org/s/cGRzzCv7LA9Kd8BxZ4bBAP#k=B7_NNXPbpLw...
Code: https://github.com/espressoplease/smalldocs
> Getting people aligned on a single template is our biggest headache
I’m of the opinion that this is one of those things where the juice isn’t worth the squeeze. It’s a lot of work. And for what? There is no tangible benefit to having presentation look the same.
It might even be value negative. When I watch back to back presentations, having each presenter present in their own unique style makes the experience more interesting and helps keep me engaged.
An interesting bit of schadenfreude, How does management feel when you try and communicate with them via AI?
In my experience communication via LLM is easily the worst part of them, it feels absolutely miserable to receive that big blob of machine generated fluff. This is especially interesting due to the duality present, it feels pretty great to run them, just sit there and let the machine handle the fluff while you handle the big picture.
Anyhow, usually the flow is the reverse, the boss gives you that big ball of machine fluff and you just have to sit there and take it, fun seeing it go the other way, but seeing as they are in charge I would not be surprised to see directives along the lines of "use more AI it makes you more productive, but don't use it with my reports"
It doesnt help that PowerPoint itself has a truly horrible templating system. Try building a template from scratch and you'll see the ur-template has about 8 styles which are themselves very fragile and whose objects carry different degrees of semantic meaning. This is why, for example, it's stupidly difficult to take a deck produced in one template, paste it into another, and have the new template take effect across the copied slides.
PowerPoint has quite a lot of deep features, and you'll prise it out of my cold dead hands, but the template system is a horror show.
At the end of the day it feels like you could do something similar with SVGs - though unfortunately SVGs renderers are very inconsistent.
all files are either text, binary blobs or archives (zip), no exception
I personally knew about this when I needed to extract all images from a Word document in 2015, I had the idea to rename the extension to .zip and wow a conveniently placed media folder !
since then I renamed countless file extensions to zip, just to test. it worked nearly every single time
Hah! That's also how I first learned about the zip trick with pptx. Had never considered it generalizes outside of OOXML files. I'll give it a try next time I'm poking around another file format
You’d be surprised how many file formats are some flavor of “zip file containing files”.
JAR/WAR, iOS apps, and others
And SQLite: https://sqlite.org/appfileformat.html
In fact, relevantly to this article: https://sqlite.org/affcase1.html
I think it’s a decent hack.
Zip is a known format, so library support is mature. It can contain a local file system. And no one is going to casually muck about in it, so you can trust the structure.
Software like 7-Zip supports many formats, even ones that are not usually treated as archives, and recognises them by magic bytes rather than extension. You can for example add a zip extension an EXE file, and 7-Zip will open it.
A much more robust way to figure out what's in a file is using libmagic, accessible through the `file` command on *nix. I don't know if there's an alternative Windows though.
TrID: https://www.mark0.net/soft-trid-e.html
If you're including binary blobs as one of your options, then both text and archives are just types of binary blobs :)
A lot of of the library-as-a-service startups doing excel/PowerPoint/PDF editing libs are gonna die with how ubiquitous and powerful modern LLMs are. I expect a lot of such companies to write sob blog posts similar to what the tailwind founder did about having to lay off most of their team and reinvent themselves for the agentic era. It's a sad time to be a dev right now.
new PPT: Zip files old PPT: OLE pseudo FS with objects embedded.
> new PPT
Docx/pptx/etc has been around since Dec 2006. Nearly 20 years.