v4.7.0 went deep into PowerPoint's own object model. This release turns to the image path — where a deck's pictures come from, what they are allowed to be, and how they get composed into a page. AI imagery stops being a per-page spot illustration and becomes a composition system: coherent element families, transparent cut assets, and hand-rendered lettering that the page can build around. Alongside it, the formula profile grows from a hand-picked LaTeX subset to the documented Microsoft 365 one, and the PPTX → SVG direction learns to bring back motion and math instead of silently dropping them.
AI imagery as a composition system
- Illustration assets are now composable across the deck. Both runtimes can plan a coherent family of elements — chrome, anchors, figures, accents — batch-generate them on one sheet, and reuse them across any suitable slide, instead of treating each page's picture as an isolated spot.
- Decorative lettering is a first-class carrier. Artistic lettering is prepared as an image asset, batched by artistic treatment into sheets, and sliced to transparent elements. Native WordArt stays out of scope and ordinary editable text remains the fallback. A page that needs a real heading keeps its native title, with the lettering acting as its display layer — the two coexist rather than compete.
- Eligibility is decided by criterion, not page role. The trigger used to scan only cover and divider wording. A dish name, exhibit name, year, hero number, or pull quote on a content page is often the more stable string, and set over photography it is exactly where native type reads pasted-on. The rule is now the two questions that actually decide it — is the wording stable, and would an artistic treatment communicate better — with length, line count, and page role no longer filtering candidates. Use stays selective: one small coherent set per deck, never a coverage quota.
- Transparent slicing recovers clean alpha. Sheet slicing keys off an explicit pure-RGB chroma key, removing spill while preserving antialiased edges and translucent effects.
--strict-alphavalidates the complete cell boundary and fails closed; without it the legacy warning-only behavior is unchanged. When keying visibly did not take — corners still opaque after--alpha, or--trimremoving nothing on either axis — the run names the sampled color and points at--bg/--tolerancerather than quietly shipping a visible box onto the slide. - Three new composition patterns and four recipes. A curved panoramic photo wall built from precomputed 2D contours (never shear or skew), a glyph-shaped picture defaulting to the editable text picture fill, and a registered device/frame mockup — plus ceremonial fan and arc strips, folded/louvered same-source strips, the bento field combination, and a staggered photo strip. Every form stays natively editable.
Image sourcing follows the task, not the tooling
- The resolved visual style no longer decides the image source. In a dogfood run every image on the deck resolved to AI illustration because the style had already answered the source question — including externally verifiable heritage architecture. Per-image source is now a mandatory decision in both runtimes, never inherited, and a deliberate non-documentary choice for a verifiable subject has to be stated.
- Availability no longer decides fit either. Zero-config web acquisition stays active when AI or keyed providers are unavailable, and a callable generator is used proactively when it serves a planned visual job — the recommendation follows the communication need rather than which credentials happen to be present.
- Web image search reviews candidates on thumbnails, in isolation. Explicit query variants are aggregated and deduplicated across providers, eight preview thumbnails are saved per page, and originals are downloaded only after selection. The multimodal inspection runs as its own bounded stage so candidate images stay out of the main generation context, with a strict metadata-ranked path for agents without vision.
- AI capability is resolved at execution, with per-runtime recovery. Planning no longer runs backend or host-tool preflight checks. When automation fails, Default asks for retry, manual fulfillment, or cancellation of the affected images; Quick replans without AI and discloses every fallback. Needs-Manual is reserved for explicit manual selection and blocks export until the required files exist.
- Twelve image backends were realigned to current provider contracts — retired defaults replaced, provider-specific size, ratio, endpoint, and payload handling corrected, and incompatible model overrides rejected instead of silently applying the wrong schema.
--list-backendsnow reports the effective configuration and whether it came from the process environment or a file, with credentials still hidden.
Native formulas: the documented Microsoft 365 profile
- The LaTeX profile now covers what Microsoft documents, not a hand-picked subset — the documented commands, environments, macros, colors, and normalizations, plus mhchem. Out-of-profile input still fails closed rather than degrading silently.
- The compiler was split into focused modules — parser, AST, profile tables, OMML emitter, and run-property merger — with marker styling preserved on math runs and structural controls, and final OMML resource limits enforced.
- Superscript and subscript export as native text runs. Direct
super/subbaseline shift on atspanlowers to real DrawingML baseline offsets without changing font size, with tspan ownership preserved through finalization and inline-formula conflicts rejected.
Native shapes and the reverse loop
- A project-authored preset shape can carry one registered shadow or glow through the canonical
--filter-idauthoring surface, while remaining one editable native shape. Connectors, ordinary group filters, child filters, and multi-effect graphs stay closed. - PPTX → SVG reconstructs supported slide transitions — effects, options, and timings recovered against the current registry, with internal WAV transition sounds extracted and published collision-safe. Unsupported carriers are diagnosed in tolerant mode and rejected in strict mode.
- Finite object animations come back too. Registry rows map to unique top-level SVG group targets, restoring effect options, pane order, Start mode, duration, relative delay, and trigger shapes. Duration-less, advanced, build/media, and unmapped timing stays diagnosed and direct-preserved rather than normalized into something it isn't.
- Formulas survive the import. Validator-clean block and inline OMML rebuilds as canonical formula markers; unsupported formula content is retained through diagnosed fallback and fails in strict mode. Unreconstructed transitions and object timing are reported per source slide.
Source intake
- Topic Research can retain a webpage as a source package. Each adopted URL or preconverted package is imported exactly once, its companion images counted as source-extracted inventory rather than web acquisition, with expected / imported / failed research sources reconciled.
- Fact URLs are provenance, not an import queue. Research URLs are no longer expanded during import; adopted page packages are fetched on demand, and retained-page images are a reviewed one-at-a-time fallback rather than a pool.
- Fonts resolve against the delivery target. Unspecified delivery now defaults to Windows PowerPoint using the deck locale, authoring-host fonts are limited to SVG preview and measurement, and Noto Serif CJK SC maps to SimSun.
Repository
- Agent-facing Markdown is single-language per file, including the rules themselves. A few instructions were written in Chinese inside otherwise English files, which biases output language and quietly overrides the "match the user's language" discipline. Those are translated, and
docs/rules/language.mdstates the rule. - The skill description covers a wider set of intents and states skill-root provenance, from @Fro2en12's PR #267.
- Roadmap corrections: the accessibility row's alt-text premise, the logo row against shipped brand assets, the reading-path row's actual carriers, missing coverage-map rows, and slide-number / footer fields settled as a boundary.
Full changelog: v4.7.0...v4.8.0