- name
- morph-ppt-3d
- description
- 3D Morph PPT — extends morph-ppt with GLB model insertion, cinematographic camera, model-content layout, and enriched visual design system.
# 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 (<=12pt), short sublabels (<=14pt, max 5 words), footnotes.
**H6 — Dark background contrast:**
When slide background brightness < 30% (e.g. `1E2761`, `36454F`, `000000`), ALL body text, card content, chart labels, and icon fills MUST use white (`FFFFFF`) or near-white (brightness > 80%). Never use mid-gray or muted colors as body text on dark backgrounds.
**H7 — Speaker notes required:**
GitHubで見る