summer-engine 3.8.0 → 4.2.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 +24 -22
- package/.codex-plugin/plugin.json +18 -22
- package/.cursor-plugin/plugin.json +8 -14
- package/.factory-plugin/plugin.json +6 -13
- package/AGENTS.md +19 -12
- package/CHANGELOG.md +133 -0
- package/GEMINI.md +3 -3
- package/README.md +118 -37
- package/assets/icon.png +0 -0
- package/commands/start.md +71 -0
- package/commands/summer.md +3 -2
- package/dist/cli/banner.js +3 -0
- package/dist/cli/commands/config.js +3 -2
- package/dist/cli/commands/create.js +12 -3
- package/dist/cli/commands/list.d.ts +5 -0
- package/dist/cli/commands/list.js +30 -13
- package/dist/cli/commands/login.d.ts +27 -0
- package/dist/cli/commands/login.js +58 -12
- package/dist/cli/commands/memory.js +6 -2
- package/dist/cli/commands/ops.d.ts +64 -0
- package/dist/cli/commands/ops.js +329 -0
- package/dist/cli/commands/setup.d.ts +4 -0
- package/dist/cli/commands/setup.js +254 -26
- package/dist/cli/commands/skills.js +28 -11
- package/dist/cli/commands/status.d.ts +26 -0
- package/dist/cli/commands/status.js +36 -21
- 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 +33 -10
- package/dist/core/capabilities/apps.js +25 -12
- package/dist/core/capabilities/audit/args.d.ts +6 -6
- package/dist/core/capabilities/doctor.d.ts +3 -0
- package/dist/core/capabilities/doctor.js +20 -15
- package/dist/core/capabilities/fabricate-mesh.d.ts +4 -4
- 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/hdri-import.d.ts +2 -2
- package/dist/core/capabilities/motion-generation.d.ts +2 -2
- 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/placement.d.ts +23 -23
- package/dist/core/capabilities/publish-build.js +2 -0
- package/dist/core/capabilities/runtime-control.d.ts +42 -42
- 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/seeing/args.d.ts +16 -16
- 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 +81 -46
- package/dist/core/capabilities/ui-control.d.ts +2 -2
- package/dist/core/capabilities/world-snapshot.d.ts +4 -4
- 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.d.ts +2 -2
- package/dist/core/library-search.js +2 -1
- package/dist/core/oauth.js +4 -0
- package/dist/core/ops/areas.d.ts +11 -0
- package/dist/core/ops/areas.js +24 -0
- package/dist/core/ops/catalog.d.ts +45 -0
- package/dist/core/ops/catalog.js +157 -0
- package/dist/core/ops/cloud.d.ts +64 -0
- package/dist/core/ops/cloud.js +198 -0
- package/dist/core/ops/contract.d.ts +120 -0
- package/dist/core/ops/contract.js +134 -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/public-catalog.d.ts +48 -0
- package/dist/core/ops/public-catalog.js +56 -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 +8 -0
- package/dist/core/ops/search.js +187 -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 +27 -6
- package/dist/installer/agent-table.d.ts +12 -0
- package/dist/installer/agent-table.js +33 -9
- package/dist/installer/cli-permissions.d.ts +65 -0
- package/dist/installer/cli-permissions.js +182 -0
- package/dist/installer/setup.d.ts +4 -0
- package/dist/installer/setup.js +12 -4
- package/dist/installer/skills-refresh.d.ts +29 -0
- package/dist/installer/skills-refresh.js +261 -0
- package/dist/installer/version-check.d.ts +51 -11
- package/dist/installer/version-check.js +147 -37
- package/dist/mcp/command.js +7 -0
- package/dist/mcp/hosted-mount.d.ts +27 -2
- package/dist/mcp/hosted-mount.js +53 -23
- 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 +453 -0
- package/dist/mcp/server.d.ts +45 -11
- package/dist/mcp/server.js +263 -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.js +9 -2
- 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/dist/project-memory/agent-instructions.d.ts +47 -0
- package/dist/project-memory/agent-instructions.js +226 -0
- package/gemini-extension.json +6 -13
- package/hooks/pre-commit-doctor.sh +5 -4
- package/hooks/session-start.sh +24 -28
- package/integrations/README.md +1 -1
- package/integrations/claude/README.md +6 -0
- package/integrations/claude/manifest-target.json +4 -0
- package/integrations/claude-desktop/README.md +1 -1
- package/integrations/copilot-jetbrains/README.md +1 -1
- package/integrations/gemini/README.md +11 -0
- 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/integrations/windsurf/README.md +1 -1
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +79 -51
- 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 +69 -28
- package/library/skills/3d-lighting/resource.yaml +1 -1
- package/library/skills/README.md +121 -118
- package/library/skills/adaptive-music/SKILL.md +40 -23
- package/library/skills/adaptive-music/resource.yaml +1 -1
- package/library/skills/agent-playtesting/SKILL.md +23 -1
- package/library/skills/agent-playtesting/resource.yaml +1 -1
- package/library/skills/ai-characters-in-games/SKILL.md +16 -1
- package/library/skills/ai-characters-in-games/resource.yaml +1 -1
- package/library/skills/ambient-bed/SKILL.md +38 -13
- package/library/skills/ambient-bed/resource.yaml +1 -1
- package/library/skills/animated-loop/SKILL.md +60 -32
- package/library/skills/animated-loop/resource.yaml +1 -1
- package/library/skills/animation-tree/SKILL.md +27 -1
- package/library/skills/animation-tree/resource.yaml +1 -1
- package/library/skills/art-direction/SKILL.md +17 -3
- package/library/skills/art-direction/resource.yaml +1 -1
- package/library/skills/asset-strategy/SKILL.md +51 -4
- package/library/skills/asset-strategy/resource.yaml +2 -1
- package/library/skills/audio-direction/SKILL.md +26 -10
- package/library/skills/audio-direction/resource.yaml +1 -1
- package/library/skills/auto-fire-targeting/SKILL.md +15 -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 +14 -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 +11 -1
- package/library/skills/browse-templates/resource.yaml +1 -1
- package/library/skills/camera-rigs/SKILL.md +22 -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 +28 -4
- package/library/skills/character-animation-wiring/resource.yaml +1 -1
- package/library/skills/character-model/SKILL.md +83 -47
- package/library/skills/character-model/resource.yaml +1 -1
- package/library/skills/character-movement/SKILL.md +27 -3
- package/library/skills/character-movement/resource.yaml +1 -1
- package/library/skills/character-portrait/SKILL.md +39 -19
- package/library/skills/character-portrait/resource.yaml +1 -1
- package/library/skills/cinematic-cutscene/SKILL.md +79 -46
- package/library/skills/cinematic-cutscene/resource.yaml +1 -1
- package/library/skills/combat-basics/SKILL.md +20 -1
- package/library/skills/combat-basics/resource.yaml +1 -1
- package/library/skills/compatibility-renderer-traps/SKILL.md +12 -1
- package/library/skills/compatibility-renderer-traps/resource.yaml +1 -1
- package/library/skills/concept-art/SKILL.md +29 -12
- package/library/skills/concept-art/resource.yaml +1 -1
- package/library/skills/concept-to-level/SKILL.md +258 -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 +37 -13
- package/library/skills/create-asset-sheet/resource.yaml +1 -1
- package/library/skills/debug/SKILL.md +34 -2
- package/library/skills/debug/resource.yaml +1 -1
- package/library/skills/debugging-game-feel/SKILL.md +13 -1
- package/library/skills/debugging-game-feel/resource.yaml +1 -1
- package/library/skills/design-level/SKILL.md +40 -35
- package/library/skills/design-level/resource.yaml +1 -1
- package/library/skills/design-mechanic/SKILL.md +18 -1
- package/library/skills/design-mechanic/resource.yaml +1 -1
- package/library/skills/design-npc/SKILL.md +43 -24
- package/library/skills/design-npc/resource.yaml +1 -1
- package/library/skills/diagnosing-perf-regressions/SKILL.md +13 -1
- package/library/skills/diagnosing-perf-regressions/resource.yaml +1 -1
- package/library/skills/driving-the-editor-ui/SKILL.md +24 -1
- package/library/skills/driving-the-editor-ui/resource.yaml +1 -1
- package/library/skills/environment-kit/SKILL.md +43 -16
- package/library/skills/environment-kit/resource.yaml +1 -1
- package/library/skills/export-and-ship/SKILL.md +29 -6
- package/library/skills/export-and-ship/resource.yaml +1 -1
- package/library/skills/fabricating-assets/SKILL.md +30 -7
- package/library/skills/fabricating-assets/resource.yaml +3 -3
- package/library/skills/facial-and-lipsync/SKILL.md +36 -15
- package/library/skills/facial-and-lipsync/resource.yaml +1 -1
- package/library/skills/fps-controller/SKILL.md +50 -41
- package/library/skills/fps-controller/resource.yaml +1 -1
- package/library/skills/game-feel/SKILL.md +34 -8
- package/library/skills/game-feel/resource.yaml +1 -1
- package/library/skills/gameskill/SKILL.md +15 -4
- package/library/skills/gameskill/resource.yaml +1 -1
- package/library/skills/gdscript-patterns/SKILL.md +16 -1
- package/library/skills/gdscript-patterns/resource.yaml +1 -1
- package/library/skills/generate-motion/SKILL.md +51 -21
- package/library/skills/generate-motion/resource.yaml +1 -1
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +18 -1
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +1 -0
- package/library/skills/grow-analytics/SKILL.md +13 -3
- package/library/skills/grow-analytics/resource.yaml +1 -1
- package/library/skills/headless-scripting/SKILL.md +14 -1
- package/library/skills/headless-scripting/resource.yaml +1 -1
- package/library/skills/in-game-purchases/SKILL.md +12 -1
- package/library/skills/in-game-purchases/resource.yaml +1 -1
- package/library/skills/instantiate-asset-pack/SKILL.md +19 -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 +33 -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 +13 -1
- package/library/skills/multiplayer/resource.yaml +1 -1
- package/library/skills/multiplayer-movement/SKILL.md +19 -1
- package/library/skills/multiplayer-movement/resource.yaml +1 -1
- package/library/skills/multiplayer-project/SKILL.md +18 -1
- package/library/skills/multiplayer-project/resource.yaml +1 -1
- package/library/skills/multiplayer-publish/SKILL.md +25 -7
- package/library/skills/multiplayer-publish/resource.yaml +3 -3
- package/library/skills/multiplayer-state/SKILL.md +17 -1
- package/library/skills/multiplayer-state/resource.yaml +1 -1
- package/library/skills/multiplayer-testing/SKILL.md +16 -1
- package/library/skills/multiplayer-testing/resource.yaml +1 -1
- package/library/skills/music-track/SKILL.md +38 -13
- package/library/skills/music-track/resource.yaml +1 -1
- package/library/skills/navigate-summer/SKILL.md +26 -9
- package/library/skills/navigate-summer/resource.yaml +1 -1
- package/library/skills/new-project/SKILL.md +12 -1
- package/library/skills/new-project/resource.yaml +1 -1
- package/library/skills/organic-model/SKILL.md +48 -18
- package/library/skills/organic-model/resource.yaml +1 -1
- package/library/skills/pixel-art/SKILL.md +42 -23
- package/library/skills/pixel-art/resource.yaml +1 -1
- package/library/skills/play/SKILL.md +19 -1
- package/library/skills/play/resource.yaml +1 -1
- package/library/skills/playtesting-a-feature/SKILL.md +24 -1
- package/library/skills/playtesting-a-feature/resource.yaml +1 -1
- package/library/skills/procedural-animation/SKILL.md +38 -16
- package/library/skills/procedural-animation/resource.yaml +1 -1
- package/library/skills/prop-model/SKILL.md +48 -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 +43 -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 +13 -1
- package/library/skills/release-readiness/resource.yaml +1 -1
- package/library/skills/remote-deploy/SKILL.md +15 -1
- package/library/skills/remote-deploy/resource.yaml +1 -1
- package/library/skills/retarget/SKILL.md +43 -20
- package/library/skills/retarget/resource.yaml +1 -1
- package/library/skills/running-in-the-cloud/SKILL.md +11 -1
- package/library/skills/running-in-the-cloud/resource.yaml +1 -1
- package/library/skills/save-load/SKILL.md +16 -1
- package/library/skills/save-load/resource.yaml +1 -1
- package/library/skills/scene-composition/SKILL.md +18 -1
- package/library/skills/scene-composition/resource.yaml +1 -1
- package/library/skills/scene-hierarchy-design/SKILL.md +26 -2
- package/library/skills/scene-hierarchy-design/resource.yaml +1 -1
- package/library/skills/scene-scripting/SKILL.md +96 -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 +24 -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 +12 -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 +47 -21
- package/library/skills/skybox-panorama/resource.yaml +1 -1
- package/library/skills/sound-effect/SKILL.md +52 -20
- package/library/skills/sound-effect/resource.yaml +1 -1
- package/library/skills/spatial-placement/SKILL.md +44 -9
- package/library/skills/spatial-placement/resource.yaml +1 -1
- package/library/skills/sprite-sheet/SKILL.md +55 -27
- package/library/skills/sprite-sheet/resource.yaml +1 -1
- package/library/skills/store-art/SKILL.md +14 -3
- package/library/skills/store-art/resource.yaml +2 -2
- package/library/skills/store-listing/SKILL.md +13 -3
- package/library/skills/store-listing/resource.yaml +2 -2
- package/library/skills/summer-analytics/SKILL.md +22 -5
- package/library/skills/summer-analytics/resource.yaml +2 -2
- package/library/skills/summer-apps/SKILL.md +77 -32
- package/library/skills/summer-apps/manifest.md +1 -1
- package/library/skills/summer-apps/minimal-app.md +7 -7
- package/library/skills/summer-apps/resource.yaml +1 -1
- package/library/skills/summer-apps/sdk-reference.md +5 -5
- package/library/skills/summer-apps-design/SKILL.md +1 -1
- package/library/skills/summer-apps-design/resource.yaml +1 -1
- package/library/skills/summer-assets/SKILL.md +86 -0
- package/library/skills/summer-assets/resource.yaml +34 -0
- package/library/skills/summer-cli/SKILL.md +133 -0
- package/library/skills/summer-cli/resource.yaml +31 -0
- package/library/skills/summer-friends/SKILL.md +14 -0
- package/library/skills/summer-leaderboards/SKILL.md +16 -0
- package/library/skills/summer-match-results/SKILL.md +17 -0
- package/library/skills/summer-matchmaking/SKILL.md +17 -0
- package/library/skills/summer-parties/SKILL.md +14 -0
- package/library/skills/summer-player-data/SKILL.md +14 -0
- package/library/skills/summer-store/SKILL.md +16 -1
- package/library/skills/summer-world-chat/SKILL.md +14 -0
- package/library/skills/summer-world-saves/SKILL.md +14 -0
- package/library/skills/text-to-motion/SKILL.md +45 -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 +37 -15
- package/library/skills/tileable-texture/resource.yaml +1 -1
- package/library/skills/trailer-shot/SKILL.md +46 -24
- package/library/skills/trailer-shot/resource.yaml +1 -1
- package/library/skills/tune-performance/SKILL.md +32 -6
- package/library/skills/tune-performance/resource.yaml +1 -1
- package/library/skills/ui-basics/SKILL.md +55 -36
- package/library/skills/ui-basics/resource.yaml +1 -1
- package/library/skills/ui-graphics/SKILL.md +64 -38
- package/library/skills/ui-graphics/resource.yaml +1 -1
- package/library/skills/use-widget-asset/SKILL.md +15 -1
- package/library/skills/use-widget-asset/resource.yaml +1 -1
- package/library/skills/using-summer/SKILL.md +32 -5
- package/library/skills/using-summer/resource.yaml +3 -2
- package/library/skills/vehicle-model/SKILL.md +92 -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 +31 -2
- package/library/skills/verifying-scenes/resource.yaml +1 -1
- package/library/skills/vfx-dissolve/SKILL.md +21 -2
- package/library/skills/vfx-dissolve/resource.yaml +1 -1
- package/library/skills/vfx-fire/SKILL.md +41 -41
- package/library/skills/vfx-fire/resource.yaml +1 -1
- package/library/skills/vfx-hit-spark/SKILL.md +24 -1
- package/library/skills/vfx-hit-spark/resource.yaml +1 -1
- package/library/skills/vfx-lightning/SKILL.md +30 -16
- package/library/skills/vfx-lightning/resource.yaml +1 -1
- package/library/skills/vfx-magic-glow/SKILL.md +46 -32
- package/library/skills/vfx-magic-glow/resource.yaml +1 -1
- package/library/skills/vfx-muzzle-flash/SKILL.md +43 -35
- package/library/skills/vfx-muzzle-flash/resource.yaml +1 -1
- package/library/skills/vfx-smoke/SKILL.md +39 -31
- package/library/skills/vfx-smoke/resource.yaml +1 -1
- package/library/skills/vfx-water-ripple/SKILL.md +35 -31
- package/library/skills/vfx-water-ripple/resource.yaml +1 -1
- package/library/skills/voice-line/SKILL.md +87 -40
- package/library/skills/voice-line/resource.yaml +1 -1
- package/library/skills/web-and-touch-input/SKILL.md +20 -1
- package/library/skills/web-and-touch-input/resource.yaml +1 -1
- package/library/skills/web-compatibility-look/SKILL.md +21 -1
- package/library/skills/web-compatibility-look/resource.yaml +1 -1
- package/library/skills/world-building-3d/SKILL.md +29 -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 +1 -1
- package/library/tools/app-guide/resource.yaml +2 -2
- package/library/tools/app-page/resource.yaml +1 -1
- package/library/tools/app-screenshot/resource.yaml +19 -1
- package/library/tools/app-tools/resource.yaml +1 -1
- 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/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 +8 -5
- package/registry/generated/counts.json +2 -2
- package/registry/generated/gemini-extension.json +6 -13
- package/registry/generated/index.json +482 -349
- package/registry/generated/marketplace.claude.json +2 -13
- package/registry/generated/plugin.claude-directory.json +168 -0
- package/registry/generated/plugin.claude.json +24 -22
- package/registry/generated/plugin.codex.json +18 -22
- package/registry/generated/plugin.cursor.json +8 -14
- package/registry/generated/plugin.factory.json +6 -13
- package/registry/generated/server.json +43 -0
- package/registry/generated/skills-index.md +121 -118
- package/registry/generated/skills-registry.json +167 -115
- 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 +1241 -0
- package/registry/operations/public-catalog.json +33160 -0
- package/registry/schemas/operation.schema.json +318 -0
- package/registry/schemas/skill.schema.json +4 -0
- package/CLAUDE.md +0 -7
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: voice-line
|
|
3
|
-
description: "Generate
|
|
3
|
+
description: "Generate voice lines (NPC barks, narrator, dialogue) with a character-to-voice choice and multi-line support."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: audio
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read Grep Glob Write Edit
|
|
8
|
+
allowed-tools: Read Grep Glob Write Edit summer_assets_generate_audio summer_assets_search summer_import_from_url summer_add_node summer_set_prop summer_inspect_node summer_call
|
|
9
9
|
paths: [".summer/**", "audio/voice/**", "scripts/**", "**/*.tscn"]
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -13,7 +13,7 @@ paths: [".summer/**", "audio/voice/**", "scripts/**", "**/*.tscn"]
|
|
|
13
13
|
|
|
14
14
|
## Overview
|
|
15
15
|
|
|
16
|
-
The hardest part of TTS isn't the line — it's picking the right voice
|
|
16
|
+
The hardest part of TTS isn't the line — it's picking the right voice; pick wrong and a tough warlord NPC sounds like a podcast host. On the ElevenLabs models **only Summer's game cast may speak**: the `voiceId` of `assets.generate_audio` must be one of the cast voices below, and any other id is refused (`voice_not_allowed`). The fal speech models (`minimax-speech-2.8-hd`, `gemini-3.8-flash-tts`, ...) speak with their own prebuilt voices instead. So the pick comes from the cast (or the project's cast bible), and this skill's job is to make that pick deliberately and then lock it.
|
|
17
17
|
|
|
18
18
|
Then it generates one line (or a multi-turn dialogue) with the right stability / style / similarity / speed for the delivery — flat for narration, expressive for a bark, fast for an excited shout.
|
|
19
19
|
|
|
@@ -48,17 +48,39 @@ If a character bible exists, the voice should match the character's age / gender
|
|
|
48
48
|
|
|
49
49
|
Check the cast bible first (step 1). If the character already has a locked id, use it and skip to step 5.
|
|
50
50
|
|
|
51
|
-
If not,
|
|
51
|
+
If not, pick from Summer's game cast with the user. There is no preview-URL endpoint on this surface — do not claim you auditioned anything; the person listens to the generated line. The cast (name, role, id):
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
| Voice | Role | Id |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| George | Storyteller, warm | `JBFqnCBsd6RMkjVDRZzb` |
|
|
56
|
+
| Charlie | Hero, deep, energetic | `IKne3meq5aSn9XLyUdCD` |
|
|
57
|
+
| Jessica | Heroine, playful | `cgSgspJ2msm6clMCkdW9` |
|
|
58
|
+
| Harry | Warrior, fierce | `SOYHLrjzK2X1ezoPC6cr` |
|
|
59
|
+
| Callum | Trickster, husky | `N2lVS1w4EtoT3dr4eOWO` |
|
|
60
|
+
| Brian | Narrator, deep | `nPczCjzI2devNBz1zQrb` |
|
|
61
|
+
| Bill | Elder, wise | `pqHfZKP75CvOlQylNhV4` |
|
|
62
|
+
| Sarah | Mentor, reassuring | `EXAVITQu4vr4xnSDxMaL` |
|
|
63
|
+
| Adam | Villain, firm | `pNInz6obpgDQGcFmaJgB` |
|
|
64
|
+
| Roger | Captain, laid back | `CwhRBWXzGAHq8TQ4Fs17` |
|
|
65
|
+
| Lily | Actress, velvety | `pFZP5JQG7iQjIQuC4Bku` |
|
|
66
|
+
| Liam | Streamer, energetic | `TX3LPaxmHKxFdv7VOQHJ` |
|
|
67
|
+
| Matilda | Guide, knowledgeable | `XrExE9yKIg1WjnnlVkGX` |
|
|
68
|
+
| Daniel | Broadcaster, steady | `onwK4e9ZLuTAKqWW03F9` |
|
|
69
|
+
| River | Courier, relaxed | `SAz9YHcvj6GT2YYXdXww` |
|
|
70
|
+
| Bella | Healer, bright | `hpp4J3VqNfWAUOO0d1Us` |
|
|
71
|
+
| Laura | Sidekick, quirky | `FGY2WhTYpPnrIDTdsKH5` |
|
|
72
|
+
| Alice | Oracle, clear | `Xb7hH8MSUJpSbSDYk0k2` |
|
|
73
|
+
| Eric | Merchant, smooth | `cjVigY5qzO86Huf0OWal` |
|
|
74
|
+
| Chris | Companion, charming | `iP95p4xoKVk53GoZ742B` |
|
|
75
|
+
| Will | Adventurer, optimistic | `bIHbv24MWmeRgasZH58o` |
|
|
76
|
+
|
|
77
|
+
Ask:
|
|
58
78
|
|
|
59
|
-
|
|
79
|
+
> For `<character>` I suggest `<voice>` (<role>). OK, or another cast voice?
|
|
60
80
|
|
|
61
|
-
|
|
81
|
+
Omitting `voiceId` entirely is valid — `assets.generate_audio` falls back to the default voice (George, `JBFqnCBsd6RMkjVDRZzb`). That is fine for a throwaway read-through, never for a shipped cast.
|
|
82
|
+
|
|
83
|
+
Voice is the highest-stakes audio decision in the project. Do not guess ids — an id outside the cast is refused, not a different-sounding voice.
|
|
62
84
|
|
|
63
85
|
### 3. Character-to-voice decision tree (when the user wants a recommendation)
|
|
64
86
|
|
|
@@ -81,7 +103,7 @@ If the user says "you pick", lean on this tree:
|
|
|
81
103
|
|
|
82
104
|
After the pick:
|
|
83
105
|
|
|
84
|
-
> Locked voice: `
|
|
106
|
+
> Locked voice: `Roger` (id `CwhRBWXzGAHq8TQ4Fs17`). I'll use this for all `<character>` lines unless you say otherwise.
|
|
85
107
|
|
|
86
108
|
Ask before writing:
|
|
87
109
|
|
|
@@ -104,8 +126,8 @@ providers:
|
|
|
104
126
|
|
|
105
127
|
| Character | Voice name | Voice id | Notes |
|
|
106
128
|
|---|---|---|---|
|
|
107
|
-
| Captain Hodge |
|
|
108
|
-
| Bram the Smith |
|
|
129
|
+
| Captain Hodge | Roger | CwhRBWXzGAHq8TQ4Fs17 | Calm, weathered, low-mid |
|
|
130
|
+
| Bram the Smith | Harry | SOYHLrjzK2X1ezoPC6cr | Gruff, mid energy |
|
|
109
131
|
```
|
|
110
132
|
|
|
111
133
|
This is the cast bible. Every future voice line uses these ids — consistency is the point.
|
|
@@ -114,7 +136,7 @@ If legacy `.summer/voice-cast.md` already exists, read it first and either keep
|
|
|
114
136
|
|
|
115
137
|
### 5. Tune stability / similarity / style / speed for delivery
|
|
116
138
|
|
|
117
|
-
These
|
|
139
|
+
These go in the `voiceSettings` object of `assets.generate_audio`, in camelCase — `stability`, `similarityBoost`, `style`, `speed`, `useSpeakerBoost`. A snake_case key such as `similarity_boost` is not one of its fields and does nothing.
|
|
118
140
|
|
|
119
141
|
| Param | Range | Effect |
|
|
120
142
|
|---|---|---|
|
|
@@ -163,18 +185,18 @@ Example lines:
|
|
|
163
185
|
### 7. Confirm and call
|
|
164
186
|
|
|
165
187
|
```
|
|
166
|
-
|
|
167
|
-
capability
|
|
168
|
-
text
|
|
169
|
-
voiceId
|
|
170
|
-
modelId
|
|
171
|
-
|
|
172
|
-
)
|
|
188
|
+
assets.generate_audio({
|
|
189
|
+
capability: "text_to_speech",
|
|
190
|
+
text: "Hold the line. They're coming through the south gate. Ready arrows.",
|
|
191
|
+
voiceId: "CwhRBWXzGAHq8TQ4Fs17",
|
|
192
|
+
modelId: "eleven_multilingual_v2",
|
|
193
|
+
voiceSettings: { stability: 0.6, similarityBoost: 0.75, style: 0.2, speed: 1.0 }
|
|
194
|
+
})
|
|
173
195
|
```
|
|
174
196
|
|
|
175
|
-
`modelId` defaults to `eleven_multilingual_v2`. For very short / latency-sensitive in-game barks, `
|
|
197
|
+
`modelId` defaults to `eleven_multilingual_v2`. For very short / latency-sensitive in-game barks, `eleven_flash_v2_5` is faster; for highest fidelity, `eleven_multilingual_v2` is the default. A line spends the person's credits; `dryRun: true` returns its `estimate` first.
|
|
176
198
|
|
|
177
|
-
There is no `outputPath` — the
|
|
199
|
+
There is no `outputPath` — the answer is a hosted asset, `asset` (`assetId`, `fileUrl`, `durationSeconds`; MP3, `audio/mpeg`). Land it in the project explicitly:
|
|
178
200
|
|
|
179
201
|
```
|
|
180
202
|
summer_import_from_url(url="<fileUrl>", path="res://audio/voice/hodge_hold_the_line.mp3")
|
|
@@ -182,33 +204,38 @@ summer_import_from_url(url="<fileUrl>", path="res://audio/voice/hodge_hold_the_l
|
|
|
182
204
|
|
|
183
205
|
### 8. Multi-line dialogue (two or more speakers)
|
|
184
206
|
|
|
185
|
-
Use `
|
|
207
|
+
Use `assets.generate_audio` with `capability: "text_to_dialogue"`:
|
|
186
208
|
|
|
187
209
|
There is no `speakers` roster and no `script` array. The whole conversation is one flat `inputs` array of `{ text, voiceId }` objects, in turn order — the voice id is repeated on every line:
|
|
188
210
|
|
|
189
211
|
```
|
|
190
|
-
|
|
191
|
-
capability
|
|
192
|
-
inputs
|
|
193
|
-
{ text: "They're at the gate.", voiceId: "
|
|
194
|
-
{ text: "Aye. Let 'em come.", voiceId: "
|
|
195
|
-
{ text: "Steady. On my mark.", voiceId: "
|
|
212
|
+
assets.generate_audio({
|
|
213
|
+
capability: "text_to_dialogue",
|
|
214
|
+
inputs: [
|
|
215
|
+
{ text: "They're at the gate.", voiceId: "CwhRBWXzGAHq8TQ4Fs17" },
|
|
216
|
+
{ text: "Aye. Let 'em come.", voiceId: "SOYHLrjzK2X1ezoPC6cr" },
|
|
217
|
+
{ text: "Steady. On my mark.", voiceId: "CwhRBWXzGAHq8TQ4Fs17" }
|
|
196
218
|
]
|
|
197
|
-
)
|
|
219
|
+
})
|
|
198
220
|
```
|
|
199
221
|
|
|
200
|
-
`inputs` is required for this capability; omitting it is
|
|
222
|
+
`inputs` is required for this capability; omitting it is refused as invalid input (`inputs_required`). `modelId` defaults to `eleven_v3` here, not `eleven_multilingual_v2`. The result is a single MP3 with both voices and dialogue-aware pacing the model handles internally — import it with `summer_import_from_url` like any other clip. For very long scripts, split into chunks of ~6 turns and concatenate.
|
|
201
223
|
|
|
202
224
|
### 9. Wire the line as `AudioStreamPlayer` on the Voice bus
|
|
203
225
|
|
|
204
|
-
|
|
226
|
+
One script adds the player with its settings; `scenePath` is the exact scene to change:
|
|
205
227
|
|
|
206
228
|
```
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
229
|
+
summer_run_script(scenePath="res://main.tscn", source="""
|
|
230
|
+
func run(ctx):
|
|
231
|
+
ctx.add_node("AudioStreamPlayer", "VoiceLine", ctx.find("NPC"), {
|
|
232
|
+
"stream": load("res://audio/voice/hodge_hold_the_line.mp3"),
|
|
233
|
+
"bus": "Voice",
|
|
234
|
+
"volume_db": 0.0,
|
|
235
|
+
"autoplay": false,
|
|
236
|
+
})
|
|
237
|
+
ctx.save_scene()
|
|
238
|
+
""")
|
|
212
239
|
```
|
|
213
240
|
|
|
214
241
|
For positional NPCs, `AudioStreamPlayer3D` with `max_distance=15.0` so distant NPCs aren't audible.
|
|
@@ -238,7 +265,7 @@ Narrator intimate: warmer mid pitch, lower stability for breath
|
|
|
238
265
|
|
|
239
266
|
## Anti-patterns
|
|
240
267
|
|
|
241
|
-
- **Inventing
|
|
268
|
+
- **Inventing voices.** On the ElevenLabs models only the cast in step 2 may speak, and there are no preview URLs on this surface. Pick from the cast with the user.
|
|
242
269
|
- **Guessing a voice id.** A wrong id is a provider error, not a different voice.
|
|
243
270
|
- **Reusing a voice id across two characters.** Players notice instantly. Lock the cast.
|
|
244
271
|
- **Changing a locked voice without approval.** A cast voice is project memory, not a throwaway generation option.
|
|
@@ -257,6 +284,10 @@ Narrator intimate: warmer mid pitch, lower stability for breath
|
|
|
257
284
|
- **User wants the line shorter on regen.** Edit the text first; don't try to compress with `speed` past 1.15 (artifacts).
|
|
258
285
|
- **NPC bark variants.** Generate 3–5 variants of the same intent (`"They're at the gate!"`, `"Enemy approaching!"`, `"Look out!"`) and pick at random in code so the bark doesn't repeat.
|
|
259
286
|
|
|
287
|
+
## Without Summer Engine
|
|
288
|
+
|
|
289
|
+
In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), do steps 1-8 and skip step 9 (`AudioStreamPlayer`). Step 10 still applies when the project has a `.summer/` folder; otherwise give the person the voice id with the files. Save the file where the person asked with `out` (the `summer-assets` skill says how), and tell them the path and format.
|
|
290
|
+
|
|
260
291
|
## Fallback (no MCP)
|
|
261
292
|
|
|
262
293
|
Print the call (text, voice id, params, target path). User runs via the Summer dashboard, then `summer_import_from_url` the result.
|
|
@@ -273,3 +304,19 @@ Print the call (text, voice id, params, target path). User runs via the Summer d
|
|
|
273
304
|
- `audio-direction` — Voice bus and ducking rules
|
|
274
305
|
- `sound-effect` — non-verbal vocal SFX (grunt, scream)
|
|
275
306
|
- `adaptive-music` — ducking integration
|
|
307
|
+
|
|
308
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
309
|
+
## From a shell
|
|
310
|
+
|
|
311
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
312
|
+
|
|
313
|
+
| In this skill | Command |
|
|
314
|
+
|---|---|
|
|
315
|
+
| `assets.generate_audio`, `summer_assets_generate_audio` | `summer assets generate-audio` |
|
|
316
|
+
| `summer_assets_search` | `summer assets search` |
|
|
317
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
318
|
+
| `summer_import_from_url` | `summer engine import-from-url` |
|
|
319
|
+
| `summer_inspect_node` | `summer engine inspect-node` |
|
|
320
|
+
| `summer_run_script` | `summer engine run-script` |
|
|
321
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
322
|
+
<!-- /shell-commands -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/voice-line
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.2
|
|
4
|
-
summary: Generate
|
|
4
|
+
summary: "Generate voice lines (NPC barks, narrator, dialogue) with a character-to-voice choice and multi-line support."
|
|
5
5
|
use_when:
|
|
6
6
|
- '"the NPC needs a greeting / a bark / a narrator intro read aloud"'
|
|
7
7
|
- giving a character a voice that fits their personality (gruff, cheerful, robotic)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: web-and-touch-input
|
|
3
|
-
description: "
|
|
3
|
+
description: "Browser and phone input: the first-click rule for sound and mouse capture, focus, touch buttons, a stick."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
|
|
6
6
|
category: scene-and-project
|
|
@@ -36,3 +36,22 @@ Add a `TouchControls` CanvasLayer (layer 10) and show it only when `DisplayServe
|
|
|
36
36
|
## 4. Verify
|
|
37
37
|
|
|
38
38
|
Run the game and check the keyboard controls and the title screen's first click. Set `input_devices/pointing/emulate_touch_from_mouse` on temporarily to try the touch buttons with the mouse, then turn it off again.
|
|
39
|
+
|
|
40
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
41
|
+
## From a shell
|
|
42
|
+
|
|
43
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
44
|
+
|
|
45
|
+
| In this skill | Command |
|
|
46
|
+
|---|---|
|
|
47
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
48
|
+
| `summer_batch` | `summer engine batch` |
|
|
49
|
+
| `summer_get_diagnostics` | `summer engine get-diagnostics` |
|
|
50
|
+
| `summer_input_map_bind` | `summer engine input-map-bind` |
|
|
51
|
+
| `summer_play` | `summer engine play` |
|
|
52
|
+
| `summer_save_scene` | `summer engine save-scene` |
|
|
53
|
+
| `summer_screenshot` | `summer engine screenshot` |
|
|
54
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
55
|
+
| `summer_stop` | `summer engine stop` |
|
|
56
|
+
| `summer_write_file` | `summer engine write-file` |
|
|
57
|
+
<!-- /shell-commands -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/web-and-touch-input
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
summary: "
|
|
4
|
+
summary: "Browser and phone input: the first-click rule for sound and mouse capture, focus, touch buttons, a stick."
|
|
5
5
|
use_when:
|
|
6
6
|
- the game plays in the browser and sound, mouse capture or keys do not work until something is clicked
|
|
7
7
|
- the game should be playable on a phone or tablet with touch controls
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: web-compatibility-look
|
|
3
|
-
description: "Make a
|
|
3
|
+
description: "Make a browser game look high-end in the Compatibility renderer (WebGL 2): what works, recipes, speed."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
|
|
6
6
|
category: rendering-and-lighting
|
|
@@ -60,3 +60,23 @@ Glow and some environment adjustments depend on the engine version. If you use t
|
|
|
60
60
|
## Verify
|
|
61
61
|
|
|
62
62
|
Run the game, take one screenshot in the web preview, and compare it to the palette and the look. A grey, blank or default-looking capture means the look is not there yet, or a Forward+-only feature was used: fix it before moving on.
|
|
63
|
+
|
|
64
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
65
|
+
## From a shell
|
|
66
|
+
|
|
67
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
68
|
+
|
|
69
|
+
| In this skill | Command |
|
|
70
|
+
|---|---|
|
|
71
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
72
|
+
| `summer_batch` | `summer engine batch` |
|
|
73
|
+
| `summer_get_diagnostics` | `summer engine get-diagnostics` |
|
|
74
|
+
| `summer_get_scene_tree` | `summer engine get-scene-tree` |
|
|
75
|
+
| `summer_play` | `summer engine play` |
|
|
76
|
+
| `summer_project_setting` | `summer engine project-setting` |
|
|
77
|
+
| `summer_save_scene` | `summer engine save-scene` |
|
|
78
|
+
| `summer_screenshot` | `summer engine screenshot` |
|
|
79
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
80
|
+
| `summer_set_resource_property` | `summer engine set-resource-property` |
|
|
81
|
+
| `summer_stop` | `summer engine stop` |
|
|
82
|
+
<!-- /shell-commands -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/web-compatibility-look
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
summary: "Make a
|
|
4
|
+
summary: "Make a browser game look high-end in the Compatibility renderer (WebGL 2): what works, recipes, speed."
|
|
5
5
|
use_when:
|
|
6
6
|
- the game plays in the browser or is exported for the web and must look finished
|
|
7
7
|
- the look is flat, grey or default in the web preview, or a Forward+ feature does nothing there
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: world-building-3d
|
|
3
|
-
description: "Compose, ground
|
|
3
|
+
description: "Compose, ground and space 3D scenes with Summer's four spatial tools, one geometric decision at a time."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: scene-and-project
|
|
@@ -110,3 +110,31 @@ unavailable physics, or missing bounds by guessing. Fix the scene structure or
|
|
|
110
110
|
choose a clearly labeled manual fallback, then verify it.
|
|
111
111
|
|
|
112
112
|
Do not retry a mutation after an oversized or ambiguous result unless the receipt explicitly says it is retry-safe; the first mutation may already have landed.
|
|
113
|
+
|
|
114
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
115
|
+
## From a shell
|
|
116
|
+
|
|
117
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
118
|
+
|
|
119
|
+
| In this skill | Command |
|
|
120
|
+
|---|---|
|
|
121
|
+
| `summer_align_distribute_3d` | `summer engine align-distribute-3d` |
|
|
122
|
+
| `summer_attach_to_surface` | `summer engine attach-to-surface` |
|
|
123
|
+
| `summer_connect_ports` | `summer engine connect-ports` |
|
|
124
|
+
| `summer_get_scene_tree` | `summer engine get-scene-tree` |
|
|
125
|
+
| `summer_inspect_asset` | `summer engine inspect-asset` |
|
|
126
|
+
| `summer_inspect_node` | `summer engine inspect-node` |
|
|
127
|
+
| `summer_instantiate_scene` | `summer engine instantiate-scene` |
|
|
128
|
+
| `summer_measure` | `summer engine measure` |
|
|
129
|
+
| `summer_navigation_probe` | `summer engine navigation-probe` |
|
|
130
|
+
| `summer_open_scene` | `summer engine open-scene` |
|
|
131
|
+
| `summer_place_adjacent` | `summer engine place-adjacent` |
|
|
132
|
+
| `summer_play` | `summer engine play` |
|
|
133
|
+
| `summer_raycast` | `summer engine raycast` |
|
|
134
|
+
| `summer_repeat_along` | `summer engine repeat-along` |
|
|
135
|
+
| `summer_screenshot` | `summer engine screenshot` |
|
|
136
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
137
|
+
| `summer_snap_to_surface` | `summer engine snap-to-surface` |
|
|
138
|
+
| `summer_starcast` | `summer engine starcast` |
|
|
139
|
+
| `summer_test_placement` | `summer engine test-placement` |
|
|
140
|
+
<!-- /shell-commands -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/world-building-3d
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.1.1
|
|
4
|
-
summary: Compose, ground
|
|
4
|
+
summary: "Compose, ground and space 3D scenes with Summer's four spatial tools, one geometric decision at a time."
|
|
5
5
|
use_when:
|
|
6
6
|
- placing or grounding props on floors, shelves, ramps, or tables without hand-tuning transforms
|
|
7
7
|
- aligning or evenly spacing a group of 3D objects along one world axis
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# summer_add_node
|
|
2
|
+
|
|
3
|
+
Add a new node to the scene tree.
|
|
4
|
+
|
|
5
|
+
Pass the exact res:// scenePath to mutate. The scene does not need to be the
|
|
6
|
+
active editor tab.
|
|
7
|
+
|
|
8
|
+
Common node types:
|
|
9
|
+
- 3D: Node3D, MeshInstance3D, CharacterBody3D, RigidBody3D, StaticBody3D, Camera3D, DirectionalLight3D, OmniLight3D, SpotLight3D, WorldEnvironment, CollisionShape3D, Area3D
|
|
10
|
+
- 2D: Node2D, Sprite2D, CharacterBody2D, RigidBody2D, StaticBody2D, Camera2D, CollisionShape2D, Area2D, TileMapLayer
|
|
11
|
+
- UI: Control, Label, Button, TextEdit, Panel, VBoxContainer, HBoxContainer, MarginContainer
|
|
12
|
+
- Audio: AudioStreamPlayer, AudioStreamPlayer3D
|
|
13
|
+
|
|
14
|
+
The parent path uses "./" prefix for relative paths from scene root. E.g., "./World" means the "World" child of the root node.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# summer_align_distribute_3d
|
|
2
|
+
|
|
3
|
+
Align or equal-space an explicit ordered list of 3D subjects along one world-space axis, then save the exact target scene.
|
|
4
|
+
|
|
5
|
+
Every anchor and extent comes from visible descendant GeometryInstance3D world AABBs (evidence: visual_aabb). The tool never uses editor selection and fails instead of fabricating bounds. It preserves each subject's authored basis and scale, translates only along the normalized axis, and records all changed transforms in one undoable editor operation.
|
|
6
|
+
|
|
7
|
+
Alignment modes use the first ordered subject's minimum, center, or maximum projected anchor. Distribution modes keep the first and last subjects fixed and honor caller order. distribute_gaps accounts for each subject's projected half-extent and fails if the endpoint span cannot fit non-overlapping equal gaps. The compact result returns ordered before/after origins, resolved spacing, and numeric residuals under 5 KB. On an engine build that predates AlignDistribute3D the result is a structured engine_lacks_op failure naming the fallback.
|
|
@@ -6,7 +6,7 @@ use_when:
|
|
|
6
6
|
- '"nerf the bow using the balance formula in our app"'
|
|
7
7
|
- using logic that lives in an app (a balance formula, an export) while the app is open
|
|
8
8
|
do_not_use_when:
|
|
9
|
-
- "plain reads and edits of app data:
|
|
9
|
+
- "plain reads and edits of app data: apps.read_data, apps.write_data"
|
|
10
10
|
facets:
|
|
11
11
|
lifecycle:
|
|
12
12
|
- build
|
|
@@ -44,8 +44,8 @@ input_schema:
|
|
|
44
44
|
- design
|
|
45
45
|
- examples
|
|
46
46
|
- types
|
|
47
|
-
default:
|
|
48
|
-
description: "
|
|
47
|
+
default: overview
|
|
48
|
+
description: "Start with overview (the default), then read what the app needs: examples (a working app to copy), sdk, manifest, kit, design, layout, types (exact SDK TypeScript types). all returns every section but types (about 100 KB)"
|
|
49
49
|
additionalProperties: false
|
|
50
50
|
authority:
|
|
51
51
|
filesystem: false
|
|
@@ -6,7 +6,7 @@ use_when:
|
|
|
6
6
|
- '"set the budget to 60 in the balance app"'
|
|
7
7
|
- reading what the person has selected in an open app
|
|
8
8
|
do_not_use_when:
|
|
9
|
-
- "changing shared data with no app open:
|
|
9
|
+
- "changing shared data with no app open: apps.write_data"
|
|
10
10
|
facets:
|
|
11
11
|
lifecycle:
|
|
12
12
|
- build
|
|
@@ -3,7 +3,7 @@ kind: tool
|
|
|
3
3
|
version: 1.0.0
|
|
4
4
|
summary: See a Summer App without the person - a headless, read-only render (PNG) with its console, errors, refused calls and declared page.
|
|
5
5
|
use_when:
|
|
6
|
-
- right after every
|
|
6
|
+
- right after every apps.publish, to check the app renders with real data
|
|
7
7
|
- '"does my app look right on a phone / in dark mode"'
|
|
8
8
|
- finding why an app shows nothing (SDK not connected, script errors)
|
|
9
9
|
do_not_use_when:
|
|
@@ -70,6 +70,24 @@ input_schema:
|
|
|
70
70
|
type: string
|
|
71
71
|
maxLength: 500
|
|
72
72
|
description: Launch params, as in /studio/apps/<id>?key=value
|
|
73
|
+
steps:
|
|
74
|
+
type: array
|
|
75
|
+
maxItems: 5
|
|
76
|
+
items:
|
|
77
|
+
type: object
|
|
78
|
+
properties:
|
|
79
|
+
click:
|
|
80
|
+
type: string
|
|
81
|
+
maxLength: 300
|
|
82
|
+
press:
|
|
83
|
+
type: string
|
|
84
|
+
maxLength: 40
|
|
85
|
+
wait:
|
|
86
|
+
type: integer
|
|
87
|
+
minimum: 0
|
|
88
|
+
maximum: 3000
|
|
89
|
+
additionalProperties: false
|
|
90
|
+
description: "Before the capture, in order: click a CSS selector in the app (\">>>\" reaches inside kit components), press a declared action id, or wait ms. Use it to see a dialog or a second state"
|
|
73
91
|
out:
|
|
74
92
|
type: string
|
|
75
93
|
minLength: 1
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# summer_attach_to_surface
|
|
2
|
+
|
|
3
|
+
Mount a piece on a surface: turn it so its given LOCAL backAxis faces into the surface (opposite the hit normal) with its upAxis kept toward worldUp, then seat its measured back face (the extreme of its visible bounds along backAxis, not its origin) at standoff from the surface. Pipes, gutters, lamps, AC units, signs, fire escapes. Place the piece near its mount first (summer_instantiate_scene with position); this tool turns it and pushes it onto the surface.
|
|
4
|
+
|
|
5
|
+
Find the surface with surface (a node: the ray runs from the subject's origin to the nearest point of that node's bounds) or ray {origin, direction} (both: the ray, and hits on other nodes are skipped). The ray is physics first; if physics finds nothing it falls back to visual AABBs and says so (the normal is then an AABB face normal). Get backAxis from summer_inspect_asset (the piece's back plane normal), not from a guess.
|
|
6
|
+
|
|
7
|
+
placeAt "current" (default): the piece keeps its height and its place along the surface and only moves along the surface normal. placeAt "hit": it also slides so the centre of its back face lands on the ray hit point.
|
|
8
|
+
|
|
9
|
+
Steps (existing ops): a read-only probe (RunSceneScript) reads the piece's bounds in its own axes and casts the ray; one SetProp turns the piece and puts its back face 5 cm in front of the planned seat; SnapToSurface sweeps it along -normal (at most standoff + 0.3) and seats it at standoff (its own physics/visual_aabb evidence). Before saving, the seat is checked:
|
|
10
|
+
- with surface: the seat must be on that node (or inside it), else it is refused;
|
|
11
|
+
- with a ray only: a seat on another node is refused unless it lies on the hit plane (a coplanar neighbour module, warned);
|
|
12
|
+
- the piece must end within maxMove (default 2) of where it started; a longer planned move is refused before anything changes, and so is (with placeAt "current") a ray hit farther than maxMove along the surface from the piece (hit_far_from_piece: aim at the piece, or pass placeAt "hit").
|
|
13
|
+
A refused or failed seat puts the piece back where it started (restored: true), saves nothing, and names the cause: seated_on, the seat's failure_reason, blockers {overlapping, overlaps, first_contact} and a next_step.
|
|
14
|
+
|
|
15
|
+
Returns {seated_on, final_gap (collider gap from SnapToSurface), back_face_gap (visible back face to the hit plane), moved_by, surface_hit, orientation, back_face_offset, seat {evidence, supportPath, finalGap, gapErrorBound, initiallyOverlapping, ...}, saved, warnings}. A warning visible_back_X_into_surface means the piece's collider sits behind its visible back: add X to standoff.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# summer_batch
|
|
2
|
+
|
|
3
|
+
Execute multiple operations (a multi-node build) in a single call. Each op is forwarded to the engine VERBATIM: this is also how you reach engine ops without a dedicated tool.
|
|
4
|
+
|
|
5
|
+
UNDO: when nothing in the list forces a split (see SPLITS), the whole batch is ONE undo step (one Ctrl+Z). Single-only ops split the list into sequential requests, and EACH chunk is its own undo step (the receipt shows the chunks).
|
|
6
|
+
|
|
7
|
+
Ops use the individual tools' format:
|
|
8
|
+
- {"op": "AddNode", "parent": "/", "type": "MeshInstance3D", "name": "Floor"}
|
|
9
|
+
- {"op": "SetProp", "path": "Floor", "key": "position", "value": "Vector3(0, -1, 0)"}
|
|
10
|
+
- {"op": "SetProp", "path": "Floor", "key": "mesh", "value": "PlaneMesh"}
|
|
11
|
+
- {"op": "SetResourceProperty", "nodePath": "Floor", "resourceProperty": "mesh", "subProperty": "size", "value": "Vector2(20, 20)"}
|
|
12
|
+
|
|
13
|
+
SPLITS AND SAVE: scenePath selects every mutation target. Send OpenScene (a UI action) separately, never mixed with scene mutations. The tool appends one final SaveScene when the batch mutates a scene; a SaveScene you supply must appear exactly once, as the final op. The engine requires SaveScene, InstantiateScene, ReplaceNode, SimulateInput, the runtime reads (GetRuntimeSceneTree/GetRuntimeNode) and the Run*/Import* ops to travel alone, so the tool splits the list around them; if a later chunk fails, the receipt names the earlier ops that already applied.
|
|
14
|
+
|
|
15
|
+
RAW RUNTIME OPS (structured failure_reason passes through verbatim):
|
|
16
|
+
- RunVerification: a hidden, disposable game instance runs a GDScript probe and dies, never touching the editor: {"op": "RunVerification", "probe_source": "...", "max_seconds": 20} returns {ok, results, frames, out_dir}. Probe API: report(name, value) / save_frame(name) / press(action) / key(keycode) / finish(); save_frame() without a name is a script error. Mount scenes deferred (add_child.call_deferred) or the capture can be black; summer_get_agent_playbook has the probe rules.
|
|
17
|
+
- SimulateInput: inject an action/key/mouse/axis into the RUNNING game (summer_play first), sent ALONE: {"op": "SimulateInput", "type": "action", "action": "jump", "pressed": true}. failure_reason "not_running" = start the game first; "unsupported" = the game build predates the handler: use RunVerification or ask the user.
|
|
18
|
+
|
|
19
|
+
REFUSED: a raw ReplaceNode with scene (it saves the old scene reference; use summer_replace_node) and a raw ConnectSignal (no CONNECT_PERSIST, so the file never holds it; use summer_connect_signal).
|
|
20
|
+
|
|
21
|
+
REPARENTNODE KEEPS ITS SUBTREE AND IS VERIFIED: the engine op re-owns only the moved node and drops its descendants from the saved file, so the tool saves, sends each ReparentNode alone plus an in-place ReparentNode per scene-owned descendant, then reads the saved .tscn back: persisted:true / verified:true only when every moved node and descendant is at its new path, else failure_reason not_persisted. A move onto a parent with a same-named child is refused (name_collision). scenePath must be a .tscn; Undo cannot share the batch.
|
|
22
|
+
|
|
23
|
+
PLACED INSTANCES: an InstantiateScene op may carry position, rotation_degrees, scale ([x, y, z] or "Vector3(...)") or transform ("Transform3D(...)"), set on the created node; one op per piece. Each InstantiateScene is its own request and the transforms of a run follow together (up to 200 per request), so N pieces plus the save cost about N + 2 requests and undo steps. Later ops (SetProp, SnapToSurface, the save) see the pieces placed; if one fails, the pieces before it still get their transforms.
|
|
24
|
+
|
|
25
|
+
RECEIPTS: receipt "summary" returns only counts, failures [{index, op, error}] (index into your ops), created node paths and renames, under 5 KB with any cut declared. Use it for any batch over a few ops: a large full receipt overflows the tool-output limit.
|
|
26
|
+
|
|
27
|
+
scenePersistence.saved means the SaveScene ran, not what the file holds; verified:true is set only where the tool read the file back.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# summer_camera_bookmark
|
|
2
|
+
|
|
3
|
+
Save, list, or delete named camera viewpoints for the edited 3D scene. A bookmark is a fixed pose (position, look_at, fov) stored IN THE PROJECT at res://.summer/camera_bookmarks.json, so it survives sessions and machines — the scene file is never touched.
|
|
4
|
+
|
|
5
|
+
WHY: screenshots taken from a preset framing re-fit the scene bounds every time, so a before/after pair shifts whenever anything moves; a bookmark is the same pose every time, which makes before/after comparison real. Save once, then reuse on every capture: summer_screenshot target:"scene" framing:"bookmark" bookmark_name:"<name>" (add marks:true for numbered labels mapped to node paths).
|
|
6
|
+
|
|
7
|
+
action:
|
|
8
|
+
"save" — name (1-64 of A-Z a-z 0-9 _ -) plus EITHER position + look_at as Godot literals ("Vector3(x, y, z)", optional fov, default 60) OR neither: omit both to capture the CURRENT editor 3D viewport camera (result pose_source: "editor_viewport" vs "explicit"; overwritten says whether a same-named bookmark was replaced).
|
|
9
|
+
"list" — every saved bookmark (names sorted, poses, created timestamps, file path).
|
|
10
|
+
"delete" — remove one by name (result lists the remaining names).
|
|
11
|
+
|
|
12
|
+
Failures are structured: bad_args (name grammar, half-given pose, fov outside 1..179, position == look_at), no_editor_camera (no pose given and no 3D viewport camera to capture), not_found (+ available names), io_failed (file unreadable/unwritable; a malformed file is reported, never overwritten). Edit-time only — no running game needed. If this engine build predates the bookmark ops, the result is a structured engine_lacks_op failure (nothing is sent) naming the fallback.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# summer_capture_gameplay
|
|
2
|
+
|
|
3
|
+
Capture real gameplay frames without a running editor: starts the game in Summer Engine's offscreen verify instance (--summer-offscreen: a real renderer, a window parked offscreen with no focus, never on screen), lets it run waitSeconds, runs steps, and saves PNG frames of what the game draws, HUD included. Use for store screenshots (1920x1080 landscape or 1080x1920 portrait). The main scene is often a title menu: pass the game's own flags in args (after "--", e.g. ["--autostart"]), a gameplay scene, or steps that play like a player: [{press:"Play"}, {wait:3000}, {key:"Space"}, {action:"jump"}, {click:[960,540]}, {drag:{from:[400,800],to:[1400,800]}}, {shot:true}]. With a shot step, only shot steps save frames; without one, frames are saved after the steps. A step that cannot run (no such button, key or action) becomes a warning. With an editor open, summer_screenshot target game also works. Returns each frame's path, width and height; look at them before using them.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
id: tool/capture-gameplay
|
|
2
2
|
kind: tool
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.1
|
|
4
4
|
summary: Capture real gameplay PNGs (HUD included) offscreen without a running editor; game flags and player steps (press, key, click) get past the title screen.
|
|
5
5
|
use_when:
|
|
6
6
|
- '"take gameplay screenshots for my store page"'
|
|
7
7
|
- '"I need screenshots but the editor is not open"'
|
|
8
8
|
- '"capture a 1920x1080 frame of my game"'
|
|
9
|
-
- collecting real gameplay screenshots for
|
|
9
|
+
- collecting real gameplay screenshots for store.set_art desktop.screenshots or mobile.screenshots
|
|
10
10
|
- every capture shows the title screen — pass the game's flags in args or steps like press Play
|
|
11
11
|
do_not_use_when:
|
|
12
12
|
- the editor is open and the game is running — tool/screenshot with target game shows the live game
|
|
@@ -23,7 +23,7 @@ compatibility:
|
|
|
23
23
|
engine: ">=4.6"
|
|
24
24
|
source: official
|
|
25
25
|
license: MIT
|
|
26
|
-
status:
|
|
26
|
+
status: stable
|
|
27
27
|
aliases:
|
|
28
28
|
- summer_capture_gameplay
|
|
29
29
|
implementation:
|
|
@@ -3,7 +3,7 @@ kind: tool
|
|
|
3
3
|
version: 1.0.2
|
|
4
4
|
summary: Check the status of an async generation job by id.
|
|
5
5
|
use_when:
|
|
6
|
-
- a generation
|
|
6
|
+
- a generation timed out and needs re-checking
|
|
7
7
|
- '"is my 3D model / video done yet?"'
|
|
8
8
|
- a generate_* call returned a job id instead of a finished asset
|
|
9
9
|
do_not_use_when:
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# summer_connect_ports
|
|
2
|
+
|
|
3
|
+
Move and turn one piece so its port meets another piece's port, facing it: pipe to pipe, duct to duct, gutter section to funnel or outlet. A port is an open-loop id from summer_inspect_asset on that node's scene ("+Y" = the outermost open loop facing +Y in the piece's own axes, "+Y#2" the next one facing +Y; resolved on the live node's meshes in its own frame, so the id is the same in every pose), a Marker3D (or any Node3D) name under the node whose -Z axis points out of the port, or an open-loop index in the same stable order.
|
|
4
|
+
|
|
5
|
+
The subject turns by the shortest rotation that makes its port direction opposite the target's, then by rollDegrees about the joined axis, then moves so the ports coincide (gap along the target port's direction). rollDegrees: axis = roll_axis in the receipt (the target port direction reversed, pointing into the target); right-hand rule, positive = counter-clockwise seen from inside the target looking back at the subject; zero = the shortest turn from the subject's CURRENT orientation, so the same value differs between start poses. Once the ports are joined, a second call turns by exactly rollDegrees (180 flips a bend's free end to the other side).
|
|
6
|
+
|
|
7
|
+
Tilt guard: a join that would tilt the subject's up axis (its local +Y) more than maxTiltDegrees (default 5) is refused before anything changes (failure_reason tilt_exceeds_limit, with tilt_degrees and ports_within_limit: the subject ports that would join within the limit, least tilt first). Turning about the up axis is never tilt. Pass allowTilt true for an intended tilt (a bend laid on its side).
|
|
8
|
+
|
|
9
|
+
One SetProp on transform, saved; a fresh read verifies {distance, angle_degrees, tilt_degrees}. Returns {subject_port {kind, id|name, index, position, direction, radius}, target_port, roll_axis, roll_degrees, rotated_degrees, tilt_degrees, max_tilt_degrees, moved_by, other_ports, verify, warnings}. other_ports: every other port of the subject (its other Marker3D anchors, or its other open loops for an open-loop port) with world position and outward direction AFTER the move, measured by the verify read: read where a bend's free end now points instead of measuring it. Open-loop ports are only as exact as the mesh: check direction_ambiguous warnings and a screenshot.
|