exporting-decks-to-pptx — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited exporting-decks-to-pptx (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Convert a workbench deck-stage HTML presentation into a fully native, editable PowerPoint file: real text boxes and autoshapes, exact design-token colors, embedded images, and speaker notes carried over. Not screenshots on slides.
Use when the user asks for a PowerPoint or pptx version of an existing HTML deck: "make a PowerPoint version of presentations/<deck>/", "export this deck to pptx", "I need an editable pptx of these slides".
Do not use this skill to build a new presentation; that is workbench:crafting-presentations. This skill consumes that skill's output.
.html with styles, runtime, and notes inlined.slides/ layout with slides/index.html plus slides/slides.css and the runtime JS.Every <section> is one slide; data-screen-label names it. A <script type="application/json" id="speaker-notes"> block holds presenter notes keyed by 1-based slide number.
:root CSS variables) and per-slide-type layout rules. Read the shared CSS first, then the deck's own inline <style> block in the HTML head. Decks override tokens locally, so the inline overrides win; lifting a token from the shared CSS alone will recolor the deck wrongly.Output path: for a single-file deck, write next to the HTML with the same basename and a .pptx extension. For a multi-file deck, write into the deck directory root as <deck-dir-basename>.pptx, never index.pptx.
No sudo needed. Use uv, never direct python or pip:
uv venv /tmp/pptx-venv
uv pip install --python /tmp/pptx-venv/bin/python python-pptx pillow cairosvg pymupdf
docker pull linuxserver/libreoffice:latest # render verificationcairosvg needs libcairo; check with ldconfig -p | grep libcairo. LibreOffice runs from the Docker image when the host has no soffice binary.
python-pptx cannot place SVGs or crop pictures to a circle, so pre-render PNGs with PIL and cairosvg:
cairosvg.svg2png(..., output_width=...), then multiply the alpha channel to bake the CSS opacity in, because python-pptx cannot set picture transparency.Author everything in the HTML deck's own pixel space and convert once:
Every value then lifts straight from the CSS (paddings, font sizes, gaps) with no separate design pass. The conversion helpers live in references/python-pptx-recipes.md.
Write a fresh python script for this deck; never template slide content from a previous conversion, because per-slide code is deck-specific. What transfers is the helper layer and the gotchas, both in references/python-pptx-recipes.md. Read that file before writing any code: each gotcha originally cost a render-fix cycle to find.
Build with a thin helper layer (tb() rich text boxes, rect() shapes, builders for repeated components, est_lines() for stacked layouts). Carry the speaker notes from the HTML JSON into each slide's notes frame and set the document title and author core properties.
Run the generator with the venv interpreter: /tmp/pptx-venv/bin/python build_deck.py.
docker run --rm -v <workdir>:/data --entrypoint soffice linuxserver/libreoffice:latest \
--headless --convert-to pdf --outdir /data /data/<deck>.pptxRasterize each PDF page with PyMuPDF (page.get_pixmap(dpi=96).save("slide-NN.png")) and read every PNG. Fix and re-render; expect 2 to 4 cycles. The first render finds the big breaks (shadows, wraps, overflow); later cycles find rhythm issues. Treat renders as geometry and color checks, not glyph checks: the verification renderer substitutes fonts.
Recommended for high-stakes decks; skippable for quick conversions. Fan out one reviewer subagent per slide. Claude Code: parallel Agent calls in one message. Codex: its subagent equivalent, or review the slides sequentially. Each reviewer gets the HTML path plus the slide's data-screen-label, the design-token list, and the slide's render PNG path, and reports findings as severity plus description.
Two prompt details that matter:
unzip the file and grep the run's srgbClr.Reproduce the deck verbatim, with two exceptions: fix obvious typos and report each fix to the user, and apply the user's writing rules to any text you must genuinely rewrite. Slide numbering, footer labels, and which slides carry no footer come from the HTML, not from convention.
ldconfig -p | grep libcairo. If absent, rasterize the SVG another way (PyMuPDF renders SVG) or ask the user for PNG versions of the assets.soffice binary and run it with the same flags. If neither exists, still deliver the .pptx, and state plainly that render verification was skipped and the layout is unverified. Never skip verification silently.workbench:crafting-presentations builds the deck-stage HTML decks this skill consumes.workbench:crafting-html covers one-off single-file HTML artifacts, including its simpler 09-slide-deck.html deck.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.