summer-engine 3.7.0 → 4.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 +2 -13
- package/.claude-plugin/plugin.json +25 -22
- package/.codex-plugin/plugin.json +8 -14
- package/.cursor-plugin/plugin.json +7 -13
- package/.factory-plugin/plugin.json +7 -13
- package/AGENTS.md +19 -12
- package/CHANGELOG.md +112 -0
- package/GEMINI.md +3 -3
- package/README.md +111 -31
- package/assets/icon.png +0 -0
- package/commands/start.md +71 -0
- package/commands/summer.md +5 -3
- package/dist/cli/banner.js +3 -0
- package/dist/cli/commands/login.d.ts +27 -0
- package/dist/cli/commands/login.js +58 -12
- package/dist/cli/commands/ops.d.ts +47 -0
- package/dist/cli/commands/ops.js +301 -0
- package/dist/cli/commands/setup.d.ts +2 -0
- package/dist/cli/commands/setup.js +37 -12
- package/dist/cli/commands/skills.js +11 -7
- package/dist/cli/index.js +7 -0
- package/dist/core/agent-host.d.ts +65 -0
- package/dist/core/agent-host.js +193 -0
- package/dist/core/capabilities/agent-playbook.d.ts +3 -0
- package/dist/core/capabilities/agent-playbook.js +54 -2
- package/dist/core/capabilities/apps.d.ts +341 -0
- package/dist/core/capabilities/apps.js +353 -0
- package/dist/core/capabilities/doctor.d.ts +3 -0
- package/dist/core/capabilities/doctor.js +20 -15
- package/dist/core/capabilities/enable-plugin.d.ts +27 -0
- package/dist/core/capabilities/enable-plugin.js +75 -0
- package/dist/core/capabilities/fabricate-mesh.d.ts +2 -2
- package/dist/core/capabilities/game-task-plan.d.ts +12 -6
- package/dist/core/capabilities/game-task-plan.js +80 -5
- package/dist/core/capabilities/motion-generation.js +2 -2
- package/dist/core/capabilities/navigation/open.d.ts +6 -2
- package/dist/core/capabilities/navigation/open.js +3 -0
- package/dist/core/capabilities/publish-build.js +2 -0
- package/dist/core/capabilities/runtime-control.d.ts +4 -4
- package/dist/core/capabilities/scene-script-target.d.ts +17 -0
- package/dist/core/capabilities/scene-script-target.js +70 -0
- package/dist/core/capabilities/sfx-choices.d.ts +4 -0
- package/dist/core/capabilities/sfx-choices.js +13 -6
- package/dist/core/capabilities/tool-dispatch.d.ts +12 -3
- package/dist/core/capabilities/tool-dispatch.js +130 -46
- package/dist/core/capability-skew.js +4 -0
- package/dist/core/embeddings.d.ts +2 -0
- package/dist/core/embeddings.js +1 -1
- package/dist/core/error-codes.d.ts +62 -0
- package/dist/core/error-codes.js +97 -0
- package/dist/core/format.d.ts +2 -0
- package/dist/core/format.js +2 -1
- package/dist/core/hosted-mcp.d.ts +22 -0
- package/dist/core/hosted-mcp.js +56 -1
- package/dist/core/library-read.js +5 -0
- package/dist/core/library-search.js +2 -1
- package/dist/core/oauth.js +4 -0
- package/dist/core/ops/catalog.d.ts +41 -0
- package/dist/core/ops/catalog.js +145 -0
- package/dist/core/ops/cloud.d.ts +56 -0
- package/dist/core/ops/cloud.js +175 -0
- package/dist/core/ops/contract.d.ts +119 -0
- package/dist/core/ops/contract.js +142 -0
- package/dist/core/ops/engine-answer.d.ts +25 -0
- package/dist/core/ops/engine-answer.js +117 -0
- package/dist/core/ops/engine.d.ts +55 -0
- package/dist/core/ops/engine.js +649 -0
- package/dist/core/ops/save-files.d.ts +78 -0
- package/dist/core/ops/save-files.js +419 -0
- package/dist/core/ops/search.d.ts +9 -0
- package/dist/core/ops/search.js +55 -0
- package/dist/core/skills-registry.d.ts +16 -1
- package/dist/core/skills-registry.js +35 -2
- package/dist/core/telemetry.d.ts +32 -0
- package/dist/core/telemetry.js +38 -10
- package/dist/core/tool-profiles.d.ts +25 -0
- package/dist/core/tool-profiles.js +41 -0
- package/dist/installer/agent-config.d.ts +17 -4
- package/dist/installer/agent-config.js +22 -6
- package/dist/installer/agent-table.d.ts +3 -0
- package/dist/installer/agent-table.js +10 -7
- package/dist/installer/setup.d.ts +2 -0
- package/dist/installer/setup.js +9 -4
- package/dist/installer/version-check.d.ts +29 -9
- package/dist/installer/version-check.js +81 -28
- package/dist/mcp/command.js +7 -0
- package/dist/mcp/hosted-mount.d.ts +27 -2
- package/dist/mcp/hosted-mount.js +66 -24
- package/dist/mcp/legacy-toolset.d.ts +27 -0
- package/dist/mcp/legacy-toolset.js +43 -0
- package/dist/mcp/ops-surface.d.ts +59 -0
- package/dist/mcp/ops-surface.js +443 -0
- package/dist/mcp/server.d.ts +35 -11
- package/dist/mcp/server.js +236 -89
- package/dist/mcp/tool-results.d.ts +26 -0
- package/dist/mcp/tool-results.js +81 -0
- package/dist/mcp/tool-surface.d.ts +65 -0
- package/dist/mcp/tool-surface.js +317 -0
- package/dist/mcp/tools/app-tools.d.ts +2 -0
- package/dist/mcp/tools/app-tools.js +71 -0
- package/dist/mcp/tools/asset-tools.js +55 -53
- package/dist/mcp/tools/audit-tools.js +21 -21
- package/dist/mcp/tools/debug-tools.js +6 -6
- package/dist/mcp/tools/fabricate-tools.js +6 -6
- package/dist/mcp/tools/generate-tools.js +76 -70
- package/dist/mcp/tools/project-tools.d.ts +9 -4
- package/dist/mcp/tools/project-tools.js +16 -10
- package/dist/mcp/tools/scene-tools.js +12 -23
- package/dist/mcp/tools/script-tools.js +9 -5
- package/dist/mcp/tools/with-engine.d.ts +6 -0
- package/dist/mcp/tools/with-engine.js +19 -0
- package/gemini-extension.json +6 -12
- package/hooks/pre-commit-doctor.sh +5 -4
- package/hooks/session-start.sh +24 -28
- package/integrations/claude-desktop/README.md +1 -1
- package/integrations/copilot-jetbrains/README.md +1 -1
- package/integrations/junie/README.md +1 -1
- package/integrations/lm-studio/README.md +1 -1
- package/integrations/trae/README.md +1 -1
- package/integrations/visual-studio/README.md +1 -1
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +85 -35
- package/library/references/mcp-tools-reference/resource.yaml +1 -1
- package/library/references/product-map/resource.yaml +2 -2
- package/library/skills/3d-lighting/SKILL.md +53 -28
- package/library/skills/3d-lighting/resource.yaml +1 -1
- package/library/skills/README.md +126 -116
- package/library/skills/adaptive-music/SKILL.md +19 -23
- package/library/skills/adaptive-music/resource.yaml +1 -1
- package/library/skills/agent-playtesting/SKILL.md +1 -1
- package/library/skills/agent-playtesting/resource.yaml +1 -1
- package/library/skills/ai-characters-in-games/SKILL.md +1 -1
- package/library/skills/ai-characters-in-games/resource.yaml +1 -1
- package/library/skills/ambient-bed/SKILL.md +22 -13
- package/library/skills/ambient-bed/resource.yaml +1 -1
- package/library/skills/animated-loop/SKILL.md +41 -32
- package/library/skills/animated-loop/resource.yaml +1 -1
- package/library/skills/animation-tree/SKILL.md +1 -1
- package/library/skills/animation-tree/resource.yaml +1 -1
- package/library/skills/art-direction/SKILL.md +3 -3
- package/library/skills/art-direction/resource.yaml +1 -1
- package/library/skills/asset-strategy/SKILL.md +21 -4
- package/library/skills/asset-strategy/resource.yaml +2 -1
- package/library/skills/audio-direction/SKILL.md +10 -10
- package/library/skills/audio-direction/resource.yaml +1 -1
- package/library/skills/auto-fire-targeting/SKILL.md +1 -1
- package/library/skills/auto-fire-targeting/resource.yaml +1 -1
- package/library/skills/bounded-engine-runs/SKILL.md +1 -1
- package/library/skills/bounded-engine-runs/resource.yaml +1 -1
- package/library/skills/brainstorm-game/SKILL.md +1 -1
- package/library/skills/brainstorm-game/resource.yaml +1 -1
- package/library/skills/brainstorming/SKILL.md +1 -1
- package/library/skills/brainstorming/resource.yaml +1 -1
- package/library/skills/browse-templates/SKILL.md +1 -1
- package/library/skills/browse-templates/resource.yaml +1 -1
- package/library/skills/camera-rigs/SKILL.md +2 -2
- package/library/skills/camera-rigs/resource.yaml +1 -1
- package/library/skills/celeste-momentum-platforming/resource.yaml +1 -0
- package/library/skills/character-animation-wiring/SKILL.md +4 -4
- package/library/skills/character-animation-wiring/resource.yaml +1 -1
- package/library/skills/character-model/SKILL.md +55 -47
- package/library/skills/character-model/resource.yaml +1 -1
- package/library/skills/character-movement/SKILL.md +3 -3
- package/library/skills/character-movement/resource.yaml +1 -1
- package/library/skills/character-portrait/SKILL.md +24 -19
- package/library/skills/character-portrait/resource.yaml +1 -1
- package/library/skills/cinematic-cutscene/SKILL.md +58 -46
- package/library/skills/cinematic-cutscene/resource.yaml +1 -1
- package/library/skills/combat-basics/SKILL.md +1 -1
- package/library/skills/combat-basics/resource.yaml +1 -1
- package/library/skills/compatibility-renderer-traps/SKILL.md +1 -1
- package/library/skills/compatibility-renderer-traps/resource.yaml +1 -1
- package/library/skills/concept-art/SKILL.md +16 -12
- package/library/skills/concept-art/resource.yaml +1 -1
- package/library/skills/concept-to-level/SKILL.md +239 -0
- package/library/skills/concept-to-level/references/technical-rules.md +150 -0
- package/library/skills/concept-to-level/resource.yaml +44 -0
- package/library/skills/create-asset-sheet/SKILL.md +19 -13
- package/library/skills/create-asset-sheet/resource.yaml +1 -1
- package/library/skills/debug/SKILL.md +2 -2
- package/library/skills/debug/resource.yaml +1 -1
- package/library/skills/debugging-game-feel/SKILL.md +1 -1
- package/library/skills/debugging-game-feel/resource.yaml +1 -1
- package/library/skills/design-level/SKILL.md +23 -35
- package/library/skills/design-level/resource.yaml +1 -1
- package/library/skills/design-mechanic/SKILL.md +1 -1
- package/library/skills/design-mechanic/resource.yaml +1 -1
- package/library/skills/design-npc/SKILL.md +22 -24
- package/library/skills/design-npc/resource.yaml +1 -1
- package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
- package/library/skills/diagnosing-perf-regressions/resource.yaml +1 -1
- package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
- package/library/skills/driving-the-editor-ui/resource.yaml +1 -1
- package/library/skills/environment-kit/SKILL.md +20 -16
- package/library/skills/environment-kit/resource.yaml +1 -1
- package/library/skills/export-and-ship/SKILL.md +6 -6
- package/library/skills/export-and-ship/resource.yaml +1 -1
- package/library/skills/fabricating-assets/SKILL.md +7 -7
- package/library/skills/fabricating-assets/resource.yaml +3 -3
- package/library/skills/facial-and-lipsync/SKILL.md +14 -15
- package/library/skills/facial-and-lipsync/resource.yaml +1 -1
- package/library/skills/fps-controller/SKILL.md +33 -41
- package/library/skills/fps-controller/resource.yaml +1 -1
- package/library/skills/game-feel/SKILL.md +8 -8
- package/library/skills/game-feel/resource.yaml +1 -1
- package/library/skills/gameskill/SKILL.md +4 -4
- package/library/skills/gameskill/resource.yaml +1 -1
- package/library/skills/gdscript-patterns/SKILL.md +1 -1
- package/library/skills/gdscript-patterns/resource.yaml +1 -1
- package/library/skills/generate-motion/SKILL.md +30 -21
- package/library/skills/generate-motion/resource.yaml +1 -1
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +1 -0
- package/library/skills/grow-analytics/SKILL.md +3 -3
- package/library/skills/grow-analytics/resource.yaml +1 -1
- package/library/skills/headless-scripting/SKILL.md +1 -1
- package/library/skills/headless-scripting/resource.yaml +1 -1
- package/library/skills/in-game-purchases/SKILL.md +1 -1
- package/library/skills/in-game-purchases/resource.yaml +1 -1
- package/library/skills/instantiate-asset-pack/SKILL.md +2 -2
- package/library/skills/instantiate-asset-pack/resource.yaml +1 -1
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +1 -0
- package/library/skills/make-game/SKILL.md +4 -4
- package/library/skills/make-game/references/2d-platformer.md +1 -1
- package/library/skills/make-game/references/3d-fps.md +1 -1
- package/library/skills/make-game/references/3d-horror.md +1 -1
- package/library/skills/make-game/references/3d-third-person.md +2 -2
- package/library/skills/make-game/resource.yaml +1 -1
- package/library/skills/multiplayer/SKILL.md +1 -1
- package/library/skills/multiplayer/resource.yaml +1 -1
- package/library/skills/multiplayer-movement/SKILL.md +1 -1
- package/library/skills/multiplayer-movement/resource.yaml +1 -1
- package/library/skills/multiplayer-project/SKILL.md +1 -1
- package/library/skills/multiplayer-project/resource.yaml +1 -1
- package/library/skills/multiplayer-publish/SKILL.md +8 -7
- package/library/skills/multiplayer-publish/resource.yaml +3 -3
- package/library/skills/multiplayer-state/SKILL.md +1 -1
- package/library/skills/multiplayer-state/resource.yaml +1 -1
- package/library/skills/multiplayer-testing/SKILL.md +1 -1
- package/library/skills/multiplayer-testing/resource.yaml +1 -1
- package/library/skills/music-track/SKILL.md +22 -13
- package/library/skills/music-track/resource.yaml +1 -1
- package/library/skills/navigate-summer/SKILL.md +11 -9
- package/library/skills/navigate-summer/resource.yaml +1 -1
- package/library/skills/new-project/SKILL.md +1 -1
- package/library/skills/new-project/resource.yaml +1 -1
- package/library/skills/organic-model/SKILL.md +24 -18
- package/library/skills/organic-model/resource.yaml +1 -1
- package/library/skills/pixel-art/SKILL.md +27 -23
- package/library/skills/pixel-art/resource.yaml +1 -1
- package/library/skills/play/SKILL.md +1 -1
- package/library/skills/play/resource.yaml +1 -1
- package/library/skills/playtesting-a-feature/SKILL.md +1 -1
- package/library/skills/playtesting-a-feature/resource.yaml +1 -1
- package/library/skills/procedural-animation/SKILL.md +20 -16
- package/library/skills/procedural-animation/resource.yaml +1 -1
- package/library/skills/prop-model/SKILL.md +25 -19
- package/library/skills/prop-model/resource.yaml +1 -1
- package/library/skills/psx-retro-rendering/resource.yaml +1 -0
- package/library/skills/publish-your-game/SKILL.md +16 -6
- package/library/skills/publish-your-game/resource.yaml +3 -3
- package/library/skills/realtime-wet-surfaces/resource.yaml +1 -0
- package/library/skills/release-readiness/SKILL.md +1 -1
- package/library/skills/release-readiness/resource.yaml +1 -1
- package/library/skills/remote-deploy/SKILL.md +1 -1
- package/library/skills/remote-deploy/resource.yaml +1 -1
- package/library/skills/retarget/SKILL.md +23 -20
- package/library/skills/retarget/resource.yaml +1 -1
- package/library/skills/running-in-the-cloud/SKILL.md +1 -1
- package/library/skills/running-in-the-cloud/resource.yaml +1 -1
- package/library/skills/save-load/SKILL.md +1 -1
- package/library/skills/save-load/resource.yaml +1 -1
- package/library/skills/scene-composition/SKILL.md +1 -1
- package/library/skills/scene-composition/resource.yaml +1 -1
- package/library/skills/scene-hierarchy-design/SKILL.md +2 -2
- package/library/skills/scene-hierarchy-design/resource.yaml +1 -1
- package/library/skills/scene-scripting/SKILL.md +66 -636
- package/library/skills/scene-scripting/references/ctx-api.md +184 -0
- package/library/skills/scene-scripting/references/recipes-2d-ui.md +193 -0
- package/library/skills/scene-scripting/references/recipes-3d.md +280 -0
- package/library/skills/scene-scripting/resource.yaml +4 -4
- package/library/skills/scene-to-level/SKILL.md +2 -2
- package/library/skills/scene-to-level/resource.yaml +1 -1
- package/library/skills/skill-create/resource.yaml +1 -0
- package/library/skills/skill-improve/resource.yaml +1 -0
- package/library/skills/skill-test/SKILL.md +2 -2
- package/library/skills/skill-test/resource.yaml +1 -0
- package/library/skills/skintokens-auto-rigging/resource.yaml +1 -0
- package/library/skills/skybox-panorama/SKILL.md +27 -21
- package/library/skills/skybox-panorama/resource.yaml +1 -1
- package/library/skills/sound-effect/SKILL.md +31 -20
- package/library/skills/sound-effect/resource.yaml +1 -1
- package/library/skills/spatial-placement/SKILL.md +14 -9
- package/library/skills/spatial-placement/resource.yaml +1 -1
- package/library/skills/sprite-sheet/SKILL.md +32 -27
- package/library/skills/sprite-sheet/resource.yaml +1 -1
- package/library/skills/store-art/SKILL.md +3 -3
- package/library/skills/store-art/resource.yaml +2 -2
- package/library/skills/store-listing/SKILL.md +3 -3
- package/library/skills/store-listing/resource.yaml +2 -2
- package/library/skills/summer-analytics/SKILL.md +7 -5
- package/library/skills/summer-analytics/resource.yaml +2 -2
- package/library/skills/summer-apps/SKILL.md +168 -0
- package/library/skills/summer-apps/manifest.md +57 -0
- package/library/skills/summer-apps/minimal-app.md +183 -0
- package/library/skills/summer-apps/resource.yaml +36 -0
- package/library/skills/summer-apps/sdk-reference.md +135 -0
- package/library/skills/summer-apps-design/SKILL.md +197 -0
- package/library/skills/summer-apps-design/resource.yaml +23 -0
- package/library/skills/summer-assets/SKILL.md +56 -0
- package/library/skills/summer-assets/resource.yaml +34 -0
- package/library/skills/summer-store/SKILL.md +1 -1
- package/library/skills/text-to-motion/SKILL.md +30 -23
- package/library/skills/text-to-motion/prompts-and-controls.md +5 -5
- package/library/skills/text-to-motion/resource.yaml +1 -1
- package/library/skills/text-to-motion/rigging-for-text-motion.md +2 -2
- package/library/skills/tileable-texture/SKILL.md +19 -15
- package/library/skills/tileable-texture/resource.yaml +1 -1
- package/library/skills/trailer-shot/SKILL.md +28 -24
- package/library/skills/trailer-shot/resource.yaml +1 -1
- package/library/skills/tune-performance/SKILL.md +6 -6
- package/library/skills/tune-performance/resource.yaml +1 -1
- package/library/skills/ui-basics/SKILL.md +41 -36
- package/library/skills/ui-basics/resource.yaml +1 -1
- package/library/skills/ui-graphics/SKILL.md +47 -38
- package/library/skills/ui-graphics/resource.yaml +1 -1
- package/library/skills/use-widget-asset/SKILL.md +1 -1
- package/library/skills/use-widget-asset/resource.yaml +1 -1
- package/library/skills/using-summer/SKILL.md +7 -5
- package/library/skills/using-summer/resource.yaml +1 -1
- package/library/skills/vehicle-model/SKILL.md +65 -57
- package/library/skills/vehicle-model/resource.yaml +1 -1
- package/library/skills/verification-before-completion/SKILL.md +1 -1
- package/library/skills/verification-before-completion/resource.yaml +1 -1
- package/library/skills/verifying-scenes/SKILL.md +2 -2
- package/library/skills/verifying-scenes/resource.yaml +1 -1
- package/library/skills/vfx-dissolve/SKILL.md +2 -2
- package/library/skills/vfx-dissolve/resource.yaml +1 -1
- package/library/skills/vfx-fire/SKILL.md +15 -41
- package/library/skills/vfx-fire/resource.yaml +1 -1
- package/library/skills/vfx-hit-spark/SKILL.md +1 -1
- package/library/skills/vfx-hit-spark/resource.yaml +1 -1
- package/library/skills/vfx-lightning/SKILL.md +7 -16
- package/library/skills/vfx-lightning/resource.yaml +1 -1
- package/library/skills/vfx-magic-glow/SKILL.md +23 -32
- package/library/skills/vfx-magic-glow/resource.yaml +1 -1
- package/library/skills/vfx-muzzle-flash/SKILL.md +20 -35
- package/library/skills/vfx-muzzle-flash/resource.yaml +1 -1
- package/library/skills/vfx-smoke/SKILL.md +13 -31
- package/library/skills/vfx-smoke/resource.yaml +1 -1
- package/library/skills/vfx-water-ripple/SKILL.md +12 -31
- package/library/skills/vfx-water-ripple/resource.yaml +1 -1
- package/library/skills/voice-line/SKILL.md +71 -40
- package/library/skills/voice-line/resource.yaml +1 -1
- package/library/skills/web-and-touch-input/SKILL.md +1 -1
- package/library/skills/web-and-touch-input/resource.yaml +1 -1
- package/library/skills/web-compatibility-look/SKILL.md +1 -1
- package/library/skills/web-compatibility-look/resource.yaml +1 -1
- package/library/skills/world-building-3d/SKILL.md +1 -1
- package/library/skills/world-building-3d/resource.yaml +1 -1
- package/library/skills/writing-skills/resource.yaml +1 -0
- package/library/tools/add-node/GUIDE.md +14 -0
- package/library/tools/align-distribute-3d/GUIDE.md +7 -0
- package/library/tools/app-call/resource.yaml +59 -0
- package/library/tools/app-create/resource.yaml +67 -0
- package/library/tools/app-data/resource.yaml +74 -0
- package/library/tools/app-dock/resource.yaml +59 -0
- package/library/tools/app-events/resource.yaml +68 -0
- package/library/tools/app-get/resource.yaml +46 -0
- package/library/tools/app-guide/resource.yaml +55 -0
- package/library/tools/app-list/resource.yaml +48 -0
- package/library/tools/app-page/resource.yaml +74 -0
- package/library/tools/app-publish/resource.yaml +90 -0
- package/library/tools/app-report-gap/resource.yaml +58 -0
- package/library/tools/app-screenshot/resource.yaml +103 -0
- package/library/tools/app-tools/resource.yaml +46 -0
- package/library/tools/app-update/resource.yaml +68 -0
- package/library/tools/attach-to-surface/GUIDE.md +15 -0
- package/library/tools/batch/GUIDE.md +27 -0
- package/library/tools/camera-bookmark/GUIDE.md +12 -0
- package/library/tools/capture-gameplay/GUIDE.md +3 -0
- package/library/tools/capture-gameplay/resource.yaml +3 -3
- package/library/tools/check-job/resource.yaml +1 -1
- package/library/tools/clear-console/GUIDE.md +3 -0
- package/library/tools/connect-ports/GUIDE.md +9 -0
- package/library/tools/connect-signal/GUIDE.md +14 -0
- package/library/tools/create-debug-report/GUIDE.md +10 -0
- package/library/tools/create-scene/GUIDE.md +10 -0
- package/library/tools/debug-views/GUIDE.md +7 -0
- package/library/tools/enable-plugin/GUIDE.md +3 -0
- package/library/tools/enable-plugin/resource.yaml +53 -0
- package/library/tools/export-game/GUIDE.md +3 -0
- package/library/tools/export-game/resource.yaml +3 -3
- package/library/tools/export-templates/GUIDE.md +3 -0
- package/library/tools/fabricate-3d/GUIDE.md +19 -0
- package/library/tools/frame-nodes/GUIDE.md +9 -0
- package/library/tools/frame-shot/GUIDE.md +9 -0
- package/library/tools/game-control/GUIDE.md +9 -0
- package/library/tools/game-input/GUIDE.md +9 -0
- package/library/tools/game-probe/GUIDE.md +9 -0
- package/library/tools/generate-3d/resource.yaml +3 -3
- package/library/tools/generate-motion/resource.yaml +2 -2
- package/library/tools/get-console/GUIDE.md +9 -0
- package/library/tools/get-console/resource.yaml +5 -0
- package/library/tools/get-debugger-errors/GUIDE.md +7 -0
- package/library/tools/get-debugger-errors/resource.yaml +5 -0
- package/library/tools/get-debugger-warnings/GUIDE.md +7 -0
- package/library/tools/get-debugger-warnings/resource.yaml +5 -0
- package/library/tools/get-diagnostics/GUIDE.md +13 -0
- package/library/tools/get-project-context/GUIDE.md +25 -0
- package/library/tools/get-runtime-tree/GUIDE.md +7 -0
- package/library/tools/get-runtime-tree/resource.yaml +5 -0
- package/library/tools/get-scene-tree/GUIDE.md +11 -0
- package/library/tools/get-scene-tree/resource.yaml +5 -0
- package/library/tools/get-script-errors/GUIDE.md +5 -0
- package/library/tools/grep/GUIDE.md +11 -0
- package/library/tools/import-asset/GUIDE.md +8 -0
- package/library/tools/import-asset-by-id/GUIDE.md +12 -0
- package/library/tools/import-from-url/GUIDE.md +10 -0
- package/library/tools/import-from-url-batch/GUIDE.md +3 -0
- package/library/tools/import-hdri/GUIDE.md +16 -0
- package/library/tools/input-map-bind/GUIDE.md +11 -0
- package/library/tools/inspect-asset/GUIDE.md +14 -0
- package/library/tools/inspect-asset/resource.yaml +5 -0
- package/library/tools/inspect-node/GUIDE.md +11 -0
- package/library/tools/inspect-node/resource.yaml +5 -0
- package/library/tools/inspect-resource/GUIDE.md +7 -0
- package/library/tools/inspect-resource/resource.yaml +5 -0
- package/library/tools/inspect-runtime-node/GUIDE.md +7 -0
- package/library/tools/inspect-runtime-node/resource.yaml +5 -0
- package/library/tools/instantiate-scene/GUIDE.md +12 -0
- package/library/tools/is-running/GUIDE.md +3 -0
- package/library/tools/measure/GUIDE.md +8 -0
- package/library/tools/navigation-probe/GUIDE.md +9 -0
- package/library/tools/open/resource.yaml +2 -2
- package/library/tools/open-main-scene/GUIDE.md +6 -0
- package/library/tools/open-scene/GUIDE.md +8 -0
- package/library/tools/place-adjacent/GUIDE.md +7 -0
- package/library/tools/play/GUIDE.md +13 -0
- package/library/tools/project-setting/GUIDE.md +9 -0
- package/library/tools/publish-build/resource.yaml +6 -6
- package/library/tools/raycast/GUIDE.md +7 -0
- package/library/tools/read-file/GUIDE.md +10 -0
- package/library/tools/read-library/resource.yaml +5 -0
- package/library/tools/recent-events/GUIDE.md +7 -0
- package/library/tools/remove-node/GUIDE.md +3 -0
- package/library/tools/repeat-along/GUIDE.md +5 -0
- package/library/tools/replace-node/GUIDE.md +9 -0
- package/library/tools/replace-text/GUIDE.md +5 -0
- package/library/tools/run-editor-script/GUIDE.md +16 -0
- package/library/tools/run-script/GUIDE.md +30 -0
- package/library/tools/run-script/resource.yaml +6 -3
- package/library/tools/runtime-animate/GUIDE.md +7 -0
- package/library/tools/runtime-call/GUIDE.md +7 -0
- package/library/tools/runtime-set/GUIDE.md +9 -0
- package/library/tools/runtime-spawn/GUIDE.md +9 -0
- package/library/tools/save-scene/GUIDE.md +3 -0
- package/library/tools/scene-audit/GUIDE.md +29 -0
- package/library/tools/screenshot/GUIDE.md +17 -0
- package/library/tools/select-node/GUIDE.md +3 -0
- package/library/tools/set-prop/GUIDE.md +23 -0
- package/library/tools/set-resource-property/GUIDE.md +8 -0
- package/library/tools/shot-sheet/GUIDE.md +7 -0
- package/library/tools/snap-to-surface/GUIDE.md +17 -0
- package/library/tools/snapshot-diff/GUIDE.md +7 -0
- package/library/tools/starcast/GUIDE.md +12 -0
- package/library/tools/stop/GUIDE.md +3 -0
- package/library/tools/test-placement/GUIDE.md +7 -0
- package/library/tools/ui-actions/GUIDE.md +12 -0
- package/library/tools/ui-activate/GUIDE.md +11 -0
- package/library/tools/ui-screenshot/GUIDE.md +9 -0
- package/library/tools/ui-tree/GUIDE.md +10 -0
- package/library/tools/wait-for-event/GUIDE.md +11 -0
- package/library/tools/world-snapshot/GUIDE.md +9 -0
- package/library/tools/write-file/GUIDE.md +5 -0
- package/library/tools/zoom/GUIDE.md +5 -0
- package/package.json +6 -4
- package/registry/generated/aliases.json +15 -0
- package/registry/generated/counts.json +3 -3
- package/registry/generated/gemini-extension.json +6 -12
- package/registry/generated/index.json +1155 -408
- package/registry/generated/marketplace.claude.json +2 -13
- package/registry/generated/plugin.claude.json +25 -22
- package/registry/generated/plugin.codex.json +8 -14
- package/registry/generated/plugin.cursor.json +7 -13
- package/registry/generated/plugin.factory.json +7 -13
- package/registry/generated/server.json +34 -0
- package/registry/generated/skills-index.md +126 -116
- package/registry/generated/skills-registry.json +178 -113
- package/registry/operations/fixtures/invalid-deprecated-without-replacement.json +60 -0
- package/registry/operations/fixtures/invalid-name.json +60 -0
- package/registry/operations/fixtures/invalid-publish-without-owner.json +82 -0
- package/registry/operations/fixtures/invalid-spend-without-estimate.json +42 -0
- package/registry/operations/fixtures/invalid-unknown-field.json +61 -0
- package/registry/operations/fixtures/valid-player-facing.json +82 -0
- package/registry/operations/fixtures/valid-read.json +60 -0
- package/registry/operations/fixtures/valid-spend.json +43 -0
- package/registry/operations/legacy-names.json +1206 -0
- package/registry/schemas/allowed-hosts.json +4 -2
- package/registry/schemas/operation.schema.json +318 -0
- package/registry/schemas/skill.schema.json +4 -0
- package/CLAUDE.md +0 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: character-animation-wiring
|
|
3
|
-
description: "Wire a rigged
|
|
3
|
+
description: "Wire a rigged character end to end: real clips and bones, locomotion states, method tracks, root motion."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: animation
|
|
@@ -11,7 +11,7 @@ paths: ["**/*.gd", "**/*.tscn", "**/*.glb"]
|
|
|
11
11
|
|
|
12
12
|
# Character Animation Wiring — Rigged GLB to Living Character
|
|
13
13
|
|
|
14
|
-
The game-critical path: a rigged, animated character lands in the scene — from `
|
|
14
|
+
The game-critical path: a rigged, animated character lands in the scene — from `assets.generate_3d({ ..., rig: true })` + `assets.generate_motion`, or an imported GLB — and nothing moves yet. This skill wires it end to end: inspect what actually arrived, build locomotion, fire gameplay events off animation frames, add poses and head tracking, key the face, and handle root motion. Then **prove it in a playtest** — a wired tree that was never played is a claim, not a result.
|
|
15
15
|
|
|
16
16
|
Two lanes throughout:
|
|
17
17
|
|
|
@@ -85,7 +85,7 @@ Read the reports. Every later step quotes these exact strings. If the clip list
|
|
|
85
85
|
```gdscript
|
|
86
86
|
func run(ctx):
|
|
87
87
|
var character = ctx.find("Goblin")
|
|
88
|
-
var tree
|
|
88
|
+
var tree = ctx.anim_state_machine(character, {
|
|
89
89
|
"states": {"idle": "idle", "walk": "walk", "run": "run"},
|
|
90
90
|
"transitions": [
|
|
91
91
|
["idle", "walk", {"blend_s": 0.2}],
|
|
@@ -150,7 +150,7 @@ func run(ctx):
|
|
|
150
150
|
Head tracking — one call creates the owned `LookAtModifier3D` under the skeleton:
|
|
151
151
|
|
|
152
152
|
```gdscript
|
|
153
|
-
var mod
|
|
153
|
+
var mod = ctx.look_at_modifier(skel, ctx.find("Player"), {"bone_name": "Head"})
|
|
154
154
|
```
|
|
155
155
|
|
|
156
156
|
Unknown props land in `prop_warnings` — read them. Angle limits, influence fade-out by distance, and spine-chain distribution are the difference between alive and possessed: tune per `procedural-animation` (A1/A2).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/character-animation-wiring
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.1
|
|
4
|
-
summary: Wire a rigged
|
|
4
|
+
summary: "Wire a rigged character end to end: real clips and bones, locomotion states, method tracks, root motion."
|
|
5
5
|
use_when:
|
|
6
6
|
- a rigged GLB or Meshy rig with generated clips is in the scene and needs idle/walk/run wiring with blend times
|
|
7
7
|
- footstep or attack-frame events, head tracking, still poses, blend-shape facial keys, or root motion must be hooked up
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: character-model
|
|
3
|
-
description: "Generate a rigged humanoid
|
|
3
|
+
description: "Generate a rigged humanoid (player, NPC, enemy, boss) from a T-pose reference, previewed before rigging."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: 3d-assets
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read Grep
|
|
8
|
+
allowed-tools: Read Grep summer_assets_search summer_assets_get summer_import_asset_by_id summer_assets_generate_image summer_assets_generate_3d summer_import_from_url summer_add_node summer_set_prop summer_set_resource_property summer_inspect_node summer_inspect_resource summer_get_scene_tree summer_save_scene summer_jobs_wait summer_assets_generate_motion summer_call
|
|
9
9
|
paths: ["assets/characters/**", "assets/models/**", "**/*.tscn", "**/*.gd"]
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -16,16 +16,18 @@ This is the canonical auto-rig pipeline. It produces a humanoid `.glb` with a sk
|
|
|
16
16
|
The whole flow:
|
|
17
17
|
|
|
18
18
|
```
|
|
19
|
-
1. T-pose reference image →
|
|
20
|
-
2. Un-rigged 3D mesh →
|
|
19
|
+
1. T-pose reference image → assets.generate_image (~10s)
|
|
20
|
+
2. Un-rigged 3D mesh → assets.generate_3d(image-to-3d) → a job (~60s)
|
|
21
21
|
3. ── USER REVIEW GATE ──
|
|
22
|
-
4. Rigged .glb →
|
|
22
|
+
4. Rigged .glb → assets.generate_3d(image-to-3d, rig) → a job (~90s)
|
|
23
23
|
5. Import → editor RESTART → wire as CharacterBody3D / Node3D
|
|
24
24
|
6. Hand off to generate-motion for clips
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
The animation skill (`generate-motion`) requires a rigged humanoid; a static `.glb` won't drive motion.
|
|
28
28
|
|
|
29
|
+
`assets.generate_3d` always answers at once with a job (`{ status: "running", job: { id } }`); `jobs.wait({ jobId, timeoutSeconds: 50 })` follows it, called again until `finished` is true. The finished job's `result` holds the asset ids. Both passes spend the person's credits: `dryRun: true` on any call returns the estimate (`credits`, `balance`, `enough`) and changes nothing.
|
|
30
|
+
|
|
29
31
|
## When to use
|
|
30
32
|
|
|
31
33
|
- "Make a knight character for the player to control."
|
|
@@ -46,11 +48,11 @@ The animation skill (`generate-motion`) requires a rigged humanoid; a static `.g
|
|
|
46
48
|
|
|
47
49
|
| Role | Tris | Pass via |
|
|
48
50
|
|---|---|---|
|
|
49
|
-
| Hero character (player, close camera) | 8k–15k | `
|
|
50
|
-
| Grunt enemy (mid-range, multiple onscreen) | 3k–6k | `
|
|
51
|
-
| Crowd / background NPC (LOD-able) | 1k–2k | `
|
|
52
|
-
| Mobile-game character | 1k–3k | `
|
|
53
|
-
| Cinematic hero (no realtime constraint) | 20k–40k | `
|
|
51
|
+
| Hero character (player, close camera) | 8k–15k | `targetPolycount: 12000` |
|
|
52
|
+
| Grunt enemy (mid-range, multiple onscreen) | 3k–6k | `targetPolycount: 5000` |
|
|
53
|
+
| Crowd / background NPC (LOD-able) | 1k–2k | `targetPolycount: 1500` |
|
|
54
|
+
| Mobile-game character | 1k–3k | `targetPolycount: 2000` |
|
|
55
|
+
| Cinematic hero (no realtime constraint) | 20k–40k | `targetPolycount: 30000` |
|
|
54
56
|
|
|
55
57
|
Pass at the **mesh-generation step** (step 2). The rig pass preserves the topology; you can't reduce polycount after rigging without breaking weights.
|
|
56
58
|
|
|
@@ -61,10 +63,11 @@ Pass at the **mesh-generation step** (step 2). The rig pass preserves the topolo
|
|
|
61
63
|
The rig pass requires a **front-facing T-pose** with arms out and legs slightly apart. If the reference is in an action pose, the rig will bend wrong and locomotion clips will look broken (knees inverted, elbows snapped — common Meshy failure mode).
|
|
62
64
|
|
|
63
65
|
```
|
|
64
|
-
|
|
65
|
-
prompt
|
|
66
|
-
model
|
|
67
|
-
|
|
66
|
+
assets.generate_image({
|
|
67
|
+
prompt: "A fantasy knight in full plate armor, red cape, T-pose, arms straight out horizontal, legs slightly apart, front-facing, neutral expression. Game character asset, stylized, clean white background, soft studio lighting, full body in frame, ready for 3D mesh generation.",
|
|
68
|
+
model: "nano-banana-2",
|
|
69
|
+
aspectRatio: "3:4"
|
|
70
|
+
})
|
|
68
71
|
```
|
|
69
72
|
|
|
70
73
|
The phrase `T-pose, arms straight out horizontal, legs slightly apart, front-facing` is load-bearing — drop any of those and the model will drift toward A-pose or a hero stance.
|
|
@@ -72,7 +75,7 @@ The phrase `T-pose, arms straight out horizontal, legs slightly apart, front-fac
|
|
|
72
75
|
If the user already has a concept image in an action pose, re-pose it to T-pose via img2img without re-rolling the design:
|
|
73
76
|
|
|
74
77
|
```
|
|
75
|
-
|
|
78
|
+
assets.generate_image({
|
|
76
79
|
referenceImageUrl: "<existing concept image>",
|
|
77
80
|
prompt: "<character> in T-pose, arms extended horizontally, neutral facing camera, white background, clean lighting"
|
|
78
81
|
})
|
|
@@ -85,20 +88,20 @@ Show the image to the user:
|
|
|
85
88
|
### 2. Generate the un-rigged 3D mesh
|
|
86
89
|
|
|
87
90
|
```
|
|
88
|
-
|
|
89
|
-
kind
|
|
90
|
-
imageUrl
|
|
91
|
-
model
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
)
|
|
91
|
+
assets.generate_3d({
|
|
92
|
+
kind: "image-to-3d",
|
|
93
|
+
imageUrl: "<image url from step 1>",
|
|
94
|
+
model: "hunyuan",
|
|
95
|
+
targetPolycount: 12000
|
|
96
|
+
})
|
|
97
|
+
jobs.wait({ jobId: "<job.id>", timeoutSeconds: 50 }) // again until finished
|
|
95
98
|
```
|
|
96
99
|
|
|
97
|
-
|
|
100
|
+
The finished job's `result` has `assetId` and `fileUrl` — an un-rigged static `.glb`.
|
|
98
101
|
Use the asset ID as the stable handle. Import it for preview only:
|
|
99
102
|
|
|
100
103
|
```
|
|
101
|
-
|
|
104
|
+
assets.get({ assetId: "<assetId>" })
|
|
102
105
|
summer_import_asset_by_id(
|
|
103
106
|
assetId="<assetId>",
|
|
104
107
|
path="res://assets/characters/knight_unrigged.glb"
|
|
@@ -120,25 +123,25 @@ If the user wants changes, loop back to step 1 or 2. Do NOT silently run the rig
|
|
|
120
123
|
### 4. Run the rig pass
|
|
121
124
|
|
|
122
125
|
```
|
|
123
|
-
|
|
126
|
+
assets.generate_3d({
|
|
124
127
|
kind: "image-to-3d",
|
|
125
128
|
imageUrl: "<image url from step 1>",
|
|
126
129
|
rig: true,
|
|
127
|
-
|
|
130
|
+
targetPolycount: 12000
|
|
128
131
|
})
|
|
132
|
+
jobs.wait({ jobId: "<job.id>", timeoutSeconds: 50 }) // again until finished
|
|
129
133
|
```
|
|
130
134
|
|
|
131
|
-
`rig`
|
|
135
|
+
`rig` and `targetPolycount` are plain fields of `assets.generate_3d` (there is no `options` object and no `polyTarget`). Related fields worth knowing here: `riggingHeightMeters` for character height, and `animationNames` / `actionIds` to have the shared animated-character pipeline produce clips in the same job instead of a separate `assets.generate_motion` pass.
|
|
132
136
|
|
|
133
|
-
|
|
134
|
-
If you ran with `wait: false`, poll via `summer_check_job(jobId)`. The
|
|
137
|
+
The finished job's `result` includes `assetId`, `fileUrl`, and `rigAssetId`. The
|
|
135
138
|
`rigAssetId` is the handle `generate-motion` needs — store it.
|
|
136
139
|
Resolve it before import so the agent has the viewer/download metadata:
|
|
137
140
|
|
|
138
141
|
Import the rigged version, replacing the un-rigged file:
|
|
139
142
|
|
|
140
143
|
```
|
|
141
|
-
|
|
144
|
+
assets.get({ assetId: "<rigAssetId>" })
|
|
142
145
|
summer_import_asset_by_id(
|
|
143
146
|
assetId="<rigAssetId>",
|
|
144
147
|
path="res://assets/characters/knight.glb"
|
|
@@ -162,27 +165,28 @@ No programmatic workaround is known. Tell the user, wait, then continue.
|
|
|
162
165
|
| Pure-visual character (background extra, dialogue head) | `Node3D` | Same as above |
|
|
163
166
|
| Ragdoll-on-death enemy | `CharacterBody3D` while alive, swap to `RigidBody3D` skeleton on death | Two-mode rig; see `procedural-animation` |
|
|
164
167
|
|
|
165
|
-
|
|
168
|
+
Three things the call shapes below encode:
|
|
166
169
|
|
|
167
|
-
- **Every scene
|
|
168
|
-
- **
|
|
169
|
-
-
|
|
170
|
-
- **A `.glb` is instantiated, not assigned.** There is no `scene` property on `Node3D`, and an imported `.glb` is a scene rather than a `Mesh` — on the shipped 4.6.1 binary `ResourceLoader.get_recognized_extensions_for_type("Mesh")` returns `["tres", "mesh", "res"]`, with no `glb`. Use `summer_instantiate_scene`.
|
|
170
|
+
- **Every scene tool, `summer_run_script` included, takes an explicit `scenePath`**, and the scene need not be the active editor tab.
|
|
171
|
+
- **A character is several nodes: build it in one `summer_run_script`**, not a chain of single calls.
|
|
172
|
+
- **A `.glb` is instantiated, not assigned.** There is no `scene` property on `Node3D`, and an imported `.glb` is a scene rather than a `Mesh` — on the shipped 4.6.1 binary `ResourceLoader.get_recognized_extensions_for_type("Mesh")` returns `["tres", "mesh", "res"]`, with no `glb`. Use `ctx.instance_scene` in a script, or `summer_instantiate_scene` for one model.
|
|
171
173
|
|
|
172
174
|
**CharacterBody3D wiring (player / enemy):**
|
|
173
175
|
|
|
174
176
|
```
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
177
|
+
summer_run_script(scenePath="res://main.tscn", source="""
|
|
178
|
+
func run(ctx):
|
|
179
|
+
var knight = ctx.add_node("CharacterBody3D", "Knight", ctx.find("World"), {"position": Vector3(0, 0, 0)})
|
|
180
|
+
ctx.instance_scene("res://assets/characters/knight.glb", knight, "Mesh")
|
|
181
|
+
var capsule := CapsuleShape3D.new()
|
|
182
|
+
capsule.height = 1.7
|
|
183
|
+
capsule.radius = 0.4
|
|
184
|
+
ctx.add_node("CollisionShape3D", "Collider", knight, {"shape": capsule})
|
|
185
|
+
ctx.save_scene()
|
|
186
|
+
""")
|
|
183
187
|
```
|
|
184
188
|
|
|
185
|
-
|
|
189
|
+
Build the shape as a real resource and size it before you assign it. Later, one size change on that shape is one `summer_set_resource_property` (`nodePath`, `resourceProperty="shape"`, `subProperty`, `value`, plus `scenePath`).
|
|
186
190
|
|
|
187
191
|
**Node3D wiring (cinematic NPC):**
|
|
188
192
|
|
|
@@ -198,8 +202,8 @@ The imported `.glb` includes its own `Skeleton3D` and `AnimationPlayer` (empty l
|
|
|
198
202
|
> Knight is wired at `./World/Knight` with an auto-rigged skeleton. `rigAssetId` saved.
|
|
199
203
|
>
|
|
200
204
|
> Next: `generate-motion` to add idle / walk / run / attack
|
|
201
|
-
> clips. Example call: `
|
|
202
|
-
> backend: "meshy-library",
|
|
205
|
+
> clips. Example call: `assets.generate_motion({ rigAssetId: "<saved id>",
|
|
206
|
+
> backend: "meshy-library", motionNames: ["walk"] })`. For custom actions, use
|
|
203
207
|
> `text-to-motion` (`backend: "text-to-motion"`).
|
|
204
208
|
|
|
205
209
|
## Anti-patterns
|
|
@@ -220,6 +224,10 @@ The imported `.glb` includes its own `Skeleton3D` and `AnimationPlayer` (empty l
|
|
|
220
224
|
- **First-person hands-only character.** Generate just hands + forearms in T-pose; rig pass still works. See `fps-controller` for first-person wiring.
|
|
221
225
|
- **Stylized non-human (goblin, orc, halfling).** Works fine as long as the silhouette is bipedal with two arms, two legs, one head. Quadrupeds and centaurs do not.
|
|
222
226
|
|
|
227
|
+
## Without Summer Engine
|
|
228
|
+
|
|
229
|
+
In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), do steps 1-4, including the review gate, and stop when the rig pass finishes. Skip steps 5-6 (editor restart, scene wiring). Save the rigged GLB (`rigAssetId`; the unrigged mesh is `assetId`) where the person asked with `out` on `jobs.wait` or `assets.get` (the `summer-assets` skill says how), and tell them the path. Step 7 still applies: `generate-motion` runs without the engine.
|
|
230
|
+
|
|
223
231
|
## Fallback (no MCP)
|
|
224
232
|
|
|
225
233
|
1. Generate the T-pose reference in the Summer dashboard.
|
|
@@ -248,4 +256,4 @@ After the rigged character is wired:
|
|
|
248
256
|
- `asset-strategy` — meta-router; this skill is the canonical drill-down of its "Image-to-3D for characters" path.
|
|
249
257
|
- `prop-model` — for non-character props.
|
|
250
258
|
- `scene-composition` — for the CharacterBody3D + Mesh + Collider parent pattern.
|
|
251
|
-
-
|
|
259
|
+
- `summer_docs_read` id `reference/mcp-tools-reference` — how to call `assets.generate_3d`, `assets.generate_image` and `assets.generate_motion`; `summer_search` returns each one's exact input.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/character-model
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.2
|
|
4
|
-
summary: Generate a rigged humanoid
|
|
4
|
+
summary: "Generate a rigged humanoid (player, NPC, enemy, boss) from a T-pose reference, previewed before rigging."
|
|
5
5
|
use_when:
|
|
6
6
|
- generating a humanoid character ready for animation — player avatar, NPC, enemy, boss, companion
|
|
7
7
|
- the user asks for a rigged humanoid or a model with a skeleton
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: character-movement
|
|
3
|
-
description: "Player controllers for 2D and 3D, plus the
|
|
3
|
+
description: "Player controllers for 2D and 3D, plus the standard third-person controller for Summer humanoids."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
|
|
6
6
|
category: character-controllers
|
|
@@ -248,7 +248,7 @@ func _physics_process(_delta: float) -> void:
|
|
|
248
248
|
|
|
249
249
|
Survivors-style games with 200+ agents: enemies are `Area2D` moved with
|
|
250
250
|
`position += dir * speed * delta`, NOT physics bodies. See the `make-game`
|
|
251
|
-
skill's
|
|
251
|
+
skill's survivors blueprint (`summer_docs_read` id `skill/make-game/references/2d-survivors.md`). The PLAYER stays a CharacterBody2D.
|
|
252
252
|
|
|
253
253
|
## 3D controller (first + third person)
|
|
254
254
|
|
|
@@ -287,7 +287,7 @@ func _physics_process(delta: float) -> void:
|
|
|
287
287
|
When the player visual is a Summer character package:
|
|
288
288
|
|
|
289
289
|
1. Produce or import the package first — it comes from the shared character
|
|
290
|
-
pipeline (`character-model`; `
|
|
290
|
+
pipeline (`character-model`; `assets.generate_3d` with `rig` and `animationNames`)
|
|
291
291
|
and carries `character.tscn` plus its `character.json` manifest. Instantiate
|
|
292
292
|
`character.tscn`; for clip wiring without this controller see
|
|
293
293
|
`character-animation-wiring`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/character-movement
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.2.1
|
|
4
|
-
summary: "Player controllers for 2D and 3D, plus the
|
|
4
|
+
summary: "Player controllers for 2D and 3D, plus the standard third-person controller for Summer humanoids."
|
|
5
5
|
use_when:
|
|
6
6
|
- building or fixing player movement — gravity, collision, side-scroller, top-down, or 3D walk
|
|
7
7
|
- wiring an imported Summer character package (character.tscn) as the playable third-person player
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: character-portrait
|
|
3
|
-
description: "Generate
|
|
3
|
+
description: "Generate one polished character bust for dialogue UI, character select, lore cards or codex entries."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: 2d-assets
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read Grep Glob Write Edit
|
|
8
|
+
allowed-tools: Read Grep Glob Write Edit summer_assets_generate_image summer_assets_search summer_import_from_url summer_set_prop summer_set_resource_property summer_call
|
|
9
9
|
paths: ["assets/**", "art/portraits/**", "ui/portraits/**"]
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -62,14 +62,14 @@ background: muted painterly gradient, dark teal to deep brown, no scene detail
|
|
|
62
62
|
style: semi-realistic painterly, soft edges, oil-painting feel
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
Note there is no aspect line
|
|
65
|
+
Note there is no aspect line in the anchor: framing is the `aspectRatio` argument of `assets.generate_image`, not prompt text. Bust framing reads fine square (`1:1`, the default); true portrait framing is `aspectRatio: "3:4"`. Whichever you pick, use it for the *whole* cast — mixed aspect is as visible as mixed lighting.
|
|
66
66
|
|
|
67
67
|
Every subsequent portrait in this cast appends the anchor to the prompt verbatim. **Do not edit the anchor mid-cast** unless the user explicitly says "I want the new ones to look different."
|
|
68
68
|
|
|
69
69
|
### 2. Search for an existing portrait
|
|
70
70
|
|
|
71
71
|
```
|
|
72
|
-
|
|
72
|
+
assets.search({ query: "<character name> portrait", assetType: "2d_image", scope: "all" })
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
Reuse beats regenerate. If the user wants to iterate on an existing one, pull its URL and pass it as `referenceImageUrl` for img2img.
|
|
@@ -89,16 +89,17 @@ The character description should include: identity (age, build, hair, distinctiv
|
|
|
89
89
|
> Generating Aria the witch portrait — 1 image (uses credits), model nano-banana-2, anchor locked from `.summer/portrait-anchor.md`. OK?
|
|
90
90
|
|
|
91
91
|
```
|
|
92
|
-
|
|
93
|
-
prompt
|
|
94
|
-
model
|
|
95
|
-
style
|
|
96
|
-
|
|
92
|
+
assets.generate_image({
|
|
93
|
+
prompt: "Aria, young witch, mid-twenties, pale skin, long black hair with silver streak, sharp green eyes, half-smile, wearing dark indigo robes with silver embroidery, raven on shoulder. <anchor verbatim>",
|
|
94
|
+
model: "nano-banana-2",
|
|
95
|
+
style: "none",
|
|
96
|
+
aspectRatio: "<the cast's framing>"
|
|
97
|
+
})
|
|
97
98
|
```
|
|
98
99
|
|
|
99
100
|
`style: "none"` because the anchor's "semi-realistic painterly" already specifies style. Only `cartoon` and `anime` append anything to the prompt, and `realistic` / `none` append nothing — any other value is coerced to `none`. So the preset cannot "fight" a painterly anchor; it just does nothing either way, and every bit of the look has to be in the prompt.
|
|
100
101
|
|
|
101
|
-
|
|
102
|
+
There is no `options` object: shape and size are `aspectRatio`, `width` and `height`.
|
|
102
103
|
|
|
103
104
|
### 5. Import and wire into UI
|
|
104
105
|
|
|
@@ -129,12 +130,12 @@ For character-select with multiple portraits, name files consistently: `aria.png
|
|
|
129
130
|
If the user wants the portrait tweaked ("smaller smile", "darker robes"), use img2img with the existing image as `referenceImageUrl`. Preserves identity and lighting.
|
|
130
131
|
|
|
131
132
|
```
|
|
132
|
-
|
|
133
|
-
prompt
|
|
134
|
-
referenceImageUrl
|
|
135
|
-
model
|
|
136
|
-
style
|
|
137
|
-
)
|
|
133
|
+
assets.generate_image({
|
|
134
|
+
prompt: "<original prompt> with a smaller, more subtle smile",
|
|
135
|
+
referenceImageUrl: "<previous fileUrl>",
|
|
136
|
+
model: "nano-banana-2",
|
|
137
|
+
style: "none"
|
|
138
|
+
})
|
|
138
139
|
```
|
|
139
140
|
|
|
140
141
|
## Prompt patterns
|
|
@@ -155,7 +156,7 @@ summer_generate_image(
|
|
|
155
156
|
| `cool warrior portrait` | No identity, no anchor. Returns generic stock art. |
|
|
156
157
|
| `the witch but make her sad` (no img2img ref) | Without `referenceImageUrl`, you get a *different* witch who is sad. Identity drift. |
|
|
157
158
|
| Anchor inconsistent across cast | Each portrait looks like a different game. The cast doesn't read as a cast. |
|
|
158
|
-
| `full body portrait` | "Portrait" implies bust. If you want full body, say so explicitly in the prompt
|
|
159
|
+
| `full body portrait` | "Portrait" implies bust. If you want full body, say so explicitly in the prompt and use a tall `aspectRatio` (`2:3`) — full body is a different asset class anyway; consider `concept-art` or the 3D pipeline. |
|
|
159
160
|
| `transparent background` for a painterly portrait | Painterly + transparent fails on most models. Use a flat or gradient background, then alpha-cut in an editor if you must. |
|
|
160
161
|
|
|
161
162
|
## Anti-patterns
|
|
@@ -173,12 +174,16 @@ summer_generate_image(
|
|
|
173
174
|
- **Cast of 12+ characters.** Anchor discipline gets harder as fatigue sets in. Print the anchor as a header in your generation script and don't write any prompt without it.
|
|
174
175
|
- **User wants the portrait to "read at small size" (32×32 in a portrait list).** That's pixel-art territory; route to `pixel-art`.
|
|
175
176
|
|
|
177
|
+
## Without Summer Engine
|
|
178
|
+
|
|
179
|
+
In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), do steps 1-4 and 6, and skip step 5 (import and UI wiring). Pass `out` with the person's folder so the PNG lands there (the `summer-assets` skill says how), and tell them the path.
|
|
180
|
+
|
|
176
181
|
## Fallback (no MCP)
|
|
177
182
|
|
|
178
183
|
Print the prompt and the call:
|
|
179
184
|
|
|
180
185
|
```
|
|
181
|
-
|
|
186
|
+
assets.generate_image({ prompt: "<character + anchor>", model: "nano-banana-2", style: "none" })
|
|
182
187
|
```
|
|
183
188
|
|
|
184
189
|
Tell the user to run via the Summer dashboard, then `summer_import_from_url` the result to `res://ui/portraits/<name>.png`.
|
|
@@ -198,4 +203,4 @@ After the portrait is wired:
|
|
|
198
203
|
- `concept-art` — explore the look first if not yet locked.
|
|
199
204
|
- `asset-strategy` — meta-router and the 3D pipeline.
|
|
200
205
|
- `scene-composition` — wiring the portrait into a dialogue UI scene.
|
|
201
|
-
-
|
|
206
|
+
- `summer_docs_read` id `reference/mcp-tools-reference` — how to call `assets.generate_image`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/character-portrait
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.4
|
|
4
|
-
summary: Generate
|
|
4
|
+
summary: "Generate one polished character bust for dialogue UI, character select, lore cards or codex entries."
|
|
5
5
|
use_when:
|
|
6
6
|
- generating a single polished bust/portrait of a character for dialogue UI, character-select screens, lore cards, or codex entries
|
|
7
7
|
- a dialogue box, party roster, or codex entry needs one consistent face for a named character
|