Sync third-party and MCP marketplace plugins

Constraint: Public skills are published only by explicit administrator action unless they are tracked third-party market sources.
Confidence: high
Scope-risk: narrow
Directive: Keep private/internal skills out of the public marketplace and preserve normal incremental market Git history.
Tested: Marketplace validation passed.
This commit is contained in:
KeyInfo Bot
2026-08-25 00:01:54 +08:00
parent 3d53e24f16
commit 0ce7b1ea65
28 changed files with 455 additions and 137 deletions
@@ -2,8 +2,8 @@
"sourceId": "grill-me",
"repo": "https://github.com/mattpocock/skills.git",
"ref": "main",
"commit": "5b15a47f2d7150f545fbcacbfe381787fc0230dc",
"commit": "6654f6b60cd9d5be8b54c6fafe44346dabeb3b76",
"adapter": "skill-collection",
"sourcePath": "skills/productivity",
"syncedAt": "2026-08-21T15:59:59Z"
"syncedAt": "2026-08-24T16:00:00Z"
}
@@ -3,5 +3,5 @@
"name": "playwright浏览器自动化操作",
"version": "20260605",
"keySource": "none",
"syncedAt": "2026-08-23T16:01:48Z"
"syncedAt": "2026-08-24T16:01:54Z"
}
@@ -2,8 +2,8 @@
"sourceId": "next-skills",
"repo": "https://github.com/vercel/next.js.git",
"ref": "canary",
"commit": "cb463843e78506c6b79518af8125af05e6cbac77",
"commit": "30e73d2d14803ff252638caa3d67f047a89e4bb5",
"adapter": "skill-collection",
"sourcePath": "skills",
"syncedAt": "2026-08-23T16:00:00Z"
"syncedAt": "2026-08-24T16:00:00Z"
}
+17 -17
View File
@@ -49,8 +49,8 @@ Thanks to [Kimi](https://www.kimi.com/code/?aff=ppt-master) for sponsoring this
> **Editable is already table stakes — what sets PPT Master apart is native depth.** It hands you a real PowerPoint: slide masters, native shapes, data-backed charts and tables — not flat text boxes, and not a filled-in template. It also does more than lay slides out nicely — it reasons the argument into shape first, then designs; and that native depth keeps **converging with PowerPoint itself**, adding more of its native capabilities release after release. In form, it's a workflow that runs inside any agent-capable AI tool: hand the AI your topic or material, and it generates on your machine — your data stays local, no platform or model lock-in. How it works and where the limits are → [Product Positioning](#product-positioning).
<p align="center">
<a href="https://hugohe3.github.io/ppt-master/"><strong>Live Demo</strong></a> ·
<a href="./examples/"><strong>Examples</strong></a> ·
<a href="https://hugohe3.github.io/ppt-master-examples/"><strong>Live Demo</strong></a> ·
<a href="https://github.com/hugohe3/ppt-master-examples"><strong>Examples</strong></a> ·
<a href="./docs/faq.md"><strong>FAQ</strong></a> ·
<a href="./docs/roadmap.md"><strong>Roadmap</strong></a>
</p>
@@ -62,42 +62,42 @@ Thanks to [Kimi](https://www.kimi.com/code/?aff=ppt-master) for sponsoring this
<table>
<tr>
<td align="center" width="33%">
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_pritzker_2026"><img src="docs/assets/screenshots/preview_pritzker_2026.png" alt="Editorial magazine — Pritzker 2026 architecture review" /></a><br/>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_pritzker_2026"><img src="docs/assets/screenshots/preview_pritzker_2026.png" alt="Editorial magazine — Pritzker 2026 architecture review" /></a><br/>
<sub><b>Editorial Magazine</b> — architecture photography, calm typographic grid<br/>
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_pritzker_2026">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_pritzker_2026/exports/pritzker_2026.pptx">Download .pptx</a></sub>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_pritzker_2026">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master-examples/main/examples/ppt169_pritzker_2026/exports/pritzker_2026.pptx">Download .pptx</a></sub>
</td>
<td align="center" width="33%">
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_global_ai_capital_2026"><img src="docs/assets/screenshots/preview_global_ai_capital.png" alt="Data journalism — Global AI Capital 2026" /></a><br/>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_global_ai_capital_2026"><img src="docs/assets/screenshots/preview_global_ai_capital.png" alt="Data journalism — Global AI Capital 2026" /></a><br/>
<sub><b>Data Journalism</b> — Bloomberg-style dark dashboard, chart-driven<br/>
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_global_ai_capital_2026">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_global_ai_capital_2026/exports/global_ai_capital_2026.pptx">Download .pptx</a></sub>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_global_ai_capital_2026">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master-examples/main/examples/ppt169_global_ai_capital_2026/exports/global_ai_capital_2026.pptx">Download .pptx</a></sub>
</td>
<td align="center" width="33%">
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_swiss_grid_systems"><img src="docs/assets/screenshots/preview_swiss_grid.png" alt="Swiss typographic grid — Grid Systems primer" /></a><br/>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_swiss_grid_systems"><img src="docs/assets/screenshots/preview_swiss_grid.png" alt="Swiss typographic grid — Grid Systems primer" /></a><br/>
<sub><b>Swiss Grid</b> — strict modular grid, restrained type, red-accent<br/>
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_swiss_grid_systems">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_swiss_grid_systems/exports/swiss_grid_systems.pptx">Download .pptx</a></sub>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_swiss_grid_systems">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master-examples/main/examples/ppt169_swiss_grid_systems/exports/swiss_grid_systems.pptx">Download .pptx</a></sub>
</td>
</tr>
<tr>
<td align="center" width="33%">
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_glassmorphism_demo"><img src="docs/assets/screenshots/preview_glassmorphism_demo.png" alt="Glassmorphism SaaS — AI Agent engineering demo" /></a><br/>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_glassmorphism_demo"><img src="docs/assets/screenshots/preview_glassmorphism_demo.png" alt="Glassmorphism SaaS — AI Agent engineering demo" /></a><br/>
<sub><b>Glassmorphism SaaS</b> — translucent layers, gradient depth, product UI<br/>
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_glassmorphism_demo">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_glassmorphism_demo/exports/glassmorphism_demo.pptx">Download .pptx</a></sub>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_glassmorphism_demo">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master-examples/main/examples/ppt169_glassmorphism_demo/exports/glassmorphism_demo.pptx">Download .pptx</a></sub>
</td>
<td align="center" width="33%">
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_sugar_rush_memphis"><img src="docs/assets/screenshots/preview_sugar_rush_memphis.png" alt="Memphis pop — Sugar Rush festival" /></a><br/>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_sugar_rush_memphis"><img src="docs/assets/screenshots/preview_sugar_rush_memphis.png" alt="Memphis pop — Sugar Rush festival" /></a><br/>
<sub><b>Memphis Pop</b> — bold primaries, geometric patterns, playful energy<br/>
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_sugar_rush_memphis">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_sugar_rush_memphis/exports/sugar_rush_memphis.pptx">Download .pptx</a></sub>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_sugar_rush_memphis">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master-examples/main/examples/ppt169_sugar_rush_memphis/exports/sugar_rush_memphis.pptx">Download .pptx</a></sub>
</td>
<td align="center" width="33%">
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_indie_bookstore_zine_guide"><img src="docs/assets/screenshots/preview_indie_bookstore_zine.png" alt="Risograph zine — Indie bookstore guide" /></a><br/>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_indie_bookstore_zine_guide"><img src="docs/assets/screenshots/preview_indie_bookstore_zine.png" alt="Risograph zine — Indie bookstore guide" /></a><br/>
<sub><b>Risograph Zine</b> — duotone print, hand-made bookstore-culture feel<br/>
<a href="https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_indie_bookstore_zine_guide">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_indie_bookstore_zine_guide/exports/indie_bookstore_zine_guide.pptx">Download .pptx</a></sub>
<a href="https://hugohe3.github.io/ppt-master-examples/viewer.html?project=ppt169_indie_bookstore_zine_guide">Flip online</a> · <a href="https://raw.githubusercontent.com/hugohe3/ppt-master-examples/main/examples/ppt169_indie_bookstore_zine_guide/exports/indie_bookstore_zine_guide.pptx">Download .pptx</a></sub>
</td>
</tr>
</table>
<p align="center">
<sub>Downloading any .pptx and opening it in PowerPoint is the fastest way to see what it can really do.<br/><a href="https://hugohe3.github.io/ppt-master/">Flip through all examples online →</a> · <a href="./examples/"><code>examples/</code> directory</a> · <a href="./docs/why-ppt-master.md">Why PPT Master?</a></sub>
<sub>Downloading any .pptx and opening it in PowerPoint is the fastest way to see what it can really do.<br/><a href="https://hugohe3.github.io/ppt-master-examples/">Flip through all examples online →</a> · <a href="https://github.com/hugohe3/ppt-master-examples">Source repository</a> · <a href="./docs/why-ppt-master.md">Why PPT Master?</a></sub>
</p>
---
@@ -126,7 +126,7 @@ Why you'd choose it, and where it isn't the right fit → [Why PPT Master](./doc
> ### This is a tool, not a wishing well
> `harness + model = agent` — PPT Master only owns the workflow; the model sets the ceiling. Recommended: **Kimi K3 (or Claude) with a large context window (~1M tokens) + AI image generation (`gpt-image-2` or Google `gemini-3.1-flash-image`)**; other models can run the pipeline, with a quality gap.
>
> And don't expect a finished, perfect deck in one shot. The tool's value is taking most of the tedious work off your plate; the polishing that's left is yours — a natively editable deck exists precisely so you can keep working on it, not a flat image you can't touch. The cheaper the model, the more there is to do; if results disappoint, upgrade the model first, then check your usage against [Getting Started](./docs/getting-started.md) and the example projects.
> And don't expect a finished, perfect deck in one shot. The tool's value is taking most of the tedious work off your plate; the polishing that's left is yours — a natively editable deck exists precisely so you can keep working on it, not a flat image you can't touch. The cheaper the model, the more there is to do; if results disappoint, upgrade the model first, then check your usage against [Getting Started](./docs/getting-started.md) and the [example projects](https://hugohe3.github.io/ppt-master-examples/).
---
@@ -369,7 +369,7 @@ PPT Master reads the current process environment first, then the first `.env` fo
| 📖 | [SKILL.md](./skills/ppt-master/SKILL.md) | Core workflow and rules |
| 📐 | [Canvas Formats](./skills/ppt-master/references/canvas-formats.md) | PPT 16:9, Xiaohongshu, WeChat, and 10+ formats |
| 🛠️ | [Scripts & Tools](./skills/ppt-master/scripts/README.md) | All scripts and commands |
| 💼 | [Examples](./examples/README.md) | All example projects |
| 💼 | [Examples](https://hugohe3.github.io/ppt-master-examples/) | All example projects |
| 🏗️ | [Technical Design](./docs/technical-design.md) | Architecture, design philosophy, why SVG |
| ❓ | [FAQ](./docs/faq.md) | Model selection, cost, layout troubleshooting, custom templates |
@@ -2,8 +2,8 @@
"sourceId": "ppt-master",
"repo": "https://github.com/hugohe3/ppt-master.git",
"ref": "main",
"commit": "65bb2eca59a36270819caba377097910c4466c6e",
"commit": "e2b4e6a7c43594a66fb477d00e18267ce50bbd93",
"adapter": "claude-skill",
"sourcePath": "skills/ppt-master",
"syncedAt": "2026-08-22T16:00:00Z"
"syncedAt": "2026-08-24T16:00:00Z"
}
@@ -2,7 +2,7 @@
name: ppt-master
description: "多格式源文档到高质量 SVG 页面再导出 PPTX 的多阶段演示文稿生成工作流。"
metadata:
version: "4.8.0"
version: "5.0.0"
copyright: "Copyright (c) 2025-2026 Hugo He"
license: "MIT"
official_repository: "https://github.com/hugohe3/ppt-master"
@@ -16,16 +16,46 @@ the grammar does not select `Structure=yes` or create a geometry quota.
## 1. Relationship Atoms
| Atom | Meaning | Encode with |
|---|---|---|
| `order` | Sequence, progression, or rank | Position, numbering, direction, shared path |
| `link` | Dependency, exchange, influence, transition | Proximity/alignment when unmistakable; otherwise an edge |
| `parent` | One unit governs or decomposes into children | Branching, indentation, nesting, scale |
| `membership` | Units belong to a group, stage, lane, or region | Containment, shared field, band, repetition |
| `contrast` | Peers, states, options, or positions compare | Shared baseline, opposing regions, parallel framing |
| `overlap` | Units share a meaningful subset or duty | Intersecting regions plus a clear common area |
**Mandatory — relationship → topology before contour**: For each active atom,
resolve only the path, junctions, enclosure, field partition, shared region,
scale change, and entry / endpoint that carry meaning. Adapt that topology to
the actual units, text load, page role, and active visual system before
selecting contours.
Combine atoms as needed; never force a named business model. Numbers used only as labels do not create a chart. Value-derived position/length/angle/area/radius/width/color routes to [`executor-chart.md`](./executor-chart.md); row-header × column-header facts route to [`executor-table.md`](./executor-table.md). Qualitative lanes use this grammar, but date/duration-driven task-bar `x`/`width` is Gantt Chart geometry.
| Atom | Meaning | Encode with | Generate topology from |
|---|---|---|---|
| `order` | Sequence, progression, or rank | Position, numbering, direction, shared path | One reading path: open / closed; straight / bent / stepped / switchback / coiled; level / rising / falling; constant / expanding / contracting; turns, milestones, endpoint |
| `link` | Dependency, exchange, influence, transition | Proximity / alignment when unmistakable; otherwise an edge | Sources, targets, and junctions: direct, hub, chain, split, merge, exchange, or feedback; let the relationship determine the fewest necessary edges |
| `parent` | One unit governs or decomposes into children | Branching, indentation, nesting, scale | Root, depth, and sibling groups: branch, indent, nest, radiate, or scale; let child roles set fan-out and weight |
| `membership` | Units belong to a group, stage, lane, or region | Containment, shared field, band, repetition | Owning fields: enclose, band, lane, cluster, repeat, or nest; let content set field shape and occupancy |
| `contrast` | Peers, states, options, or positions compare | Shared baseline, opposing regions, parallel framing | Shared invariants plus separation: one or more semantic axes / baselines, opposing or parallel fields, counterweight, divergence, or a before / after boundary |
| `overlap` | Units share a meaningful subset or duty | Intersecting regions plus a clear common area | Exact exclusive / shared regions: paired, chained, or layered intersections; keep every owner and common area legible |
**Reference — not a constraint**: `Generate topology from` names common
transform axes rather than an exhaustive set. Combine, deform, or invent
page-fit topologies from the active atoms; never recall a named diagram or
reproduce a listed form by default.
**Mandatory — combined-atom spatial relation before contour**: Combine atoms as
needed; never force a named business model. When multiple atoms share one
construct, resolve whether their topologies share a field, nest, run in
parallel, cross orthogonally, or intersect. Orthogonal overlay applies when
independent dimensions occupy one field, including but not limited to an
`order` path across `membership` lanes and two independent `contrast`
dimensions; preserve each atom's ownership and reading direction. The overlay
never implies equal partitions.
**Hard rule — no topology from balance alone**: Node count and text fit may
change spacing, route, or wrap. They never justify equal shapes, gaps, or
partitions, mirroring, radial symmetry, or closure that invents peer weight,
centrality, reciprocity, or recurrence.
Numbers used only as labels do not create a chart. Value-derived position,
length, angle, area, radius, width, or color routes to
[`executor-chart.md`](./executor-chart.md); row-header × column-header facts
route to [`executor-table.md`](./executor-table.md). Qualitative lanes use this
grammar, but date / duration-driven task-bar `x` / `width` is Gantt Chart
geometry.
---
@@ -149,29 +149,38 @@ owned by the preserve/mirror round-trip contract.
- `chartX`, `chartStar`, or `chartPlus` as a substitute for native charts;
- logo, icon glyph, illustration, brand contour, or data-chart marks.
### 2.1 Compound page geometry
### 2.1 Topology assembly and compound page geometry
**Trigger**: after the page or prototype's communication / slot job, composition
anchors, and any applicable topology under
**Trigger**: after the page or prototype's communication / slot job,
composition anchors, and any applicable topology under
[`executor-structure.md`](./executor-structure.md) are resolved, but before
writing coordinates, resolve the page-scale geometry move that best carries its
background field, content zoning, focal hierarchy, or reading path. Apply §1's
exact-fit decision and compare the useful lenses below. Before repeating stacked
rectangles / rounded cards or uniform equal columns, compare a page-field,
outline, nesting, or continuity construction and the relevant contour family's
exact members. Readability of the first workable arrangement does not close this
gate.
This applies whether the per-page Structure result is `no` or `yes`; it never
creates a decoration requirement.
writing coordinates, run this gate at every active granularity. For
`Structure=yes`, assemble each resolved topology without changing it, using
[`topology-assembly.md`](./topology-assembly.md) as assembly and relative
registration material; for every page, resolve the page-scale geometry move
carrying its background field,
content zoning, focal hierarchy, or reading path. Apply §1's exact-fit decision
and compare the useful lenses below. Before repeating stacked rectangles /
rounded cards or uniform equal columns, compare a page-field, outline, nesting,
or continuity construction and the relevant contour family's exact members.
Readability of the first workable arrangement does not close this gate. This
never creates a decoration requirement.
| Pass | Action | Result |
|---|---|---|
| Page job | Name the page-scale geometry move and its jobs: surface, boundary, focal mark, shared region, counterweight, or any source-backed direction / reveal. | One composition direction and a small set of functional zones; no shape names yet. |
| Decompose | Separate visible content from geometric atoms. Identify which atoms need independent movement, paint, or reuse and which contour must become one object. | Editable siblings plus any explicit Boolean operand set. |
| Select | Choose the contour family, then its exact member from the job, full native vocabulary, and edge / corner / opening behavior; retain the reader effect when the result is generic or undrawn. | Page-fit native atoms without syntax bias. |
| Compose | Establish page frame, scale, z-order, and negative space with independent atoms. Keep text, images, icons, data marks, and non-merged accents outside Boolean operands. | One page-level geometry system, not a collection of unrelated decorations. |
| Topology / page job | Retain the resolved topology and state its relationship duties; name the page-scale geometry move and its jobs: surface, boundary, focal mark, shared region, counterweight, or any source-backed direction / reveal. | Required relationship duties plus one composition direction and a small set of functional zones; no shape names yet. |
| Decompose | Partition the resolved topology and visible content. Identify components needing independent editing, movement, paint, animation, or reuse; separately identify contour / region semantics that require one object or independently retained Boolean result paths. | Editable siblings plus any explicit Boolean operand set. |
| Select | For each required component, choose the contour family, then its exact member from the job, full native vocabulary, and edge / corner / opening behavior; retain the reader effect when the result is generic or undrawn. | Page-fit native atoms without syntax bias. |
| Compose | Assemble the resolved topology from its independent atoms, then establish page frame, scale, z-order, and negative space. Keep text, images, icons, data marks, and non-merged accents outside Boolean operands. | Relationship-faithful assembly inside one page-level geometry system, not unrelated decorations. |
| Materialize | Run the preset helper for each adopted preset. Run the Boolean helper only for contours that require Merge Shapes semantics, then replace those operands with its stdout paths. | Valid authoring SVG ready for native export. |
**Reference — not a constraint**: At topology scale, compare independent pieces,
one body with dividers, overlapping siblings, fitted joints, intentional gaps,
and independently retained `fragment` regions. These are common assembly
strategies rather than an exhaustive set. Choose from component independence
and contour / region semantics; never map a topology name to a shape list or
infer equal size or spacing.
**Composition lenses — not a checklist**:
| Lens | Use when it strengthens the resolved page |
@@ -432,15 +441,17 @@ reads correctly at slide scale.
### 7.3 Fragment as a modelling tool, not just a boolean
`fragment` (§6) is the fastest way to build layered diagrams from one silhouette:
lay evenly distributed bars across a triangle and fragment it into pyramid tiers;
cross a circle with two bars for a quadrant wheel; slice an annulus radially for
ring segments. Every piece inherits the parent contour, so the assembly stays
perfectly registered — impossible to achieve by drawing the tiers separately.
`fragment` (§6) can build registered layered diagrams from one silhouette:
cross a triangle with topology-derived bars for pyramid tiers; cross a circle
with two topology-derived bars for a quadrant wheel; slice an annulus radially
for ring segments. These are construction examples rather than topology
defaults or an exhaustive set. Every retained piece inherits the parent contour,
so the assembly stays registered without independently redrawing its parts.
Distribute the cutting bars with a constant step before fragmenting; uneven tiers
read as a mistake rather than a hierarchy. Paint the resulting pieces with one
gradient family per §7.1 so the stack reads as a single solid.
Derive cutter count, position, and piece size from the resolved topology. Use a
constant step and one §7.1 gradient family only when equal tier / segment weight
and one-solid reading are semantic; otherwise preserve the required differences
in geometry and paint.
### 7.4 Soft edges without the soft-edge effect
@@ -0,0 +1,275 @@
> See [`executor-structure.md`](./executor-structure.md) §1 for relationship → topology and [`native-shape-authoring.md`](./native-shape-authoring.md) §§12.1 for contour selection and materialization.
# Topology Assembly Reference
Generative material for turning one resolved qualitative topology into editable native-shape components with coherent relative registration before coordinates.
**Load**: Default and Quick read this reference once with the fixed construction
bundle before SVG authoring and reuse it for every `Structure=yes` assembly.
**Hard rule — relative constraints, never copyable geometry**: State exact
preset or primitive identities, semantic counts, inter-component relations, and
only the relative geometry required to make the assembly hold together. Never
provide coordinates, concrete sizes or ratios, adjustment values, points, path
data, SVG fragments, copy, color, styling, page composition, or full-page
frames. Materialize every adopted call fresh through
[`native-shape-authoring.md`](./native-shape-authoring.md).
**Mandatory — two-step assembly test**: Preserve the topology resolved by
[`executor-structure.md`](./executor-structure.md); do not select or rename it
here. Then decide in order:
1. Split every piece that needs independent editing, movement, paint, animation, or reuse.
2. From outline and region semantics, choose one continuous shape, one shape with dividers, stacked siblings, seamed pieces, overlapping siblings, or independently retained Boolean regions.
**Mandatory — registration closure**: After the two-step test, resolve only the
relative conditions that make the chosen pieces read as one construct: shared
datum, center, taper, or contour; aligned endpoints and seams; fitted contact or
intentional clearance; nesting margin; overlap depth; joint type; direction
continuity; and cutters that fully cross the parent silhouette. A set of valid
individual shapes is not an assembly until its required contacts and boundaries
register.
**Hard rule — no assembly lookup**: Never recall a paragraph as a named
structure, resolve a key, or match the page to the nearest mechanism. Generate
from the active atoms and the two-step test; adapt, combine, or invent calls and
relative constraints even when no paragraph resembles the result.
**Reference — not a constraint**: The mechanisms below are common generative
material rather than an exhaustive set, ranking, recommendation, or allowed
combination list. A primitive, another registered preset, necessary freeform,
or no drawn carrier may still win the current contour comparison.
**Hard rule — semantic counts, not balance**: Derive every call count from real
units, runs, turns, boundaries, junctions, owners, or retained regions. A count
never implies equal size, spacing, angle, weight, or symmetry. Closure,
mirroring, centrality, taper, interlock, and contact require the relationship
meaning already resolved upstream.
**Hard rule — information-model boundary**: Value-derived position, length,
width, area, angle, radius, or color remains Chart geometry; row-header ×
column-header facts remain Table. The assemblies below carry only qualitative
relationships.
---
## 1. `order`
For independently owned stages on one directional path, call `chevron` once per
stage and keep the calls as siblings. On a continuous handoff, register each
tip into the next notch and keep the entry / exit direction coherent through
the joint; let the tip enter far enough to close the carrier without occluding
the next stage's independently owned interior. Preserve an intentional gap when
the boundary is a pause, reset, or discontinuity. The per-stage split preserves
independent edit, paint, animation, and reuse duties; continuity versus boundary
semantics decides fitted interlock versus clearance. Stage bodies may vary with
their duties while every adopted joint still fits.
For a path that wraps and reverses, call `rightArrow` once per forward run,
`leftArrow` once per return run, `downArrow` once per turn, and `roundRect` once
per independently owned stop. Place successive runs on distinct parallel
baselines; align each turn's entry with the preceding run endpoint and its exit
with the next run entry so the path neither doubles back ambiguously nor jumps
across a gap. Attach each stop to its owning run without covering the carrier's
entry, exit, or turn joint. Stops split for independent duties; run and turn
pieces split because each owns a distinct direction / continuation duty.
Contact at a turn means continuation, while clearance means a stage break; run
lengths and offsets follow the resolved path rather than a regular wrap.
For recurrence with independently owned stages, call `blockArc` once per stage
and seam the siblings into one closed reading path. Make every segment share one
center and registered inner / outer contours; meet adjacent end faces on both
contours so the ring has neither accidental steps nor overlaps. Segment spans
may differ, but their sequence and seam direction must remain legible. Retain a
gap only for a semantic reset. When recurrence is one indivisible duty, call one
`circularArrow` instead. Stage independence decides one versus many pieces;
recurrence and direction decide closure, while shared-center registration makes
the segmented result one carrier rather than unrelated arcs.
---
## 2. `link`
For a qualitative split or merge, call `roundRect` once per semantic source or
target and `line` once per necessary edge. Call `ellipse` zero or one time for
each junction: omit it when edges merely share a meeting point, and retain it
when the junction is independently editable, reusable, or animatable. Terminate
each edge on its node boundary rather than inside the node; make converging edge
endpoints meet the same junction, preserve a collinear shared trunk when one
exists, and separate branches soon enough that they do not read as one line.
An apparent crossing must either remain visibly non-joining or receive a real
semantic junction. Nodes, edges, and retained junctions split by ownership;
junction and outline semantics decide an implied meeting, one visible node, or
separate passing paths.
For a two-way exchange owned as one relationship, call one `leftRightArrow`
between two independently owned `roundRect` nodes. Register both arrow ends to
the facing node boundaries and preserve one uninterrupted exchange corridor.
When the two directions need independent editing, paint, animation, or reuse,
call one `rightArrow` and one `leftArrow` as parallel siblings instead. Keep the
two directional corridors distinct, align each endpoint to its own node port,
and prevent either arrowhead from covering the other carrier or a node interior.
Directional responsibility decides whether the edge splits; reciprocal-single-
duty versus two owned transfers decides one contour or two, while endpoint and
corridor registration preserves the exchange.
---
## 3. `parent`
For enclosure hierarchy or nested bubbles, call `ellipse` once per unit that
owns a visible boundary and nest each child inside its immediate parent. Keep
all ellipses as independent siblings rather than unioning parent and child.
Preserve a visible containment margin around every child, keep its complete
boundary inside the parent, and prevent sibling interiors from touching unless
another active atom requires contact or overlap. Deeper levels may move,
contract, or cluster asymmetrically; they need only preserve unambiguous
containment and enough parent field to remain perceptible. Independent node
ownership requires separate edit, movement, paint, animation, and reuse;
enclosure semantics requires nesting while preserving every outline.
For an indented decomposition without explicit relationship edges, call
`roundRect` once per independently owned node and `leftBrace` once for each
parent whose child group needs a visible shared boundary. Register siblings to
one depth datum, place the child group deeper than its parent, and make the brace
span only that parent's actual children with its open side facing their shared
entry edge. Nested braces must remain distinct and must not cross a node
boundary. Nodes split for independent duties; the brace remains a separate
shared ownership mark because one outline governs several children. Depth and
group extent, not equal offsets or repeated widths, carry the hierarchy.
---
## 4. `membership`
For independently owned qualitative lanes, call `rect` once per lane and
`roundRect` once per member that needs a carrier. Keep lane fields as parallel
siblings; make adjacent long boundaries share one seam when membership is
continuous, or preserve a clear gap when the groups are separate fields. Keep
each member's complete contour inside its owning lane with a visible nesting
margin; cross a lane boundary only when the member truly has multiple ownership
or changes owner. If all lanes form one indivisible field and only boundaries
carry meaning, call one `rect` for the field and `line` once per semantic lane
boundary instead. Independent lane / member duties require siblings; one-field
semantics permits dividers. Lane width and occupancy follow responsibility, not
uniform partitioning.
For membership that needs a light grouping boundary rather than a closed field,
call `leftBrace` once per group and `roundRect` once per independently owned
member. Keep the brace separate, face its open side toward the members, span the
complete member group but no adjacent group, and maintain clearance so neither
the brace nor a nested brace touches a member contour. Members split for
independent edit, movement, paint, animation, and reuse; one brace is the shared
ownership mark because the group boundary itself is one duty. Member count does
not require repeated contours, equal spacing, or equal weight.
---
## 5. `contrast`
For opposing fields on one comparison baseline, call `rect` once per field when
the sides need independent editing, movement, paint, animation, or reuse. Align
the comparable anchors to a shared baseline and register the facing boundaries
as parallel edges separated by either a semantic gap or one explicit `line`
divider; do not let an incidental offset become a false rank. If the field is
one indivisible duty and only the state boundary matters, call one `rect` plus
one `line` at that boundary instead. Independent side responsibility decides
two siblings versus one divided field; opposing-field semantics decides the
facing joint. Shared framing and counterweight never require equal dimensions
or mirrored content.
For a tapered rank or support stack, call `trapezoid` once per independently
owned tier and stack the siblings with semantic seams. Register all tier side
edges to one shared taper, make each adjacent seam meet across the complete
current width, and vary tier width monotonically in the rank direction without
assuming equal change, height, or area. Do not substitute one `triangle` plus
divider lines when tiers need independent paint or animation. If the whole
stack is one duty, call one `triangle` plus one `line` per semantic tier
boundary; make every divider cross the interior and terminate on both outer
edges so no tier leaks into the next. If one registered outer silhouette and
independently retained tier regions are both required, call one `triangle` plus
one `rect` strip per tier region, make every strip fully cross the parent
silhouette and meet the next strip without an accidental sliver, run `fragment`,
and retain the required triangle-covered regions. Independent tier duty decides
the split; continuous-outline versus retained-region semantics decides stacked
siblings, dividers, or Boolean regions. Shared taper and complete crossings keep
all three routes registered as one stack.
---
## 6. `overlap`
When each owner must remain independently editable and the shared area needs no
separate treatment, call `ellipse` once per owner and overlap the calls as
siblings without Boolean materialization. Preserve enough of every complete
owner boundary to identify it, make each intended common area substantial
enough to read as a region rather than an accidental tangent, and avoid full
containment unless subset meaning is active. Choose overlap order and depth so
one owner does not erase another owner or create unintended micro-regions.
Owner responsibility requires the split; outline semantics preserves each
complete boundary, while the common area remains a consequence of overlap.
Paired, chained, or layered ownership does not imply equal ellipses or symmetric
intersection.
When exclusive and shared regions need independent editing, paint, animation,
or reuse, call `ellipse` once per owner, run `fragment` across the overlapping
set, and retain every required exclusive / shared result as an independent
shape. Register the owner overlaps before fragmenting so their crossings produce
only the semantic regions; eliminate accidental tangencies, hidden owners, and
unintended slivers rather than retaining them as topology. Region
responsibility—not owner count alone—requires the further split; exact retained-
region semantics requires `fragment` rather than ordinary siblings or
`intersect`, which keeps only the common region. Retain no region merely to
complete a symmetric pattern.
---
## 7. Combined atoms
**Mandatory — compose active topologies, not reference paragraphs**: Generate
each active atom's topology from its own relationship duties, then resolve how
those topologies share a field, nest, run in parallel, cross orthogonally, or
intersect. Preserve each atom's ownership and reading direction. Let one
component carry several atoms only when its edit, movement, paint, animation,
reuse, outline, and region duties never need to separate; otherwise keep the
atom systems as registered siblings. Re-run the two-step test at every contact,
crossing, shared boundary, and retained region. A shared field does not make one
atom dominant, and authoring convenience never justifies merging them.
For an actual `order` path crossing `membership` lanes, call `rect` once per
independently owned lane, `roundRect` once per process unit, `line` once per
necessary transition, and `line` once per semantic phase boundary. Keep all
lane bands parallel and register the process axis orthogonally across them.
Place each process unit fully inside its current owner's lane; let only a real
responsibility transfer cross a lane seam, and terminate every transition on
the process-unit boundaries rather than using a lane boundary as an edge.
Phase boundaries must cross the lane field coherently and remain distinguishable
from process transitions. If lane regions are one field duty, use one `rect`
plus lane dividers instead of independent lane rectangles. Lane ownership and
process-unit responsibility decide the splits; orthogonal registration keeps
the two atom systems readable without implying equal bands, phases, or steps.
For two independent `contrast` dimensions partitioning one field, call one
`rect` plus one `line` per axis when only the axes carry meaning. Make both axes
cross the complete field, keep them orthogonal, and let their intersection move
with the semantic thresholds rather than centering it. When the four resulting
regions need independent editing, movement, paint, animation, or reuse, call
four `rect` siblings instead; tile them to one shared outer field with one
continuous seam per axis, no accidental gaps or overlaps, and the same
non-central intersection when required. Axis-only semantics chooses one body
with dividers; region responsibility chooses four siblings. Orthogonality and
continuous seams create one partition while unequal region extents remain
legal.
For a radial `parent` topology whose ancestry requires explicit `link` edges,
call `ellipse` once per semantic node and `line` once per parent-child relation.
Only after radial organization is resolved upstream, register depth to
concentric bands around the actual root; the bands and sibling sectors may vary
with role and content. Start and end every edge on node boundaries, keep each
branch moving outward to the child's depth, and make shared branch junctions
coincide only when the relations truly share a trunk. Nodes split for
independent content and motion duties; edges remain separate because ancestry
is a relation rather than a shared silhouette. Concentric registration makes
depth legible, while root centrality, even fan-out, mirrored branches, and equal
radial spacing remain forbidden unless the relationship itself requires them.
@@ -5,10 +5,8 @@ PPT Master - Batch Project Validation Tool
Checks the structural integrity and compliance of multiple projects at once.
Usage:
python3 scripts/batch_validate.py examples
python3 scripts/batch_validate.py projects
python3 scripts/batch_validate.py --all
python3 scripts/batch_validate.py examples projects
"""
import argparse
@@ -265,14 +263,12 @@ def build_parser() -> argparse.ArgumentParser:
description="Validate one or more PPT Master project directories.",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""Examples:
python3 scripts/batch_validate.py examples
python3 scripts/batch_validate.py projects
python3 scripts/batch_validate.py examples projects
python3 scripts/batch_validate.py --all
""",
)
parser.add_argument("directories", nargs="*", help="Directories to scan")
parser.add_argument("--all", action="store_true", help="Validate examples and projects")
parser.add_argument("--all", action="store_true", help="Validate the default projects directory")
parser.add_argument("--export", action="store_true", help="Write a validation report")
parser.add_argument(
"--output",
@@ -290,7 +286,7 @@ def main(argv: list[str] | None = None) -> int:
validator = BatchValidator()
if args.all:
directories = ['examples', 'projects']
directories = ['projects']
else:
directories = args.directories
@@ -40,7 +40,6 @@ WORKFLOWS_DIR = PROJECT_ROOT / 'workflows'
# Repository root directory
REPO_ROOT = PROJECT_ROOT.parent.parent
EXAMPLES_DIR = REPO_ROOT / 'examples'
PROJECTS_DIR = REPO_ROOT / 'projects'
# Template subdirectories
@@ -216,21 +216,20 @@ python3 scripts/project_utils.py <project_path>
Batch-check project structure and compliance.
```bash
python3 scripts/batch_validate.py examples
python3 scripts/batch_validate.py examples projects
python3 scripts/batch_validate.py projects
python3 scripts/batch_validate.py --all
python3 scripts/batch_validate.py examples --export
python3 scripts/batch_validate.py projects --export
```
Use this for repository-wide health checks before release or cleanup.
Use this for multi-project health checks before release or cleanup.
## `generate_examples_index.py`
Rebuild `examples/README.md` automatically.
Rebuild the examples `README.md` index. The example projects live in the separate
[ppt-master-examples](https://github.com/hugohe3/ppt-master-examples) repository.
```bash
python3 scripts/generate_examples_index.py
python3 scripts/generate_examples_index.py examples
python3 scripts/generate_examples_index.py <path-to>/ppt-master-examples/examples
```
## `pptx_template_import.py`
@@ -729,14 +729,14 @@ Requirements:
Validate SVG technical compliance.
```bash
python3 scripts/svg_quality_checker.py examples/project/svg_output/01_cover.svg
python3 scripts/svg_quality_checker.py examples/project/svg_output
python3 scripts/svg_quality_checker.py examples/project
python3 scripts/svg_quality_checker.py examples/project --stage first-page
python3 scripts/svg_quality_checker.py examples/project --stage final --json
python3 scripts/svg_quality_checker.py examples/project --format ppt169
python3 scripts/svg_quality_checker.py --all examples
python3 scripts/svg_quality_checker.py examples/project --export
python3 scripts/svg_quality_checker.py projects/project/svg_output/01_cover.svg
python3 scripts/svg_quality_checker.py projects/project/svg_output
python3 scripts/svg_quality_checker.py projects/project
python3 scripts/svg_quality_checker.py projects/project --stage first-page
python3 scripts/svg_quality_checker.py projects/project --stage final --json
python3 scripts/svg_quality_checker.py projects/project --format ppt169
python3 scripts/svg_quality_checker.py --all projects
python3 scripts/svg_quality_checker.py projects/project --export
python3 scripts/svg_quality_checker.py path/to/template/templates --template-mode
```
@@ -806,7 +806,7 @@ Use this after SVG generation to inspect existing SVG geometry when manual compa
### `flatten_tspan.py`
```bash
python3 scripts/svg_finalize/flatten_tspan.py examples/<project>/svg_output
python3 scripts/svg_finalize/flatten_tspan.py projects/<project>/svg_output
python3 scripts/svg_finalize/flatten_tspan.py path/to/input.svg path/to/output.svg
```
@@ -24,7 +24,7 @@ Usage:
Examples:
python3 scripts/finalize_svg.py projects/my_project
python3 scripts/finalize_svg.py examples/ppt169_demo --only embed-icons
python3 scripts/finalize_svg.py projects/ppt169_demo --only embed-icons
Processing options:
embed-icons - Expand project icons and static same-document <use>
@@ -5,8 +5,10 @@ PPT Master - Examples Index Generator
Automatically scans the examples directory and generates a README.md index file.
Usage:
python3 scripts/generate_examples_index.py
python3 scripts/generate_examples_index.py examples
python3 scripts/generate_examples_index.py <examples_dir>
The example projects live in the separate ppt-master-examples repository;
pass the path to its examples/ directory.
"""
import argparse
@@ -220,9 +222,7 @@ def build_parser() -> argparse.ArgumentParser:
)
parser.add_argument(
"examples_dir",
nargs="?",
default="examples",
help="Examples directory (default: examples)",
help="Path to the examples/ directory of the ppt-master-examples repository",
)
return parser
@@ -22,7 +22,8 @@
"skills/ppt-master/references/executor-structured.md": 5500,
"skills/ppt-master/references/executor-chart.md": 3500,
"skills/ppt-master/references/executor-visualization.md": 1250,
"skills/ppt-master/references/executor-structure.md": 1500,
"skills/ppt-master/references/executor-structure.md": 2250,
"skills/ppt-master/references/topology-assembly.md": 3750,
"skills/ppt-master/references/executor-table.md": 1000,
"skills/ppt-master/references/executor-image.md": 2000,
"skills/ppt-master/references/executor-web-image.md": 750,
@@ -117,7 +118,7 @@
"skills/ppt-master/templates/README.md",
"skills/ppt-master/templates/decks/README.md"
],
"max_tokens": 75000
"max_tokens": 83000
},
"route.create-template.layout": {
"description": "Create Layout standard/fidelity path through Template_Designer, the strategy-triggered native-shape bundle, SVG core, and the structured PPTX interface; mirror excludes the authored bundle.",
@@ -229,6 +230,7 @@
"skills/ppt-master/references/preset-shape-vocabulary.md",
"skills/ppt-master/references/semantic-svg.md",
"skills/ppt-master/references/executor-structure.md",
"skills/ppt-master/references/topology-assembly.md",
"skills/ppt-master/references/canvas-formats.md",
"skills/ppt-master/references/image-layout-spec.md",
"skills/ppt-master/references/image-layout-patterns.md",
@@ -384,7 +386,7 @@
"stage.generate.executor.web-image"
],
"files": [],
"max_tokens": 130000
"max_tokens": 145000
},
"route.generate.quick-generate.visualization": {
"description": "Quick Generate with complete Chart/Table expression vocabularies already in the fixed planning context, their data-object branches, optional native-data metadata, and chart-coordinate verification before the final checker; the fixed Quick context already carries Shape Composition Grammar. Ceiling raised after BUDGET_LOAD_SET reported 126726 tokens.",
@@ -739,6 +741,7 @@
"skills/ppt-master/references/preset-shape-vocabulary.md",
"skills/ppt-master/references/semantic-svg.md",
"skills/ppt-master/references/executor-structure.md",
"skills/ppt-master/references/topology-assembly.md",
{
"glob": "skills/ppt-master/references/modes/*.md",
"exclude": [
@@ -760,7 +763,7 @@
"allow_repeat": true
}
],
"max_tokens": 64000
"max_tokens": 71000
},
"stage.generate.executor.structured": {
"description": "Structured template execution layered on the flat/shared core.",
@@ -772,7 +775,7 @@
"skills/ppt-master/references/executor-structured.md",
"skills/ppt-master/references/pptx-structure-interface.md"
],
"max_tokens": 74000
"max_tokens": 85000
},
"stage.generate.image.ai-two-types": {
"description": "Incremental AI-image role with the selected preset or exact custom rendering bases and two selected local types. Ceiling raised after BUDGET_LOAD_SET reported 26216 tokens.",
@@ -838,7 +841,7 @@
"skills/ppt-master/workflows/stages/resume-execute.md",
"skills/ppt-master/references/artifact-ownership.md"
],
"max_tokens": 99000
"max_tokens": 115000
},
"stage.generate.resume-execute-image": {
"description": "Fresh-session resume when the locked resource plan contains image rows.",
@@ -848,7 +851,7 @@
"stage.generate.executor.image"
],
"files": [],
"max_tokens": 115000
"max_tokens": 130000
},
"stage.generate.topic-research": {
"description": "Gap-targeted factual intake stage.",
@@ -8,8 +8,8 @@ Usage:
python3 scripts/svg_finalize/embed_images.py *.svg
Examples:
python3 scripts/svg_finalize/embed_images.py examples/ppt169_demo/svg_output/01_cover.svg
python3 scripts/svg_finalize/embed_images.py examples/ppt169_demo/svg_output/*.svg
python3 scripts/svg_finalize/embed_images.py projects/ppt169_demo/svg_output/01_cover.svg
python3 scripts/svg_finalize/embed_images.py projects/ppt169_demo/svg_output/*.svg
"""
import os
@@ -12,8 +12,8 @@ Usage:
python3 scripts/svg_finalize/svg_rect_to_path.py <project_path> -s final -o svg_rounded
Examples:
python3 scripts/svg_finalize/svg_rect_to_path.py examples/ppt169_demo
python3 scripts/svg_finalize/svg_rect_to_path.py examples/ppt169_demo/svg_output/01_cover.svg
python3 scripts/svg_finalize/svg_rect_to_path.py projects/ppt169_demo
python3 scripts/svg_finalize/svg_rect_to_path.py projects/ppt169_demo/svg_output/01_cover.svg
Output:
- Directory mode: outputs to svg_rounded/ subdirectory
@@ -240,9 +240,9 @@ def main() -> None:
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog='''
Examples:
%(prog)s examples/ppt169_demo
%(prog)s examples/ppt169_demo -s final
%(prog)s examples/ppt169_demo/svg_output/01_cover.svg
%(prog)s projects/ppt169_demo
%(prog)s projects/ppt169_demo -s final
%(prog)s projects/ppt169_demo/svg_output/01_cover.svg
What it does:
Converts <rect> elements with rx/ry to equivalent <path> elements.
@@ -61,11 +61,11 @@ def print_usage() -> None:
print(" python3 scripts/svg_quality_checker.py <svg_file>")
print(" python3 scripts/svg_quality_checker.py <directory>")
print(" python3 scripts/svg_quality_checker.py <workspace>/templates --template-mode")
print(" python3 scripts/svg_quality_checker.py --all examples")
print(" python3 scripts/svg_quality_checker.py --all projects")
print("\nExamples:")
print(" python3 scripts/svg_quality_checker.py examples/project/svg_output/slide_01.svg")
print(" python3 scripts/svg_quality_checker.py examples/project/svg_output")
print(" python3 scripts/svg_quality_checker.py examples/project")
print(" python3 scripts/svg_quality_checker.py projects/project/svg_output/slide_01.svg")
print(" python3 scripts/svg_quality_checker.py projects/project/svg_output")
print(" python3 scripts/svg_quality_checker.py projects/project")
print(" python3 scripts/svg_quality_checker.py templates/layouts/presentation_core/templates --template-mode")
print(" python3 scripts/svg_quality_checker.py templates/decks/中国电信/templates --template-mode")
print("\nOptions:")
@@ -142,7 +142,7 @@ def main() -> None:
if stage != "final":
print("[ERROR] --stage first-page does not support --all")
sys.exit(1)
base_dir = sys.argv[2] if len(sys.argv) > 2 else "examples"
base_dir = sys.argv[2] if len(sys.argv) > 2 else "projects"
from project_utils import find_all_projects
projects = find_all_projects(base_dir)
@@ -7,7 +7,7 @@ Implementation lives in ``svg_quality/``.
Usage:
python3 scripts/svg_quality_checker.py <svg_file>
python3 scripts/svg_quality_checker.py <directory>
python3 scripts/svg_quality_checker.py --all examples
python3 scripts/svg_quality_checker.py --all projects
Examples:
python3 scripts/svg_quality_checker.py projects/demo --stage final --json
@@ -817,13 +817,13 @@ def main(argv: list[str] | None = None) -> int:
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog=f'''
Examples:
%(prog)s examples/ppt169_demo # Default: native pptx -> exports/, svg_output -> backup/<ts>/
%(prog)s examples/ppt169_demo -o out.pptx # Explicit path (no backup/)
%(prog)s projects/ppt169_demo # Default: native pptx -> exports/, svg_output -> backup/<ts>/
%(prog)s projects/ppt169_demo -o out.pptx # Explicit path (no backup/)
%(prog)s projects/quick_generate_demo --quick-generate # Lockless flat export with normal postflight
# Disable transition / change transition effect
%(prog)s examples/ppt169_demo -t none
%(prog)s examples/ppt169_demo -t push --transition-duration 1.0
%(prog)s projects/ppt169_demo -t none
%(prog)s projects/ppt169_demo -t push --transition-duration 1.0
SVG source directory (-s):
output - svg_output (hand-authored source; native default)
@@ -870,7 +870,7 @@ Speaker notes:
- Disabled by default in Quick Generate; use --with-notes to enable
Recorded narration:
%(prog)s examples/ppt169_demo --recorded-narration audio \\
%(prog)s projects/ppt169_demo --recorded-narration audio \\
--inherit-motion-from validation/<base>.report.json
- Keeps speaker notes when enabled
- Prepares PowerPoint recorded timings and narrations
@@ -884,7 +884,7 @@ Recorded narration:
- Sets slide auto-advance from audio duration so video export can use
"recorded timings and narrations"
- Rejects on-click object animations; use after-previous or with-previous
%(prog)s examples/ppt169_demo --narration-audio-dir audio
%(prog)s projects/ppt169_demo --narration-audio-dir audio
- Lower-level audio embedding: embeds matched files but allows partial matches
- Use only when you do not need a complete recorded-timings export
''',
@@ -617,6 +617,7 @@ Read ${SKILL_DIR}/references/svg-effects.md # REQUIRED: §6.1 job
Read ${SKILL_DIR}/references/native-shape-authoring.md # REQUIRED: native-shape selection and Boolean construction
Read ${SKILL_DIR}/references/preset-shape-vocabulary.md # REQUIRED: complete 187-name authoring vocabulary
Read ${SKILL_DIR}/references/executor-structure.md # REQUIRED: qualitative relationship and topology grammar
Read ${SKILL_DIR}/references/topology-assembly.md # REQUIRED: topology assembly and relative-registration material
Read ${SKILL_DIR}/references/semantic-svg.md # REQUIRED: semantic metadata boundary
Read ${SKILL_DIR}/references/modes/<resolved-id>.md # one preset id, or each `mode_references` id
Read ${SKILL_DIR}/references/visual-styles/<resolved-id>.md # one preset id, or each `visual_style_references` id
@@ -525,7 +525,8 @@ not route among them one file at a time:
[`native-shape-authoring.md`](../../references/native-shape-authoring.md),
[`preset-shape-vocabulary.md`](../../references/preset-shape-vocabulary.md),
[`semantic-svg.md`](../../references/semantic-svg.md),
and [`executor-structure.md`](../../references/executor-structure.md). Retain
[`executor-structure.md`](../../references/executor-structure.md),
and [`topology-assembly.md`](../../references/topology-assembly.md). Retain
only the mode/style detail files selected during one-pass design resolution and
realize that chosen direction. Exact `*_references` define the catalog material
actually used by a custom: apply one basis under its behavior, synthesize several
@@ -543,11 +544,13 @@ and [`svg-image-embedding.md`](../../references/svg-image-embedding.md); add
Reread only after a known file change or context invalidation.
`executor-structure.md` is loaded once before all SVG authoring so every
`Structure=yes` result can apply its qualitative topology grammar.
`native-shape-authoring.md` independently owns contour selection and compound
page geometry for both Structure results. Reuse both throughout the valid
execution context; before P01, read the complete preset vocabulary once, then
reread only after a known file change or context invalidation.
`Structure=yes` result can resolve its qualitative topology.
`topology-assembly.md` supplies assembly and relative-registration material for
that resolved topology; `native-shape-authoring.md` owns the two-step assembly
gate, contour selection, and compound page geometry for both Structure results.
Reuse all three throughout the valid execution context; before P01, read the
complete preset vocabulary once, then reread only after a known file change or
context invalidation.
**Mandatory — per-image-page composition decision**: For every page with one
or more images, after its content and communication move are
@@ -2,8 +2,8 @@
"sourceId": "shadcn",
"repo": "https://github.com/shadcn-ui/ui.git",
"ref": "main",
"commit": "ac60ef5c4db4265d71454dd9ecd3f93e255d7211",
"commit": "b9938d94635fca7a4560449713b0b1ba87d77bc6",
"adapter": "claude-skill",
"sourcePath": "skills/shadcn",
"syncedAt": "2026-08-23T16:00:00Z"
"syncedAt": "2026-08-24T16:00:00Z"
}
@@ -2,8 +2,8 @@
"sourceId": "taste-skill",
"repo": "https://github.com/Leonxlnx/taste-skill.git",
"ref": "main",
"commit": "72e299530e2eb31ed8da06181bc19f6c18a00821",
"commit": "ccbc15639c97057cbfcf32ecebc38ef716e4bb37",
"adapter": "skill-collection",
"sourcePath": "skills",
"syncedAt": "2026-08-22T16:00:00Z"
"syncedAt": "2026-08-24T16:00:00Z"
}
@@ -256,6 +256,7 @@ uipro init --ai kilocode # KiloCode
uipro init --ai warp # Warp
uipro init --ai augment # Augment
uipro init --ai codewhale # CodeWhale
uipro init --ai openclaw # OpenClaw
uipro init --ai universal # Universal / Agent Standard (.agents/skills/)
uipro init --ai all # All assistants
```
@@ -2,8 +2,8 @@
"sourceId": "ui-ux-pro-max",
"repo": "https://github.com/nextlevelbuilder/ui-ux-pro-max-skill.git",
"ref": "main",
"commit": "bc826e2267a36d98a2dcf5231e16c30ff546770f",
"commit": "13179471f97162b3297558621a76682438caf017",
"adapter": "claude-skill",
"sourcePath": ".claude/skills/ui-ux-pro-max",
"syncedAt": "2026-08-20T16:00:00Z"
"syncedAt": "2026-08-24T16:00:00Z"
}