Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Converts a markdown deck (slides separated by `---` HR boundaries or by `# ` H1 headings, with optional `<!-- notes: ... -->` presenter notes blocks) into a single-file HTML presentation with arrow-key / space / PgDn / PgUp / Home / End / P / Esc keyboard navigation, presenter mode (split view with current slide + speaker notes + clock + next-slide preview), URL-hash deep linking, and `@media print` page-per-slide for PDF export. Triggers when the markdown-html-orchestrator classifies an input a
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -55% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 526% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 70% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -40% | 0% |
The slide-deck converter. Reads a markdown deck (HR or H1 boundaries, optional presenter notes), emits a single-file HTML presentation that runs in any browser with keyboard navigation, presenter mode, and print-to-PDF.
Three stdlib tools pipeline together:
slide_splitter.py → presenter_notes_parser.py → deck_html_renderer.py
(md → ordered (extract <!-- notes: (slides + design-system
slides with --> blocks, attach tokens → single-file
titles) per slide) HTML with keyboard nav)| Symptom | Action | |---|---| | markdown-html-orchestrator routes input as SLIDES | Invoke this skill | | User runs /cs:md-slides <path>.md directly | Invoke this skill | | Input has 3+ --- HR lines OR 5+ H1 headings with short bodies | Invoke this skill | | Input is a long-form spec | Route to md-document instead | | Input is a code review | Route to md-review instead | | Input has no clear slide boundaries | Refuse, route to md-document | | Input would produce 1 slide | Refuse (it's a poster) |
bash# 1. Split slides on --- or H1 (auto-detect by default) python3 markdown-html/skills/md-slides/scripts/slide_splitter.py \ --input <path>.md --output /tmp/slides.json # 2. Extract <!-- notes: ... --> blocks from each slide python3 markdown-html/skills/md-slides/scripts/presenter_notes_parser.py \ --slides /tmp/slides.json --output /tmp/deck.json # 3. Render single-file HTML deck python3 markdown-html/skills/md-slides/scripts/deck_html_renderer.py \ --slides /tmp/deck.json --title "My Talk" --output deck.html
<section class="slide"> — one visible at a time, controlled by JS→ / Space / PgDn advance; ← / PgUp previous; Home/End jump; P presenter mode; Esc exits presenter#3 jumps to slide 3; browser back/forward walks slides; share deck.html#5 to send someone directly thereCmd+P produces a PDF with one slide per page@media (prefers-reduced-motion: reduce) honored--strict-notes refuses < 50% notes coverage. A deck where most slides have no notes isn't set up for presenter mode. Exit 7.--syntax.---) or H1 boundaries? Recommended: HR for typical decks; H1 for outline-driven decks. Canon: Marp / reveal.js / pandoc convergence.--syntax needed? Recommended: only for decks with substantial code blocks. Default off. Canon: single-file shareability discipline.md-document — that's one continuous document. This is N discrete slides.md-review — that renders diff hunks + annotations. This renders prose slides.marketing/landing/ — that's a landing page, not a deck.{default_output_dir}/deck-{slug}.html (path resolved by orchestrator's output_path_resolver.py; collision suffix -2, -3, … by default).
references/ for full citations (presentation_ux, keyboard_nav_patterns, single_file_deck_conventions)Other measured skills in the registry, with their headline benchmark lift.