Drop in a .pptx and it tells you which fonts the deck actually uses and which are installed, then hands you a .zip that installs the rest. Free, in the browser, nothing uploaded.
翻訳待ち
デザインTypeScript · RustGitHub @stoatworks-labsオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Tells you which fonts a PowerPoint deck actually uses and which are missing, then builds a font bundle with installers for the machine that needs them. Checks the deck's video and audio too. Runs in the browser; nothing is uploaded.
翻訳待ち
Loading the full README.
Read the full README ↗AI-assisted project. This codebase was created with Claude (Anthropic), directed and reviewed by a human author. I've checked the scanner against three real presentations from different places (one from Canva, one from Office with embedded fonts, and a 316 MB deck that names almost no fonts explicitly), and checked its installed/missing verdicts font by font against CoreText's own list on macOS. The bundle's Windows installer has been run end to end on Windows 11 and that's how I caught it unregistering every other per-user font on the machine (fixed since). The macOS and Linux installers are syntax-checked but haven't been run against a real font install. Check the bundle on a spare machine before you rely on it in front of a client.
Drop in a .pptx and it tells you which fonts the deck actually uses and which of
those are installed here, then hands you a sidecar .zip that installs the rest on
the machine that needs them.
Everything happens in the browser. The deck is never uploaded anywhere.
Use it at pptx-font-manager.stoatworks-labs.com. Its page on Stoatworks Labs covers running it on your own server, and the project page has the user guide.
The hosted tool with the repo's synthetic test deck (test/fixtures/synthetic.pptx) loaded: five fonts found, four installed on the machine that took the picture, one family present but not at the weight the deck asks for, and the bundle ready to build. The deck never left the browser.
Because you get a wrong answer that looks right. Every PowerPoint theme carries a script fallback table, a list of fonts to reach for if the deck ever contains Japanese, Devanagari, Khmer, Syriac and so on. It's there whether or not a single such character exists in the presentation.
Searching a real deck for typeface= finds 39 fonts. It uses two. The
other 37 are that table, and a tool that lists them will send you off to install
Mongolian Baiti and DokChampa for a slide that says "Welcome" in Calibri.
The second half of the problem is that decks name faces, not families:
| The deck asks for | A naive check says | Actually |
|---|---|---|
Helvetica Neue Medium | missing | you have it |
Poppins Regular | missing | you have it |
Times Roman | missing | that's Times New Roman |
Garamond | missing | genuinely missing |
Three false alarms out of four. This tool resolves the names first, so "missing" means missing.
Scans slides, layouts, masters, notes, charts and SmartArt, resolves theme
references (+mn-lt and friends) through the theme the slide actually
inherits, and sorts what it finds by how much it matters: used on a slide,
inherited from a layout or theme, or only present somewhere incidental.
Checks what's installed, using the Local Font Access API where the browser has it, and text-width measurement everywhere else. The fallback was checked against CoreText on macOS across nine fonts and agreed on all nine.
Finds replacements across two catalogues (1,942 Google Fonts families, plus
119 more from Fontsource that Google doesn't carry), matched after the name is
normalised, with near-matches offered when there isn't an exact one (a missing
Garamond suggests EB Garamond and Cormorant Garamond).
Substitutes what can't be shared. The fonts most often missing are the ones a deck picks up just by being written on Windows or a Mac: Calibri, Cambria, Arial, Times New Roman, Courier New, Georgia. None of them may be redistributed and none are on Google Fonts, so the app offers metric-compatible stand-ins instead: Carlito for Calibri, Caladea for Cambria, Arimo for Arial, Tinos for Times New Roman. These have the same advance widths as the original, so line breaks hold and text stays inside its box.
Where there's only a visually similar face (Open Sans for Segoe UI), it tells you so. That swap will move your line breaks, and being told the deck is fixed when it isn't is worse than being told the font is missing.
Recognises Adobe Fonts. These can never be bundled. Adobe's terms say the fonts "are not compatible with packaging workflows that involve transferring font files to another user or computer", and there's no API that serves the files anyway. So for a missing one the app gives the reason and links straight to the family page, where anyone with a Creative Cloud subscription can activate it.
The desktop app also catches the version of this that looks fine: a font Creative Cloud syncs onto your machine is installed here and nowhere else, so the deck looks perfect for you and breaks at the venue. The app tells it apart from an ordinary installed font by where the file lives (Adobe keeps synced faces in its own CoreSync folder), which is why Times New Roman doesn't get the warning just for being sold on Adobe Fonts too.
Reports embedded fonts, the ones that travel inside the deck and need no installing at all. Where the format allows, it extracts them as proper installable files (see below).
Builds a sidecar .zip containing the fonts, a manifest saying where each
came from and under what licence, and an installer for macOS, Windows and Linux
that writes to the per-user font directory with no administrator password.
PowerPoint's "embed fonts in the file" doesn't store a TTF. It stores EOT, and what happens next depends on who wrote the file:
This is the beginning of the README. Read the rest at the original. Read the full README ↗