$npx -y skills add iOfficeAI/OfficeCLI --skill morph-ppt-3d3D Morph PPT — extends morph-ppt with GLB model insertion, cinematographic camera, model-content layout, and enriched visual design system.
| 1 | # Morph PPT — 3D Extension |
| 2 | |
| 3 | This skill **extends** `morph-ppt`. All morph-ppt rules (naming, ghosting, design, verification) apply in full. |
| 4 | 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. |
| 5 | |
| 6 | --- |
| 7 | |
| 8 | ## Setup |
| 9 | |
| 10 | If `officecli` is missing: |
| 11 | |
| 12 | - **macOS / Linux**: `curl -fsSL https://d.officecli.ai/install.sh | bash` |
| 13 | - **Windows (PowerShell)**: `irm https://d.officecli.ai/install.ps1 | iex` |
| 14 | |
| 15 | 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. |
| 16 | |
| 17 | ## Use when |
| 18 | |
| 19 | - User wants a `.pptx` with a `.glb` 3D model and Morph transitions. |
| 20 | |
| 21 | --- |
| 22 | |
| 23 | ## 3D Model Compatibility Gate (before generation) |
| 24 | |
| 25 | 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). |
| 26 | 2. If user has no model, follow the **Model Discovery Flow** below. |
| 27 | 3. All files (`.glb`, `.pptx`, build script) must be in the same working directory. |
| 28 | |
| 29 | --- |
| 30 | |
| 31 | ## Model Discovery Flow (when user has no model) |
| 32 | |
| 33 | When the user gives a topic but no `.glb` file, **proactively help them find a matching model** instead of just listing websites. |
| 34 | |
| 35 | ### Step 1: Understand the topic and suggest model direction |
| 36 | |
| 37 | Based on the user's topic, suggest what kind of 3D model would work: |
| 38 | |
| 39 | | Topic type | Model suggestion | Example | |
| 40 | | ------------------ | ----------------------------------- | ----------------------------------------------------- | |
| 41 | | Product/brand | The actual product or a similar one | "coffee brand" → coffee cup, coffee machine, bean | |
| 42 | | Animal/character | The animal or mascot | "fox mascot" → fox 3D model | |
| 43 | | Architecture/space | Building, room, or structure | "new office" → office building, interior | |
| 44 | | Vehicle/transport | The vehicle itself | "EV launch" → car, motorcycle, bicycle | |
| 45 | | Food/cooking | The dish or ingredient | "Japanese food" → sushi platter, ramen bowl | |
| 46 | | Tech/gadget | The device | "phone launch" → phone, tablet, laptop | |
| 47 | | Nature/science | The subject | "solar system" → planet, sun, earth | |
| 48 | | Abstract concept | A symbolic object | "teamwork" → puzzle pieces, gears, bridge | |
| 49 | |
| 50 | Tell the user: "Your topic is [X]. I suggest using a 3D model of [description]. Here are some free sources to find one:" |
| 51 | |
| 52 | ### Step 2: Search for models (agent-driven) |
| 53 | |
| 54 | **Proactively search for models on behalf of the user.** Don't just list websites — actually find candidates. |
| 55 | |
| 56 | **Search strategy (try in order):** |
| 57 | |
| 58 | 1. **Web search** for free GLB models matching the topic: |
| 59 | |
| 60 | ``` |
| 61 | Search: "[topic keyword] 3d model glb free download" |
| 62 | Example: "fox 3d model glb free download" |
| 63 | ``` |
| 64 | |
| 65 | 2. **Sketchfab API** (no auth needed for search): |
| 66 | |
| 67 | ```bash |
| 68 | curl -s "https://api.sketchfab.com/v3/search?type=models&q=[keyword]&downloadable=true&archives_flavours=glb" \ |
| 69 | | python3 -c " |
| 70 | import json, sys |
| 71 | data = json.load(sys.stdin) |
| 72 | for m in data.get('results', [])[:5]: |
| 73 | print(f\"Name: {m['name']}\") |
| 74 | print(f\"URL: https://sketchfab.com/3d-models/{m['slug']}-{m['uid']}\") |
| 75 | print(f\"Likes: {m.get('likeCount', 0)}, License: {m.get('license', {}).get('label', 'unknown')}\") |
| 76 | print() |
| 77 | " |
| 78 | ``` |
| 79 | |
| 80 | 3. **Poly Pizza** (direct GLB download, all free): |
| 81 | |
| 82 | ```bash |
| 83 | # Search results page — parse for download links |
| 84 | curl -s "https://poly.pizza/api/search/[keyword]" 2>/dev/null |
| 85 | ``` |
| 86 | |
| 87 | 4. **Khronos glTF-Sample-Assets** (guaranteed to work, always available): |
| 88 | ```bash |
| 89 | # Direct download — no auth, no API, always works |
| 90 | curl -L -o model.glb "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/[ModelName]/glTF-Binary/[ModelName].glb" |
| 91 | ``` |
| 92 | Available models: Duck, Fox, Avocado, BrainStem, CesiumMan, DamagedHelmet, FlightHelmet, Lantern, Suzanne, WaterBottle, etc. |
| 93 | |
| 94 | ### Step 3: Present candidates to user for confirmation |
| 95 | |
| 96 | Show the user 2-3 model options with: |
| 97 | |
| 98 | - Model name and source |
| 99 | - Preview link (Sketchfab URL or description) |
| 100 | - License info |
| 101 | - Why this model fits their topic |
| 102 | |
| 103 | Example response: |
| 104 | |
| 105 | ``` |
| 106 | Based on your topic "fox mascot", here are some models I found: |
| 107 | |
| 108 | 1. Fox (Khronos sample) |
| 109 | Direct download, guaranteed compatible |
| 110 | Why: clean fox model, good for mascot/character decks |
| 111 | |
| 112 | 2. Low Poly Fox (Poly Pizza) |
| 113 | URL: https://poly.pizza/m/xxx |
| 114 | License: CC0 (completely free) |
| 115 | Why: low-poly style, goo |