summer-engine 2.8.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +27 -7
- package/.claude-plugin/plugin.json +99 -83
- package/.codex-plugin/plugin.json +112 -82
- package/.cursor-plugin/plugin.json +119 -83
- package/.factory-plugin/plugin.json +100 -3
- package/.mcp.json +6 -1
- package/.opencode/INSTALL.md +7 -4
- package/.opencode/plugins/summer.js +31 -18
- package/AGENTS.md +107 -34
- package/CHANGELOG.md +134 -41
- package/CLAUDE.md +4 -2
- package/GEMINI.md +7 -53
- package/NOTICE +31 -0
- package/README.md +159 -391
- package/assets/api-docs.json.gz +0 -0
- package/assets/autopilot/README.md +20 -6
- package/assets/autopilot/autopilot.gd +80 -26
- package/assets/autopilot/run.sh +132 -7
- package/assets/navigation/web-routes.json +719 -0
- package/commands/gameskill.md +10 -108
- package/commands/summer.md +72 -4
- package/dist/bin/summer.js +6 -87
- package/dist/cli/banner.d.ts +1 -0
- package/dist/cli/banner.js +33 -0
- package/dist/{commands → cli/commands}/config.js +1 -1
- package/dist/cli/commands/create.d.ts +30 -0
- package/dist/cli/commands/create.js +212 -0
- package/dist/{commands → cli/commands}/debug.js +2 -2
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.js +18 -0
- package/dist/cli/commands/events.d.ts +57 -0
- package/dist/cli/commands/events.js +158 -0
- package/dist/cli/commands/install.d.ts +50 -0
- package/dist/cli/commands/install.js +447 -0
- package/dist/cli/commands/list.js +72 -0
- package/dist/{commands → cli/commands}/login.js +33 -17
- package/dist/{commands → cli/commands}/logout.d.ts +1 -0
- package/dist/cli/commands/logout.js +19 -0
- package/dist/{commands → cli/commands}/memory.d.ts +1 -8
- package/dist/{commands → cli/commands}/memory.js +20 -11
- package/dist/cli/commands/open.d.ts +45 -0
- package/dist/cli/commands/open.js +216 -0
- package/dist/{commands → cli/commands}/plan.js +2 -2
- package/dist/{commands → cli/commands}/publish.js +1 -1
- package/dist/{commands → cli/commands}/releases.js +1 -1
- package/dist/cli/commands/run.d.ts +19 -0
- package/dist/cli/commands/run.js +255 -0
- package/dist/{commands → cli/commands}/setup.js +43 -89
- package/dist/{commands → cli/commands}/skills.js +85 -222
- package/dist/{commands → cli/commands}/status.d.ts +1 -0
- package/dist/cli/commands/status.js +62 -0
- package/dist/cli/commands/tool.d.ts +11 -0
- package/dist/cli/commands/tool.js +121 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.js +89 -0
- package/dist/cli/root-action.d.ts +7 -0
- package/dist/cli/root-action.js +15 -0
- package/dist/{lib → core}/api-client.d.ts +106 -15
- package/dist/{lib → core}/api-client.js +267 -75
- package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
- package/dist/{lib → core}/async-op-lifecycle.js +3 -4
- package/dist/{lib → core}/auth.d.ts +14 -6
- package/dist/{lib → core}/auth.js +56 -40
- package/dist/core/capabilities/agent-playbook.d.ts +20 -0
- package/dist/core/capabilities/agent-playbook.js +218 -0
- package/dist/core/capabilities/api-docs.d.ts +36 -0
- package/dist/core/capabilities/api-docs.js +118 -0
- package/dist/core/capabilities/asset-import.d.ts +49 -0
- package/dist/core/capabilities/asset-import.js +134 -0
- package/dist/core/capabilities/camera-view.d.ts +98 -0
- package/dist/core/capabilities/camera-view.js +222 -0
- package/dist/core/capabilities/capture.d.ts +63 -0
- package/dist/core/capabilities/capture.js +67 -0
- package/dist/core/capabilities/console-read.d.ts +17 -0
- package/dist/core/capabilities/console-read.js +21 -0
- package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
- package/dist/{lib → core/capabilities}/creator.js +14 -33
- package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
- package/dist/{lib → core/capabilities}/debug-report.js +12 -31
- package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
- package/dist/{commands → core/capabilities}/doctor.js +47 -73
- package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
- package/dist/core/capabilities/engine-fallbacks.js +36 -0
- package/dist/core/capabilities/engine-ops.d.ts +33 -0
- package/dist/core/capabilities/engine-ops.js +145 -0
- package/dist/core/capabilities/engine-receipt.d.ts +53 -0
- package/dist/core/capabilities/engine-receipt.js +134 -0
- package/dist/core/capabilities/events.d.ts +200 -0
- package/dist/core/capabilities/events.js +383 -0
- package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
- package/dist/core/capabilities/fabricate-mesh.js +165 -0
- package/dist/core/capabilities/frame-quality.d.ts +71 -0
- package/dist/core/capabilities/frame-quality.js +449 -0
- package/dist/core/capabilities/game-task-plan.d.ts +66 -0
- package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
- package/dist/core/capabilities/hdri-import.d.ts +90 -0
- package/dist/core/capabilities/hdri-import.js +250 -0
- package/dist/core/capabilities/image-generation.d.ts +24 -0
- package/dist/core/capabilities/image-generation.js +22 -0
- package/dist/core/capabilities/navigation/open.d.ts +156 -0
- package/dist/core/capabilities/navigation/open.js +567 -0
- package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
- package/dist/core/capabilities/navigation/render-product-map.js +84 -0
- package/dist/core/capabilities/navigation/targets.d.ts +87 -0
- package/dist/core/capabilities/navigation/targets.js +250 -0
- package/dist/core/capabilities/play-determinism.d.ts +35 -0
- package/dist/core/capabilities/play-determinism.js +86 -0
- package/dist/core/capabilities/project-context.d.ts +114 -0
- package/dist/core/capabilities/project-context.js +249 -0
- package/dist/core/capabilities/runtime-control.d.ts +540 -0
- package/dist/core/capabilities/runtime-control.js +1011 -0
- package/dist/core/capabilities/scene-kind.d.ts +19 -0
- package/dist/core/capabilities/scene-kind.js +137 -0
- package/dist/core/capabilities/scene-script.d.ts +38 -0
- package/dist/core/capabilities/scene-script.js +45 -0
- package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
- package/dist/core/capabilities/tool-dispatch.js +1490 -0
- package/dist/core/capabilities/ui-control.d.ts +179 -0
- package/dist/core/capabilities/ui-control.js +423 -0
- package/dist/core/capabilities/variant-types.d.ts +22 -0
- package/dist/core/capabilities/variant-types.js +101 -0
- package/dist/core/capability-skew.d.ts +205 -0
- package/dist/core/capability-skew.js +386 -0
- package/dist/{lib → core}/config.d.ts +11 -1
- package/dist/{lib → core}/config.js +13 -2
- package/dist/core/embeddings.d.ts +78 -0
- package/dist/core/embeddings.js +166 -0
- package/dist/core/engine-install.d.ts +105 -0
- package/dist/core/engine-install.js +190 -0
- package/dist/core/engine.d.ts +94 -0
- package/dist/{lib → core}/engine.js +74 -28
- package/dist/core/feedback/client.d.ts +88 -0
- package/dist/core/feedback/client.js +182 -0
- package/dist/{lib → core}/format.d.ts +0 -1
- package/dist/{lib → core}/format.js +1 -1
- package/dist/core/headless/connection.d.ts +86 -0
- package/dist/core/headless/connection.js +97 -0
- package/dist/core/headless/editor-connection.d.ts +26 -0
- package/dist/core/headless/editor-connection.js +81 -0
- package/dist/core/headless/mcp-routing.d.ts +38 -0
- package/dist/core/headless/mcp-routing.js +83 -0
- package/dist/core/headless/registry.d.ts +91 -0
- package/dist/core/headless/registry.js +226 -0
- package/dist/core/headless/resolve.d.ts +46 -0
- package/dist/core/headless/resolve.js +75 -0
- package/dist/core/headless/spawn.d.ts +46 -0
- package/dist/core/headless/spawn.js +205 -0
- package/dist/core/headless/worker-connection.d.ts +96 -0
- package/dist/core/headless/worker-connection.js +353 -0
- package/dist/core/headless/worker-engine-client.d.ts +58 -0
- package/dist/core/headless/worker-engine-client.js +246 -0
- package/dist/core/launch-posture.d.ts +170 -0
- package/dist/core/launch-posture.js +317 -0
- package/dist/core/library-read.d.ts +73 -0
- package/dist/core/library-read.js +279 -0
- package/dist/core/library-search.d.ts +143 -0
- package/dist/core/library-search.js +301 -0
- package/dist/{lib → core}/log-filters.js +4 -2
- package/dist/{lib → core}/mcp-log.js +2 -17
- package/dist/core/package-root.d.ts +9 -0
- package/dist/core/package-root.js +11 -0
- package/dist/core/redact.d.ts +20 -0
- package/dist/core/redact.js +64 -0
- package/dist/core/registry-search.d.ts +167 -0
- package/dist/core/registry-search.js +358 -0
- package/dist/core/skills-registry.d.ts +47 -0
- package/dist/core/skills-registry.js +83 -0
- package/dist/{lib → core}/store.js +11 -7
- package/dist/{lib → core}/summer-compatibility.js +3 -3
- package/dist/{lib → core}/telemetry.js +5 -2
- package/dist/core/templates.d.ts +98 -0
- package/dist/core/templates.js +241 -0
- package/dist/core/tool-errors.d.ts +30 -0
- package/dist/core/tool-errors.js +40 -0
- package/dist/core/trajectory.d.ts +80 -0
- package/dist/core/trajectory.js +307 -0
- package/dist/core/util/http.d.ts +13 -0
- package/dist/core/util/http.js +28 -0
- package/dist/core/util/json.d.ts +12 -0
- package/dist/core/util/json.js +21 -0
- package/dist/core/util/process.d.ts +3 -0
- package/dist/core/util/process.js +13 -0
- package/dist/core/util/sleep.d.ts +1 -0
- package/dist/core/util/sleep.js +3 -0
- package/dist/core/version.d.ts +3 -0
- package/dist/core/version.js +5 -0
- package/dist/{lib → installer}/agent-config.d.ts +20 -1
- package/dist/{lib → installer}/agent-config.js +148 -23
- package/dist/installer/legacy-skills.d.ts +26 -0
- package/dist/installer/legacy-skills.js +53 -0
- package/dist/installer/setup.d.ts +76 -0
- package/dist/installer/setup.js +146 -0
- package/dist/installer/skill-locations.d.ts +45 -0
- package/dist/installer/skill-locations.js +170 -0
- package/dist/installer/version-check.d.ts +174 -0
- package/dist/{lib → installer}/version-check.js +173 -42
- package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
- package/dist/{commands/mcp.js → mcp/command.js} +18 -6
- package/dist/mcp/server.d.ts +23 -3
- package/dist/mcp/server.js +122 -28
- package/dist/mcp/tools/asset-tools.js +62 -142
- package/dist/mcp/tools/creator-tools.js +5 -23
- package/dist/mcp/tools/debug-tools.js +61 -18
- package/dist/mcp/tools/event-tools.d.ts +14 -0
- package/dist/mcp/tools/event-tools.js +41 -0
- package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
- package/dist/mcp/tools/fabricate-tools.js +28 -0
- package/dist/mcp/tools/feedback-tools.d.ts +77 -0
- package/dist/mcp/tools/feedback-tools.js +88 -0
- package/dist/mcp/tools/file-tools.js +6 -53
- package/dist/mcp/tools/generate-tools.js +37 -63
- package/dist/mcp/tools/library-tools.d.ts +11 -0
- package/dist/mcp/tools/library-tools.js +42 -0
- package/dist/mcp/tools/navigation-tools.d.ts +7 -0
- package/dist/mcp/tools/navigation-tools.js +37 -0
- package/dist/mcp/tools/perception-tools.d.ts +20 -0
- package/dist/mcp/tools/perception-tools.js +146 -0
- package/dist/mcp/tools/project-tools.d.ts +14 -0
- package/dist/mcp/tools/project-tools.js +72 -281
- package/dist/mcp/tools/runtime-tools.d.ts +2 -0
- package/dist/mcp/tools/runtime-tools.js +92 -0
- package/dist/mcp/tools/scene-tools.d.ts +3 -0
- package/dist/mcp/tools/scene-tools.js +68 -119
- package/dist/mcp/tools/script-tools.d.ts +3 -0
- package/dist/mcp/tools/script-tools.js +118 -0
- package/dist/mcp/tools/spatial-tools.d.ts +2 -0
- package/dist/mcp/tools/spatial-tools.js +485 -0
- package/dist/mcp/tools/text-json.d.ts +8 -0
- package/dist/mcp/tools/text-json.js +12 -0
- package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
- package/dist/mcp/tools/ui-tools.js +82 -0
- package/dist/mcp/tools/visual-tools.d.ts +2 -7
- package/dist/mcp/tools/visual-tools.js +383 -101
- package/dist/mcp/tools/with-engine.d.ts +9 -15
- package/dist/mcp/tools/with-engine.js +60 -96
- package/dist/project-memory/project-manifest.d.ts +36 -0
- package/dist/project-memory/project-manifest.js +50 -0
- package/dist/project-memory/project-memory.d.ts +57 -0
- package/dist/{lib → project-memory}/project-memory.js +46 -0
- package/gemini-extension.json +103 -2
- package/hooks/hooks-cursor.json +2 -2
- package/hooks/hooks.json +2 -1
- package/hooks/pre-commit-doctor.sh +45 -39
- package/hooks/run-hook.cmd +30 -23
- package/hooks/run-hook.sh +20 -0
- package/hooks/session-start.sh +18 -7
- package/integrations/README.md +70 -0
- package/integrations/claude/README.md +19 -0
- package/integrations/claude/manifest-target.json +16 -0
- package/integrations/cline/README.md +13 -0
- package/integrations/cline/manifest-target.json +3 -0
- package/integrations/codex/README.md +15 -0
- package/integrations/codex/manifest-target.json +5 -0
- package/integrations/cursor/README.md +16 -0
- package/integrations/cursor/manifest-target.json +5 -0
- package/integrations/factory/README.md +26 -0
- package/integrations/factory/manifest-target.json +5 -0
- package/integrations/gemini/README.md +26 -0
- package/integrations/gemini/manifest-target.json +5 -0
- package/integrations/github-copilot/README.md +12 -0
- package/integrations/github-copilot/manifest-target.json +3 -0
- package/integrations/kilo-code/README.md +16 -0
- package/integrations/kilo-code/manifest-target.json +3 -0
- package/integrations/lm-studio/README.md +12 -0
- package/integrations/lm-studio/manifest-target.json +3 -0
- package/integrations/opencode/README.md +15 -0
- package/integrations/opencode/manifest-target.json +3 -0
- package/integrations/roo-code/README.md +13 -0
- package/integrations/roo-code/manifest-target.json +3 -0
- package/integrations/vscode-copilot/README.md +12 -0
- package/integrations/vscode-copilot/manifest-target.json +3 -0
- package/integrations/windsurf/README.md +13 -0
- package/integrations/windsurf/manifest-target.json +3 -0
- package/library/references/collaborative-protocol/resource.yaml +24 -0
- package/library/references/gd-style/resource.yaml +24 -0
- package/{references → library/references/godot-version}/godot-version.md +6 -6
- package/library/references/godot-version/resource.yaml +22 -0
- package/library/references/headless-routing/headless-routing.md +46 -0
- package/library/references/headless-routing/resource.yaml +24 -0
- package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
- package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
- package/library/references/mcp-tools-reference/resource.yaml +17 -0
- package/library/references/product-map/product-map.md +103 -0
- package/library/references/product-map/resource.yaml +33 -0
- package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
- package/library/references/public-surface-language/resource.yaml +17 -0
- package/library/references/summer-folder/resource.yaml +20 -0
- package/{references → library/references/summer-folder}/summer-folder.md +22 -21
- package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
- package/library/skills/3d-lighting/resource.yaml +27 -0
- package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
- package/library/skills/adaptive-music/resource.yaml +28 -0
- package/library/skills/agent-playtesting/SKILL.md +148 -0
- package/library/skills/agent-playtesting/resource.yaml +52 -0
- package/library/skills/ambient-bed/resource.yaml +24 -0
- package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
- package/library/skills/animated-loop/resource.yaml +27 -0
- package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
- package/library/skills/animation-tree/resource.yaml +33 -0
- package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
- package/library/skills/art-direction/resource.yaml +29 -0
- package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
- package/library/skills/asset-strategy/resource.yaml +63 -0
- package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
- package/library/skills/audio-direction/resource.yaml +32 -0
- package/library/skills/auto-fire-targeting/resource.yaml +22 -0
- package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
- package/library/skills/brainstorm-game/resource.yaml +30 -0
- package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
- package/library/skills/brainstorming/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
- package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
- package/library/skills/browse-templates/resource.yaml +23 -0
- package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
- package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
- package/library/skills/character-animation-wiring/SKILL.md +249 -0
- package/library/skills/character-animation-wiring/resource.yaml +39 -0
- package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
- package/library/skills/character-model/resource.yaml +36 -0
- package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
- package/library/skills/character-portrait/resource.yaml +30 -0
- package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
- package/library/skills/cinematic-cutscene/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
- package/library/skills/concept-art/resource.yaml +34 -0
- package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
- package/library/skills/create-asset-sheet/resource.yaml +33 -0
- package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
- package/library/skills/debug/resource.yaml +31 -0
- package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
- package/library/skills/debugging-game-feel/resource.yaml +25 -0
- package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
- package/library/skills/design-level/resource.yaml +31 -0
- package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
- package/library/skills/design-mechanic/resource.yaml +31 -0
- package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
- package/library/skills/design-npc/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
- package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
- package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
- package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
- package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
- package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
- package/library/skills/environment-kit/resource.yaml +29 -0
- package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
- package/library/skills/export-and-ship/resource.yaml +32 -0
- package/library/skills/fabricating-assets/SKILL.md +195 -0
- package/library/skills/fabricating-assets/resource.yaml +52 -0
- package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
- package/library/skills/facial-and-lipsync/resource.yaml +36 -0
- package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
- package/library/skills/fps-controller/resource.yaml +29 -0
- package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
- package/library/skills/game-feel/resource.yaml +27 -0
- package/library/skills/gameskill/SKILL.md +64 -0
- package/library/skills/gameskill/resource.yaml +22 -0
- package/library/skills/gdscript-patterns/resource.yaml +23 -0
- package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
- package/library/skills/generate-motion/resource.yaml +34 -0
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
- package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
- package/library/skills/headless-scripting/resource.yaml +26 -0
- package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +1 -1
- package/library/skills/host-authoritative-state/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
- package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
- package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
- package/library/skills/investigating-bugs/resource.yaml +24 -0
- package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +23 -23
- package/library/skills/make-game/resource.yaml +35 -0
- package/library/skills/music-track/resource.yaml +28 -0
- package/library/skills/navigate-summer/SKILL.md +61 -0
- package/library/skills/navigate-summer/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
- package/library/skills/new-project/resource.yaml +28 -0
- package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
- package/library/skills/organic-model/resource.yaml +32 -0
- package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
- package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
- package/library/skills/pixel-art/resource.yaml +31 -0
- package/library/skills/play/resource.yaml +26 -0
- package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
- package/library/skills/playtesting-a-feature/resource.yaml +31 -0
- package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
- package/library/skills/procedural-animation/resource.yaml +33 -0
- package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
- package/library/skills/prop-model/resource.yaml +33 -0
- package/library/skills/psx-retro-rendering/SKILL.md +416 -0
- package/library/skills/psx-retro-rendering/resource.yaml +36 -0
- package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
- package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
- package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
- package/library/skills/remote-deploy/resource.yaml +23 -0
- package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
- package/library/skills/retarget/resource.yaml +33 -0
- package/library/skills/running-in-the-cloud/SKILL.md +103 -0
- package/library/skills/running-in-the-cloud/resource.yaml +33 -0
- package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +9 -1
- package/library/skills/scene-composition/resource.yaml +27 -0
- package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
- package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
- package/library/skills/scene-scripting/SKILL.md +764 -0
- package/library/skills/scene-scripting/resource.yaml +58 -0
- package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
- package/library/skills/scene-to-level/resource.yaml +33 -0
- package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +1 -1
- package/library/skills/setup-multiplayer/resource.yaml +28 -0
- package/library/skills/skill-create/SKILL.md +138 -0
- package/library/skills/skill-create/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
- package/library/skills/skill-improve/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
- package/library/skills/skill-test/resource.yaml +26 -0
- package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
- package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
- package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
- package/library/skills/skybox-panorama/resource.yaml +28 -0
- package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
- package/library/skills/sound-effect/resource.yaml +27 -0
- package/library/skills/spatial-placement/SKILL.md +74 -0
- package/library/skills/spatial-placement/resource.yaml +42 -0
- package/library/skills/spatial-placement/tests/spec.md +65 -0
- package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
- package/library/skills/sprite-sheet/resource.yaml +32 -0
- package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
- package/library/skills/tileable-texture/resource.yaml +31 -0
- package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
- package/library/skills/trailer-shot/resource.yaml +27 -0
- package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
- package/library/skills/tune-performance/resource.yaml +31 -0
- package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +1 -1
- package/library/skills/ui-basics/resource.yaml +25 -0
- package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
- package/library/skills/ui-graphics/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
- package/library/skills/use-widget-asset/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
- package/library/skills/using-summer/resource.yaml +41 -0
- package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
- package/library/skills/vehicle-model/resource.yaml +34 -0
- package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
- package/library/skills/verification-before-completion/resource.yaml +23 -0
- package/library/skills/verifying-scenes/SKILL.md +98 -0
- package/library/skills/verifying-scenes/resource.yaml +42 -0
- package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
- package/library/skills/vfx-dissolve/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
- package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-fire/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-hit-spark/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-lightning/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-magic-glow/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
- package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
- package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-smoke/resource.yaml +32 -0
- package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-water-ripple/resource.yaml +31 -0
- package/library/skills/voice-line/resource.yaml +27 -0
- package/library/skills/world-building-3d/SKILL.md +105 -0
- package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
- package/library/skills/world-building-3d/resource.yaml +44 -0
- package/library/skills/world-building-3d/tests/spec.md +48 -0
- package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
- package/library/skills/writing-plans/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
- package/library/skills/writing-skills/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
- package/library/templates/2d-brario-platformer/resource.yaml +21 -0
- package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
- package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
- package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
- package/library/templates/2d-platformer/resource.yaml +24 -0
- package/library/templates/2d-rpg/resource.yaml +21 -0
- package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
- package/library/templates/3d-basic/resource.yaml +16 -0
- package/library/templates/3d-city-kit/resource.yaml +24 -0
- package/library/templates/3d-fps-old-school/resource.yaml +21 -0
- package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
- package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
- package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
- package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
- package/library/templates/3d-racing-game/resource.yaml +21 -0
- package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
- package/library/templates/3d-third-person-controller/resource.yaml +21 -0
- package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
- package/library/templates/README.md +94 -0
- package/library/templates/empty/resource.yaml +16 -0
- package/library/tools/add-node/resource.yaml +60 -0
- package/library/tools/align-distribute-3d/resource.yaml +87 -0
- package/library/tools/api-docs/resource.yaml +57 -0
- package/library/tools/batch/resource.yaml +52 -0
- package/library/tools/camera-bookmark/resource.yaml +73 -0
- package/library/tools/check-job/resource.yaml +45 -0
- package/library/tools/clear-console/resource.yaml +40 -0
- package/library/tools/connect-signal/resource.yaml +63 -0
- package/library/tools/create-debug-report/resource.yaml +67 -0
- package/library/tools/create-scene/resource.yaml +59 -0
- package/library/tools/creator-config/resource.yaml +63 -0
- package/library/tools/creator-publish/resource.yaml +73 -0
- package/library/tools/creator-releases/resource.yaml +53 -0
- package/library/tools/fabricate-3d/resource.yaml +108 -0
- package/library/tools/game-control/resource.yaml +84 -0
- package/library/tools/game-input/resource.yaml +159 -0
- package/library/tools/game-probe/resource.yaml +90 -0
- package/library/tools/generate-3d/resource.yaml +112 -0
- package/library/tools/generate-audio/resource.yaml +80 -0
- package/library/tools/generate-image/resource.yaml +62 -0
- package/library/tools/generate-motion/resource.yaml +66 -0
- package/library/tools/generate-video/resource.yaml +66 -0
- package/library/tools/get-agent-playbook/resource.yaml +40 -0
- package/library/tools/get-asset/resource.yaml +42 -0
- package/library/tools/get-asset-download-url/resource.yaml +52 -0
- package/library/tools/get-console/resource.yaml +69 -0
- package/library/tools/get-debugger-errors/resource.yaml +56 -0
- package/library/tools/get-debugger-warnings/resource.yaml +52 -0
- package/library/tools/get-diagnostics/resource.yaml +42 -0
- package/library/tools/get-project-context/resource.yaml +45 -0
- package/library/tools/get-runtime-tree/resource.yaml +62 -0
- package/library/tools/get-scene-tree/resource.yaml +52 -0
- package/library/tools/get-script-errors/resource.yaml +45 -0
- package/library/tools/get-studio-workflow/resource.yaml +43 -0
- package/library/tools/import-asset/resource.yaml +73 -0
- package/library/tools/import-asset-by-id/resource.yaml +56 -0
- package/library/tools/import-from-url/resource.yaml +51 -0
- package/library/tools/import-from-url-batch/resource.yaml +60 -0
- package/library/tools/import-hdri/resource.yaml +69 -0
- package/library/tools/input-map-bind/resource.yaml +52 -0
- package/library/tools/inspect-node/resource.yaml +46 -0
- package/library/tools/inspect-resource/resource.yaml +45 -0
- package/library/tools/inspect-runtime-node/resource.yaml +54 -0
- package/library/tools/instantiate-scene/resource.yaml +62 -0
- package/library/tools/is-running/resource.yaml +40 -0
- package/library/tools/library-feedback/resource.yaml +89 -0
- package/library/tools/list-my-assets/resource.yaml +56 -0
- package/library/tools/navigation-probe/resource.yaml +85 -0
- package/library/tools/open/resource.yaml +80 -0
- package/library/tools/open-main-scene/resource.yaml +40 -0
- package/library/tools/open-scene/resource.yaml +46 -0
- package/library/tools/play/resource.yaml +91 -0
- package/library/tools/project-setting/resource.yaml +53 -0
- package/library/tools/read-file/resource.yaml +47 -0
- package/library/tools/read-library/resource.yaml +67 -0
- package/library/tools/recent-events/resource.yaml +71 -0
- package/library/tools/remove-node/resource.yaml +51 -0
- package/library/tools/replace-node/resource.yaml +57 -0
- package/library/tools/replace-text/resource.yaml +61 -0
- package/library/tools/run-editor-script/resource.yaml +61 -0
- package/library/tools/run-script/resource.yaml +73 -0
- package/library/tools/runtime-animate/resource.yaml +140 -0
- package/library/tools/runtime-call/resource.yaml +74 -0
- package/library/tools/runtime-set/resource.yaml +80 -0
- package/library/tools/runtime-spawn/resource.yaml +95 -0
- package/library/tools/save-scene/resource.yaml +50 -0
- package/library/tools/screenshot/resource.yaml +112 -0
- package/library/tools/search-assets/resource.yaml +67 -0
- package/library/tools/search-library/resource.yaml +81 -0
- package/library/tools/select-node/resource.yaml +48 -0
- package/library/tools/set-prop/resource.yaml +64 -0
- package/library/tools/set-resource-property/resource.yaml +66 -0
- package/library/tools/slice-asset-sheet/resource.yaml +47 -0
- package/library/tools/snap-to-surface/resource.yaml +90 -0
- package/library/tools/snapshot-diff/resource.yaml +58 -0
- package/library/tools/starcast/resource.yaml +120 -0
- package/library/tools/start-game-task/resource.yaml +91 -0
- package/library/tools/stop/resource.yaml +51 -0
- package/library/tools/test-placement/resource.yaml +109 -0
- package/library/tools/ui-actions/resource.yaml +77 -0
- package/library/tools/ui-activate/resource.yaml +88 -0
- package/library/tools/ui-screenshot/resource.yaml +63 -0
- package/library/tools/ui-tree/resource.yaml +69 -0
- package/library/tools/wait-for-event/resource.yaml +84 -0
- package/library/tools/world-snapshot/resource.yaml +60 -0
- package/library/tools/write-file/resource.yaml +54 -0
- package/package.json +22 -16
- package/registry/generated/aliases.json +207 -0
- package/registry/generated/counts.json +12 -0
- package/registry/generated/gemini-extension.json +122 -0
- package/registry/generated/index.json +7709 -0
- package/registry/generated/marketplace.claude.json +44 -0
- package/registry/generated/mcp.json +13 -0
- package/registry/generated/plugin.claude.json +135 -0
- package/registry/generated/plugin.codex.json +144 -0
- package/registry/generated/plugin.cursor.json +134 -0
- package/registry/generated/plugin.factory.json +117 -0
- package/registry/generated/skills-registry.json +851 -0
- package/registry/generated/templates-registry.json +455 -0
- package/registry/schemas/allowed-hosts.json +19 -0
- package/registry/schemas/collection.schema.json +68 -0
- package/registry/schemas/domains.json +96 -0
- package/registry/schemas/example.schema.json +11 -0
- package/registry/schemas/reference.schema.json +10 -0
- package/registry/schemas/resource.schema.json +154 -0
- package/registry/schemas/skill.schema.json +14 -0
- package/registry/schemas/template.schema.json +46 -0
- package/registry/schemas/tool.schema.json +61 -0
- package/_persona/summer/SKILL.md +0 -113
- package/dist/bin/postinstall.d.ts +0 -2
- package/dist/bin/postinstall.js +0 -3
- package/dist/commands/cloud.d.ts +0 -2
- package/dist/commands/cloud.js +0 -80
- package/dist/commands/create.d.ts +0 -3
- package/dist/commands/create.js +0 -171
- package/dist/commands/install.d.ts +0 -19
- package/dist/commands/install.js +0 -194
- package/dist/commands/list.js +0 -67
- package/dist/commands/logout.js +0 -13
- package/dist/commands/logs.d.ts +0 -2
- package/dist/commands/logs.js +0 -19
- package/dist/commands/open.d.ts +0 -2
- package/dist/commands/open.js +0 -32
- package/dist/commands/orchestrator.d.ts +0 -8
- package/dist/commands/orchestrator.js +0 -143
- package/dist/commands/run.d.ts +0 -2
- package/dist/commands/run.js +0 -167
- package/dist/commands/status.js +0 -46
- package/dist/lib/banner.d.ts +0 -4
- package/dist/lib/banner.js +0 -122
- package/dist/lib/cloud/api.d.ts +0 -79
- package/dist/lib/cloud/api.js +0 -107
- package/dist/lib/cloud/apply.d.ts +0 -32
- package/dist/lib/cloud/apply.js +0 -294
- package/dist/lib/cloud/checkpoint.d.ts +0 -26
- package/dist/lib/cloud/checkpoint.js +0 -142
- package/dist/lib/cloud/conflicts.d.ts +0 -55
- package/dist/lib/cloud/conflicts.js +0 -131
- package/dist/lib/cloud/containment.d.ts +0 -8
- package/dist/lib/cloud/containment.js +0 -52
- package/dist/lib/cloud/diff.d.ts +0 -39
- package/dist/lib/cloud/diff.js +0 -138
- package/dist/lib/cloud/engine-bridge.d.ts +0 -34
- package/dist/lib/cloud/engine-bridge.js +0 -139
- package/dist/lib/cloud/hash-cache.d.ts +0 -23
- package/dist/lib/cloud/hash-cache.js +0 -44
- package/dist/lib/cloud/hash.d.ts +0 -10
- package/dist/lib/cloud/hash.js +0 -111
- package/dist/lib/cloud/http.d.ts +0 -17
- package/dist/lib/cloud/http.js +0 -47
- package/dist/lib/cloud/lock-path.d.ts +0 -1
- package/dist/lib/cloud/lock-path.js +0 -5
- package/dist/lib/cloud/lock.d.ts +0 -14
- package/dist/lib/cloud/lock.js +0 -143
- package/dist/lib/cloud/manifest.d.ts +0 -6
- package/dist/lib/cloud/manifest.js +0 -41
- package/dist/lib/cloud/paths.d.ts +0 -20
- package/dist/lib/cloud/paths.js +0 -90
- package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
- package/dist/lib/cloud/project-godot-merge.js +0 -185
- package/dist/lib/cloud/rules.d.ts +0 -39
- package/dist/lib/cloud/rules.js +0 -159
- package/dist/lib/cloud/sync.d.ts +0 -21
- package/dist/lib/cloud/sync.js +0 -518
- package/dist/lib/cloud/transfer.d.ts +0 -23
- package/dist/lib/cloud/transfer.js +0 -184
- package/dist/lib/cloud/types.d.ts +0 -62
- package/dist/lib/cloud/types.js +0 -1
- package/dist/lib/cloud/validate-path.d.ts +0 -23
- package/dist/lib/cloud/validate-path.js +0 -103
- package/dist/lib/engine.d.ts +0 -51
- package/dist/lib/game-task-plan.d.ts +0 -42
- package/dist/lib/project-memory.d.ts +0 -33
- package/dist/lib/public-surface-paths.d.ts +0 -13
- package/dist/lib/public-surface-paths.js +0 -42
- package/dist/lib/remote-templates.d.ts +0 -25
- package/dist/lib/remote-templates.js +0 -86
- package/dist/lib/skills-registry.d.ts +0 -572
- package/dist/lib/skills-registry.js +0 -1061
- package/dist/lib/version-check.d.ts +0 -106
- package/dist/mcp/tools/cloud-tools.js +0 -42
- package/references/mcp-tools-reference.md +0 -199
- package/references/template-registry.md +0 -73
- package/skills/README.md +0 -103
- package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
- package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
- package/skills/workflow/brainstorming/scripts/helper.js +0 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
- package/skills/workflow/brainstorming/visual-companion.md +0 -287
- package/skills/workflow/gameskill/SKILL.md +0 -120
- package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
- package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
- package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
- package/skills/workflow/investigating-bugs/test-academic.md +0 -14
- package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
- package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
- package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
- package/skills/workflow/mcpupdate/SKILL.md +0 -134
- package/skills/workflow/skill-create/SKILL.md +0 -153
- package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
- package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
- package/skills/workflow/writing-skills/render-graphs.js +0 -168
- /package/dist/{commands → cli/commands}/config.d.ts +0 -0
- /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/login.d.ts +0 -0
- /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
- /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
- /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
- /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
- /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
- /package/dist/{lib → core}/log-filters.d.ts +0 -0
- /package/dist/{lib → core}/mcp-log.d.ts +0 -0
- /package/dist/{lib → core}/store.d.ts +0 -0
- /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
- /package/dist/{lib → core}/telemetry.d.ts +0 -0
- /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
- /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
- /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
- /package/{references → library/references/gd-style}/gd-style.md +0 -0
- /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
- /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
- /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
- /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
- /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
- /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
- /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: driving-the-editor-ui
|
|
3
|
+
description: Use when a task is an editor-workflow step a human would do with the mouse — open Project Settings or a dock, switch the 2D/3D/Script main screen, toggle a panel, clear a dialog that is blocking the editor, read what a dock shows — and when deciding whether a request is UI work or scene work. Drives the editor by NAME through summer_ui_actions, reads it as structure through summer_ui_tree, activates the long tail by path through summer_ui_activate, and treats summer_ui_screenshot as the pixels-last fallback. Preview — the ops ship with a follow-up engine build.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Driving the Editor UI
|
|
7
|
+
|
|
8
|
+
## UI work vs scene work — decide first
|
|
9
|
+
|
|
10
|
+
The editor UI is **not** where scene work happens. Nodes, properties, placement, lighting, materials: `scene-scripting` (`summer_run_script`), the scene tools, `summer_world_snapshot` / `summer_snapshot_diff` / `summer_screenshot` (`verifying-scenes`). The Scene dock and the Inspector are *views* of that data; clicking through them to change a property is slower, less reliable, and unverifiable compared with `summer_set_prop`.
|
|
11
|
+
|
|
12
|
+
UI ops are for the steps a human does with the mouse that have no scene-level equivalent:
|
|
13
|
+
|
|
14
|
+
| Ask | Route |
|
|
15
|
+
|---|---|
|
|
16
|
+
| "Open Project Settings" / "open the Import dock" / "toggle the Animation panel" | `summer_ui_actions mode:"invoke"` by name |
|
|
17
|
+
| "Switch to the 3D view" / "go to the Script screen" | `summer_ui_activate path:"main_screen" action:"select_tab" value:"3D"` |
|
|
18
|
+
| "Something is blocking the editor" / tool calls return `modal_open` | the blocking-dialog pattern below |
|
|
19
|
+
| "What does the Inspector show right now?" | `summer_ui_tree root:"dock:inspector"` |
|
|
20
|
+
| "Change the main scene setting" | `summer_project_setting` — a dedicated tool wins over any UI op |
|
|
21
|
+
| "Move the player to (0, 1, 0)" | `summer_set_prop` / `summer_run_script` — scene work, never UI |
|
|
22
|
+
|
|
23
|
+
## The ladder
|
|
24
|
+
|
|
25
|
+
1. **Dedicated tool** (`summer_project_setting`, `summer_open_scene`, `summer_select_node`, `summer_save_scene`, …). If one exists, the UI ops are the wrong layer.
|
|
26
|
+
2. **Named action** — `summer_ui_actions mode:"list" filter:"<word>"` to find the exact `name`, then `mode:"invoke" action_name:"<name>"`. The event takes the same path the shortcut key would, so the editor's own handlers run.
|
|
27
|
+
3. **Tree + activate** — `summer_ui_tree` to find a control's `path`, `summer_ui_activate` to press / toggle / select a tab / set text / set a value through the control's own input path.
|
|
28
|
+
4. **Pixels** — `summer_ui_screenshot`, only to look. There is no coordinate click anywhere in this surface: if a thing is visible it is in the tree, and the tree is what activation takes.
|
|
29
|
+
|
|
30
|
+
Each rung costs more tokens and is less deterministic than the one above it. Do not start at 3 because it feels general.
|
|
31
|
+
|
|
32
|
+
## The blocking-dialog pattern
|
|
33
|
+
|
|
34
|
+
An exclusive dialog (Project Settings, a confirmation, an unsaved-changes prompt) makes the root window drop input; every mutating UI op then answers `modal_open` with the `blocking_dialog`, and other editor operations may stall as `still_queued`.
|
|
35
|
+
|
|
36
|
+
1. `summer_ui_tree root:"dialogs"` → read `blocking`, `blocking_dialog {title, path, class}`, and the dialog's `text` and `buttons` (`kind: ok | cancel | custom`, `enabled`).
|
|
37
|
+
2. Decide with the user in view. `button:"cancel"` is the safe close and the default; `"ok"` or a custom button text confirms whatever the dialog asks — only when that is what the user wants.
|
|
38
|
+
3. `summer_ui_activate action:"dismiss_dialog" path:"<blocking_dialog.path>"` (or `title:"<title>"`).
|
|
39
|
+
4. Read back: the result's `visible_after` must be `false`, and `summer_ui_tree root:"dialogs"` must show `blocking:false`. `visible_after:true` means the dialog re-validated and stayed up — read it again with `root:"dialog:<title>"` instead of retrying blindly.
|
|
40
|
+
|
|
41
|
+
A dialog the human would have to click through, you also have to click through — nothing here bypasses one.
|
|
42
|
+
|
|
43
|
+
## Main-screen switching
|
|
44
|
+
|
|
45
|
+
`spatial_editor/*` actions need the 3D screen; `canvas_item_editor/*` need 2D; the script editor's actions need Script. A `not_handled` result (`invoked:true, handled:false`) usually means the wrong screen is up.
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
summer_ui_activate path:"main_screen" action:"select_tab" value:"3D"
|
|
49
|
+
→ state.current_tab / state.text read back the selected editor
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`value` is the editor name (`2D`, `3D`, `Script`, `Game`, `AssetLib`, case-insensitive) or `index`. `not_selected` means the switch was refused (scene change in progress, hidden editor button) — wait, retry, read back.
|
|
53
|
+
|
|
54
|
+
## Reading a dock's state
|
|
55
|
+
|
|
56
|
+
`summer_ui_tree root:"dock:<title|id>"` (`file_system`, `scene_tree`, `inspector`, or any dock title) returns the dock's controls with `text`, `tooltip` (icon-only buttons are named by it), `checked`, `enabled`, `tabs` + `current_tab`, `value/min/max`, `item_count/selected`. Go deeper on one subtree with `root:"path:<path>"` and a larger `depth`/`limit`; `children_truncated:true` plus the real `child_count` tells you where a cut happened.
|
|
57
|
+
|
|
58
|
+
Paths and auto-names (`@Panel@123`) are stable within a session only. Re-read the tree before activating; never persist a path across sessions.
|
|
59
|
+
|
|
60
|
+
## The deny-list
|
|
61
|
+
|
|
62
|
+
The engine refuses, with `denied_action`, anything that ends or replaces the session or deletes without the human's confirmation: `editor/file_quit`, `editor/quit_to_project_list`, `editor/reload_current_project`, `scene_tree/delete_no_confirm`, every `project_manager/*` name — and buttons or menu items whose label quits, reloads the project, or closes the editor. `summer_ui_actions mode:"list"` marks them `denied:true`. Do not attempt them and do not route around them by path; tell the user what was asked and leave that click to them. File-dialog paths that leave the project (`..`, `user://`, `~`, absolute paths outside `res://`) are refused as `denied_path`.
|
|
63
|
+
|
|
64
|
+
## Verification — read back, never assume
|
|
65
|
+
|
|
66
|
+
- An invoke succeeded when its **effect** is observable: a dialog appears in `root:"dialogs"`, a dock's `summer_ui_tree` changes, or — for anything scene-level — `summer_snapshot_diff` / `summer_get_scene_tree` show it. `invoked:true` alone proves the event was dispatched, not that anything happened.
|
|
67
|
+
- `summer_ui_activate` returns `state` **after** the action from the same node (`checked`, `current_tab`, `text`, `value`, `freed:true` if the action freed it). Cite it.
|
|
68
|
+
- A screenshot proves appearance only. A control's exact state is in the tree.
|
|
69
|
+
- `engine_lacks_op` means the build predates these ops: nothing was sent. Use the dedicated tools for the outcome, or ask the user to click, and say so.
|
|
70
|
+
|
|
71
|
+
## Failure taxonomy — what to do
|
|
72
|
+
|
|
73
|
+
| `failure_reason` | Means | Next |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| `unknown_action` (+`close_matches`) | no such name | pick one of the matches, or `mode:"list"` with a filter |
|
|
76
|
+
| `denied_action` | safety list | stop; hand the click to the user |
|
|
77
|
+
| `modal_open` (+`blocking_dialog`) | exclusive dialog eats input | blocking-dialog pattern |
|
|
78
|
+
| `not_handled` | dispatched, no receiver | switch main screen / reveal the owning panel, retry |
|
|
79
|
+
| `not_visible` / `disabled` / `obscured` | control exists but cannot take the event | reveal it, satisfy the precondition, or dismiss what covers it |
|
|
80
|
+
| `unsupported_control` (+`supported_actions`) | class not driven this way | use the listed action, or a named action (MenuBar) |
|
|
81
|
+
| `no_activation_path` | no hover and no focus reached the button | the named action instead |
|
|
82
|
+
| `tab_not_found` / `button_not_found` / `ambiguous_dialog` | wrong or ambiguous name | use the listed `tabs` / `buttons` / `candidates` verbatim |
|
|
83
|
+
| `no_renderer` | headless editor, no pixels | `summer_ui_tree`; pixels need a display |
|
|
84
|
+
|
|
85
|
+
**Related skills:** `scene-scripting` and `verifying-scenes` own the scene loop this skill deliberately stays out of; `verification-before-completion` carries the done-claiming rules; `headless-scripting` is the route when there is no editor UI at all.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
id: skill/driving-the-editor-ui
|
|
2
|
+
kind: skill
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: "Drive the editor UI by name: invoke actions, clear blocking dialogs, switch the main screen, read a dock — and route scene work to the scene tools instead."
|
|
5
|
+
use_when:
|
|
6
|
+
- an editor-workflow step a human would do with the mouse — open the Import dock, switch the 2D/3D/Script main screen, toggle a bottom panel, open an editor dialog by name
|
|
7
|
+
- a dialog or popup is blocking the editor and tool calls come back modal_open — see it (summer_ui_tree root dialogs) and clear it (summer_ui_activate action dismiss_dialog)
|
|
8
|
+
- reading what a dock or dialog currently shows as structure (summer_ui_tree) instead of guessing from a screenshot
|
|
9
|
+
- deciding whether a request is UI work (summer_ui_*) or scene work (summer_run_script, scene tools, perception tools)
|
|
10
|
+
do_not_use_when:
|
|
11
|
+
- building or changing the scene — nodes, properties, placement, lighting go through scene-scripting and the scene tools; the editor's docks are views of that data
|
|
12
|
+
- verifying a visual result in the viewport or the running game — verifying-scenes (summer_screenshot, snapshot diff)
|
|
13
|
+
- quitting or reloading the editor, or deleting without confirmation — denied by the engine; ask the user
|
|
14
|
+
- "the engine build lacks the UI ops (Summer Engine 0.5.66 or newer); older engines return engine_lacks_op — use the dedicated tools or ask the user to click"
|
|
15
|
+
facets:
|
|
16
|
+
lifecycle:
|
|
17
|
+
- build
|
|
18
|
+
domains:
|
|
19
|
+
- editor
|
|
20
|
+
- agent-workflow
|
|
21
|
+
- verification
|
|
22
|
+
modalities:
|
|
23
|
+
- project
|
|
24
|
+
compatibility:
|
|
25
|
+
engine: ">=4.6"
|
|
26
|
+
related:
|
|
27
|
+
tools:
|
|
28
|
+
- tool/ui-actions
|
|
29
|
+
- tool/ui-tree
|
|
30
|
+
- tool/ui-activate
|
|
31
|
+
- tool/ui-screenshot
|
|
32
|
+
- tool/screenshot
|
|
33
|
+
- tool/project-setting
|
|
34
|
+
- tool/open-scene
|
|
35
|
+
- tool/select-node
|
|
36
|
+
- tool/run-script
|
|
37
|
+
- tool/get-project-context
|
|
38
|
+
skills:
|
|
39
|
+
- skill/scene-scripting
|
|
40
|
+
- skill/verifying-scenes
|
|
41
|
+
- skill/verification-before-completion
|
|
42
|
+
- skill/headless-scripting
|
|
43
|
+
source: official
|
|
44
|
+
license: MIT
|
|
45
|
+
status: preview
|
|
46
|
+
recommended: false
|
|
@@ -25,9 +25,9 @@ The backing tool is `summer_generate_3d`, called multiple times. Each call costs
|
|
|
25
25
|
|
|
26
26
|
## When NOT to use
|
|
27
27
|
|
|
28
|
-
- A single hero prop (single chest, single throne) → `
|
|
29
|
-
- Open-world terrain (rolling hills, forests) → use a heightmap + scattered organic models from `
|
|
30
|
-
- Repeating flat surfaces only (just walls and floors, no decorative pieces) → `
|
|
28
|
+
- A single hero prop (single chest, single throne) → `prop-model`.
|
|
29
|
+
- Open-world terrain (rolling hills, forests) → use a heightmap + scattered organic models from `organic-model`.
|
|
30
|
+
- Repeating flat surfaces only (just walls and floors, no decorative pieces) → `asset-strategy` Pipeline 2 (textures + CSG) is cheaper and snaps perfectly to grid.
|
|
31
31
|
- Characters or vehicles in the scene — those are separate skills.
|
|
32
32
|
|
|
33
33
|
## The style anchor pattern
|
|
@@ -144,8 +144,8 @@ Check the AABB. If the wall is 1.85m tall when you asked for 3m, scale it in the
|
|
|
144
144
|
|
|
145
145
|
## Edge cases
|
|
146
146
|
|
|
147
|
-
- **Curved or organic kit (cave, alien hive).** Modular geometry resists snapping. Generate longer pieces (4m walls, transition tiles) and accept some overlap. Or switch to procedural — `
|
|
148
|
-
- **Outdoor kit (cliffs, ruins, forest path).** Use the kit pattern but accept rotation/jitter at placement time. Mesh edges should fade naturally rather than snap cleanly. Pair with `
|
|
147
|
+
- **Curved or organic kit (cave, alien hive).** Modular geometry resists snapping. Generate longer pieces (4m walls, transition tiles) and accept some overlap. Or switch to procedural — `design-level` can scatter cave pieces with rotation jitter.
|
|
148
|
+
- **Outdoor kit (cliffs, ruins, forest path).** Use the kit pattern but accept rotation/jitter at placement time. Mesh edges should fade naturally rather than snap cleanly. Pair with `organic-model` for foliage scatter.
|
|
149
149
|
- **Sci-fi kit (corridors, doors, terminals).** The style suffix becomes critical — `clean panels, soft cyan emissive trim, brushed metal, white background, isolated object`. Hard surfaces drift more than organic ones; review every piece.
|
|
150
150
|
- **The user wants to add a piece later.** The locked suffix lives in the kit's notes (drop it in `assets/kits/dungeon/STYLE.md` if the user wants persistence). Reuse it verbatim for any addition — never re-derive.
|
|
151
151
|
|
|
@@ -164,12 +164,12 @@ After the kit is staged:
|
|
|
164
164
|
|
|
165
165
|
> Dungeon kit ready: `res://assets/kits/dungeon/` with wall, floor, pillar, door, corner, arch on a 2m snap grid. Display scene at `res://assets/kits/dungeon/kit_dungeon.tscn`.
|
|
166
166
|
>
|
|
167
|
-
> Next: hand off to the level-design step — instantiate kit pieces into `level_01.tscn`, snap to the 2m grid, dress with props (`
|
|
167
|
+
> Next: hand off to the level-design step — instantiate kit pieces into `level_01.tscn`, snap to the 2m grid, dress with props (`prop-model`) and foliage (`organic-model`). For lighting, see `3d-lighting`.
|
|
168
168
|
|
|
169
169
|
## See also
|
|
170
170
|
|
|
171
|
-
- `
|
|
172
|
-
- `
|
|
173
|
-
- `
|
|
174
|
-
- `
|
|
175
|
-
- `
|
|
171
|
+
- `prop-model` — for the chests, statues, and decorative props that dress the kit.
|
|
172
|
+
- `organic-model` — for foliage and rocks that break up modular repetition.
|
|
173
|
+
- `asset-strategy` — Pipeline 2 (textures + CSG) is the cheaper alternative when pieces are flat.
|
|
174
|
+
- `scene-composition` — how to organize the kit scene and the level scenes that consume it.
|
|
175
|
+
- `3d-lighting` — interior kit pieces typically need warm point lights at sconce positions.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: skill/environment-kit
|
|
2
|
+
kind: skill
|
|
3
|
+
version: 1.0.3
|
|
4
|
+
summary: Generate a modular environment kit — wall pieces, floor tiles, pillars, doors, arches, corners — snap-together meshes sharing one visual style.
|
|
5
|
+
use_when:
|
|
6
|
+
- generating a modular environment kit of snap-together pieces that form a level — dungeon kit, modular walls, interior pieces
|
|
7
|
+
- building a dungeon, interior, or town kit from repeatable pieces that snap together in one style
|
|
8
|
+
facets:
|
|
9
|
+
lifecycle:
|
|
10
|
+
- build
|
|
11
|
+
domains:
|
|
12
|
+
- 3d
|
|
13
|
+
- assets
|
|
14
|
+
modalities:
|
|
15
|
+
- 3d-models
|
|
16
|
+
- scenes
|
|
17
|
+
compatibility:
|
|
18
|
+
engine: ">=4.6"
|
|
19
|
+
related:
|
|
20
|
+
skills:
|
|
21
|
+
- skill/organic-model
|
|
22
|
+
- skill/prop-model
|
|
23
|
+
- skill/asset-strategy
|
|
24
|
+
source: official
|
|
25
|
+
license: MIT
|
|
26
|
+
status: stable
|
|
27
|
+
recommended: false
|
|
28
|
+
aliases:
|
|
29
|
+
- skills/3d-assets/environment-kit
|
|
@@ -275,7 +275,7 @@ To enable another target, prove one of these before returning to step 2:
|
|
|
275
275
|
|
|
276
276
|
On Apple Silicon, `binary_format/architecture="arm64"` is the natural guess, and it fails leaving a **0-byte `.app` that looks like success**. Only `"universal"` ships.
|
|
277
277
|
|
|
278
|
-
See `
|
|
278
|
+
See `headless-scripting` for the wider pattern this is one instance of.
|
|
279
279
|
|
|
280
280
|
If the user is on a CI system (GitHub Actions etc), this is the right place to point them at a cross-compile workflow — Godot can export Windows + Linux from a Linux runner.
|
|
281
281
|
|
|
@@ -346,7 +346,7 @@ Use this as a one-shot grep before any export:
|
|
|
346
346
|
|
|
347
347
|
## Collaborative protocol
|
|
348
348
|
|
|
349
|
-
This skill produces release artifacts. Always ask before each build is invoked. Group platforms — "I'm about to build Windows + Mac + Linux release configs into `build/`. OK?". See
|
|
349
|
+
This skill produces release artifacts. Always ask before each build is invoked. Group platforms — "I'm about to build Windows + Mac + Linux release configs into `build/`. OK?". See `../../references/collaborative-protocol/collaborative-protocol.md`.
|
|
350
350
|
|
|
351
351
|
## Want a working starter?
|
|
352
352
|
|
|
@@ -354,10 +354,10 @@ No template — this is a workflow. Each project's export config and store asset
|
|
|
354
354
|
|
|
355
355
|
## See also
|
|
356
356
|
|
|
357
|
-
-
|
|
358
|
-
-
|
|
357
|
+
- `../../references/mcp-tools-reference/mcp-tools-reference.md` — full MCP tool list
|
|
358
|
+
- `../../references/godot-version/godot-version.md` — Summer compatibility and
|
|
359
359
|
export-template versioning
|
|
360
|
-
-
|
|
360
|
+
- `../../references/collaborative-protocol/collaborative-protocol.md` — "May I write" pattern
|
|
361
361
|
- `deployment/export-presets/SKILL.md` — preset config deep dive
|
|
362
362
|
- `deployment/web-html5-export/SKILL.md` — HTML5-specific traps
|
|
363
363
|
- `deployment/steam-uploader/SKILL.md` — `steamcmd` + GodotSteam (when shipped)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: skill/export-and-ship
|
|
2
|
+
kind: skill
|
|
3
|
+
version: 1.0.3
|
|
4
|
+
summary: "Assess and prepare a game export: inventory installed templates and targets, validate release assets and config, produce supported builds after approval."
|
|
5
|
+
use_when:
|
|
6
|
+
- the user wants to assess or prepare a Summer game export — Steam, itch, HTML5, iOS, Android targets as available in the installed build
|
|
7
|
+
- the user says 'publish my game', 'release it', or 'ship a build to players' — produce the build they will upload
|
|
8
|
+
do_not_use_when:
|
|
9
|
+
- publishing, uploading, hosting, or submitting a game — this skill only produces local builds
|
|
10
|
+
facets:
|
|
11
|
+
lifecycle:
|
|
12
|
+
- launch
|
|
13
|
+
domains:
|
|
14
|
+
- deployment
|
|
15
|
+
- project
|
|
16
|
+
modalities:
|
|
17
|
+
- project
|
|
18
|
+
compatibility:
|
|
19
|
+
engine: ">=4.6"
|
|
20
|
+
related:
|
|
21
|
+
skills:
|
|
22
|
+
- skill/debug
|
|
23
|
+
- skill/tune-performance
|
|
24
|
+
source: official
|
|
25
|
+
license: MIT
|
|
26
|
+
status: stable
|
|
27
|
+
recommended: true
|
|
28
|
+
aliases:
|
|
29
|
+
- skills/deployment/export-and-ship
|
|
30
|
+
lint_exceptions:
|
|
31
|
+
- url-allowlist
|
|
32
|
+
lint_exception_reason: godotsteam.com is a read-only documentation link for the GodotSteam integration the export flow references.
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fabricating-assets
|
|
3
|
+
description: Use when an asset needs Blender's mesh tooling rather than generation or a library download — a modular kit with exact dimensions and snapping, VFX meshes (shatter fragments, curve sweeps, LOD chains), or decimating/UV-unwrapping/baking a generated model — and you are about to write a bpy script for summer_fabricate_3d. Covers the route decision (fabricate vs generate vs import), the bpy rules that survive glTF export, the script -> import -> snapshot -> screenshot loop, every failure_reason and what to do about it, and the licensing shape (the user's own Blender, never bundled).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Fabricating Assets
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
`summer_fabricate_3d` runs a Blender Python (bpy) script you write in the **user's own installed Blender**, headless and supervised by the engine, validates the `.glb` the script's objects were exported to, moves it under `res://`, waits for the import, and (optionally) instantiates it into the open scene with `target_size` normalization. One call: script → glb → import → scene.
|
|
11
|
+
|
|
12
|
+
It exists for a narrow slice of assets: the mesh-processing mid-tier that the engine does not have (exact booleans, bevels, UV unwrap, decimate, remesh, curve sweeps, fracture) and that generation and libraries serve badly. Everywhere else it is the wrong tool — route first.
|
|
13
|
+
|
|
14
|
+
Three facts shape every use:
|
|
15
|
+
|
|
16
|
+
1. **It is optional and detect-never-bundle.** Summer does not ship, download, or install Blender. If the machine has none, the result is a structured `blender_not_found` with the fix, and the decision to install belongs to the user.
|
|
17
|
+
2. **It is blind until import.** There is no viewport while the script runs. Perception comes back only through the result (`objects`, `dimensions`, `warnings`, `skipped`) and then through the normal scene loop (`summer_snapshot_diff` + `summer_screenshot`).
|
|
18
|
+
3. **One fabrication at a time per editor.** A second call while one is in flight fails with `busy`. Wait for the result; never fire in parallel.
|
|
19
|
+
|
|
20
|
+
## Route first — fabricate, generate, or import?
|
|
21
|
+
|
|
22
|
+
| Asset class | First route | Second | Why |
|
|
23
|
+
|---|---|---|---|
|
|
24
|
+
| Blockout / placeholder | `scene-scripting` primitives or CSG | fabricate | Must be instant and in-scene; no process spawn is justified |
|
|
25
|
+
| Generic hard-surface prop ("a barrel") | `summer_search_assets` → `summer_import_asset` (`prop-model`) | `summer_generate_3d` | The free library plus `target_size` beats paid generation and a 2-minute wait, in a consistent style |
|
|
26
|
+
| Bespoke prop ("the artifact from our GDD") | `summer_generate_3d` | fabricate | Image-to-3D is exactly what generation is for; fabricate when exact dimensions or parametric variants matter |
|
|
27
|
+
| **Modular kit** (walls, pipes, fences, rails that snap) | **fabricate** | library kit (`environment-kit`) | Generation cannot hold dimensions and style across 30 pieces; array + boolean + bevel + one material is the classic kit workflow |
|
|
28
|
+
| Characters (rigged, animated) | `summer_generate_3d` (`character-model`) | library | Scripted organic modelling is the documented failure mode; fabrication has no path to competitive organics blind |
|
|
29
|
+
| Environments / terrain | in-engine terrain + library set dressing | generation for landmarks | Terrain wants interactive tools; dressing wants scatter |
|
|
30
|
+
| Materials / textures / skies | library (`summer_import_hdri`, texture packs) | generation | Fabricate only to bake a procedural material to images |
|
|
31
|
+
| **VFX meshes** (shatter pieces, trails, sweeps, LOD chains) | **fabricate** | in-engine | Bisect/fracture, curve sweeps, decimate are one-liners in bpy and absent in the engine |
|
|
32
|
+
| **Post-processing a generated model** (decimate / UV / bake) | **fabricate** | — | The fix for generation's documented weaknesses; no other route exists |
|
|
33
|
+
| UI | library + 2D image generation | — | 3D tooling is irrelevant |
|
|
34
|
+
|
|
35
|
+
Fabricate wins in exactly three rows. If the request is not one of them, stop here and use `asset-strategy` to pick the specialist skill.
|
|
36
|
+
|
|
37
|
+
## Prerequisite — the user's Blender
|
|
38
|
+
|
|
39
|
+
The engine looks for Blender 4.2 LTS or newer in this order:
|
|
40
|
+
|
|
41
|
+
1. `blender_path` passed in the call (only when the user named a path — never guess one);
|
|
42
|
+
2. the `SUMMER_BLENDER_BIN` environment variable of the editor process;
|
|
43
|
+
3. Editor Settings → FileSystem → Import → Blender → Blender Path (`filesystem/import/blender/blender_path`, the same setting `.blend` import uses);
|
|
44
|
+
4. `PATH`, the platform's well-known install locations, and `~/.summer/tools/blender-<version>/`.
|
|
45
|
+
|
|
46
|
+
When none resolves, the result is `failure_reason: blender_not_found` with `tried` (every path checked) and a prescriptive `error`. Relay it as a one-line decision: "Fabrication needs Blender (4.2 LTS or newer) on this machine. Install it from the official Blender download page, or point `SUMMER_BLENDER_BIN` at an existing executable and restart the editor. Or I can generate the asset or import one from the free library instead." Then do what the user chooses. Do not install software on their behalf, and do not retry the call hoping the answer changes.
|
|
47
|
+
|
|
48
|
+
The `blender_version` in every successful result is a fact, not a suggestion: bpy APIs change across majors, and models skew toward older bpy from training data. When a `script_error` names a missing attribute or operator, check it against the version that actually ran.
|
|
49
|
+
|
|
50
|
+
## The script contract
|
|
51
|
+
|
|
52
|
+
`source` is plain bpy code. It runs in a factory-startup Blender (no user add-ons, no preferences, online access off) with an **empty** scene — no default cube, light, or camera — and these names already bound: `bpy`, `bmesh`, `mathutils`, `math`, `Vector`, `Matrix`, `Euler`.
|
|
53
|
+
|
|
54
|
+
The script must **create mesh objects and leave them linked in the scene**. Nothing else. The engine's bootstrap then collects, audits, exports, and validates:
|
|
55
|
+
|
|
56
|
+
- **Do not export, do not save, do not quit.** `bpy.ops.export_scene.gltf`, `bpy.ops.wm.save_mainfile`, `bpy.ops.wm.quit_blender` in your script break the contract and the run.
|
|
57
|
+
- **What exports:** `MESH`, `CURVE`, `SURFACE`, `META`, `FONT` objects become meshes; `EMPTY` and `ARMATURE` keep hierarchy and skins; cameras, lights, probes and speakers are dropped.
|
|
58
|
+
- **Hidden means helper.** An object hidden in the viewport or disabled for render is treated as a boolean cutter or guide: it is *not* exported and is listed in `skipped`. Use this deliberately for cutters; check `skipped` when a piece is missing.
|
|
59
|
+
- **Modifiers are applied at export** (`export_apply`), including Geometry Nodes — the scene stays non-destructive, so do not `modifier_apply` by hand unless you need the result for a later step (a boolean whose output feeds a second boolean, for instance). Consequence: **shape keys are dropped** when modifiers exist; a `warning` says so.
|
|
60
|
+
- **Only a Principled BSDF surface survives glTF.** Any other shader (Emission-only, Diffuse, custom node group) exports grey or black — a `warning` names the material. Build materials as Principled BSDF with constant values or Image Texture inputs.
|
|
61
|
+
- **Procedural Base Color is baked for you** (Cycles, 2K cap, capped material count; meshes without UVs get a Smart UV Project first) and reported in `baked`. **Procedural Metallic / Roughness / Normal / Emission / Alpha are NOT baked** — set constants, or bake them to an Image Texture in your script; the `warnings` list tells you which channel was left procedural.
|
|
62
|
+
- **Axis and units:** model in Blender's native Z-up, in metres; the export converts to the engine's +Y-up (`dimensions` in the result is already +Y-up). A 2 m wall segment is `dimensions.y ≈ 2`.
|
|
63
|
+
- **Naming:** object names become node names in the imported scene. Name every object and material (`obj.name = "Wall_2m_A"`). The `name` argument names the `.glb` (`res://assets/fabricated/<name>.glb` unless `out_path` says otherwise) and the instantiated node; it is sanitized to `[A-Za-z0-9_-]`.
|
|
64
|
+
- **Determinism:** seed anything random (`random.seed(7)`, noise textures with fixed seeds). A re-run must produce the same mesh so the loop below converges.
|
|
65
|
+
- **No network.** Blender's online access is off; scripts that fetch anything fail. Reference images and existing models come from the project on disk (below).
|
|
66
|
+
|
|
67
|
+
### Minimal template
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
# Kit piece: 2 m wall segment with a door cutout, bevelled, one material.
|
|
71
|
+
import bmesh
|
|
72
|
+
|
|
73
|
+
def make_box(name, size, location):
|
|
74
|
+
bpy.ops.mesh.primitive_cube_add(size=1, location=location)
|
|
75
|
+
obj = bpy.context.active_object
|
|
76
|
+
obj.name = name
|
|
77
|
+
obj.scale = size
|
|
78
|
+
bpy.ops.object.transform_apply(scale=True)
|
|
79
|
+
return obj
|
|
80
|
+
|
|
81
|
+
wall = make_box("Wall_2m_Door", (2.0, 0.2, 3.0), (0, 0, 1.5))
|
|
82
|
+
|
|
83
|
+
cutter = make_box("DoorCutter", (1.0, 0.4, 2.1), (0, 0, 1.05))
|
|
84
|
+
cutter.hide_set(True) # hidden = helper: used by the boolean, never exported
|
|
85
|
+
cutter.hide_render = True
|
|
86
|
+
|
|
87
|
+
cut = wall.modifiers.new("Door", "BOOLEAN")
|
|
88
|
+
cut.operation = "DIFFERENCE"
|
|
89
|
+
cut.object = cutter
|
|
90
|
+
cut.solver = "EXACT"
|
|
91
|
+
|
|
92
|
+
bevel = wall.modifiers.new("Bevel", "BEVEL")
|
|
93
|
+
bevel.width = 0.02
|
|
94
|
+
bevel.segments = 2
|
|
95
|
+
|
|
96
|
+
mat = bpy.data.materials.new("KitStone")
|
|
97
|
+
mat.use_nodes = True
|
|
98
|
+
bsdf = mat.node_tree.nodes["Principled BSDF"]
|
|
99
|
+
bsdf.inputs["Base Color"].default_value = (0.55, 0.52, 0.48, 1.0)
|
|
100
|
+
bsdf.inputs["Roughness"].default_value = 0.85
|
|
101
|
+
wall.data.materials.append(mat)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Call it with `name: "wall_2m_door"`, `import_to_scene: {parent: "./Kit"}`, no `target_size` (the piece is already modelled at 2 × 0.2 × 3 m — a kit that snaps must keep its authored dimensions).
|
|
105
|
+
|
|
106
|
+
## The loop
|
|
107
|
+
|
|
108
|
+
1. `summer_get_project_context` — confirm the engine is up and which project is bound; read `projectPath` if the script needs a file from the project.
|
|
109
|
+
2. `summer_world_snapshot` — the BEFORE baseline; keep `snapshot_id`.
|
|
110
|
+
3. `summer_fabricate_3d` — `source`, `name`, `import_to_scene: {parent, position?}`, and `target_size` only when the asset is *not* dimension-authored (a hero prop whose size you are normalizing, not a kit piece). Default `max_seconds` 120 covers boot + script + bake + export for ordinary pieces; raise it (up to 600) for exact booleans on dense meshes or several bakes.
|
|
111
|
+
4. **Read the result before looking at anything else.** `ok` and `ran`; `objects[]` (each with `vertices`, `faces`, `triangles`, `materials`, `modifiers`) against what you meant to build; `dimensions` in +Y-up metres against the spec; `skipped` for pieces that vanished because they were hidden; `warnings` for grey-material and unbaked-channel problems; `baked` for what the bootstrap did to your materials; `output` for your own `print()`s. A non-zero `exit_code` after a validated export is a warning, not a failure — the artifact is what was verified.
|
|
112
|
+
5. `summer_snapshot_diff from_id:<the id>` — the structural receipt: exactly one new subtree under `parent` named `<name>`, nothing else changed.
|
|
113
|
+
6. `summer_screenshot` — look at it. `target:"scene" framing:"camera"` when materials or lighting matter; a preset framing for silhouette and scale checks.
|
|
114
|
+
7. Iterate on the script and re-run with the same `name` — the `.glb` is overwritten in place (`overwrote_existing: true`), and the previously instantiated node is still in the scene: remove it with `summer_remove_node` before re-importing to scene, or import without `import_to_scene` and let the existing instance pick up the new file.
|
|
115
|
+
8. `summer_save_scene` once the piece is right. Instantiation is one undo action in the open scene, not a save — an unsaved instance is lost when the editor closes.
|
|
116
|
+
|
|
117
|
+
Never claim a visual result without step 6. The full perception discipline is `verifying-scenes`.
|
|
118
|
+
|
|
119
|
+
### Post-processing a generated model
|
|
120
|
+
|
|
121
|
+
Generation delivers dense triangulated geometry with poor UVs. Fabrication is the fix:
|
|
122
|
+
|
|
123
|
+
```python
|
|
124
|
+
import os
|
|
125
|
+
src = os.path.join(PROJECT_DIR, "assets", "generated", "goblin_statue.glb") # PROJECT_DIR from summer_get_project_context.projectPath
|
|
126
|
+
bpy.ops.import_scene.gltf(filepath=src)
|
|
127
|
+
meshes = [o for o in bpy.context.scene.objects if o.type == "MESH"]
|
|
128
|
+
for o in meshes:
|
|
129
|
+
bpy.context.view_layer.objects.active = o
|
|
130
|
+
o.select_set(True)
|
|
131
|
+
dec = o.modifiers.new("Decimate", "DECIMATE")
|
|
132
|
+
dec.ratio = 0.25
|
|
133
|
+
bpy.ops.object.mode_set(mode="EDIT")
|
|
134
|
+
bpy.ops.mesh.select_all(action="SELECT")
|
|
135
|
+
bpy.ops.uv.smart_project(angle_limit=math.radians(66), island_margin=0.02)
|
|
136
|
+
bpy.ops.object.mode_set(mode="OBJECT")
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Substitute the real absolute project path for `PROJECT_DIR` (a string literal built from `summer_get_project_context` → `projectPath`); scripts have no `res://`. Write the result to a *new* `out_path` (`res://assets/generated/goblin_statue_lod1.glb`) so the original stays for comparison, and compare `objects[].triangles` before and after in the result.
|
|
140
|
+
|
|
141
|
+
### Shatter fragments without add-ons
|
|
142
|
+
|
|
143
|
+
Factory startup disables add-ons, so cell-fracture operators are not available. Cut with `bmesh.ops.bisect_plane` in a loop over random planes, `bmesh.ops.split_edges` / separate by loose parts, and name each fragment `Shard_00`, `Shard_01`, … — the imported scene then carries one `MeshInstance3D` per shard, ready for a `RigidBody3D` wrap in a `summer_run_script` pass.
|
|
144
|
+
|
|
145
|
+
## Failure taxonomy — read `failure_reason`, then act
|
|
146
|
+
|
|
147
|
+
| `failure_reason` | What happened | Do |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| `engine_lacks_op` | This engine build predates FabricateMesh (nothing was sent) | Route to `summer_generate_3d`, `summer_search_assets` / `summer_import_asset`, or `summer_run_script` blockout geometry; tell the user an engine update enables fabrication |
|
|
150
|
+
| `blender_not_found` | No usable Blender executable (see `tried`) | Relay the one-line decision above; never guess a path or install anything |
|
|
151
|
+
| `blender_launch_failed` | The executable exists but did not start (permissions, broken install, wrong architecture) | Show the `error` and `output` tail to the user; a different `blender_path` or a reinstall is their call |
|
|
152
|
+
| `script_error` | Your bpy raised (`traceback_tail`, `script_line`, `blender_version`) | Fix the named line against the reported version; `script_line` maps to your `source` |
|
|
153
|
+
| `timeout` | The child exceeded `max_seconds` (echoed) and was killed; nothing was imported | Raise the budget (≤ 600), or split — one piece per call, fewer bakes, coarser booleans |
|
|
154
|
+
| `export_empty` | The script left no exportable object | Everything hidden? Not linked to a collection? Wrong type (a light, a camera)? Check `skipped` |
|
|
155
|
+
| `export_failed` / `export_missing` | The exporter failed or wrote nothing | Read `errors` — usually a material or modifier the exporter cannot handle; simplify |
|
|
156
|
+
| `bootstrap_error` | The engine's own bootstrap failed (not your script) | Report it verbatim as a bug; do not work around it |
|
|
157
|
+
| `import_failed` | The `.glb` is at `out_path` but the editor did not import it | Read the importer's message with `summer_get_console`; often a zero-face mesh or an oversized texture. Fix and re-run, or `summer_instantiate_scene` the file after a manual rescan |
|
|
158
|
+
| `instantiate_failed` | Imported fine; instantiation into the open scene failed (bad `parent`, no scene open) | The asset is in the project — open the right scene and `summer_instantiate_scene` it with `target_size` |
|
|
159
|
+
| `busy` | Another fabrication is in flight | Wait for that result; never parallelize |
|
|
160
|
+
| `cancelled` / `shutdown` | The run was cancelled or the editor closed | Re-run when the editor is back |
|
|
161
|
+
| `rejected_identity` | The engine switched projects mid-run | `summer_get_project_context` to rebind, then decide whether to re-run |
|
|
162
|
+
| `bad_args` | Malformed `out_path`, `target_size`, or empty `source` | Fix the argument; nothing was sent |
|
|
163
|
+
|
|
164
|
+
Every failure leaves the project untouched except `import_failed` / `instantiate_failed`, which are honest about the `.glb` they did write. A `no_rewind_point: true` on any result means no SummerGit checkpoint exists for the run — say so before doing more destructive work.
|
|
165
|
+
|
|
166
|
+
## Licensing and attribution
|
|
167
|
+
|
|
168
|
+
- **Blender is the user's.** Summer runs the executable they installed as a separate process and talks to it only through arguments, files, and the exit code. Nothing in Summer links against Blender or imports bpy; the small export bootstrap the engine writes to a scratch directory is a separately licensed GPL file precisely because it does. Do not move project logic into bpy scripts expecting it to stay proprietary.
|
|
169
|
+
- **Output is unencumbered.** Meshes made with Blender belong to the user; the `.glb` in their project carries no Blender licence obligation.
|
|
170
|
+
- **Scripts you write here are created on the user's machine and never distributed by Summer.** If you adapt a bpy snippet from elsewhere, respect its licence — prefer your own code or CC0 sources, and record the origin in `.summer/memory/decisions/` when it matters for the project.
|
|
171
|
+
- **Trademark.** "Blender" is a trademark of the Blender Foundation. Refer to it factually as the dependency ("requires Blender"); never describe the feature as powered by, built on, or branded with Blender, and never use its logo. Summer's name for this capability is *mesh fabrication*.
|
|
172
|
+
- Imported library assets keep their own licences (`summer_search_assets` results carry `licenseType`); fabrication does not change that.
|
|
173
|
+
|
|
174
|
+
## Red Flags — STOP
|
|
175
|
+
|
|
176
|
+
| Red flag | Reality |
|
|
177
|
+
|---|---|
|
|
178
|
+
| Fabricating a barrel, a crate, a chair | Library first, generation second. Fabricate is for kits, VFX meshes, and post-processing |
|
|
179
|
+
| Fabricating a character or creature | Scripted organic modelling is the documented failure mode; `summer_generate_3d` with rigging |
|
|
180
|
+
| A script that calls `export_scene.gltf`, saves, or quits | Breaks the contract; the bootstrap exports |
|
|
181
|
+
| A material that is not a Principled BSDF | Exports grey; the `warnings` list said so |
|
|
182
|
+
| Procedural roughness or normal maps left unbaked | Not baked automatically — set constants or bake in the script |
|
|
183
|
+
| `target_size` on a kit piece | Destroys the authored dimensions the kit snaps on |
|
|
184
|
+
| Two fabrications in flight | `busy`; one at a time per editor |
|
|
185
|
+
| Guessing a `blender_path` | Only the user knows where their Blender is; use the resolution order |
|
|
186
|
+
| Installing Blender for the user | Never. Relay the decision |
|
|
187
|
+
| Claiming the piece looks right without a screenshot | The fabricator is blind; only step 6 sees |
|
|
188
|
+
| A hidden object that was supposed to export | Hidden means helper; unhide it or check `skipped` |
|
|
189
|
+
| Retrying the same script after `timeout` | Raise the budget or split the job; the same oversized script times out again |
|
|
190
|
+
|
|
191
|
+
**Related skills:**
|
|
192
|
+
- `asset-strategy` — the route decision for every "I need a [thing]".
|
|
193
|
+
- `environment-kit`, `prop-model`, `character-model` — the generation and library specialists fabrication defers to.
|
|
194
|
+
- `scene-scripting` — in-scene geometry, placement loops, and wrapping fabricated pieces in bodies and collisions.
|
|
195
|
+
- `verifying-scenes` and `verification-before-completion` — the evidence discipline after import.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
id: skill/fabricating-assets
|
|
2
|
+
kind: skill
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: Fabricate meshes with a bpy script in the user's own Blender (summer_fabricate_3d) — kits with exact dimensions, VFX meshes, post-processing generated models.
|
|
5
|
+
use_when:
|
|
6
|
+
- writing a Blender Python (bpy) script for summer_fabricate_3d and deciding whether fabrication, generation, or the free library is the right route for an asset
|
|
7
|
+
- a parametric hard-surface set with exact dimensions, booleans, bevels, and shared materials that must stay consistent across many pieces
|
|
8
|
+
- VFX meshes — shatter fragments, curve sweeps, trails, LOD chains — or decimating, UV-unwrapping, and baking a generated model before it goes into the scene
|
|
9
|
+
- a fabrication failed (blender_not_found, script_error, export_empty, import_failed, busy, timeout) and the result needs to be read correctly
|
|
10
|
+
do_not_use_when:
|
|
11
|
+
- a generic prop — search the free library first (summer_search_assets, prop-model), then generate (summer_generate_3d)
|
|
12
|
+
- a character or any organic shape — character-model / organic-model; scripted organic modelling is the documented failure mode
|
|
13
|
+
- a blockout or placeholder — scene-scripting primitives/CSG are instant and in-scene
|
|
14
|
+
- "the engine build lacks FabricateMesh (Summer Engine 0.5.66 or newer); older engines return engine_lacks_op — route to summer_generate_3d / summer_search_assets / summer_run_script instead"
|
|
15
|
+
facets:
|
|
16
|
+
lifecycle:
|
|
17
|
+
- build
|
|
18
|
+
domains:
|
|
19
|
+
- 3d
|
|
20
|
+
- assets
|
|
21
|
+
- scripting
|
|
22
|
+
- agent-workflow
|
|
23
|
+
modalities:
|
|
24
|
+
- 3d-models
|
|
25
|
+
- scripts
|
|
26
|
+
- assets
|
|
27
|
+
compatibility:
|
|
28
|
+
engine: ">=4.6"
|
|
29
|
+
related:
|
|
30
|
+
tools:
|
|
31
|
+
- tool/fabricate-3d
|
|
32
|
+
- tool/generate-3d
|
|
33
|
+
- tool/search-assets
|
|
34
|
+
- tool/import-asset
|
|
35
|
+
- tool/instantiate-scene
|
|
36
|
+
- tool/get-project-context
|
|
37
|
+
- tool/world-snapshot
|
|
38
|
+
- tool/snapshot-diff
|
|
39
|
+
- tool/screenshot
|
|
40
|
+
- tool/get-console
|
|
41
|
+
skills:
|
|
42
|
+
- skill/asset-strategy
|
|
43
|
+
- skill/environment-kit
|
|
44
|
+
- skill/prop-model
|
|
45
|
+
- skill/character-model
|
|
46
|
+
- skill/scene-scripting
|
|
47
|
+
- skill/verifying-scenes
|
|
48
|
+
- skill/verification-before-completion
|
|
49
|
+
source: official
|
|
50
|
+
license: MIT
|
|
51
|
+
status: preview
|
|
52
|
+
recommended: false
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: animation
|
|
7
7
|
user-invocable: false
|
|
8
|
-
allowed-tools: Read Grep Edit Write summer_search_assets summer_inspect_resource summer_inspect_node summer_generate_audio summer_generate_motion summer_add_node summer_set_prop summer_set_resource_property summer_save_scene summer_get_script_errors
|
|
8
|
+
allowed-tools: Read Grep Edit Write summer_search_assets summer_inspect_resource summer_inspect_node summer_generate_audio summer_generate_motion summer_run_script summer_add_node summer_set_prop summer_set_resource_property summer_save_scene summer_get_script_errors
|
|
9
9
|
paths: ["**/*.gd", "**/*.tscn", "**/*.tres"]
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -31,7 +31,7 @@ The 2026 production stack:
|
|
|
31
31
|
|
|
32
32
|
## When NOT to use this skill
|
|
33
33
|
|
|
34
|
-
- Character has no face / no BlendShapes (helmeted soldier, robot, mascot). Hard-skip to body language via `
|
|
34
|
+
- Character has no face / no BlendShapes (helmeted soldier, robot, mascot). Hard-skip to body language via `generate-motion`.
|
|
35
35
|
- The dialogue is written but not yet voiced — generate audio first via `summer_generate_audio({capability: "text_to_speech", ...})`. Lipsync without audio has nothing to sync to.
|
|
36
36
|
- Pre-rendered cinematic from external DCC. Lipsync is in the rendered video, not the engine.
|
|
37
37
|
|
|
@@ -169,7 +169,18 @@ This is a plain `Animation` resource authored in code — no editor required.
|
|
|
169
169
|
reloads with every track and track type intact (verified on the shipped 4.6.1
|
|
170
170
|
binary with value, blend-shape and method tracks in one resource). Any advice
|
|
171
171
|
that says animation tracks or keyframes can only be authored in the editor GUI
|
|
172
|
-
is wrong.
|
|
172
|
+
is wrong. The bake function also runs unchanged inside a `summer_run_script`
|
|
173
|
+
body against the live editor — often more convenient than the headless lane
|
|
174
|
+
because the result lands in the open scene's library and the run is
|
|
175
|
+
transactional.
|
|
176
|
+
|
|
177
|
+
For QUICK facial keys that don't need a viseme timeline (a roar, a wince, an
|
|
178
|
+
eyebrow raise), animation-tier engines collapse the whole bake into `ctx.animate` with
|
|
179
|
+
a `"blend_shapes/<name>"` property path (value tracks, verified working) — one
|
|
180
|
+
call per shape, same `anim_name` appends tracks to one clip. Recipe in
|
|
181
|
+
`character-animation-wiring`. The Rhubarb bake loop above
|
|
182
|
+
stays the right tool for full audio-synced viseme timelines — 15 tracks with
|
|
183
|
+
per-cue keys is exactly what the loop is for.
|
|
173
184
|
|
|
174
185
|
If you used the Whisper/ARPAbet cloud fallback instead of Rhubarb, swap `bake_from_rhubarb` for a variant that consumes `{ phoneme, start, duration }` triples and applies the ARPAbet → viseme table from the Reference card.
|
|
175
186
|
|
|
@@ -258,7 +269,7 @@ If the user has a CMUDict-style phoneme list and wants to map manually, this is
|
|
|
258
269
|
### Quality bar
|
|
259
270
|
|
|
260
271
|
- ~12 phonemes/sec is normal English speech; the bake produces ~25 keyframes/sec across all tracks. Below 60fps playback on weak hardware: enable `BlendShape track interpolation = NEAREST` (loses smoothness, gains 30% perf). Reserve for mobile / very crowded crowd scenes.
|
|
261
|
-
- Lipsync alone is ~70% of "alive". Add idle blink + idle micro-head-bob (`
|
|
272
|
+
- Lipsync alone is ~70% of "alive". Add idle blink + idle micro-head-bob (`procedural-animation`) and you're at ~95%. The remaining 5% is brow articulation tied to dialogue sentiment, which is bespoke per scene.
|
|
262
273
|
|
|
263
274
|
## Anti-patterns
|
|
264
275
|
|
|
@@ -285,15 +296,16 @@ production speech recognition or photoreal lip sync.
|
|
|
285
296
|
|
|
286
297
|
## Handoff
|
|
287
298
|
|
|
288
|
-
- For voice generation upstream, `
|
|
289
|
-
- For dialogue scripts and conversation flow, `
|
|
290
|
-
- For the AnimationTree this layer composes into, `
|
|
291
|
-
- For idle blinks, saccades, and head-tracking that complement lipsync, `
|
|
299
|
+
- For voice generation upstream, `voice-line` (which wraps `summer_generate_audio({capability: "text_to_speech", ...})`).
|
|
300
|
+
- For dialogue scripts and conversation flow, `design-npc`.
|
|
301
|
+
- For the AnimationTree this layer composes into, `animation-tree`.
|
|
302
|
+
- For idle blinks, saccades, and head-tracking that complement lipsync, `procedural-animation`.
|
|
292
303
|
- For full performance capture (face + body together), out of scope — see Meshy's mocap docs or external pipelines.
|
|
293
304
|
|
|
294
305
|
## See also
|
|
295
306
|
|
|
296
|
-
- `
|
|
297
|
-
- `
|
|
298
|
-
- `
|
|
307
|
+
- `voice-line` — TTS upstream of this skill.
|
|
308
|
+
- `character-animation-wiring` — the blend-shape `ctx.animate` mechanism, plus the body wiring this face layer sits on.
|
|
309
|
+
- `animation-tree` — wire the lipsync OneShot into the character's tree.
|
|
310
|
+
- `procedural-animation` — eye blinks, saccades, head idle.
|
|
299
311
|
- Rhubarb Lip Sync — https://github.com/DanielSWolf/rhubarb-lip-sync (external tool; phoneme extraction).
|