In the Skill's Own Terms
md-slides converts a markdown deck into a single-file HTML presentation that runs in any browser. A deck is slides separated by --- HR boundaries or # H1 headings, with optional <!-- notes: ... --> presenter notes blocks. Three stdlib Python scripts pipeline: slide_splitter.py, presenter_notes_parser.py, deck_html_renderer.py.
The output ships keyboard navigation, URL-hash deep linking, a progress bar and slide counter, presenter mode with clock and next-slide preview, and a print stylesheet for one-slide-per-page PDF export. It reuses md-document's markdown parser and reads design-system tokens via config_loader.py. It refuses inputs with no clear slide boundaries, 1-slide decks, files under 100 lines, and decks failing --strict-notes 50% coverage.
What it produces
- The rendered HTML deck, written as deck-{slug}.html in the resolved default output directory, with -2, -3 and so on appended on collisions.
- Intermediate JSON files holding the split slides and then the slides with their attached notes.
- A PDF with one slide per page, produced through the print stylesheet by printing from the browser.
How It Works
- 01Split the Deck into Ordered Slides
slide_splitter.py reads the source markdown and splits it on --- HR lines or H1 headings, auto-detecting the boundary style by default, and writes an ordered slide list.
- 02Attach Presenter Notes per Slide
presenter_notes_parser.py scans each slide for notes blocks and attaches them to that slide so presenter mode has something to show on the right-hand panel.
- 03Render the single-file HTML Deck
deck_html_renderer.py combines slides with design-system tokens and emits the deck, taking a title and an output path on the command line.
- 04Apply design-system Tokens
Twelve brand CSS custom properties come from the design system, and design_style changes how dense the slide layouts are.
- 05Refuse Inputs That Are Not Decks
The skill exits rather than converting when the input has no clear slide boundaries, would yield a single slide, or fails the notes-coverage gate under --strict-notes.