-
Notifications
You must be signed in to change notification settings - Fork 192
feat(morph-ppt-3d): add Phase 6 user iteration with stable ID addressing #58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -8,6 +8,8 @@ description: 3D Morph PPT — extends morph-ppt with GLB model insertion, cinema | |||||||||||
| 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. | ||||||||||||
|
|
||||||||||||
| **Minimum officecli version:** `1.0.39` (3D bounding box auto-computation fix). Recommended: `1.0.43+` for stable name-based addressing in Phase 6 user adjustments. | ||||||||||||
|
|
||||||||||||
| --- | ||||||||||||
|
|
||||||||||||
| ## Use when | ||||||||||||
|
|
@@ -32,18 +34,18 @@ When the user gives a topic but no `.glb` file, **proactively help them find a m | |||||||||||
|
|
||||||||||||
| 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 | | ||||||||||||
| | Topic type | Model suggestion | Example | | ||||||||||||
| | ------------------ | ----------------------------------- | ---------------------------------------------------- | | ||||||||||||
| | Product/brand | The actual product or a similar one | "咖啡品牌" → coffee cup, coffee machine, coffee bean | | ||||||||||||
| | Animal/character | The animal or mascot | "柴犬介绍" → shiba inu dog model | | ||||||||||||
| | Architecture/space | Building, room, or structure | "新办公室" → office building, interior | | ||||||||||||
| | Vehicle/transport | The vehicle itself | "电动车发布" → car, motorcycle, bicycle | | ||||||||||||
| | Food/cooking | The dish or ingredient | "日料介绍" → sushi platter, ramen bowl | | ||||||||||||
| | Tech/gadget | The device | "新手机发布" → phone, tablet, laptop | | ||||||||||||
| | Nature/science | The subject | "太阳系" → planet, sun, earth | | ||||||||||||
| | Abstract concept | A symbolic object | "团队合作" → 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:" | ||||||||||||
| Tell the user: "你的主题是 [X],建议用 [具体模型描述] 的 3D 模型。我推荐几个免费下载来源:" | ||||||||||||
|
|
||||||||||||
| ### Step 2: Search for models (agent-driven) | ||||||||||||
|
|
||||||||||||
|
|
@@ -55,7 +57,7 @@ Tell the user: "Your topic is [X]. I suggest using a 3D model of [description]. | |||||||||||
|
|
||||||||||||
| ``` | ||||||||||||
| Search: "[topic keyword] 3d model glb free download" | ||||||||||||
| Example: "fox 3d model glb free download" | ||||||||||||
| Example: "shiba dog 3d model glb free download" | ||||||||||||
| ``` | ||||||||||||
|
|
||||||||||||
| 2. **Sketchfab API** (no auth needed for search): | ||||||||||||
|
|
@@ -99,23 +101,23 @@ Show the user 2-3 model options with: | |||||||||||
| 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 | ||||||||||||
| 1. 🐕 Shiba Inu (Sketchfab) | ||||||||||||
| 链接:https://sketchfab.com/3d-models/shiba-xxx | ||||||||||||
| 授权:CC BY 4.0(免费可商用) | ||||||||||||
| 推荐理由:高质量柴犬模型,表情可爱 | ||||||||||||
|
|
||||||||||||
| 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 | ||||||||||||
| 2. 🐶 Low Poly Dog (Poly Pizza) | ||||||||||||
| 链接:https://poly.pizza/m/xxx | ||||||||||||
| 授权:CC0(完全免费) | ||||||||||||
| 推荐理由:低多边形风格,适合简洁设计 | ||||||||||||
|
|
||||||||||||
| 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 | ||||||||||||
| 3. 🦊 Fox (Khronos 官方样例) | ||||||||||||
| 可直接下载,保证兼容 | ||||||||||||
| 推荐理由:狐狸和柴犬外形相似,作为备选 | ||||||||||||
|
|
||||||||||||
| Which one do you want? I'll download it and start building. | ||||||||||||
| 你选哪个?确认后我直接下载开始做。 | ||||||||||||
| ``` | ||||||||||||
|
|
||||||||||||
| **Wait for user confirmation before downloading.** Do not download without asking. | ||||||||||||
|
|
@@ -140,69 +142,90 @@ After download, verify: | |||||||||||
|
|
||||||||||||
| 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?" | ||||||||||||
| > "这个模型需要在 Sketchfab 登录后下载。你可以去页面下载 .glb 文件,然后上传给我。或者我用 Khronos 官方样例先做一版演示?" | ||||||||||||
|
|
||||||||||||
| ### Step 5: When user says "anything" / "you decide" / "just make a demo" | ||||||||||||
| ### Step 5: When user says "随便" / "你定" / "先做个演示" | ||||||||||||
|
|
||||||||||||
| **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: | ||||||||||||
| > 好的!模型我来搞定,但先确认一下你的 PPT 主题方向,这样我找的模型才能配合内容: | ||||||||||||
| > | ||||||||||||
| > 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 | ||||||||||||
| > 1. 🎮 科技/产品 — 耳机、手机、机器人... | ||||||||||||
| > 2. 🐾 动物/角色 — 可爱宠物、卡通人物... | ||||||||||||
| > 3. 🏗️ 建筑/空间 — 房屋、室内、城市... | ||||||||||||
| > 4. 🍕 食物/生活 — 美食、日用品... | ||||||||||||
| > 5. 🚀 其他 — 告诉我你的想法 | ||||||||||||
| > | ||||||||||||
| > Pick a direction, or just give me a topic keyword. | ||||||||||||
| > 选一个方向,或者直接说个主题词也行。 | ||||||||||||
|
|
||||||||||||
| After user confirms a direction, THEN search and recommend models. | ||||||||||||
|
|
||||||||||||
| Only if user explicitly says "真的随便" / "什么都行" / insists on no preference, use a built-in model: | ||||||||||||
|
|
||||||||||||
| **Built-in models** (bundled with the skill, no download needed): | ||||||||||||
|
|
||||||||||||
| | Model | Path | Best for | | ||||||||||||
| | ---------------- | ------------------ | ----------------------- | | ||||||||||||
| | Shiba Inu (柴犬) | `models/shiba.glb` | 可爱/宠物/品牌/通用演示 | | ||||||||||||
|
|
||||||||||||
| ```bash | ||||||||||||
| # Copy built-in model to working directory | ||||||||||||
| # The model is bundled at: skills/morph-ppt-3d/models/shiba.glb (relative to officecli repo root) | ||||||||||||
| cp "$(dirname "$0")/models/shiba.glb" ./model.glb 2>/dev/null || \ | ||||||||||||
|
Comment on lines
+165
to
+174
|
||||||||||||
| # The model is bundled at: skills/morph-ppt-3d/models/shiba.glb (relative to officecli repo root) | |
| cp "$(dirname "$0")/models/shiba.glb" ./model.glb 2>/dev/null || \ | |
| # Run from the officecli repo root; the bundled model is at: | |
| # skills/morph-ppt-3d/models/shiba.glb | |
| cp "skills/morph-ppt-3d/models/shiba.glb" ./model.glb 2>/dev/null || \ |
Copilot
AI
Apr 14, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/slide[3]/model3d[@name="!!model-hero"] addressing is not supported by the current PPT path resolver: ResolveIdPath only resolves @name/@id for shape/picture/table/chart/etc., and Set only accepts /slide[N]/model3d[M] (numeric index). As written, these Phase 6 commands will error with “Unknown element type 'model3d' for @name= addressing”. Either change the documentation to use index-based /model3d[1] (given the ‘exactly one model3d per slide’ rule), or add first-class model3d[@name=...] support in the CLI before documenting it here.
Copilot
AI
Apr 14, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This line states the fixed name !!model-hero is a “Morph requirement”, but Morph only requires consistent names across adjacent slides—not a specific name. Suggest rephrasing to clarify this is a convention of this skill/template (and, separately, note the current CLI limitation that prevents selecting model3d by @name).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The version requirements are inconsistent: the header recommends officecli
1.0.43+for stable name-based addressing, but Phase 6 labels it asofficecli 1.0.33+. Please align these (and ensure the stated minimum/recommended versions match the actual feature availability).