Files
wehub-resource-sync 8cb1f9f479
Publish SDK (PyPI) / publish (push) Has been cancelled
Publish SDK (npm) / publish (@aionui/officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (windows-latest) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/officecli-sdk) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/sdk) (push) Has been cancelled
Publish SDK (npm) / publish (officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (macos-latest) (push) Has been cancelled
SDK smoke / smoke (ubuntu-latest) (push) Has been cancelled
Skill parity / diff (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:09:29 +08:00

14 KiB
Raw Permalink Blame History

name, description
name description
pptx-design Morph-specific design notes — color + typography floor for deep-stage decks, plus Scene Actors / Page Types / Shape Index / Morph Animation Essentials

Morph Design Essentials

skills/officecli-pptx/SKILL.md §Requirements / §Design Principles / §Visual delivery floor is the source of truth for type hierarchy, contrast, and palette picking in every pptx, morph or not. This file narrows that floor to the stage-feel register a morph deck typically shoots for: darker backgrounds, larger hero type, deeper opacity range for scene actors, and per-slide text-width generosity that survives #sN-* ghost churn. Where pptx SKILL.md already states a rule, the guidance here is an additive override only if the slide is actively in a morph pair — otherwise defer upward.


1) Color Principles (morph-stage register)

Contrast is King — always compute, never eyeball

Morph decks lean dark; mid-gray body text (#666666) that reads fine in a pptx base render disappears under projector glare the moment the backdrop goes below brightness 30. Compute before you pick:

Brightness = (R × 299 + G × 587 + B × 114) / 1000

Deployment rule (morph-specific — stricter than pptx base):

  • Dark background (brightness < 128) → body text brightness ≥ 80% (#FFFFFF, #EEEEEE, #CADCFC). Chart series fills + icon strokes must clear the same floor.
  • Light background (brightness ≥ 128) → body text brightness ≤ 20% (#000000, #333333).
  • Mixed / gradient background — add a semi-transparent backing block (opacity=0.3-0.6) behind the run of text; do not rely on the gradient to "average out".

Worked samples:

  • #000000 brightness 0 → dark → white text
  • #1E2761 brightness 35 → dark → white text
  • #2C3E50 brightness 62 → dark → white text
  • #E94560 brightness 88 → still dark → white text (common mistake: treating bright red as "mid")
  • #F39C12 brightness 160 → light → dark text
  • #FFFFFF brightness 255 → light → dark text

When in doubt, push contrast. Stage-style decks are read under projector + mixed ambient light — reviewer's monitor comfort is not the right benchmark.

Color Hierarchy — three depth layers

A morph deck has more visible elements per frame than a pptx base slide (scene actors + content + chart series + annotations). Hold the stack:

Background fill  →  Scene actors  →  Content (text / data / KPI)
(weakest)           (medium)          (strongest)

Opacity ranges for !!scene-* and !!actor-* shapes (morph-specific — tighter than pptx base):

  • ≤ 0.12 — whole-deck decoration (!!scene-grid, !!scene-band, corner accents). Must not compete with content at the back of the room.
  • 0.3 0.6 — evidence / data backing blocks (!!actor-evidence-bg, KPI card fills). Strong enough to frame, soft enough to let numbers shine.
  • 0.8 1.0 — reserved for !!actor-* shapes that ARE the content (a hero ring behind a single stat, a brand color strip as the message). Use sparingly — more than 2 per slide reads as clutter.

A scene actor that lands on opacity=0.7 in the content core is usually a mis-classified actor; either lower it (it's decoration) or rename it !!actor-* (it's content) and plan an exit slide.

Palette Selection — pick for mood, not for habit

There are no universal palette formulas for morph decks. The four pptx canonical palettes (Executive navy / Forest & moss / Warm terracotta / Charcoal minimal) still apply, but morph decks pick more freely from the 52-style library because cross-slide motion amplifies color mood.

Decision path:

  1. Match topic mood → tech / fintech lean dark--*; healthcare / education lean light--* or warm--*; design / brand lean bw--* or mixed--*.
  2. Respect user-specified hex → if the brief names a brand color, scan reference/styles/INDEX.md Quick Lookup for the nearest hex trio; do not force-fit the mood label.
  3. Vary by project — avoid repeating the last three decks' palette family. dark--premium-navy on every pitch deck reads as a template, not a design choice.
  4. Name the palette in brief.md → "warm--earth-organic palette" is a commitment; "warm tones" is not.

Use reference/styles/ for inspiration (palette + signature gesture), not for coordinates — per reference/styles/INDEX.md L5-11, the build.sh coordinates are hand-tuned for demo content.


2) Typography (morph-stage register)

Morph decks are often viewed on stage or in projector-heavy settings where font weight carries farther than font choice. Two fonts max — one for headings, one for body.

Content Type Primary Pair Fallback
English Montserrat (title) + Inter (body) Segoe UI / Helvetica Neue
Chinese Source Han Sans 思源黑体 (title + body) PingFang SC / Microsoft YaHei
Mixed CN/EN Montserrat + Source Han Sans Segoe UI + System Font

Avoid Georgia / Times for body on morph slides — serif terminals disappear when the shape interpolates mid-motion. Reserve serif for pptx base decks with no transition movement.

Size Scale — one notch larger than pptx base

A morph deck is read from farther back (stage setups, large screens) and each frame holds motion in addition to text. Size up:

Role pptx base morph-stage (use this)
Hero / cover title 44-60pt 54-72pt, bold/black
Section heading 24-32pt 28-40pt, bold
Body / supporting 16-22pt 18-24pt
Caption / footnote 12-14pt 13-16pt (floor 13)

Do not drop below 13pt on any slide — projector glare erodes the lowest two point sizes first.

Text Width Guidelines — widen for centered, widen for ghost churn

Wrapping breaks visual hierarchy in a static deck; in a morph deck it also breaks the motion (the interpolation picks up the wrapped baseline and the text appears to tilt mid-transition). Make text boxes wider than you think.

Content Type Minimum Width Best Practice
Centered titles (64-72pt) 28cm 28-30cm for 10-15 char titles, 25cm for hero statements
Centered subtitles (28-40pt) 25cm Always 25-28cm to avoid mid-word breaks
Left-aligned titles 20cm 20-25cm depending on content length
Body text / cards 8cm (single) Single-column 8-12cm, double-column 16-18cm
Ghost-target content (#sN-*) same as source Width must match the on-slide version — a narrower ghost pulls the morph into a resize-plus-move tilt

Common mistakes in morph decks:

  • Using 10-15cm for long centered subtitles → awkward wrap + visible tilt during transition.
  • Tight text boxes that "just fit" the text → one extra character on a cloned slide breaks layout.
  • Ghost target (x=36cm) sized smaller than source → morph reads as a shrink-and-move instead of a slide-off.

Rule of thumb: when in doubt, widen. Extra whitespace is better than wrapped text during a morph interpolation.


3) Scene Actors (Animation Engine) — expanded

Purpose. Create smooth Morph animations through persistent shapes that change properties across adjacent slides.

Setup

Define 6-8 actors on Slide 1 if the deck tells a continuous-visual story:

  • Large (5-8cm): Main visual anchors (hero circle, band, hero card)
  • Medium (2-4cm): Supporting elements (metric cards, accent rings)
  • Small (1-2cm): Accents and details (dots, dashes, icons)

Shape types available via --prop preset=: ellipse | rect | roundRect | triangle | diamond | star5 | hexagon. Full list: officecli help pptx shape.

Naming (SKILL.md is authoritative)

Three-prefix system — !!scene-* / !!actor-* / #sN-*. Source of truth: SKILL.md §What is Morph? — core mechanics. This file adds only the Python-vs-shell quoting note below.

Python: # and !! require no special quoting — pass as plain strings in subprocess.run([..., "--prop", "name=#s1-title", ...]).

Shell (bash/zsh): ALWAYS single-quote to avoid history expansion on !! and comment-leading on #: --prop 'name=!!scene-ring' / --prop 'name=#s1-title'.

Pairing example — 3 actors × 3 slides

Slide 1: !!scene-ring (x=5cm, y=3cm, w=8cm, fill=E94560, opacity=0.3)
         !!scene-dot  (x=28cm, y=15cm, w=1cm)
         !!actor-headline (x=4cm, y=8cm, w=26cm, size=48)

Slide 2: !!scene-ring (x=20cm, y=2cm, w=12cm, opacity=0.6)   ← same name, new position+size
         !!scene-dot  (x=3cm, y=16cm, w=1.5cm)                ← moved to opposite corner
         !!actor-headline (x=1.5cm, y=1cm, w=12cm, size=24)  ← shrunk + moved to top-left

Slide 3: !!scene-ring (x=36cm)                                ← ghosted off-canvas
         !!scene-dot  (x=10cm, y=2cm, w=1cm)
         !!actor-headline (x=36cm)                            ← ghost: new headline takes over
         !!actor-subpoint (x=4cm, y=8cm, w=26cm, size=36)    ← new actor enters (no pair on S2 = fade in)

Per-slide content (#sN-*) workflow

  1. Clone previous slide → inherited #s(N-1)-* content carries the old slide's prefix.
  2. Ghost inherited content → move all #s(N-1)-* shapes to x=36cm.
  3. Add new content → with current slide's prefix #sN-*.

Without step 2, slides accumulate shapes → visual overlap compounds silently across the deck.


4) Page Types (mix for rhythm)

Vary page types to avoid monotony. Each serves a different narrative purpose:

Type When to use Visual structure
hero Opening, closing Large centered title + scattered scene actors
statement Key message, transition One impactful sentence + dramatic actor shifts (8cm+ moves)
pillars Multi-point structure 2-4 equal columns, actors become card backgrounds (opacity 0.12)
evidence Data, statistics 1-2 large asymmetric blocks + supporting details (opacity 0.3-0.6)
timeline Process, sequence Horizontal or vertical flow with step backgrounds
comparison A vs B Left-right split (50/50 or 60/40) with contrasting colors
grid Multiple items Scattered or grid layout, lighter feel
quote Breathing moment Centered text, minimal decoration
cta Call to action Return to bold, centered design
showcase Featured display Large central area for product/screenshot

Design notes:

  • pillars: Multi-column even distribution; scene actors morph into card backgrounds (roundRect, opacity=0.12).
  • evidence: Asymmetric — 1 large actor (30-40% canvas) + 1 medium (20-30%), opacity 0.3-0.6 allowed for data backgrounds.
  • grid: Must differ from pillars and evidence — light, scattered vs. structured.
  • Variety matters: Avoid repeating the same page type consecutively.

5) Shape Index Mechanics

Shapes are numbered sequentially on each slide: shape[1], shape[2], shape[3]... When transition=morph is applied, CLI auto-prefixes !! to names — use index paths after that (see SKILL.md §Known Issues M-1).

Index behavior

  • On creation: Shapes added in order get increasing indices.
  • After cloning: New slide inherits all shapes with identical indices.
  • After adding to a cloned slide: New shapes get the next available index.
  • After modifying: Index stays the same.

Pattern for build scripts

Slide 1: 6 actors + 2 content = 8 shapes total
Slide 2: Clone (8) → Ghost content (shape[7-8]) → Add new (shape[9+])
Slide 3: Clone (10) → Ghost content (shape[9-10]) → Add new (shape[11+])

Formula: Next slide's first new shape index = Previous slide's total shape count + 1.

Debugging: officecli get $FILE '/slide[N]' --depth 1 to inspect actual indices.


6) Morph Animation Essentials

Minimum requirements

  1. Slides 2+ must have transition=morph (officecli set /slide[N] --prop transition=morph).
  2. Scene actors must have identical name= across slides.
  3. Previous per-slide content must be ghosted (x=36cm) before adding new content.
  4. Adjacent slides should have different spatial layouts (displacement ≥ 5cm OR rotation ≥ 15° OR size delta ≥ 30% on ≥ 3 shapes).

Creating motion

Change ≥ 3 scene-actor properties between adjacent slides:

  • Move positions (x, y)
  • Resize (width, height)
  • Rotate (rotation degrees)
  • Shift colors (fill, opacity)

Goal: Sense of movement + transformation, not just fade.

Entrance effects on morph slides

Morph handles shape transitions automatically — entrance animations are usually unnecessary. If one is needed (e.g., fade a new #sN-* card in), use the with trigger so it plays simultaneously with morph:

animation=fade-entrance-300-with

Format: EFFECT[-DIRECTION][-DURATION][-TRIGGER]. See officecli help pptx animation for preset list.


7) Style References

52 visual style directories in reference/styles/ — see reference/styles/INDEX.md for the catalog. Lookup workflow is in SKILL.md §Style library lookup workflow. Key rule: learn the approach, do not copy coordinates (the style build.sh files have known typesetting bugs per INDEX.md L5-11).