Drop in a .pptx and find out which fonts it actually uses, which of those are already on this machine, and what to do about the rest. Missing fonts that Google publishes can be fetched on the spot; whatever is left goes into a sidecar .zip with an installer for each platform.
The presentation is read in the page and never uploaded. The only outbound request is for the font files themselves, and that goes straight from your browser to the Google Fonts repository on GitHub or the Fontsource CDN.
The repo's synthetic test deck: five fonts, four already installed on the machine that took the picture. Lobster Two Bold is reported as a weight the family doesn't have rather than as missing, and the twenty-eight fonts the theme names but never uses are behind a disclosure at the bottom.
What it works out
01
It ignores the fonts the theme only mentions
The point of it
Every Office theme carries a script-fallback table (thirty-odd CJK and Indic families to reach for if the deck ever contains Devanagari or Khmer), and it's there whether or not a single such character exists in the file. Search three real presentations for typeface= and you get 39, 36 and 9 distinct names. The true answers are 2, 4 and 6. A tool that counts the table tells you to install Mongolian Baiti for a slide that says Welcome in Calibri. The ones it dropped are listed at the bottom of the page, because the discrepancy is a fair question.
02
A face isn't a family
Decks name faces, not families: Helvetica Neue Medium, Poppins Regular, Times Roman. Compared straight against the list of installed families, three of those four report missing when the font is sitting right there, and then you're offered a download of "Helvetica Neue Medium" from Google Fonts, which doesn't exist. Style suffixes are stripped to family, weight and slant first, and matched against full and PostScript names as well as families. Arial Black is left alone, because it's its own family and not a 900-weight of Arial.
03
It checks what's actually installed
Where the browser has the Local Font Access API it asks the system directly. Everywhere else it measures the width of a test string rendered in the candidate font against each of the three generic fallbacks, and a difference means the font resolved to something real. Checked against CoreText's own list on macOS across nine fonts, the measurement method agreed on all nine.
04
Embedded fonts are reported, not demanded
A deck can carry its fonts inside it, in which case there's nothing to install. What is stored isn't a TTF but EOT, and what happens next depends on who wrote the file: PowerPoint compresses the glyph data with MicroType Express and it can't be unpacked, while Canva and LibreOffice don't, and those come back out as valid installable files. Either way the font travels with the .pptx, and the page says which case you're in.
05
A bundle that installs itself
The sidecar .zip carries the fonts, a manifest saying where each came from and under what licence, and a small installer for macOS, Windows and Linux that writes to your own account with no administrator password. It also heads off the two things that break this: on macOS anything extracted from a downloaded zip inherits a quarantine flag and Gatekeeper blocks the installer, and on Windows the same provenance makes PowerShell refuse the .ps1, hence the .cmd wrapper. Both have a no-script route as well.
What to check before a show
01
Fonts you own aren't fonts you can pass on
The manifest splits the bundle in two. Anything from Google Fonts carries OFL, Apache 2.0 or the Ubuntu licence and is marked free to share. Anything copied off your machine or pulled out of the deck is marked RESTRICTED, because font licences almost never permit redistribution, and permission to embed a font in a document isn't permission to extract it and install it somewhere else. The bundle is built for moving your own deck between your own machines. Read the manifest before you send it to a venue.
02
A browser can't install a font
No browser can write to a font directory, so the hosted version stops at handing you a zip. The desktop build does the last step itself, and reads the platform's own font registry rather than measuring text, which also makes it more precise: it resolves faces, so Helvetica Neue Medium comes back installed rather than "the family is there, the weight might not be".
03
Legacy .ppt isn't supported
A binary .ppt from before 2007 isn't a zip and has none of this structure in it. It's rejected with an explanation rather than a parse error. Open it and save as .pptx first.
04
It scans what's in the file, not what's on the slide
A font referenced by a text box that sits off the canvas, or by a layout the deck still carries, is a font the file names, so it's reported, tagged with where it was found. Fonts on unused layouts and in notes are held back behind a toggle rather than counted alongside the ones on slides, but "used" here means "named by the file", not "visible in the show".
05
Nothing is uploaded, and there's nowhere to upload it to
There's no backend, account or telemetry. The deck is parsed in the tab. That matters more than usual here, because a client deck is somebody's unannounced content and this tool has to open all of it to find the fonts.
Run your own copy
PowerPoint Font Manager is also published as a Docker image, ghcr.io/stoatworks-labs/pptx-font-manager, serving the same files as the hosted copy. On a laptop or a box in the rack it keeps working when the venue's internet doesn't.
Docker
docker run -d --name pptx-font-manager --restart unless-stopped -p 8538:80 ghcr.io/stoatworks-labs/pptx-font-manager:latest
Then it's at http://localhost:8538/. The repo's docker-compose.yml does the same with docker compose up -d.
Unraid
Search Community Applications for pptx-font-manager and install it. The template sets the port to 8538 for you.