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,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`.
|
|
@@ -324,3 +324,27 @@ Do not put player controls into the generation pipeline or generic character imp
|
|
|
324
324
|
- Diagonal speed-up = you forgot to normalize the input vector.
|
|
325
325
|
- Mouse captured with no release traps the user. Always pair
|
|
326
326
|
`Input.MOUSE_MODE_CAPTURED` with a `ui_cancel` handler that sets it VISIBLE.
|
|
327
|
+
|
|
328
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
329
|
+
## From a shell
|
|
330
|
+
|
|
331
|
+
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.
|
|
332
|
+
|
|
333
|
+
| In this skill | Command |
|
|
334
|
+
|---|---|
|
|
335
|
+
| `assets.generate_3d` | `summer assets generate-3d` |
|
|
336
|
+
| `summer_docs_read` | `summer docs read` |
|
|
337
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
338
|
+
| `summer_batch` | `summer engine batch` |
|
|
339
|
+
| `summer_get_diagnostics` | `summer engine get-diagnostics` |
|
|
340
|
+
| `summer_get_scene_tree` | `summer engine get-scene-tree` |
|
|
341
|
+
| `summer_get_script_errors` | `summer engine get-script-errors` |
|
|
342
|
+
| `summer_input_map_bind` | `summer engine input-map-bind` |
|
|
343
|
+
| `summer_play` | `summer engine play` |
|
|
344
|
+
| `summer_read_file` | `summer engine read-file` |
|
|
345
|
+
| `summer_replace_text` | `summer engine replace-text` |
|
|
346
|
+
| `summer_save_scene` | `summer engine save-scene` |
|
|
347
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
348
|
+
| `summer_stop` | `summer engine stop` |
|
|
349
|
+
| `summer_write_file` | `summer engine write-file` |
|
|
350
|
+
<!-- /shell-commands -->
|
|
@@ -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,19 @@ 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`.
|
|
207
|
+
|
|
208
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
209
|
+
## From a shell
|
|
210
|
+
|
|
211
|
+
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.
|
|
212
|
+
|
|
213
|
+
| In this skill | Command |
|
|
214
|
+
|---|---|
|
|
215
|
+
| `assets.generate_image`, `summer_assets_generate_image` | `summer assets generate-image` |
|
|
216
|
+
| `summer_assets_search` | `summer assets search` |
|
|
217
|
+
| `summer_docs_read` | `summer docs read` |
|
|
218
|
+
| `summer_import_from_url` | `summer engine import-from-url` |
|
|
219
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
220
|
+
| `summer_set_resource_property` | `summer engine set-resource-property` |
|
|
221
|
+
<!-- /shell-commands -->
|
|
@@ -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
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cinematic-cutscene
|
|
3
|
-
description: "Generate a non-interactive cutscene
|
|
3
|
+
description: "Generate a non-interactive cutscene: a reference-locked 5-10s video shot with optional voiced dialogue."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: video
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read Grep Glob Write Edit
|
|
8
|
+
allowed-tools: Read Grep Glob Write Edit summer_assets_generate_video summer_jobs_wait summer_assets_generate_image summer_assets_generate_audio summer_assets_search summer_import_from_url summer_add_node summer_set_prop summer_call
|
|
9
9
|
paths: ["assets/video/**", "cinematics/**", "trailers/**"]
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -30,7 +30,7 @@ If the user wants 5 seconds of marketing footage, that's `trailer-shot`. If they
|
|
|
30
30
|
- "Looping splash screen background" — `animated-loop`.
|
|
31
31
|
- "Animated logo backdrop on the title screen" — `animated-loop`.
|
|
32
32
|
- Real-time in-engine cinematic with the actual gameplay characters and camera — that's an AnimationPlayer job, not generated video. Route to `scene-composition`.
|
|
33
|
-
- Voice-only narration over a static image — generate the dialogue with `
|
|
33
|
+
- Voice-only narration over a static image — generate the dialogue with `assets.generate_audio` and use a static `TextureRect`, no video needed.
|
|
34
34
|
|
|
35
35
|
## Steps
|
|
36
36
|
|
|
@@ -38,10 +38,10 @@ If the user wants 5 seconds of marketing footage, that's `trailer-shot`. If they
|
|
|
38
38
|
|
|
39
39
|
```
|
|
40
40
|
Read .summer/GameSoul.md
|
|
41
|
-
|
|
41
|
+
assets.search({ query: "<character name> reference", assetType: "2d_image", scope: "all" })
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
`
|
|
44
|
+
`assets.search` has no video filter — `assetType` is one of `2d_image`, `animation`, `3d_model`, `audio`, `music`, `all`, and there is no video member. To find prior cutscene clips, search your own assets with `assets.search({ query: "cutscene", scope: "mine" })` and read the titles.
|
|
45
45
|
|
|
46
46
|
If a reference image of the character already exists from a prior `concept-art` or `character-portrait` run, **reuse it** as the `imageUrl` — that single decision is the difference between the character looking like themselves and looking like a stranger.
|
|
47
47
|
|
|
@@ -51,32 +51,32 @@ Cutscenes longer than 10 seconds are **multiple shots**, not one take. Ask the u
|
|
|
51
51
|
|
|
52
52
|
> Want this as one 10s shot, or three shots (e.g. wide → close on face → reaction)? Each shot is 5-10s. I'll generate a reference image once, then image-to-video each shot off of it.
|
|
53
53
|
|
|
54
|
-
Default if the user is vague: **3 shots, 5s each, on kling**. Confirm before spending credits.
|
|
54
|
+
Default if the user is vague: **3 shots, 5s each, on kling**. Confirm before spending credits: `dryRun: true` on a shot's call returns its `estimate` (credits, balance, enough) and renders nothing.
|
|
55
55
|
|
|
56
56
|
### 3. Lock the look — generate a reference image first
|
|
57
57
|
|
|
58
|
-
For any character or hero scene, generate a reference still with `
|
|
58
|
+
For any character or hero scene, generate a reference still with `assets.generate_image` *before* generating video. This still drives `imageUrl` on every subsequent shot, so the character is consistent across cuts.
|
|
59
59
|
|
|
60
60
|
```
|
|
61
|
-
|
|
62
|
-
prompt
|
|
63
|
-
model
|
|
64
|
-
|
|
61
|
+
assets.generate_image({
|
|
62
|
+
prompt: "<subject>, <setting>, cinematic lighting, film still, wide framing, <art style from GameSoul.md>",
|
|
63
|
+
model: "nano-banana-2",
|
|
64
|
+
aspectRatio: "16:9"
|
|
65
|
+
})
|
|
65
66
|
```
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
Set `aspectRatio` to the cutscene's framing (`16:9`, or `9:16` for mobile); `width` and `height` ask for a minimum size. For image-to-video this matters more than usual: the clip's framing is inherited from the reference, so a square reference gives you a square cutscene.
|
|
68
69
|
|
|
69
70
|
Show the user the still and confirm it's the right look before video-ing it. Regenerating a still costs far less than regenerating a video.
|
|
70
71
|
|
|
71
72
|
### 4. Pick the model
|
|
72
73
|
|
|
73
|
-
**This skill always passes `imageUrl`, which puts every call on the image-to-video route
|
|
74
|
+
**This skill always passes `imageUrl`, which puts every call on the image-to-video route.** `kling-turbo` and `veo3` are text-to-video only; asking for either with an `imageUrl` set is a 400 `invalid_model`, not a silent downgrade.
|
|
74
75
|
|
|
75
76
|
| Model | i2v? | Speed | When |
|
|
76
77
|
|---|---|---|---|
|
|
77
78
|
| `ltx` | yes | ~30s | Iteration, blocking shots, B-roll, throwaway tests |
|
|
78
79
|
| `kling` | yes | 2-4 min | Hero shots, character cutscenes, anything the player will sit and watch |
|
|
79
|
-
| `minimax` | yes | 2-3 min | Stylized / anime-leaning content; better at non-photoreal looks than kling |
|
|
80
80
|
| `kling-turbo` | **no** | 1-2 min | Text-to-video only — usable only if you drop the reference image |
|
|
81
81
|
| `veo3` | **no** | 3-5 min | Text-to-video only — usable only if you drop the reference image |
|
|
82
82
|
|
|
@@ -85,24 +85,24 @@ Default policy: **`ltx` first** to validate the prompt and shot framing. If it l
|
|
|
85
85
|
### 5. Generate each shot
|
|
86
86
|
|
|
87
87
|
```
|
|
88
|
-
|
|
89
|
-
prompt
|
|
90
|
-
model
|
|
91
|
-
imageUrl
|
|
92
|
-
duration
|
|
93
|
-
aspectRatio
|
|
94
|
-
)
|
|
88
|
+
assets.generate_video({
|
|
89
|
+
prompt: "<subject does <action>, <camera move>, <lighting>, cinematic, 16mm film grain>",
|
|
90
|
+
model: "kling",
|
|
91
|
+
imageUrl: "<reference image fileUrl from step 3>",
|
|
92
|
+
duration: 5,
|
|
93
|
+
aspectRatio: "16:9"
|
|
94
|
+
})
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
-
`duration`
|
|
97
|
+
On `ltx` and `kling`, `duration` is 5 or 10 — anything else renders 5. The newer models in the `model` list render their nearest supported length.
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
`assets.generate_video` always answers at once with a job — `{ status: "running", job: { id } }` and **no `fileUrl`**; the clip is rendered by a background worker. Wait for it:
|
|
100
100
|
|
|
101
101
|
```
|
|
102
|
-
|
|
102
|
+
jobs.wait({ jobId: "<job.id from the generate call>", timeoutSeconds: 50 })
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
Only
|
|
105
|
+
Call `jobs.wait` again until `finished` is true. Only a finished job with state `done` has the asset and URL in its `result`. Do not tell the user a shot is done off the back of the generate call — at that moment nothing has rendered yet.
|
|
106
106
|
|
|
107
107
|
`aspectRatio` is applied on the text-to-video path only; on image-to-video the framing comes from the reference image, so a `9:16` cutscene needs a `9:16` reference, not a `9:16` argument.
|
|
108
108
|
|
|
@@ -112,14 +112,14 @@ When the job completes, show the user the URL and ask:
|
|
|
112
112
|
|
|
113
113
|
### 6. Generate dialogue audio (if the scene has dialogue)
|
|
114
114
|
|
|
115
|
-
Cutscene dialogue is TTS, not in the video model. The video model can render mouth motion that *looks* like talking, but the audio comes from `
|
|
115
|
+
Cutscene dialogue is TTS, not in the video model. The video model can render mouth motion that *looks* like talking, but the audio comes from `assets.generate_audio`. Generate it separately and an AnimationPlayer or your `cinematics/` controller scene syncs them.
|
|
116
116
|
|
|
117
117
|
```
|
|
118
|
-
|
|
119
|
-
capability
|
|
120
|
-
text
|
|
121
|
-
voiceId
|
|
122
|
-
)
|
|
118
|
+
assets.generate_audio({
|
|
119
|
+
capability: "text_to_speech",
|
|
120
|
+
text: "They'll come for you at dawn. Run while you can.",
|
|
121
|
+
voiceId: "<from audio bible — see voice-line>"
|
|
122
|
+
})
|
|
123
123
|
```
|
|
124
124
|
|
|
125
125
|
Lip-sync caveat: if the video shows the character clearly mouthing words and the audio is a different cadence, viewers notice. Either (a) keep the camera off the character's face during dialogue, (b) accept the asynchrony for a stylized look, or (c) use `veo3` and prompt the dialogue text directly into the video prompt for synced motion.
|
|
@@ -146,19 +146,27 @@ Then:
|
|
|
146
146
|
summer_import_from_url(url="<hosted .ogv url>", path="res://assets/video/cinematics/intro_shot_01.ogv")
|
|
147
147
|
```
|
|
148
148
|
|
|
149
|
-
Build a controller scene at `res://cinematics/Intro.tscn
|
|
149
|
+
Build a controller scene at `res://cinematics/Intro.tscn`: create it, then build its nodes in one script (`scenePath` names the new scene; the editor's open tab comes back afterwards):
|
|
150
150
|
|
|
151
151
|
```
|
|
152
|
-
summer_create_scene(path="res://cinematics/Intro.tscn", rootName="Intro",
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
152
|
+
summer_create_scene(path="res://cinematics/Intro.tscn", rootName="Intro", rootType="Control")
|
|
153
|
+
summer_run_script(scenePath="res://cinematics/Intro.tscn", source="""
|
|
154
|
+
func run(ctx):
|
|
155
|
+
var video = ctx.add_node("VideoStreamPlayer", "Video", null, {
|
|
156
|
+
"stream": load("res://assets/video/cinematics/intro_shot_01.ogv"),
|
|
157
|
+
"autoplay": true,
|
|
158
|
+
"expand": true,
|
|
159
|
+
})
|
|
160
|
+
video.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
|
161
|
+
var fade = ctx.add_node("ColorRect", "Fade", null, {"color": Color(0, 0, 0, 1)}) # black, alpha 1.0 -> 0.0
|
|
162
|
+
fade.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
|
163
|
+
fade.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
|
164
|
+
ctx.save_scene()
|
|
165
|
+
""")
|
|
160
166
|
```
|
|
161
167
|
|
|
168
|
+
`Fade` comes after `Video` in the tree, so it draws on top of it.
|
|
169
|
+
|
|
162
170
|
Attach a `Tween` script that fades the `ColorRect` from black to clear over 0.5s on `_ready`, then back to black when `Video.finished` fires, then `queue_free()`s the scene. For multi-shot cutscenes, queue the next `VideoStreamPlayer` in the `finished` signal handler.
|
|
163
171
|
|
|
164
172
|
For dialogue, add an `AudioStreamPlayer` sibling with the TTS clip and call `play()` in `_ready` after a small delay matching where the line lands in the video.
|
|
@@ -176,7 +184,7 @@ Pattern: `<subject> + <action> + <camera move> + <lighting> + <stylistic anchor>
|
|
|
176
184
|
| Action beat (village burns) | `kling` | `medium wide of a thatched village engulfed in flames at night, embers rising, silhouettes running through smoke, hand-held camera, cinematic` | 5s |
|
|
177
185
|
| Ending shot (hero walks away) | `kling` | `low wide shot of a cloaked figure walking away across a blasted plain at sunset, slow truck-back, golden hour, dust on the wind` | 5s |
|
|
178
186
|
| Throwaway iteration / blocking | `ltx` | same prompt as above | 5s |
|
|
179
|
-
| Anime / stylized cutscene | `
|
|
187
|
+
| Anime / stylized cutscene | `kling` | `anime-style young swordsman draws blade and steps forward, sakura petals, dramatic wind, Studio Ghibli soft painterly` | 5s |
|
|
180
188
|
|
|
181
189
|
### Bad prompts and why
|
|
182
190
|
|
|
@@ -191,23 +199,27 @@ Pattern: `<subject> + <action> + <camera move> + <lighting> + <stylistic anchor>
|
|
|
191
199
|
## Anti-patterns
|
|
192
200
|
|
|
193
201
|
- **Generating a 10s shot when you should chain two 5s shots.** Identity, hand consistency, and physics drift every additional second past ~6s. Two 5s shots cut together look better and cost the same.
|
|
194
|
-
- **Skipping the reference image.** Generating four character cutscenes from text prompts alone produces four different-looking people. Always lock the look with `
|
|
202
|
+
- **Skipping the reference image.** Generating four character cutscenes from text prompts alone produces four different-looking people. Always lock the look with `assets.generate_image` first, then `imageUrl` every subsequent video call.
|
|
195
203
|
- **Asking the video model to render dialogue without `veo3`.** `kling` and `ltx` will animate mouths but the motion does not match any audio. Use `veo3` if dialogue is on-camera, or keep the camera off the speaker.
|
|
196
204
|
- **Using `kling` for blocking iterations.** Validate framing and prompt on the cheaper `ltx` first; move to `kling` once the composition lands.
|
|
197
205
|
- **Putting the cutscene on a `VideoStreamPlayer` without a fade.** Cuts straight from gameplay to video are jarring. Always wrap in a `ColorRect` fade in/out.
|
|
198
|
-
- **Treating `
|
|
206
|
+
- **Treating `assets.generate_video` as finished.** It answers `{ status: "running", job }` and no URL. Wait with `jobs.wait` until the job is done before there is anything to show or import.
|
|
199
207
|
- **Importing the `.mp4` as-is.** The engine has no MP4 or WebM loader — only Ogg Theora (`.ogv`). Transcode first; an un-transcoded import fails and is rolled back.
|
|
200
|
-
- **Asking for `duration
|
|
208
|
+
- **Asking `ltx` or `kling` for `duration: 3` or `duration: 8`.** On those two only 5 and 10 exist; anything else renders 5.
|
|
201
209
|
- **Pairing `imageUrl` with `kling-turbo` or `veo3`.** Neither has an image-to-video endpoint — that combination is a 400.
|
|
202
210
|
|
|
203
211
|
## Edge cases
|
|
204
212
|
|
|
205
|
-
- **Vertical cutscene for a mobile target.** On the image-to-video path `aspectRatio` is not applied at all — the clip inherits the reference image's framing. So the reference *must* be 9:16
|
|
213
|
+
- **Vertical cutscene for a mobile target.** On the image-to-video path `aspectRatio` is not applied at all — the clip inherits the reference image's framing. So the reference *must* be 9:16: generate it with `aspectRatio: "9:16"`, then pass its URL as `imageUrl`.
|
|
206
214
|
- **Cutscene must match an in-engine character precisely.** No video model will hit pixel-perfect identity. Either (a) accept the artistic license, (b) render the cutscene in-engine with `AnimationPlayer` instead of generating it, or (c) generate a reference image *from* a screenshot of the in-engine character (image-to-image first, then image-to-video).
|
|
207
215
|
- **Dialogue is too long for a 5s shot.** Either trim the line, or split: 5s of speaker, 5s of listener reaction (cheaper because the listener doesn't need synced lips).
|
|
208
216
|
- **Cutscene needs to play and the player isn't looking.** Pause the gameplay timer, push a `Control` overlay with the `VideoStreamPlayer`, restore on finish.
|
|
209
217
|
- **Multi-shot continuity.** Use the same reference image as `imageUrl` across all shots. If lighting differs by shot, generate one reference per lighting setup, not one per shot.
|
|
210
218
|
|
|
219
|
+
## Without Summer Engine
|
|
220
|
+
|
|
221
|
+
In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), do steps 1-6 and skip step 7 (`VideoStreamPlayer`). Skip the soul-file read in step 1 when the project has no `.summer/` folder. Save the file where the person asked with `out` (the `summer-assets` skill says how), and tell them the path and format. Each shot is an MP4 and each dialogue line an audio file; the person cuts them together in their own editor.
|
|
222
|
+
|
|
211
223
|
## Fallback (no MCP)
|
|
212
224
|
|
|
213
225
|
If the MCP server isn't running, the user can do all of this in the Summer dashboard:
|
|
@@ -237,4 +249,25 @@ Once the cutscene is generated and wired:
|
|
|
237
249
|
- `music-track` — score the cutscene.
|
|
238
250
|
- `concept-art` — generate the reference image axis if no character reference exists yet.
|
|
239
251
|
- `character-portrait` — produce a high-fidelity locked character portrait for use as `imageUrl`.
|
|
240
|
-
-
|
|
252
|
+
- `summer_docs_read` id `reference/mcp-tools-reference` — how to call `assets.generate_video`; `summer_search` returns its exact input.
|
|
253
|
+
|
|
254
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
255
|
+
## From a shell
|
|
256
|
+
|
|
257
|
+
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.
|
|
258
|
+
|
|
259
|
+
| In this skill | Command |
|
|
260
|
+
|---|---|
|
|
261
|
+
| `assets.generate_audio`, `summer_assets_generate_audio` | `summer assets generate-audio` |
|
|
262
|
+
| `assets.generate_image`, `summer_assets_generate_image` | `summer assets generate-image` |
|
|
263
|
+
| `assets.generate_video`, `summer_assets_generate_video` | `summer assets generate-video` |
|
|
264
|
+
| `assets.search`, `summer_assets_search` | `summer assets search` |
|
|
265
|
+
| `summer_docs_read` | `summer docs read` |
|
|
266
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
267
|
+
| `summer_create_scene` | `summer engine create-scene` |
|
|
268
|
+
| `summer_import_from_url` | `summer engine import-from-url` |
|
|
269
|
+
| `summer_run_script` | `summer engine run-script` |
|
|
270
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
271
|
+
| `jobs.wait`, `summer_jobs_wait` | `summer jobs wait` |
|
|
272
|
+
| `summer_search` | `summer ops search "<what you want>"` |
|
|
273
|
+
<!-- /shell-commands -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/cinematic-cutscene
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.4
|
|
4
|
-
summary: Generate a non-interactive cutscene
|
|
4
|
+
summary: "Generate a non-interactive cutscene: a reference-locked 5-10s video shot with optional voiced dialogue."
|
|
5
5
|
use_when:
|
|
6
6
|
- generating a non-interactive cutscene clip — opening scene, story beat, character intro, ending
|
|
7
7
|
- a story beat needs a short pre-rendered clip between gameplay sections — intro, transition, ending
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: combat-basics
|
|
3
|
-
description: "Damage
|
|
3
|
+
description: "Damage: hitbox and hurtbox Areas, a reusable Health component, damage signals, knockback, projectiles."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
|
|
6
6
|
category: gameplay-mechanics
|
|
@@ -157,3 +157,22 @@ Homing, piercing, AoE, and pooling many bullets are in this skill's
|
|
|
157
157
|
spawn or find one enemy, press the attack action, `report()` the enemy's
|
|
158
158
|
`Health.current` before and after. A static scene check cannot show that a
|
|
159
159
|
hit registered.
|
|
160
|
+
|
|
161
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
162
|
+
## From a shell
|
|
163
|
+
|
|
164
|
+
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.
|
|
165
|
+
|
|
166
|
+
| In this skill | Command |
|
|
167
|
+
|---|---|
|
|
168
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
169
|
+
| `summer_batch` | `summer engine batch` |
|
|
170
|
+
| `summer_get_diagnostics` | `summer engine get-diagnostics` |
|
|
171
|
+
| `summer_get_script_errors` | `summer engine get-script-errors` |
|
|
172
|
+
| `summer_project_setting` | `summer engine project-setting` |
|
|
173
|
+
| `summer_read_file` | `summer engine read-file` |
|
|
174
|
+
| `summer_replace_text` | `summer engine replace-text` |
|
|
175
|
+
| `summer_save_scene` | `summer engine save-scene` |
|
|
176
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
177
|
+
| `summer_write_file` | `summer engine write-file` |
|
|
178
|
+
<!-- /shell-commands -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/combat-basics
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
summary: "Damage
|
|
4
|
+
summary: "Damage: hitbox and hurtbox Areas, a reusable Health component, damage signals, knockback, projectiles."
|
|
5
5
|
use_when:
|
|
6
6
|
- adding attacks, health and damage, or enemies that can be hit and hit back
|
|
7
7
|
- adding projectiles or bullets — homing, piercing, area-of-effect, or pooling hundreds of them
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: compatibility-renderer-traps
|
|
3
|
-
description: "Make a Forward+
|
|
3
|
+
description: "Make a Forward+ game look right on the Compatibility renderer: instance uniforms, MultiMesh, vertex colors."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: rendering-and-lighting
|
|
@@ -76,3 +76,14 @@ you test it on both renderers. One path for both renderers means one set of bugs
|
|
|
76
76
|
- `web-compatibility-look` (a finished look when the game only runs on Compatibility, as on the web)
|
|
77
77
|
- `3d-lighting` (lighting profiles)
|
|
78
78
|
- `bounded-engine-runs` (safe offscreen capture runs)
|
|
79
|
+
|
|
80
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
81
|
+
## From a shell
|
|
82
|
+
|
|
83
|
+
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.
|
|
84
|
+
|
|
85
|
+
| In this skill | Command |
|
|
86
|
+
|---|---|
|
|
87
|
+
| `summer_get_script_errors` | `summer engine get-script-errors` |
|
|
88
|
+
| `summer_project_setting` | `summer engine project-setting` |
|
|
89
|
+
<!-- /shell-commands -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/compatibility-renderer-traps
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
summary: "Make a Forward+
|
|
4
|
+
summary: "Make a Forward+ game look right on the Compatibility renderer: instance uniforms, MultiMesh, vertex colors."
|
|
5
5
|
use_when:
|
|
6
6
|
- a game must run on phones or weak GPUs that may use the Compatibility or Mobile renderer
|
|
7
7
|
- objects render black, pale or stop animating on one renderer but not another
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: concept-art
|
|
3
|
-
description: "Explore art direction with 3-4 rough concept variants of a character, environment
|
|
3
|
+
description: "Explore art direction with 3-4 rough concept variants of a character, environment or prop."
|
|
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_call
|
|
9
9
|
paths: ["assets/**", "art/**", "concepts/**"]
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -44,7 +44,7 @@ If "final" → hand off to `character-portrait`. If "explore" → continue.
|
|
|
44
44
|
### 2. Search for prior concepts
|
|
45
45
|
|
|
46
46
|
```
|
|
47
|
-
|
|
47
|
+
assets.search({ query: "<subject> concept", assetType: "2d_image", scope: "all" })
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
If something already exists, ask if the user wants to riff on it (img2img via `referenceImageUrl`) or start fresh.
|
|
@@ -68,16 +68,16 @@ State the axis to the user before generating: "I'll vary on **stylization** —
|
|
|
68
68
|
Issue 3-4 calls in parallel, one per variant. Use the same subject phrasing across all four; only the style-modifier changes.
|
|
69
69
|
|
|
70
70
|
```
|
|
71
|
-
|
|
72
|
-
prompt
|
|
73
|
-
model
|
|
74
|
-
style
|
|
75
|
-
)
|
|
71
|
+
assets.generate_image({
|
|
72
|
+
prompt: "<subject>. <axis variant 1>. concept art, evocative, rough painterly, atmospheric lighting, wide cinematic framing",
|
|
73
|
+
model: "nano-banana-2",
|
|
74
|
+
style: "none"
|
|
75
|
+
})
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
`style: "none"` is intentional: only `cartoon` and `anime` append anything to the prompt, `realistic` and `none` append nothing, and any other value is coerced to `none`. So the preset cannot override the prompt's stylistic direction — it just contributes nothing, which is what concept art wants. All four variants' divergence has to come from the prompt.
|
|
79
79
|
|
|
80
|
-
For a shape other than square, pass `aspectRatio` (`"16:9"`, `"9:16"`, ...) or `width` + `height`; the result reports the real width and height and the model that ran. Exploration images are thrown away, so square is usually fine. Background removal is the
|
|
80
|
+
For a shape other than square, pass `aspectRatio` (`"16:9"`, `"9:16"`, ...) or `width` + `height`; the result reports the real width and height and the model that ran. Exploration images are thrown away, so square is usually fine. Background removal is the `removeBackground` argument (there is no `options` object). Four variants are four charges: `dryRun: true` on one call shows its credits.
|
|
81
81
|
|
|
82
82
|
### 5. Present the batch
|
|
83
83
|
|
|
@@ -124,13 +124,17 @@ The structure: **subject + axis variant + "concept art" + lighting/atmosphere**.
|
|
|
124
124
|
- **Subject is a fully described scene, not an asset.** You're producing key art, not asset reference. Pass `aspectRatio: "16:9"` (or `width: 1920, height: 1080` for store key art) and bias toward atmospheric.
|
|
125
125
|
- **User wants the final to be 3D.** After they pick a direction, route to `asset-strategy` — concept-art images are not 3D-ready references (they have backgrounds, scene context, dramatic lighting baked in). The 3D pipeline needs its own clean white-background reference.
|
|
126
126
|
|
|
127
|
+
## Without Summer Engine
|
|
128
|
+
|
|
129
|
+
In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), every step works. Pass `out` with the person's folder so the batch lands there (the `summer-assets` skill says how), and skip `summer_import_from_url`.
|
|
130
|
+
|
|
127
131
|
## Fallback (no MCP)
|
|
128
132
|
|
|
129
133
|
Print the 4 prompts and the call for each:
|
|
130
134
|
|
|
131
135
|
```
|
|
132
|
-
|
|
133
|
-
|
|
136
|
+
assets.generate_image({ prompt: "<variant 1>", model: "nano-banana-2", style: "none" })
|
|
137
|
+
assets.generate_image({ prompt: "<variant 2>", ... })
|
|
134
138
|
...
|
|
135
139
|
```
|
|
136
140
|
|
|
@@ -150,4 +154,17 @@ Once the user picks a direction:
|
|
|
150
154
|
|
|
151
155
|
- `asset-strategy` — meta-router that delegates here vs other 2d-assets skills.
|
|
152
156
|
- `character-portrait` — the polished single-image counterpart.
|
|
153
|
-
-
|
|
157
|
+
- `summer_docs_read` id `reference/mcp-tools-reference` — how to call `assets.generate_image`.
|
|
158
|
+
|
|
159
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
160
|
+
## From a shell
|
|
161
|
+
|
|
162
|
+
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.
|
|
163
|
+
|
|
164
|
+
| In this skill | Command |
|
|
165
|
+
|---|---|
|
|
166
|
+
| `assets.generate_image`, `summer_assets_generate_image` | `summer assets generate-image` |
|
|
167
|
+
| `summer_assets_search` | `summer assets search` |
|
|
168
|
+
| `summer_docs_read` | `summer docs read` |
|
|
169
|
+
| `summer_import_from_url` | `summer engine import-from-url` |
|
|
170
|
+
<!-- /shell-commands -->
|