Skip to main content

Presentations (profy-pptx)

Presentations run through two mutually exclusive pipelines. Once chosen you cannot switch mid-way, and you cannot convert between them. Start with this table to decide which path you are on:
Once a path is chosen, do not attempt cross-path conversion. Do not turn an HTML Deck into PDF or PPTX, and do not turn a PPTX into an HTML Deck. HTML Decks depend on Tailwind plus WebGL, neither of which WeasyPrint or wkhtmltopdf can render, so the conversion produces severely degraded output. If you need a PDF, take the builtin/kami route from the start.

Activation

profy-pptx is user_selectable: falseautomatically available, nothing to tick.
contracts declares only skills: ["skills/"] and no tools. The plugin ships two skills: builtin/pptx (the native pipeline hub) and builtin/html-deck (web presentations).

The export pipeline lock

Never write a custom export or conversion script. The only supported way to produce a PPTX is executing the skill’s own svg_to_pptx.py.Custom scripts (cairosvg, python-pptx, pptxgenjs, and friends) produce rasterized image-only slides with broken CJK text — a known P0 defect.This rule applies unconditionally, including after sandbox errors, retries, or context compression. If the sandbox recovered, re-run the pipeline script; do not rewrite it.
The reasoning is worth internalising. There are two ways to get SVG into PPTX: render the SVG to a bitmap and paste it into a slide, or translate SVG primitives into PowerPoint’s native DrawingML. The first is trivial and any general-purpose library will do it — at the cost of slides that are completely uneditable and text that is no longer text. svg_to_pptx.py does the second. The reason the rule is stated as unconditional is that constraints like this are most often broken during failure recovery. After a few errors and retries, writing “a simpler version” looks like reasonable self-rescue, and it happens to route around the only correct implementation. Worse, the wrong path does not error — it produces a file that opens fine and is quietly useless.

Intent router

Native PPTX: the seven-step pipeline

Phase split: steps 1–5 are Phase A (planning and assets), steps 6–7 are Phase B (execution and export). For long decks, Phase B can run in a fresh session via the resume-execute workflow to reclaim context budget.

Step 1: source conversion

Everything is normalised to Markdown before the pipeline proper begins, which is what lets one downstream pipeline serve six different input formats.

Step 2: canvas formats

The same pipeline produces social media images because the underlying representation is SVG — changing the viewBox changes the canvas, no second pipeline required.

Step 3: templates (optional)

Templates are applied only when the user supplies an explicit template directory path. Bare style words such as “academic style” do not trigger template copying; they feed the Strategist’s style descriptor at Step 4 instead. When both are supplied they fuse into a single design_spec.md. Precedence on conflict: colour, typography, logo, and icon style come from Brand; page structure and SVG roster come from Layout.

Editing an existing PPTX

The workflow is unpack → edit XML directly → automatic clean → pack. edit_pptx.py exposes five subcommands: pack requires --original because a pptx package contains many relationship files and resources that were never touched by the edit and must be inherited from the source package.

HTML Deck: web presentations

A single-file HTML horizontal-swipe deck in one of two visual registers:

Style A — electronic magazine × e-ink (default)

  • WebGL fluid / contour / dispersion backgrounds, visible on the hero slide
  • Serif headings (Noto Serif SC + Playfair Display), sans body, monospace metadata
  • Suits humanities talks, industry commentary, commercial launches
  • Aesthetic anchor: Monocle magazine with code stuck to it

Style B — Swiss International Style

  • WebGL ultra-fine grid plus dot-matrix background
  • Sans throughout (Inter + Helvetica + Noto Sans SC), extreme type-size contrast
  • One high-contrast functional accent: International Klein Blue, lemon yellow, lemon green, or safety orange
  • Suits technology products, data reporting, annual reviews
  • Aesthetic anchor: Massimo Vignelli, Helvetica Forever
Shared by both styles: horizontal navigation (keyboard ← →, scroll wheel, touch, ESC for the index), Lucide icons, Motion One entrance animation with both local and CDN sources.

When not to use HTML Deck

Environment constraints

All Python dependencies are preinstalled in the sandbox image. Do not run pip install, uv pip install, or any package manager command. If an import fails, that is a sandbox image bug, not something to fix at runtime.
Scripts execute inside the sandbox via skill(action="execute"). Dependencies deploy automatically on first use and subsequent calls in the same session skip deployment. The sandbox layout:

Boundaries and failure modes

  • The two pipelines are mutually exclusive and cannot be converted between (see the warning at the top).
  • A custom export script produces broken CJK text while appearing to succeed — the failure mode to fear most, because nothing errors.
  • Templates require an explicit path; style words do not trigger them.
  • Phase B of a long deck should move to a fresh session, otherwise SVG source fills the context window.
  • HTML Deck is a static file with no collaborative editing.

Troubleshooting

Verify your output

  1. Open the PPTX and click on body text — if it selects and edits, the DrawingML pipeline ran. If it does not, the deck was rasterized.
  2. For Chinese decks, confirm there are no box glyphs.
  3. For an HTML Deck, page through with ← → and confirm the motion and the ESC index both work.

Office documents overview

How the four document capabilities differ and when to use each

PDF documents

The kami typesetting engine when PDF is the deliverable
Verified 2026-08-11. Sources: services/agent-runtime/src/plugins/builtin/pptx/plugin.json, skills/pptx/SKILL.md, skills/html-deck/SKILL.md, skills/pptx/scripts/. html-deck originates from guizang-ppt-skill (author: 歸藏).