From PowerPoint to Plain Text and Back
From the YC demo-day example deck, rendered with slaide.

From PowerPoint to Plain Text and Back

The question I get most about Slaide isn’t “why plain text,” it’s “what happens to the deck I already have.” Fair question. Most people don’t start from nothing, they start from a folder of .pptx files they’ve been maintaining for years.

What import actually does

slaide import deck.pptx --out deck.slaide

It reads the slide text, the structure (titles, bullets, speaker notes), and pulls that into a .slaide file. What comes out is Markdown for the words plus a YAML theme block, same as any other Slaide file, and you can render it right back out or start editing it as text.

What survives the trip

Text content survives well. Titles, body text, bullet nesting, speaker notes, all of that comes across close to exactly. If your deck is mostly words organized into slides, which is most working decks, most business decks, most internal decks, the import gets you 90% of the way there in a few seconds instead of a few hours of retyping.

Basic structure survives too. Slide order, section breaks if you used them, the shape of the deck.

What doesn’t survive

Say this plainly, because the honest version is more useful than the optimistic one: heavily designed decks lose their decoration.

Hand-placed shapes, custom animations, a background image bled to the exact edge with three overlapping text boxes, a chart built with fifteen manually positioned data labels, none of that maps cleanly to a text format, because a text format doesn’t have a concept of “this rectangle sits at exactly these pixel coordinates.” Import flattens that down to something simpler. You get the content. You don’t get the exact pixel arrangement.

Custom fonts that aren’t in the theme system come through as the closest available match, not the original font. Embedded video and complex charts import as static references at best.

When to import and when to start fresh

Import when the deck is content-heavy and you want to keep editing it as text going forward, a customer proposal, a status deck, an internal all-hands. The value there is entirely in the words and the structure, and that’s exactly what survives.

Start fresh when the deck’s value is the design itself, a conference keynote with custom illustration on every slide, a brand deck someone spent a week in a design tool building. Importing that and hand-fixing what breaks usually takes longer than just writing six fresh headline slides in fifteen minutes, because you’re fighting the import rather than working with a blank page.

My rule of thumb: if you could describe the deck to someone over the phone and they’d basically get it, it’s content-heavy, import it. If the deck needs to be seen to make sense, it’s design-heavy, and you’re better off starting the .slaide file empty and building the content back up around it without trying to preserve a layout that was never going to survive anyway.

Going the other direction

Export is the same operation reversed:

slaide render deck.slaide --out deck.pptx

This one has fewer surprises, because you’re generating clean output rather than reconstructing a messy one. The resulting .pptx has real text boxes and real shapes, not a picture of the slide pasted onto a blank one, so someone who’s never heard of Slaide can open it and move things around normally. That was the harder engineering problem of the two, honestly, getting the round trip out to hold up rather than the trip in.

Import is the on-ramp. It’s there so switching doesn’t mean re-typing three years of decks by hand, and it’s honest about doing that job well for text-heavy decks and doing it badly for design-heavy ones. Know which kind you’re holding before you run it.