github hugohe3/ppt-master v6.5.0

11 hours ago

Minor release from two focused rounds since v6.4.0: the Create Template / use-template flow was audited and reworked, and the Edit Native PPTX route was exercised on real government and university decks (multi-master, source animations, native charts, SmartArt, narration, revision rounds) and fixed wherever it broke. Every change is backed by a reproduced defect or a documented contract gap; no route was added or removed.

Edit Native PPTX (round-trip import → edit → export)

  • Decks that could not be exported at all now export: a built-in layout no slide uses with a collapsed <a:ext cx="0" cy="0"/> placeholder no longer fails the native structure contract, and an untouched page holding a full-canvas picture no longer loses that picture to background promotion when narration forces a rebuild (6509129).
  • Motion overlays diff against the import baseline field by field: a sidecar row that omits transition keeps the source transition even though the importer writes defaults.transition: none; animation.effect: none really removes the source timing; -t and effect-only rows keep the source advClick / advTm; a user-edited default is a deck-wide request (a7cb776).
  • Narration injects into a slide whose timing tree is a bare tmRoot, blocks on natively preserved click animations with the output stem, source slide and shape ids named, replaces its own earlier audio instead of stacking a second autoplay track, matches imported audio to output pages through the manifest, and reuses its media name across re-recordings (a7cb776, b560f85).
  • Fidelity: same-deck links on rebuilt objects keep their source destination through text edits, page plans and adoption; Master/Layout refs refuse edits instead of vanishing while the original keeps rendering; ancestor transform / opacity / inherited style join the source-ref diff so a moved wrapper actually moves; a paint-only edit keeps the native text body (auto-numbering, autofit, fields, language); custom-show selections and actions close after a page plan; SmartArt, OLE and other unsupported graphic frames carry the atomic proxy marker the route always promised (57f7623).
  • Notes: a new note for one page no longer overwrites another page's notes part; round-trip workspaces match notes by exact stem and print the real count; --no-notes removes every notes part, master, relationship and override; imports write notes/<stem>.md only (73bc51a, b560f85).
  • Packages: replaced chart parts, workbooks and slide relationships the slide XML never used are pruned on edited round-trip pages and on every generated slide (structured export left the promoted master background registered on each slide); the delivery check counts slides, notes, masters and layouts by content type, reports dangling custom-show references as errors and unreferenced slide relationships as advisories (57f7623).
  • Quality gate: svg_quality_checker.py --roundtrip --json writes to validation/ and shares its fingerprint with the exporter, so a round-trip export can report quality_gate=passed; the checker measures imported lines / paragraphs text row by row, stops re-estimating source text that only moved vertically, enforces the exporter's one-text semantic-shape contract early, and warns when an edited page rewrites a table the importer could not carry natively (73bc51a, 6509129).
  • Route documentation states the identity boundary, both imported text models, what skipping --native-charts-and-tables really ships, the notes consumer contract, the spidshape-<id> mapping, retention of every Master/Layout under a page plan, --primary-language, and a revision-round paragraph (52a2801, 5581c85).

Create Template and template consumption

  • Installation is staged with rollback and a machine receipt (template_install.json); the Confirm UI freezes selected-root snapshots, accepts several explicit roots, binds stages by content and verifies the installation itself — the handoff sidecar and its two commands are gone (6de7939, f58f846).
  • Type A mirror is a pure tool path: zero-edit import → materialize → checker → preview with a factual spec skeleton; the Type B promise is withdrawn (f58f846).
  • Template mode checks carrier baselines against slot bounds, mirror text targets, and offers an advisory --slot-capacity-report; translucent full-canvas rects are not backgrounds; CJK literal font names never occupy the Latin slot; layout-fixed atoms leave the sparse display-size quota; three bundled deck templates gained taller chapter-number slots (be80892, f58f846).
  • Structured export keeps custom placeholder faces, re-skins master backgrounds from public pages, compiles typed chart/table slots natively in previews, rejects placeholder slots as Morph endpoints at validate, and compiles zero-padded page numbers to slide-number fields (6de7939, 6e3ce9c).
  • Prompts: Stage 1 keeps the goal rather than blacking out template facts; Create Template gains a prototype review round; slot fit is checked before the typography lock; Quick names the typed-slot export flag; import-sources --no-image-propagation keeps reference bitmaps out of images/ (6627d92, f58f846, 6e3ce9c).

Tooling

  • notes_to_audio.py accepts --rate -5% (and --pitch / --volume, now passed to edge-tts) with a space or = (73bc51a).
  • Test subprocess output decodes as UTF-8 regardless of the parent locale; the first svg_output page is closed deterministically when its root language is read (7879bbc, c6ae489).
  • .env.example documents sponsor relay shortcuts (b44cdfa).

Install

Load skills/ppt-master/ as a skill (the attached ppt-master-skill-v6.5.0.zip contains only that directory) or install the plugin from the repository's marketplace.

Don't miss a new ppt-master release

NewReleases is sending notifications on new releases.