PPT Master Skill
SkillDocs & knowledgeUse this skill to generate high-quality editable PowerPoint/PPTX decks from user requirements, topic prompts, or provided text/Markdown. Backed by PPT Master: plans the deck, writes SVG pages, quality-checks them, post-processes them, and exports to natively editable PPTX.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the PPT Master Skill skill
What this skill tells your AI
The instructions your AI receives, as published by manor-os/manor-ai in packages/core/ai/skills/pptx/SKILL.md and read by ahel’s review.
AI-driven SVG presentation generation system. Turns user requirements, topic prompts, or provided text/Markdown into high-quality editable PPTX decks.
Core Pipeline: Request → Project → Strategist + layout_plan.json → [Images/Video] → SVG composition + [native chart/media data] → Quality Check → Export → Render/Repair
Presentation Quality Contract (Mandatory)
The deck is an audience-facing communication artifact, not a formatted outline. Every generation route MUST apply this contract before selecting layouts:
- Communication job — record one sentence in
design_spec.md: “By the end, [audience] should [outcome] because [central takeaway].” Infer sensible defaults from the request; ask only when a missing choice would materially change the result. - Narrative arc — use a cumulative arc appropriate to the job, such as context → stakes → evidence → implications → action; problem → options → recommendation; or current state → change → future state. An agenda alone is not a narrative.
- One claim per slide — each page has one narrative job and a concise, takeaway-style title. Adjacent slides should answer or advance the question raised by the prior slide. Open deliberately and close with a decision, synthesis, implication, or next action rather than a generic “Thank you.”
- Audience-facing copy — never expose production notes, prompt scaffolds, design deliberation, or model instructions on the canvas. Put presenter-only material in speaker notes.
- Density and typography — shorten or split content before reducing type.
Use at least 67 px for deck titles (≈50 pt), 47 px for slide titles (≈35 pt),
32 px for subheads (≈24 pt), and 22 px for every audience-facing body or
label (exports safely above 16 pt). Only footer/legal text in the bottom 12%
of the canvas may be smaller. A reference template may preserve its style,
but its non-footer text must still meet these delivery minimums. A title
intended as one line must not wrap. Read
references/text-role-system.mdand design a page-specific role grammar rather than repeating only title, body, and boxed labels. Readreferences/typography-profiles.mdand select one profile fromtemplates/layouts/typography_profiles.json; ordinary unbranded business decks default tooffice-modern, not the more web-likeproduct-modern. Premium slides declare at least three text roles inlayout_plan.jsonand on the SVG root. - Visual composition — use one coherent composition, not a dashboard of repeated cards, pills, tabs, or UI panels. Vary adjacent silhouettes by content role. Use diagrams only when they materially clarify a relationship or sequence.
- Provenance — every externally sourced non-trivial claim and asset must be
traceable. Add a
[Sources]block with exact URLs to that slide's speaker notes; never invent citations. - Final-output QA — SVG validation is necessary but not sufficient. After exporting the native PPTX, render every final slide through LibreOffice, inspect each slide at full size, and fix unintended overlap, clipping, wrapping, font substitution, broken connectors, unresolved placeholders, inconsistent page markers, and chart/data mismatches before delivery.
Generation methods — the default is the editable-SVG pipeline below. An optional Full-Page Image mode (
workflows/image-mode.md) keeps the same page-by-page SVG composition and validation discipline, then rasterizes every validated page into one full-slide image. AI generation may supply text-free visual assets, but exact text, charts, tables, and diagrams are authored in SVG before rasterization. The final deck is not editable, but image-model typography is forbidden. Image mode is explicit opt-in only — enter it only when the user asks for it (e.g. "整页图片模式 / image mode / 每页直接用图片生成") or when Manor invokes this built-in skill with structuredparams.render == "full_page_image".
Manor Built-In Skill Compatibility
This package is the built-in pptx skill, mounted in the sandbox at /skill/.
- Treat
/skillasSKILL_DIR. Before running commands, usecd /skilland setSKILL_DIR=/skillwhen needed. - Use
/skill/projects/...for generated project folders unless the user asks for a different writable path. - Final PPTX files are expected under
/skill/projects/<project>/exports/; save the final artifact from there. - Do not require external image-generation credentials inside the built-in skill. For
Acquire Via: airows, createimages/image_prompts.json, renderimages/image_prompts.mdwith${SKILL_DIR}/scripts/image_prompts.py --render-md, call Manor's system image tool withgenerate_file(kind="image"), then call the outersandbox_write_filetool with the returnedworkspace_pathand an absolute destination under<project_path>/images/. Use${SKILL_DIR}/scripts/import_system_image.pyonly when the generated asset is actually mounted under/workspace. - Do not use local image-provider backends from this skill. The built-in package has no local AI image generation entry point; use
${SKILL_DIR}/scripts/image_prompts.pyonly for prompt manifest bookkeeping. - User-provided video attachments exposed under
/workspaceare supported as embedded presentation assets. Copy each selected clip into<project_path>/media/, probe it with ffprobe, and followworkflows/embedded-media.md. Do not reference/workspacedirectly fromembedded_media.json, because delivery verification must be reproducible from the project folder.
Mandatory Pipeline Evidence
Scope: the serial authoring, layout-plan, SVG, and quality rules in this section govern both output modes. The opt-in Full-Page Image mode (
workflows/image-mode.md) replaces only the editablefinalize_svg.py/svg_to_pptx.pyexport path with validated SVG → PNG →images_to_pptx.py. Follow that workflow's evidence checklist when it is selected.
- This skill has no direct-PPTX helper path. Do not write a custom Python, Node, or shell script that constructs a presentation directly.
- Final PPTX output must be produced from hand-written SVG pages through the PPT Master pipeline.
- Required pipeline evidence before saving the final PPTX:
- Project initialized with
${SKILL_DIR}/scripts/project_manager.py init <project_name>. - Strategist outputs exist:
<project_path>/design_spec.mdand<project_path>/spec_lock.md. <project_path>/layout_plan.jsonexists, followsreferences/layout-contract.md, and passesscripts/layout_plan.py.- Executor SVG pages exist under
<project_path>/svg_output/, written sequentially by the main agent. Quantitative chart pages also declare real PowerPoint charts innative_charts.json; readworkflows/native-charts.md. Slides with playable video reservedata-video-slotregions and declare real PowerPoint media objects inembedded_media.json; readworkflows/embedded-media.md. - Quality checks have run with
layout_plan.pyand${SKILL_DIR}/scripts/svg_quality_checker.py <project_path>and have 0 errors. - Post-processing/export commands have run in order:
total_md_split.py,finalize_svg.py, thensvg_to_pptx.py. - The saved
.pptxcomes from<project_path>/exports/and was generated bysvg_to_pptx.py. - The final native PPTX was rendered with
render_pptx.py; every rendered slide was inspected at full size and the QA result recorded in<project_path>/qa/final-render.txt. pptx_quality_gate.pypassed with score 90 or higher and wrote<project_path>/qa/pptx-quality.json. A failed machine gate is a hard stop: fix, re-export, re-render, and rerun the gate before delivery.
- Project initialized with
sandbox_save_result reruns this gate server-side for every PPTX in
/skill/projects/<project>/exports/. It verifies all-slide render evidence and
binds the report to the exact PPTX bytes by SHA-256. Missing, failing, stale, or
manually copied evidence cannot be delivered; renaming the output does not
bypass the check.
[!CAUTION]
🚨 Global Execution Discipline (MANDATORY)
This workflow is a strict serial pipeline. The following rules have the highest priority — violating any one of them constitutes execution failure:
- SERIAL EXECUTION — Steps MUST be executed in order; the output of each step is the input for the next. Non-BLOCKING adjacent steps may proceed continuously once prerequisites are met, without waiting for the user to say "continue"
- BLOCKING = MATERIAL CHOICE ONLY — Pause only when missing information would materially change scope, brand identity, source fidelity, or the requested output mode. Ordinary topic-only requests use recommended defaults and continue.
- NO CROSS-PHASE BUNDLING — Cross-phase bundling is FORBIDDEN. Once the design contract is resolved—automatically for ordinary requests or explicitly for a material choice—all subsequent non-BLOCKING steps may proceed without further confirmation.
- GATE BEFORE ENTRY — Each Step has prerequisites (🚧 GATE) listed at the top; these MUST be verified before starting that Step
- NO SPECULATIVE EXECUTION — "Pre-preparing" content for subsequent Steps is FORBIDDEN (e.g., writing SVG code during the Strategist phase)
- NO SUB-AGENT SVG GENERATION — Executor Step 6 SVG generation is context-dependent and MUST be completed by the current main agent end-to-end. Delegating page SVG generation to sub-agents is FORBIDDEN
- SEQUENTIAL PAGE GENERATION ONLY — In Executor Step 6, after the global design context is confirmed, SVG pages MUST be generated sequentially page by page in one continuous pass. Grouped page batches (for example, 5 pages at a time) are FORBIDDEN
- SPEC_LOCK RE-READ PER PAGE — Before generating each SVG page, Executor MUST
read_file <project_path>/spec_lock.md. All colors / fonts / icons / images MUST come from this file — no values from memory or invented on the fly. Executor MUST also look up the current page'spage_rhythm(anchor/dense/breathing),page_layouts(which template SVG to inherit, if any), andpage_charts(which chart template to adapt, if any). Empty / absent entries are intentional Strategist signals — see executor-base.md §2.1. This rule exists to resist context-compression drift on long decks and to break the uniform "every page is a card grid" default- SVG MUST BE HAND-WRITTEN, NOT SCRIPT-GENERATED — Every SVG page is written by the main agent directly, one page at a time (see rules 6 and 7). Writing or running a Python / Node / shell script that produces the SVG files in batch — looping over pages, templating from data, or emitting them via a generator — is FORBIDDEN, including under "save tokens", "quick draft", or "user is in a hurry" pretexts. The script-generation path was tried on a feature branch and abandoned: cross-page visual consistency depends on per-page authoring with full upstream context, which a generator script cannot reproduce
[!IMPORTANT]
🌐 Language & Communication Rule
- Response language: match the user's input and source materials. Explicit user override (e.g., "请用英文回答") takes precedence.
- Template format:
design_spec.mdMUST follow its original English template structure (section headings, field names) regardless of conversation language. Content values may be in the user's language.
[!IMPORTANT]
🔌 Compatibility With Generic Coding Skills
ppt-masteris a repository-specific workflow, not a general application scaffold- In this built-in package, invoke it through the
pptxskill name.- Do NOT create
.worktrees/,tests/, branch workflows, or generic engineering structure by default- On conflict with a generic coding skill, follow this skill unless the user explicitly says otherwise
Main Pipeline Scripts
| Script | Purpose |
|---|---|
${SKILL_DIR}/scripts/project_manager.py | Project init / validate / manage |
${SKILL_DIR}/scripts/analyze_images.py | Image analysis |
${SKILL_DIR}/scripts/image_prompts.py | AI image prompt manifest validation / Markdown sidecar / status updates |
${SKILL_DIR}/scripts/import_system_image.py | Compatibility fallback for generated images already mounted under /workspace |
${SKILL_DIR}/scripts/icon_composer.py | Build standalone vector icons with gradients, containers, duotone layers, and status badges |
${SKILL_DIR}/scripts/svg_quality_checker.py | SVG quality check |
${SKILL_DIR}/scripts/layout_plan.py | Validate semantic layout families, capacity budgets, SVG metadata, and deck rhythm |
${SKILL_DIR}/scripts/total_md_split.py | Speaker notes splitting |
${SKILL_DIR}/scripts/finalize_svg.py | SVG post-processing (unified entry) |
${SKILL_DIR}/scripts/svg_to_pptx.py | Export to PPTX |
${SKILL_DIR}/scripts/render_pptx.py | Render the final native PPTX through LibreOffice for per-slide visual QA |
${SKILL_DIR}/scripts/pptx_quality_gate.py | Validate final OOXML, editability, typography, provenance, media quality, and rendered-slide evidence |
${SKILL_DIR}/scripts/render_page_images.py | Full-Page Image mode composition — rasterize validated SVG pages to exact-size PNGs |
${SKILL_DIR}/scripts/images_to_pptx.py | Full-Page Image mode export — assemble page_images/page_*.png into a one-image-per-slide PPTX |
${SKILL_DIR}/scripts/update_spec.py | Propagate a spec_lock.md color / font_family change across all generated SVGs |
For complete tool documentation, see ${SKILL_DIR}/scripts/README.md.
Template Index
| Index | Path | Purpose |
|---|---|---|
| Layout templates | ${SKILL_DIR}/templates/layouts/layouts_index.json | Query available page layout templates |
| Brand presets | ${SKILL_DIR}/templates/brands/brands_index.json | Query available brand identity presets (color / typography / logo / voice) |
| Visualization templates | ${SKILL_DIR}/templates/charts/charts_index.json | Query available visualization SVG templates (charts, infographics, diagrams, frameworks) |
| Composition registry | ${SKILL_DIR}/templates/layouts/composition_registry.json | Semantic layout families with use/avoid rules, density, and bounded regions |
| Text-role registry | ${SKILL_DIR}/templates/layouts/text_role_registry.json | Semantic typography roles, scale bands, family roles, and line limits |
| Typography profiles | ${SKILL_DIR}/templates/layouts/typography_profiles.json | Office-modern, Microsoft 365, editorial, product, and CJK font systems with deterministic fallbacks |
| Icon library | ${SKILL_DIR}/templates/icons/ | See ${SKILL_DIR}/templates/icons/README.md; search icons on demand with ls templates/icons/<library>/ | grep <keyword> |
Diagram Guidance
When a slide needs a process map, architecture diagram, relationship diagram,
matrix, funnel, timeline, or custom infographic, load
references/blocks/editable-diagram.md. Diagram output must remain editable
with native PPTX shapes/connectors/text after export, not a flattened raster
image. Existing diagram block guidance lives at references/blocks/diagram.md
and defers to the editable-diagram rules. Logical SVG edges must use
data-connector="true"; diagram nodes and panels must use
data-connector-obstacle="true". The SVG gate rejects edges that cross text,
enter protected shapes, cross other connectors, render above nodes, or fail to
terminate on a visible shape boundary.
Before choosing a diagram, write the relationship as one sentence and select a single topology. A hub-and-spoke is valid only for genuinely symmetric peer relationships around one hub. Intake → controls → execution with audit or evidence feedback is a governed pipeline, not a radial diagram.
Standalone Workflows
| Workflow | Path | Purpose |
|---|---|---|
create-template | workflows/create-template.md | Standalone layout template creation workflow |
create-brand | workflows/create-brand.md | Standalone brand-only template creation (identity preset; no SVG page roster) |
image-mode | workflows/image-mode.md | Full-Page Image mode — compose exact SVG pages with optional AI imagery, then flatten one image per slide; explicit opt-in only |
follow-reference-pptx | workflows/follow-reference-pptx.md | Generate from a user-provided PPTX while preserving its hierarchy and visual system |
icon-composer | workflows/icon-composer.md | Create or reuse refined native-PPT vector icons with layer palettes, official brand colors, optical alignment, quality checks, containers, gradients, and badges |
resume-execute | workflows/resume-execute.md | Phase B entry — resume execution in a fresh chat after Phase A (Step 1–5) completed in another session (split mode) |
verify-charts | workflows/verify-charts.md | Chart coordinate calibration — run after SVG generation if the deck contains data charts |
embedded-media | workflows/embedded-media.md | Editable image placement plus true embedded PowerPoint video objects with posters and playback settings |
customize-animations | workflows/customize-animations.md | Object-level PPTX animation customization — run only when the user explicitly asks to tune animation order/effects/timing |
Workflow
Step 1: Request Intake
🚧 GATE: User has provided a topic, requirements, outline, text, or Markdown content.
Use the invocation prompt and any provided text/Markdown directly as the source
material. A user-provided .pptx is a supported visual reference: carry its
path into Step 3 and follow workflows/follow-reference-pptx.md. This built-in
skill does not install or run PDF, DOC, Excel, URL, or legacy .ppt conversion
pipelines. If the user supplies only a topic, create the deck from that topic
and the model's general knowledge unless the user explicitly provides source
text.
Browser-based live preview cannot render EMF (will show blank) — this is expected; the PPTX output is the source of truth.
✅ Checkpoint — Confirm source content is ready, proceed to Step 2.
Step 2: Project Initialization
🚧 GATE: Step 1 complete; source content is ready (Markdown file, user-provided text, or requirements described in conversation are all valid).
python3 ${SKILL_DIR}/scripts/project_manager.py init <project_name> --format <format>
The canonical project directory includes the canvas format and date. Capture
the exact path printed after Project created: and use that path for every
later command, file write, quality check, and sandbox_save_result call. Never
reconstruct or guess it from <project_name>. Initialization also creates a
projects/<project_name> compatibility symlink, but the printed canonical path
remains the source of truth for delivery evidence.
Format options: ppt169 (default), ppt43, xhs, story, etc. For the full format list, see references/canvas-formats.md.
Use the user's prompt and any provided text/Markdown directly as the source context. Do not run source import or conversion commands in the built-in generation path.
✅ Checkpoint — Confirm project structure created successfully and the source context is available from the invocation prompt/conversation. Proceed to Step 3.
Step 3: Template Option
🚧 GATE: Step 2 complete; project directory structure is ready.
Choose exactly one visual route. The first matching route wins:
- User-provided PPTX or explicit template directory — treat it as the visual source of truth. Reuse its page hierarchy, layouts, typography, and media frames; do not mix in an unrelated built-in template.
- Explicit custom direction without a reference deck — create a custom system from the requested brand, theme, mood, or formatting brief.
- No visual direction — query
layouts_index.jsonand automatically shortlist unbranded layouts by semantic role: cover, statement, comparison, process, timeline, evidence, chart, table, and closing action. Preserve the selected layout's hierarchy and vary adjacent page silhouettes. Do not wait for the user to choose a filesystem path.
A bare unbranded template name may be resolved through
layouts_index.json. Never automatically apply a branded layout or logo from a
brand mention alone. Branded templates and brand bundles require either an
explicit directory path or supplied brand assets.
When the reference is a .pptx, load
workflows/follow-reference-pptx.md, then prepare the hierarchy-aware reference
workspace before Strategist begins:
python3 ${SKILL_DIR}/scripts/pptx_template_import.py \
<reference.pptx> --output <project_path>/reference \
--inheritance-mode both
Read reference/manifest.json, every master/layout/slide SVG, the inheritance
graph, and every flattened slide at full size. Record the selected reference
family for every new page in spec_lock.page_layouts. If the import exposes an
unsupported source object, report and reconstruct it deliberately; never
silently replace the reference with a generic built-in layout.
For an explicit template directory, copy the exact bundle into the project:
TEMPLATE_DIR=<user-supplied path>
cp ${TEMPLATE_DIR}/*.svg <project_path>/templates/
cp ${TEMPLATE_DIR}/design_spec.md <project_path>/templates/
cp ${TEMPLATE_DIR}/*.png <project_path>/images/ 2>/dev/null || true
cp ${TEMPLATE_DIR}/*.jpg <project_path>/images/ 2>/dev/null || true
To create a new template, read
workflows/create-template.md.
An explicit brand directory contributes color, typography, logo, voice, and icon treatment. Copy it without flattening its assets:
BRAND_DIR=<user-supplied brand path>
cp ${BRAND_DIR}/design_spec.md <project_path>/templates/
cp ${BRAND_DIR}/*.svg <project_path>/templates/ 2>/dev/null || true # brand logo SVG files
cp ${BRAND_DIR}/*.png <project_path>/templates/ 2>/dev/null || true # brand logo raster files
[ -d ${BRAND_DIR}/images ] && cp -r ${BRAND_DIR}/images <project_path>/templates/
[ -d ${BRAND_DIR}/illustrations ] && cp -r ${BRAND_DIR}/illustrations <project_path>/templates/
[ -d ${BRAND_DIR}/icons ] && cp -r ${BRAND_DIR}/icons <project_path>/templates/
To create a new brand, read
workflows/create-brand.md.
Brand + layout combined input
A brand path and a layout template path may both be supplied in the same message. When both are present, Step 3 fuses them into a single design_spec.md inside <project_path>/templates/ instead of leaving two specs side by side. Field-level precedence is fixed (no per-deck prompting):
| Field group | Source |
|---|---|
| Color (primary / secondary / accents / text / bg) | brand |
| Typography (font family) | brand |
| Logo | brand (if absent, fall back to layout's logo) |
| Voice & tone | brand |
| Icon style preference | brand |
| Canvas (size / viewBox / margins) | layout |
| Page roster + signature visual elements (top bar / underline / decorative motifs) | layout |
| Font-size hierarchy (H1 / H2 / body / data / label) | layout |
| Spacing, grid, layout patterns | layout |
| SVG technical constraints | layout |
| Placeholder set | layout |
Action: AI reads ${LAYOUT_DIR}/design_spec.md and ${BRAND_DIR}/design_spec.md, composes one fused design_spec.md using the table above, writes it to <project_path>/templates/design_spec.md. SVG page files come from ${LAYOUT_DIR}; brand logos and asset subdirectories from ${BRAND_DIR}. The fused spec carries a one-line > Fused from: layout=<layout_id>, brand=<brand_id> provenance note under its H1.
Conflict gates — clarify with the user only in these two cases:
Shortened here. Read the whole file on GitHub.
Signals
- GitHub stars
- 171
- Forks
- 52
- Last commit
- Sep 2026
- Hacker News mentions
- 13
Advanced
- Catalog kind
- skill
- Gateway key
pptx-manor-os- Source
- github.com/manor-os/manor-ai