# Morph Ppt 3d

> 3D Morph PPT — extends morph-ppt with GLB model insertion, cinematographic camera, model-content layout, and enriched visual design system.

- **Type:** Skill
- **Install:** `agentstack add skill-zhu1090093659-deepseek-pp-morph-ppt-3d`
- **Verified:** Pending review
- **Seller:** [zhu1090093659](https://agentstack.voostack.com/s/zhu1090093659)
- **Installs:** 0
- **Category:** [Web & Browser](https://agentstack.voostack.com/c/web-and-browser)
- **Latest version:** 0.1.0
- **License:** Apache-2.0
- **Upstream author:** [zhu1090093659](https://github.com/zhu1090093659)
- **Source:** https://github.com/zhu1090093659/deepseek-pp/tree/main/core/skill/officecli-official/skills/morph-ppt-3d
- **Website:** https://chromewebstore.google.com/detail/deepseek++/kdmpkkahkhdmdhfkdihkopikgcocbpbf?hl=zh-CN&authuser=0

## Install

```sh
agentstack add skill-zhu1090093659-deepseek-pp-morph-ppt-3d
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Morph PPT — 3D Extension

This skill **extends** `morph-ppt`. All morph-ppt rules (naming, ghosting, design, verification) apply in full.
This file covers **3D-specific additions** and an **enriched design system** combining morph-ppt aesthetics with concrete color palettes, font pairings, and layout quality guardrails.

---

## Setup

If `officecli` is missing:

- **macOS / Linux**: `curl -fsSL https://d.officecli.ai/install.sh | bash`
- **Windows (PowerShell)**: `irm https://d.officecli.ai/install.ps1 | iex`

Verify with `officecli --version` (open a new terminal if PATH hasn't picked up). If install fails, download a binary from https://github.com/iOfficeAI/OfficeCLI/releases.

## Use when

- User wants a `.pptx` with a `.glb` 3D model and Morph transitions.

---

## 3D Model Compatibility Gate (before generation)

1. Only `.glb` is supported. If user provides `.fbx` / `.obj` / `.blend` / `.usdz` / `.gltf`, ask them to convert to `.glb` first (e.g. via Blender export).
2. If user has no model, follow the **Model Discovery Flow** below.
3. All files (`.glb`, `.pptx`, build script) must be in the same working directory.

---

## Model Discovery Flow (when user has no model)

When the user gives a topic but no `.glb` file, **proactively help them find a matching model** instead of just listing websites.

### Step 1: Understand the topic and suggest model direction

Based on the user's topic, suggest what kind of 3D model would work:

| Topic type         | Model suggestion                    | Example                                               |
| ------------------ | ----------------------------------- | ----------------------------------------------------- |
| Product/brand      | The actual product or a similar one | "coffee brand" → coffee cup, coffee machine, bean     |
| Animal/character   | The animal or mascot                | "fox mascot" → fox 3D model                           |
| Architecture/space | Building, room, or structure        | "new office" → office building, interior              |
| Vehicle/transport  | The vehicle itself                  | "EV launch" → car, motorcycle, bicycle                |
| Food/cooking       | The dish or ingredient              | "Japanese food" → sushi platter, ramen bowl           |
| Tech/gadget        | The device                          | "phone launch" → phone, tablet, laptop                |
| Nature/science     | The subject                         | "solar system" → planet, sun, earth                   |
| Abstract concept   | A symbolic object                   | "teamwork" → puzzle pieces, gears, bridge             |

Tell the user: "Your topic is [X]. I suggest using a 3D model of [description]. Here are some free sources to find one:"

### Step 2: Search for models (agent-driven)

**Proactively search for models on behalf of the user.** Don't just list websites — actually find candidates.

**Search strategy (try in order):**

1. **Web search** for free GLB models matching the topic:

   ```
   Search: "[topic keyword] 3d model glb free download"
   Example: "fox 3d model glb free download"
   ```

2. **Sketchfab API** (no auth needed for search):

   ```bash
   curl -s "https://api.sketchfab.com/v3/search?type=models&q=[keyword]&downloadable=true&archives_flavours=glb" \
     | python3 -c "
   import json, sys
   data = json.load(sys.stdin)
   for m in data.get('results', [])[:5]:
       print(f\"Name: {m['name']}\")
       print(f\"URL: https://sketchfab.com/3d-models/{m['slug']}-{m['uid']}\")
       print(f\"Likes: {m.get('likeCount', 0)}, License: {m.get('license', {}).get('label', 'unknown')}\")
       print()
   "
   ```

3. **Poly Pizza** (direct GLB download, all free):

   ```bash
   # Search results page — parse for download links
   curl -s "https://poly.pizza/api/search/[keyword]" 2>/dev/null
   ```

4. **Khronos glTF-Sample-Assets** (guaranteed to work, always available):
   ```bash
   # Direct download — no auth, no API, always works
   curl -L -o model.glb "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/[ModelName]/glTF-Binary/[ModelName].glb"
   ```
   Available models: Duck, Fox, Avocado, BrainStem, CesiumMan, DamagedHelmet, FlightHelmet, Lantern, Suzanne, WaterBottle, etc.

### Step 3: Present candidates to user for confirmation

Show the user 2-3 model options with:

- Model name and source
- Preview link (Sketchfab URL or description)
- License info
- Why this model fits their topic

Example response:

```
Based on your topic "fox mascot", here are some models I found:

1. Fox (Khronos sample)
   Direct download, guaranteed compatible
   Why: clean fox model, good for mascot/character decks

2. Low Poly Fox (Poly Pizza)
   URL: https://poly.pizza/m/xxx
   License: CC0 (completely free)
   Why: low-poly style, good fit for clean minimal design

3. Cartoon Fox (Sketchfab)
   URL: https://sketchfab.com/3d-models/fox-xxx
   License: CC BY 4.0 (free, commercial use ok)
   Why: expressive face, high detail

Which one do you want? I'll download it and start building.
```

**Wait for user confirmation before downloading.** Do not download without asking.

### Step 4: Download the confirmed model

After user confirms, download directly:

```bash
# For Sketchfab (if user has the download URL)
curl -L -o model.glb "[download_url]"

# For Khronos samples (always works)
curl -L -o model.glb "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/Fox/glTF-Binary/Fox.glb"
```

After download, verify:

- File exists and is not empty
- File extension is `.glb`
- File size is under 50MB

If Sketchfab requires login to download, tell the user:

> "This model requires a Sketchfab login to download. You can grab the .glb file from the page and share it with me. Or I can use a Khronos sample model for a demo version first?"

### Step 5: When user says "anything" / "you decide" / "just make a demo"

**Don't just grab a random model.** First guide the user to clarify their PPT topic:

> Sure! I'll handle the model — but let me confirm the topic direction first so the model matches the content:
>
> 1. Tech/Product — headphones, phone, robot...
> 2. Animal/Character — cute pet, cartoon character...
> 3. Architecture/Space — building, interior, city...
> 4. Food/Lifestyle — dishes, everyday objects...
> 5. Other — just tell me your idea
>
> Pick a direction, or just give me a topic keyword.

After user confirms a direction, THEN search and recommend models.

### Step 6: When user wants to find models themselves

Give specific website links with step-by-step guidance:

> **Recommended 3D model websites:**
>
> 1. **Sketchfab** (largest 3D model platform)
>    - Link: https://sketchfab.com/search?q=[keyword]&type=models&downloadable=true
>    - Filter steps: search keyword → check "Downloadable" → format "glTF" → sort by "Likes"
>    - When downloading, select **glTF (.glb)** format
>    - Note: some models require free registration to download
> 2. **Poly Pizza** (all free low-poly)
>    - Link: https://poly.pizza/
>    - All CC0 licensed — click Download to get .glb directly
>    - Best for: minimalist or cartoon-style presentations
> 3. **Sketchfab popular categories**
>    - Animals: https://sketchfab.com/search?q=animal&type=models&downloadable=true
>    - Food: https://sketchfab.com/search?q=food&type=models&downloadable=true
>    - Tech: https://sketchfab.com/search?q=gadget&type=models&downloadable=true
>    - Architecture: https://sketchfab.com/search?q=architecture&type=models&downloadable=true
> 4. **Free3D** (general free model site)
>    - Link: https://free3d.com/3d-models/glb
>    - Note: check the license type before use
> 5. **TurboSquid Free** (pro model site free section)
>    - Link: https://www.turbosquid.com/Search/3D-Models/free/glb
>
> After downloading, share the .glb file with me. If the download is a .gltf folder, use Blender to convert it to .glb.

### Step 7: When user gives keywords and asks agent to search

**Remind about token cost before searching:**

> I can search for you, but web searches use extra tokens. Would you prefer:
>
> A. I search — I use the Sketchfab API and recommend 2-3 options (uses a few tokens)
> B. Self-service — I give you search links and filter steps, you pick and share with me (no extra tokens)
>
> A or B?

If user chooses A, proceed with Step 2 (agent-driven search).
If user chooses B, proceed with Step 6 (self-service guidance).

### License reminder

Always remind before confirming download: "Please check the model license before downloading. CC0 / CC BY = free to use; CC BY-NC = non-commercial only."

---

## Visual Design System (4.0 enrichment)

morph-ppt provides the base design rules. This section adds **concrete palettes, font pairings, and layout quality rules** from PPT Creator to give the AI more variety and stronger guardrails.

### Color Palettes (pick one per deck, or blend)

Choose a palette that matches the **topic mood** — don't default to generic blue.

| Palette                | Primary               | Secondary             | Accent           | Body Text | Muted/Caption |
| ---------------------- | --------------------- | --------------------- | ---------------- | --------- | ------------- |
| **Coral Energy**       | `F96167` (coral)      | `F9E795` (gold)       | `2F3C7E` (navy)  | `333333`  | `8B7E6A`      |
| **Midnight Executive** | `1E2761` (navy)       | `CADCFC` (ice blue)   | `FFFFFF`         | `333333`  | `8899BB`      |
| **Forest & Moss**      | `2C5F2D` (forest)     | `97BC62` (moss)       | `F5F5F5` (cream) | `2D2D2D`  | `6B8E6B`      |
| **Charcoal Minimal**   | `36454F` (charcoal)   | `F2F2F2` (off-white)  | `212121`         | `333333`  | `7A8A94`      |
| **Warm Terracotta**    | `B85042` (terracotta) | `E7E8D1` (sand)       | `A7BEAE` (sage)  | `3D2B2B`  | `8C7B75`      |
| **Berry & Cream**      | `6D2E46` (berry)      | `A26769` (dusty rose) | `ECE2D0` (cream) | `3D2233`  | `8C6B7A`      |
| **Ocean Gradient**     | `065A82` (deep blue)  | `1C7293` (teal)       | `21295C`         | `2B3A4E`  | `6B8FAA`      |
| **Teal Trust**         | `028090` (teal)       | `00A896` (seafoam)    | `02C39A` (mint)  | `2D3B3B`  | `5E8C8C`      |
| **Sage Calm**          | `84B59F` (sage)       | `69A297` (eucalyptus) | `50808E`         | `2D3D35`  | `7A9488`      |
| **Cherry Bold**        | `990011` (cherry)     | `FCF6F5` (off-white)  | `2F3C7E` (navy)  | `333333`  | `8B6B6B`      |

**Rules:**

- One color dominates (60-70% visual weight), 1-2 supporting tones, one accent
- On light backgrounds: use Body Text color for copy, Muted for captions
- On dark backgrounds: use Secondary or `FFFFFF` for copy, Muted for captions
- For additional inspiration, browse `../../styles/INDEX.md` — 50+ visual styles organized by mood (dark, light, warm, vivid, bw). Read `style.md` for design philosophy, `build.sh` for implementation reference. **Learn the approach, do not copy coordinates verbatim**

### Font Pairings (pick one per deck)

| Header Font  | Body Font     | Best For                         |
| ------------ | ------------- | -------------------------------- |
| Georgia      | Calibri       | Formal business, finance         |
| Arial Black  | Arial         | Bold marketing, product launches |
| Calibri      | Calibri Light | Clean corporate, minimal         |
| Cambria      | Calibri       | Traditional professional         |
| Trebuchet MS | Calibri       | Friendly tech, startups          |
| Impact       | Arial         | Bold headlines, keynotes         |
| Palatino     | Garamond      | Elegant editorial, luxury        |
| Consolas     | Calibri       | Developer tools, technical       |

### Hard Rules (mandatory, no exceptions)

**H4 — Body text minimum 16pt:**
All body text, card content, and bullet points must be >= 16pt. "Content doesn't fit" is not an excuse — reduce text, split slides, or reduce card count instead. Exceptions: chart axis labels ( 80%). Never use mid-gray or muted colors as body text on dark backgrounds.

**H7 — Speaker notes required:**
Every content slide (not title/closing) MUST have speaker notes. Use:

```bash
officecli add deck.pptx '/slide[N]' --type notes --prop text="..."
```

### Visual Element Checkpoint

**Every 3 content slides, at least 1 must contain a non-text visual element:**

| Visual type            | Implementation                               |
| ---------------------- | -------------------------------------------- |
| Icon in colored circle | ellipse shape + centered text/number overlay |
| Colored block          | `preset=roundRect` with fill                 |
| Large stat number      | `size=64, bold=true` with small label below  |
| Chart                  | `--type chart` (column/pie/line)             |
| Gradient background    | `background=COLOR1-COLOR2-180`               |
| Shape composition      | circles + connectors for diagrams            |

Text-only slides are only allowed for: quotes, code examples, pure tables.

---

## 3D Model Insertion Rules

### Add model fresh on every slide — NEVER clone

`morph_clone_slide` copies the model as frozen XML. The cloned model cannot Morph.
Each slide must call `add --type 3dmodel` independently with the **same `name`** prop.

**⚠️ CRITICAL: If you clone a slide that already has a 3D model, the old model XML is copied too. This creates TWO model3d elements with the same name on the new slide. PowerPoint cannot handle this conflict and will delete the model content during repair.**

If you must clone a slide for scene actors, **immediately remove the cloned model before adding a new one:**

```bash
# After cloning slide 1 to slide 2:
officecli remove deck.pptx '/slide[2]/model3d[1]'  # remove the frozen clone
officecli add deck.pptx '/slide[2]' --type 3dmodel ...  # add fresh model
```

**Recommended approach: Do NOT clone slides with 3D models at all.** Create all slides empty first, then add models fresh on each.

```bash
# Slide 1
officecli add deck.pptx '/slide[1]' --type 3dmodel \
  --prop path=model.glb --prop 'name=!!model-hero' \
  --prop x=16cm --prop y=1cm --prop width=16cm --prop height=16cm \
  --prop roty=0

# Slide 2
officecli add deck.pptx '/slide[2]' --type 3dmodel \
  --prop path=model.glb --prop 'name=!!model-hero' \
  --prop x=0.5cm --prop y=1cm --prop width=18cm --prop height=17cm \
  --prop roty=50
```

### Controllable properties

| Property          | What it does              | Notes                                         |
| ----------------- | ------------------------- | --------------------------------------------- |
| `x`, `y`          | Position on slide         | Standard slide coordinates                    |
| `width`, `height` | Frame size                | Model renders inside this frame               |
| `name`            | Shape name                | Must be identical across slides for Morph     |
| `roty`            | Y-axis rotation (degrees) | Primary storytelling axis                     |
| `rotx`            | X-axis tilt (degrees)     | Range -25 to +40. See Camera Language section |
| `rotz`            | Z-axis roll (degrees)     | Rarely needed                                 |

### Do NOT manually set

- `meterPerModelUnit` — auto-computed from GLB bounding box
- `preTrans` — auto-computed for model centering
- `camera` depth/position — auto-computed to fit the model
- Never use `raw-set` on any 3D transform parameter

---

## Model-Content Layout

### Core Principle: Model IS the Subject

The model must feel like the **protagonist** of the presentation, not a sidebar decoration.
Text supports the model; the model does not decorate the text.

### Size Contrast Rule (MANDATORY)

Adjacent slides must have a model area ratio >= 1.5x or = 360 or  33.87cm).
Only part of the model visible — implies more beyond the frame.

```bash
# Pattern F: model bleeds off right edge
officecli add deck.pptx '/slide[N]' --type 3dmodel \
  --prop path=model.glb --prop 'name=!!model

…

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [zhu1090093659](https://github.com/zhu1090093659)
- **Source:** [zhu1090093659/deepseek-pp](https://github.com/zhu1090093659/deepseek-pp)
- **License:** Apache-2.0
- **Homepage:** https://chromewebstore.google.com/detail/deepseek++/kdmpkkahkhdmdhfkdihkopikgcocbpbf?hl=zh-CN&authuser=0

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: flagged — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-zhu1090093659-deepseek-pp-morph-ppt-3d
- Seller: https://agentstack.voostack.com/s/zhu1090093659
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
