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

6.1 KiB

Morph Transition (Office 2016+)

This demo consists of three files that work together:

  • transitions-morph.sh — Shell script that builds a 4-slide deck demonstrating all three morph granularities (byobject, byword, bychar) using a named morphBall ellipse that tweens position and size across slides.
  • transitions-morph.pptx — The generated 4-slide deck.
  • transitions-morph.md — This file. Documents morph pairing, the three granularity options, and backwards compatibility.

Regenerate

cd examples/ppt/transitions
bash transitions-morph.sh
# → transitions-morph.pptx

Slides

Slide 1 — Starting state (no transition)

The entry point. A named yellow morphBall ellipse is placed at bottom-left, small.

officecli add transitions-morph.pptx / --type slide

# Full-bleed dark background
officecli add transitions-morph.pptx '/slide[1]' --type shape \
  --prop x=0 --prop y=0 --prop width=33.87cm --prop height=19.05cm \
  --prop fill=1F3864

# Title label
officecli add transitions-morph.pptx '/slide[1]' --type shape \
  --prop text="Morph" --prop size=72 --prop bold=true --prop color=FFFFFF \
  --prop align=center \
  --prop x=2cm --prop y=7cm --prop width=29.87cm --prop height=4cm

# Named morph target — small circle at bottom-left
# name= is the pairing key: same name on slides 1-4 → PowerPoint tweens it
officecli add transitions-morph.pptx '/slide[1]' --type shape \
  --prop shape=ellipse --prop fill=FFC000 --prop name=morphBall \
  --prop x=2cm --prop y=14cm --prop width=3cm --prop height=3cm

Features: name=morphBall (morph pairing key), shape=ellipse, fill=FFC000

Slide 2 — morph (default = byobject)

Ball grows and moves to center. The shape name=morphBall on both slides triggers Morph to tween the geometry.

officecli add transitions-morph.pptx / --type slide
officecli set transitions-morph.pptx '/slide[2]' --prop transition=morph

officecli add transitions-morph.pptx '/slide[2]' --type shape \
  --prop x=0 --prop y=0 --prop width=33.87cm --prop height=19.05cm \
  --prop fill=2E5C8A
officecli add transitions-morph.pptx '/slide[2]' --type shape \
  --prop text="morph (byobject — default)" --prop size=44 --prop bold=true \
  --prop color=FFFFFF --prop align=center \
  --prop x=2cm --prop y=2cm --prop width=29.87cm --prop height=3cm

# Same name, larger and centered → ball grows + moves via morph
officecli add transitions-morph.pptx '/slide[2]' --type shape \
  --prop shape=ellipse --prop fill=FFC000 --prop name=morphBall \
  --prop x=15cm --prop y=10cm --prop width=6cm --prop height=6cm

Features: transition=morph (default = byobject)

Slide 3 — morph-byword

Text bodies are recomposed word-by-word.

officecli add transitions-morph.pptx / --type slide
officecli set transitions-morph.pptx '/slide[3]' --prop transition=morph-byword

officecli add transitions-morph.pptx '/slide[3]' --type shape \
  --prop x=0 --prop y=0 --prop width=33.87cm --prop height=19.05cm \
  --prop fill=4F7C3A
officecli add transitions-morph.pptx '/slide[3]' --type shape \
  --prop text="morph byword tweens words" --prop size=44 --prop bold=true \
  --prop color=FFFFFF --prop align=center \
  --prop x=2cm --prop y=2cm --prop width=29.87cm --prop height=3cm

# Ball continues moving — now at right, small again
officecli add transitions-morph.pptx '/slide[3]' --type shape \
  --prop shape=ellipse --prop fill=FFC000 --prop name=morphBall \
  --prop x=27cm --prop y=14cm --prop width=3cm --prop height=3cm

Features: transition=morph-byword

Slide 4 — morph-bychar

Text bodies are recomposed character-by-character.

officecli add transitions-morph.pptx / --type slide
officecli set transitions-morph.pptx '/slide[4]' --prop transition=morph-bychar

officecli add transitions-morph.pptx '/slide[4]' --type shape \
  --prop x=0 --prop y=0 --prop width=33.87cm --prop height=19.05cm \
  --prop fill=8A5A2B
officecli add transitions-morph.pptx '/slide[4]' --type shape \
  --prop text="bychar tweens letters" --prop size=44 --prop bold=true \
  --prop color=FFFFFF --prop align=center \
  --prop x=2cm --prop y=2cm --prop width=29.87cm --prop height=3cm

# Ball at center, medium size
officecli add transitions-morph.pptx '/slide[4]' --type shape \
  --prop shape=ellipse --prop fill=FFC000 --prop name=morphBall \
  --prop x=14cm --prop y=14cm --prop width=4cm --prop height=4cm

Features: transition=morph-bychar

Complete Feature Coverage

Option Syntax Tweens at the level of
byobject (default) transition=morph Whole shape pairs (matched by name)
byword transition=morph-byword Whole words within text bodies
bychar transition=morph-bychar Individual characters within text bodies

Input aliases accepted: object/word/char/character. get returns canonical byObject/byWord/byChar.

How Shape Pairing Works

Same name= on adjacent slides → PowerPoint pairs the shapes and tweens geometry. Without matching names, shapes fade in/out independently.

# Shape on slide N: small, bottom-left
officecli add deck.pptx /slide[1] --type shape \
  --prop shape=ellipse --prop name=morphBall \
  --prop x=2cm --prop y=14cm --prop width=3cm --prop height=3cm

# Shape on slide N+1: larger, centered → morph animates the change
officecli set deck.pptx /slide[2] --prop transition=morph
officecli add deck.pptx /slide[2] --type shape \
  --prop shape=ellipse --prop name=morphBall \
  --prop x=15cm --prop y=10cm --prop width=6cm --prop height=6cm

Backwards Compatibility

officecli writes morph with an inline fade fallback baked in. Pre-2016 PowerPoint plays the fallback fade — the deck remains openable everywhere.

Inspect the Generated File

officecli query transitions-morph.pptx slide
officecli get transitions-morph.pptx /slide[1]
officecli get transitions-morph.pptx /slide[2]
officecli get transitions-morph.pptx "/slide[2]/shape[3]"
  • examples/product_launch_morph.pptx — a full product-launch deck built with morph as the primary motion
  • transitions-dynamic.md — Office 2010+ "Exciting" gallery