Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Export Marp slide markdown files to PDF (default), HTML, PPTX, or PNG. Handles theme loading, Chrome/Chromium detection for PDF export, and batch conversion. Trigger when user says "export slides", "convert marp to pdf", "marp export", "slides to pdf", "slides to html", "导出slides", "slides转pdf", "导出演示文稿".
.claude/skills/brycewang-stanford-marp-export/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 143% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 145% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 3% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 15% | 0% |
Export existing Marp markdown files to PDF (default), HTML, PPTX, or PNG.
bash# PDF (default) — requires Chrome/Chromium npx @marp-team/marp-cli INPUT.md -o OUTPUT.pdf --theme-set ~/.claude/skills/marp-slides-creator/themes/ --allow-local-files --html # HTML npx @marp-team/marp-cli INPUT.md -o OUTPUT.html --theme-set ~/.claude/skills/marp-slides-creator/themes/ --html # PPTX (editable, requires LibreOffice) npx @marp-team/marp-cli INPUT.md -o OUTPUT.pptx --pptx-editable --theme-set ~/.claude/skills/marp-slides-creator/themes/ --allow-local-files # PNG sequence npx @marp-team/marp-cli INPUT.md --images png -o OUTPUT_DIR/ --theme-set ~/.claude/skills/marp-slides-creator/themes/
Find the Marp markdown file. It must contain marp: true in YAML frontmatter.
bash# Verify it's a Marp file head -5 INPUT.md # should show "marp: true"
Themes are stored in the marp-slides-creator skill:
THEME_DIR="$HOME/.claude/skills/marp-slides-creator/themes/"Always use --theme-set "$THEME_DIR/" in all export commands.
PDF and PPTX export require a Chrome/Chromium browser. Marp-cli auto-detects, but if it fails:
bash# macOS Chrome paths (check in order) /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version /Applications/Chromium.app/Contents/MacOS/Chromium --version /Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --version # Set CHROME_PATH if auto-detection fails export CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
If no browser found, fall back to HTML export and inform the user.
Default format is PDF. User can specify otherwise.
Output naming convention:
presentation.md → presentation.pdfPDF export:
bashnpx @marp-team/marp-cli INPUT.md \ -o OUTPUT.pdf \ --theme-set ~/.claude/skills/marp-slides-creator/themes/ \ --allow-local-files \ --html
HTML export:
bashnpx @marp-team/marp-cli INPUT.md \ -o OUTPUT.html \ --theme-set ~/.claude/skills/marp-slides-creator/themes/ \ --html
Both PDF + HTML:
bash# Run sequentially npx @marp-team/marp-cli INPUT.md -o OUTPUT.pdf --theme-set ~/.claude/skills/marp-slides-creator/themes/ --allow-local-files --html npx @marp-team/marp-cli INPUT.md -o OUTPUT.html --theme-set ~/.claude/skills/marp-slides-creator/themes/ --html
bash# Check output exists and show file size ls -lh OUTPUT.pdf OUTPUT.html 2>/dev/null
Report to user:
| Flag | Purpose | When to use | |------|---------|-------------| | --theme-set DIR/ | Load custom themes | When custom .css themes exist | | --allow-local-files | Allow local images | PDF/PPTX with local assets | | --html | Enable HTML tags in markdown | Always recommended | | --pptx-editable | Editable PPTX output | PPTX format (needs LibreOffice) | | --images png | Export as PNG sequence | PNG format | | --pdf-notes | Include speaker notes in PDF | When notes are present | | --pdf-outlines | Add bookmarks to PDF | For long presentations |
| Error | Cause | Fix | |-------|-------|-----| | Chrome/Chromium not found | No browser for PDF | Set CHROME_PATH or fall back to HTML | | theme not found | Missing theme CSS | Check --theme-set path, use built-in theme | | Could not find an input | Bad file path | Verify path and marp: true frontmatter | | Blank/empty PDF | HTML tags without --html | Add --html flag |
bash# Export current project's slides to PDF npx @marp-team/marp-cli slides_project/05_final/presentation.md \ -o slides_project/05_final/slides.pdf \ --theme-set ~/.claude/skills/marp-slides-creator/themes/ \ --allow-local-files --html # Quick HTML export (no Chrome needed) npx @marp-team/marp-cli my-talk.md -o my-talk.html --html # Batch export all .md files in a directory for f in slides/*.md; do npx @marp-team/marp-cli "$f" -o "${f%.md}.pdf" --allow-local-files --html done
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 4,930 | 4,540 | -8% | 1 | 1 | 0% | 962 | 2,339 | +143% | 0 | 0 | — |
case-07 | fail→fail | 5,098 | 1,783 | -65% | 1 | 1 | 0% | 1,023 | 1,617 | +58% | 0 | 0 | — |
case-01 | fail→fail | 10,659 | 2,500 | -77% | 1 | 1 | 0% | 2,154 | 1,761 | -18% | 0 | 0 | — |
case-03 | fail→fail | 3,998 | 4,493 | +12% | 1 | 1 | 0% | 208 | 1,637 | +687% | 0 | 0 | — |
case-04 | pass→pass | 20,532 | 11,350 | -45% | 1 | 1 | 0% | 3,616 | 3,824 | +6% | 0 | 0 | — |
case-05 | pass→pass | 8,193 | 13,562 | +66% | 1 | 1 | 0% | 1,589 | 4,917 | +209% | 0 | 0 | — |
case-06 | fail→fail | 4,856 | 4,427 | -9% | 1 | 1 | 0% | 1,039 | 2,129 | +105% | 0 | 0 | — |
case-08 | fail→pass | 3,988 | 2,247 | -44% | 1 | 1 | 0% | 736 | 1,800 | +145% | 0 | 0 | — |
case-09 | fail→pass | 9,364 | 4,442 | -53% | 1 | 1 | 0% | 1,778 | 2,271 | +28% | 0 | 0 | — |
case-10 | pass→pass | 5,906 | 3,377 | -43% | 1 | 1 | 0% | 1,240 | 2,125 | +71% | 0 | 0 | — |
case-11 | pass→pass | 4,251 | 2,700 | -36% | 1 | 1 | 0% | 831 | 1,940 | +133% | 0 | 0 | — |
case-12 | fail→pass | 8,473 | 2,163 | -74% | 1 | 1 | 0% | 1,687 | 1,746 | +3% | 0 | 0 | — |
case-13 | fail→pass | 9,843 | 4,209 | -57% | 1 | 1 | 0% | 1,967 | 2,267 | +15% | 0 | 0 | — |
case-14 | fail→pass | 10,623 | 2,005 | -81% | 1 | 1 | 0% | 2,168 | 1,737 | -20% | 0 | 0 | — |
case-15 | pass→pass | 6,627 | 3,449 | -48% | 1 | 1 | 0% | 1,437 | 2,118 | +47% | 0 | 0 | — |
case-16 | pass→pass | 4,805 | 2,419 | -50% | 1 | 1 | 0% | 1,013 | 1,829 | +81% | 0 | 0 | — |
case-17 | pass→pass | 5,735 | 3,144 | -45% | 1 | 1 | 0% | 1,278 | 2,046 | +60% | 0 | 0 | — |
case-18 | pass→pass | 5,491 | 4,894 | -11% | 1 | 1 | 0% | 1,234 | 1,930 | +56% | 0 | 0 | — |
case-19 | fail→fail | 12,265 | 4,792 | -61% | 1 | 1 | 0% | 2,769 | 1,684 | -39% | 0 | 0 | — |
case-20 | pass→pass | 9,549 | 5,035 | -47% | 1 | 1 | 0% | 2,429 | 2,455 | +1% | 0 | 0 | — |
case-21 | fail→pass | 8,546 | 5,429 | -36% | 1 | 1 | 0% | 1,857 | 2,526 | +36% | 0 | 0 | — |
case-22 | pass→pass | 10,176 | 2,519 | -75% | 1 | 1 | 0% | 2,008 | 1,810 | -10% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 20 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.