summer-engine 3.4.0 → 3.5.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 +1 -1
- package/.claude-plugin/plugin.json +5 -1
- package/.codex-plugin/plugin.json +5 -1
- package/.cursor-plugin/plugin.json +5 -1
- package/.factory-plugin/plugin.json +5 -1
- package/.opencode/INSTALL.md +8 -8
- package/.opencode/plugins/summer.js +2 -2
- package/AGENTS.md +7 -7
- package/CHANGELOG.md +37 -0
- package/GEMINI.md +1 -1
- package/NOTICE +1 -1
- package/README.md +35 -35
- package/assets/autopilot/run.sh +2 -2
- package/assets/navigation/web-routes.json +1 -1
- package/commands/gameskill.md +2 -2
- package/commands/summer.md +25 -25
- package/dist/cli/commands/open.d.ts +1 -1
- package/dist/cli/commands/run.d.ts +1 -1
- package/dist/cli/commands/run.js +1 -1
- package/dist/cli/commands/setup.js +24 -4
- package/dist/cli/commands/skills.js +2 -2
- package/dist/core/api-client.d.ts +5 -6
- package/dist/core/api-client.js +12 -15
- package/dist/core/auth.js +2 -2
- package/dist/core/capabilities/asset-import.d.ts +0 -1
- package/dist/core/capabilities/camera-view.d.ts +1 -1
- package/dist/core/capabilities/camera-view.js +2 -2
- package/dist/core/capabilities/capture-gameplay.d.ts +72 -7
- package/dist/core/capabilities/capture-gameplay.js +386 -25
- package/dist/core/capabilities/connect-signal.d.ts +1 -2
- package/dist/core/capabilities/connect-signal.js +1 -2
- package/dist/core/capabilities/console-read.d.ts +2 -2
- package/dist/core/capabilities/console-read.js +2 -2
- package/dist/core/capabilities/engine-receipt.d.ts +5 -7
- package/dist/core/capabilities/engine-receipt.js +7 -9
- package/dist/core/capabilities/export-engine-version.d.ts +7 -0
- package/dist/core/capabilities/export-engine-version.js +9 -0
- package/dist/core/capabilities/export-game.d.ts +4 -0
- package/dist/core/capabilities/export-game.js +53 -10
- package/dist/core/capabilities/export-presets.d.ts +1 -1
- package/dist/core/capabilities/export-presets.js +1 -1
- package/dist/core/capabilities/fabricate-mesh.d.ts +2 -3
- package/dist/core/capabilities/fabricate-mesh.js +2 -3
- package/dist/core/capabilities/frame-quality.d.ts +4 -4
- package/dist/core/capabilities/frame-quality.js +4 -4
- package/dist/core/capabilities/grep.d.ts +1 -1
- package/dist/core/capabilities/grep.js +1 -1
- package/dist/core/capabilities/image-generation.d.ts +12 -2
- package/dist/core/capabilities/image-generation.js +31 -2
- package/dist/core/capabilities/navigation/open.d.ts +1 -1
- package/dist/core/capabilities/navigation/open.js +1 -1
- package/dist/core/capabilities/navigation/render-product-map.js +1 -1
- package/dist/core/capabilities/navigation/targets.js +2 -2
- package/dist/core/capabilities/placement-batch.d.ts +1 -1
- package/dist/core/capabilities/placement-batch.js +2 -2
- package/dist/core/capabilities/play-determinism.d.ts +1 -1
- package/dist/core/capabilities/play-determinism.js +1 -1
- package/dist/core/capabilities/publish-build.d.ts +1 -1
- package/dist/core/capabilities/publish-build.js +21 -9
- package/dist/core/capabilities/publish-download.d.ts +1 -2
- package/dist/core/capabilities/publish-download.js +2 -3
- package/dist/core/capabilities/replace-node.d.ts +1 -3
- package/dist/core/capabilities/replace-node.js +1 -3
- package/dist/core/capabilities/runtime-control.d.ts +5 -7
- package/dist/core/capabilities/runtime-control.js +7 -9
- package/dist/core/capabilities/scene-batch.d.ts +1 -1
- package/dist/core/capabilities/scene-batch.js +1 -1
- package/dist/core/capabilities/scene-kind.js +1 -1
- package/dist/core/capabilities/scene-readback.d.ts +3 -4
- package/dist/core/capabilities/scene-readback.js +3 -4
- package/dist/core/capabilities/scene-script.d.ts +2 -2
- package/dist/core/capabilities/scene-script.js +2 -2
- package/dist/core/capabilities/seeing/shot-store.d.ts +1 -1
- package/dist/core/capabilities/seeing/shot-store.js +1 -1
- package/dist/core/capabilities/summer-bundle.d.ts +11 -3
- package/dist/core/capabilities/summer-bundle.js +21 -3
- package/dist/core/capabilities/surface-snap.d.ts +1 -1
- package/dist/core/capabilities/surface-snap.js +1 -1
- package/dist/core/capabilities/tool-dispatch.js +14 -3
- package/dist/core/capabilities/ui-control.d.ts +1 -2
- package/dist/core/capabilities/ui-control.js +1 -2
- package/dist/core/capabilities/world-snapshot.d.ts +1 -1
- package/dist/core/capabilities/world-snapshot.js +1 -1
- package/dist/core/capability-skew.d.ts +2 -3
- package/dist/core/capability-skew.js +4 -5
- package/dist/core/feedback/client.js +1 -1
- package/dist/core/launch-posture.d.ts +3 -3
- package/dist/core/launch-posture.js +3 -3
- package/dist/core/library-read.d.ts +7 -0
- package/dist/core/library-read.js +60 -9
- package/dist/core/library-search.d.ts +2 -0
- package/dist/core/templates.d.ts +1 -2
- package/dist/core/templates.js +1 -2
- package/dist/installer/agent-config.d.ts +25 -0
- package/dist/installer/agent-config.js +114 -3
- package/dist/installer/agent-table.d.ts +12 -0
- package/dist/installer/agent-table.js +9 -0
- package/dist/mcp/server.d.ts +2 -2
- package/dist/mcp/server.js +2 -2
- package/dist/mcp/tools/creator-tools.js +33 -4
- package/dist/mcp/tools/debug-tools.js +1 -1
- package/dist/mcp/tools/generate-tools.js +18 -37
- package/dist/mcp/tools/library-tools.d.ts +2 -1
- package/dist/mcp/tools/library-tools.js +1 -0
- package/dist/mcp/tools/navigation-tools.d.ts +1 -1
- package/dist/mcp/tools/navigation-tools.js +1 -1
- package/dist/mcp/tools/spatial-tools.js +1 -1
- package/dist/mcp/tools/visual-tools.js +2 -2
- package/dist/mcp/tools/with-engine.d.ts +1 -2
- package/dist/mcp/tools/with-engine.js +1 -2
- package/gemini-extension.json +5 -1
- package/hooks/session-start.sh +2 -2
- package/integrations/README.md +70 -76
- package/integrations/claude/README.md +0 -3
- package/integrations/codex/README.md +1 -2
- package/integrations/copilot-jetbrains/README.md +1 -1
- package/integrations/cursor/README.md +1 -2
- package/integrations/factory/README.md +15 -11
- package/integrations/mistral-vibe/README.md +1 -1
- package/integrations/opencode/README.md +1 -1
- package/integrations/roo-code/README.md +1 -1
- package/integrations/rovo-dev/README.md +1 -1
- package/integrations/trae/README.md +1 -1
- package/integrations/windsurf/README.md +3 -3
- package/library/references/collaborative-protocol/collaborative-protocol.md +5 -5
- package/library/references/gd-style/gd-style.md +4 -6
- package/library/references/godot-version/godot-version.md +3 -3
- package/library/references/headless-routing/headless-routing.md +2 -2
- package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +2 -2
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +16 -15
- package/library/references/product-map/product-map.md +1 -1
- package/library/references/public-surface-language/public-surface-language.md +1 -1
- package/library/references/summer-folder/summer-folder.md +1 -1
- package/library/skills/3d-lighting/SKILL.md +4 -4
- package/library/skills/README.md +16 -6
- package/library/skills/adaptive-music/SKILL.md +7 -7
- package/library/skills/ai-characters-in-games/SKILL.md +1 -1
- package/library/skills/ambient-bed/SKILL.md +12 -14
- package/library/skills/animated-loop/SKILL.md +42 -42
- package/library/skills/animation-tree/SKILL.md +6 -6
- package/library/skills/art-direction/SKILL.md +8 -11
- package/library/skills/asset-strategy/SKILL.md +3 -3
- package/library/skills/audio-direction/SKILL.md +8 -10
- package/library/skills/auto-fire-targeting/SKILL.md +4 -3
- package/library/skills/bounded-engine-runs/SKILL.md +6 -7
- package/library/skills/brainstorm-game/SKILL.md +5 -5
- package/library/skills/brainstorming/SKILL.md +9 -15
- package/library/skills/celeste-momentum-platforming/SKILL.md +8 -13
- package/library/skills/celeste-momentum-platforming/resource.yaml +1 -1
- package/library/skills/character-animation-wiring/SKILL.md +2 -2
- package/library/skills/character-model/SKILL.md +15 -26
- package/library/skills/character-movement/SKILL.md +1 -1
- package/library/skills/character-movement/references/movement-3d.md +1 -1
- package/library/skills/character-portrait/SKILL.md +4 -4
- package/library/skills/cinematic-cutscene/SKILL.md +38 -38
- package/library/skills/combat-basics/SKILL.md +1 -1
- package/library/skills/compatibility-renderer-traps/SKILL.md +2 -2
- package/library/skills/concept-art/SKILL.md +3 -3
- package/library/skills/create-asset-sheet/SKILL.md +12 -31
- package/library/skills/debug/SKILL.md +5 -4
- package/library/skills/debugging-game-feel/SKILL.md +1 -4
- package/library/skills/debugging-game-feel/resource.yaml +1 -1
- package/library/skills/design-level/SKILL.md +5 -5
- package/library/skills/design-mechanic/SKILL.md +6 -6
- package/library/skills/design-npc/SKILL.md +8 -15
- package/library/skills/diagnosing-perf-regressions/SKILL.md +5 -10
- package/library/skills/dispatching-parallel-agents/SKILL.md +1 -19
- package/library/skills/environment-kit/SKILL.md +5 -5
- package/library/skills/export-and-ship/SKILL.md +24 -25
- package/library/skills/export-and-ship/resource.yaml +2 -1
- package/library/skills/fabricating-assets/SKILL.md +1 -1
- package/library/skills/facial-and-lipsync/SKILL.md +5 -5
- package/library/skills/fps-controller/SKILL.md +17 -16
- package/library/skills/fps-controller/resource.yaml +0 -2
- package/library/skills/game-feel/SKILL.md +6 -7
- package/library/skills/gameskill/SKILL.md +3 -3
- package/library/skills/gdscript-patterns/SKILL.md +3 -3
- package/library/skills/generate-motion/SKILL.md +5 -22
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +72 -90
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +0 -1
- package/library/skills/grow-analytics/SKILL.md +21 -0
- package/library/skills/grow-analytics/resource.yaml +27 -0
- package/library/skills/headless-scripting/SKILL.md +8 -8
- package/library/skills/instantiate-asset-pack/SKILL.md +7 -3
- package/library/skills/investigating-bugs/SKILL.md +3 -11
- package/library/skills/investigating-bugs/condition-based-waiting.md +0 -10
- package/library/skills/investigating-bugs/root-cause-tracing.md +0 -8
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +15 -15
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +0 -1
- package/library/skills/make-game/SKILL.md +3 -5
- package/library/skills/make-game/references/2d-platformer.md +1 -1
- package/library/skills/multiplayer-project/SKILL.md +1 -1
- package/library/skills/multiplayer-testing/SKILL.md +4 -4
- package/library/skills/music-track/SKILL.md +40 -38
- package/library/skills/new-project/SKILL.md +4 -6
- package/library/skills/organic-model/SKILL.md +9 -9
- package/library/skills/pixel-art/SKILL.md +6 -6
- package/library/skills/play/SKILL.md +3 -4
- package/library/skills/playtesting-a-feature/SKILL.md +4 -6
- package/library/skills/procedural-animation/SKILL.md +10 -11
- package/library/skills/prop-model/SKILL.md +4 -4
- package/library/skills/psx-retro-rendering/SKILL.md +20 -20
- package/library/skills/psx-retro-rendering/resource.yaml +2 -3
- package/library/skills/publish-your-game/SKILL.md +21 -0
- package/library/skills/publish-your-game/resource.yaml +29 -0
- package/library/skills/realtime-wet-surfaces/SKILL.md +15 -15
- package/library/skills/realtime-wet-surfaces/resource.yaml +1 -2
- package/library/skills/remote-deploy/SKILL.md +20 -21
- package/library/skills/retarget/SKILL.md +19 -23
- package/library/skills/running-in-the-cloud/SKILL.md +5 -5
- package/library/skills/scene-composition/SKILL.md +5 -5
- package/library/skills/scene-hierarchy-design/SKILL.md +3 -3
- package/library/skills/scene-hierarchy-design/resource.yaml +0 -1
- package/library/skills/scene-scripting/SKILL.md +3 -3
- package/library/skills/scene-to-level/SKILL.md +28 -31
- package/library/skills/skill-create/SKILL.md +1 -1
- package/library/skills/skill-improve/SKILL.md +9 -9
- package/library/skills/skill-test/SKILL.md +10 -10
- package/library/skills/skintokens-auto-rigging/SKILL.md +18 -18
- package/library/skills/skintokens-auto-rigging/resource.yaml +3 -3
- package/library/skills/skybox-panorama/SKILL.md +8 -9
- package/library/skills/sound-effect/SKILL.md +19 -19
- package/library/skills/spatial-placement/SKILL.md +2 -2
- package/library/skills/spatial-placement/references/kit-placement-tools.md +12 -22
- package/library/skills/sprite-sheet/SKILL.md +10 -10
- package/library/skills/store-art/SKILL.md +23 -0
- package/library/skills/store-art/resource.yaml +30 -0
- package/library/skills/store-listing/SKILL.md +21 -0
- package/library/skills/store-listing/resource.yaml +25 -0
- package/library/skills/summer-analytics/SKILL.md +3 -3
- package/library/skills/summer-analytics/resource.yaml +1 -0
- package/library/skills/summer-friends/SKILL.md +10 -10
- package/library/skills/summer-leaderboards/SKILL.md +6 -6
- package/library/skills/summer-match-results/SKILL.md +13 -13
- package/library/skills/summer-matchmaking/SKILL.md +11 -11
- package/library/skills/summer-parties/SKILL.md +9 -9
- package/library/skills/summer-player-data/SKILL.md +12 -12
- package/library/skills/summer-store/SKILL.md +6 -6
- package/library/skills/summer-world-chat/SKILL.md +9 -9
- package/library/skills/summer-world-saves/SKILL.md +7 -7
- package/library/skills/text-to-motion/rigging-for-text-motion.md +1 -1
- package/library/skills/tileable-texture/SKILL.md +1 -1
- package/library/skills/trailer-shot/SKILL.md +36 -36
- package/library/skills/tune-performance/SKILL.md +13 -13
- package/library/skills/tune-performance/resource.yaml +1 -1
- package/library/skills/ui-graphics/SKILL.md +7 -7
- package/library/skills/use-widget-asset/SKILL.md +7 -7
- package/library/skills/using-summer/SKILL.md +5 -7
- package/library/skills/vehicle-model/SKILL.md +6 -7
- package/library/skills/vehicle-model/resource.yaml +2 -2
- package/library/skills/verification-before-completion/SKILL.md +5 -6
- package/library/skills/vfx-dissolve/SKILL.md +4 -4
- package/library/skills/vfx-fire/SKILL.md +6 -6
- package/library/skills/vfx-fire/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-hit-spark/SKILL.md +4 -4
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-lightning/SKILL.md +5 -5
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-lightning/_building-blocks/trauma-shake-snippet.md +9 -3
- package/library/skills/vfx-magic-glow/SKILL.md +4 -4
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-muzzle-flash/SKILL.md +5 -5
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +9 -3
- package/library/skills/vfx-smoke/SKILL.md +5 -5
- package/library/skills/vfx-water-ripple/SKILL.md +2 -2
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/voice-line/SKILL.md +9 -9
- package/library/skills/world-building-3d/references/spatial-tools.md +2 -2
- package/library/skills/writing-plans/SKILL.md +4 -4
- package/library/skills/writing-skills/SKILL.md +8 -8
- package/library/tools/capture-gameplay/resource.yaml +66 -1
- package/library/tools/creator-publish/resource.yaml +4 -4
- package/library/tools/creator-releases/resource.yaml +5 -5
- package/library/tools/export-game/resource.yaml +3 -0
- package/library/tools/generate-image/resource.yaml +4 -2
- package/library/tools/publish-build/resource.yaml +5 -1
- package/package.json +1 -1
- package/registry/generated/counts.json +2 -2
- package/registry/generated/gemini-extension.json +5 -1
- package/registry/generated/index.json +280 -137
- package/registry/generated/marketplace.claude.json +1 -1
- package/registry/generated/plugin.claude.json +5 -1
- package/registry/generated/plugin.codex.json +5 -1
- package/registry/generated/plugin.cursor.json +5 -1
- package/registry/generated/plugin.factory.json +5 -1
- package/registry/generated/skills-index.md +16 -6
- package/registry/generated/skills-registry.json +57 -5
- package/registry/schemas/domains.json +1 -1
- package/registry/schemas/skill.schema.json +5 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Summer MCP Tools — Canonical Reference
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Which Summer MCP tool to call. Skills reference tool names exactly as written here.
|
|
4
4
|
|
|
5
5
|
## When to use Summer MCP vs. host tools
|
|
6
6
|
|
|
7
|
-
**Use Summer MCP for** anything that needs the live editor or
|
|
7
|
+
**Use Summer MCP for** anything that needs the live editor or the engine's import pipeline:
|
|
8
8
|
- Scene graph mutation (`.tscn`)
|
|
9
9
|
- Node properties and resources (`.tres`)
|
|
10
10
|
- Project settings (`project.godot`) and InputMap
|
|
11
|
-
- Asset import (
|
|
11
|
+
- Asset import (the import pipeline must run)
|
|
12
12
|
- Play / stop / runtime state
|
|
13
13
|
- Diagnostics, console, debugger output, script errors
|
|
14
14
|
- Project text reads and guarded writes (`.gd`, `.cs`, `.tscn`, `.tres`, JSON, docs, config)
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
| `summer_write_file` | Create-only or sha256-guarded complete file write. |
|
|
29
29
|
| `summer_replace_text` | Unique (or explicit replace-all) text mutation with read/sha guard. |
|
|
30
30
|
|
|
31
|
-
### Scene graph (
|
|
31
|
+
### Scene graph (12)
|
|
32
32
|
|
|
33
33
|
| Tool | Use |
|
|
34
34
|
|---|---|
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
|
|
50
50
|
| Tool | Use |
|
|
51
51
|
|---|---|
|
|
52
|
-
| `summer_set_prop` | Set a typed property in an explicit `scenePath` using
|
|
52
|
+
| `summer_set_prop` | Set a typed property in an explicit `scenePath` using `str_to_var()`. |
|
|
53
53
|
| `summer_set_resource_property` | Set a nested resource property in an explicit `scenePath`. |
|
|
54
54
|
| `summer_inspect_resource` | Read a resource FILE (`path`): a Mesh `.res` gives AABB, surfaces (primitive, vertex/index counts, attributes, triangles, material) and materials; a `.tscn`/`.glb` gives its nodes and meshes; anything else its non-default editor properties. Or a resource a node of the active scene holds (`nodePath` + `property`). |
|
|
55
55
|
| `summer_connect_signal` | Wire a signal between nodes in the explicit `scenePath` (a `.tscn`). Connects with `CONNECT_PERSIST` through a RunSceneScript probe (the engine's ConnectSignal op never saves the connection), saves, and returns `persisted:true` / `verified:true` only when the saved file holds the `[connection]` line; otherwise `failure_reason: not_persisted`. |
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
|
|
66
66
|
| Tool | Use |
|
|
67
67
|
|---|---|
|
|
68
|
-
| `summer_import_from_url` | Download a `.glb`/`.png`/etc and run
|
|
68
|
+
| `summer_import_from_url` | Download a `.glb`/`.png`/etc and run the engine's full import pipeline. |
|
|
69
69
|
| `summer_import_from_url_batch` | Same, batched (single filesystem scan). |
|
|
70
70
|
|
|
71
71
|
### Scene scripting (3)
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
|
|
85
85
|
### Editor UI control (4)
|
|
86
86
|
|
|
87
|
-
Preview
|
|
87
|
+
Preview: needs Summer Engine 0.5.66 or newer; older engines return `engine_lacks_op`. Scene work never goes through the editor UI (use the scene, scripting, and perception tools). UI ops are for editor-workflow steps a human does with the mouse — open Project Settings, switch the main screen, clear a blocking dialog, read a dock. Ladder: dedicated tool → named action → tree + activate → screenshot (pixels last, never for coordinates). Quit / project-reload / delete-without-confirm actions are denied by the engine. The `driving-the-editor-ui` skill carries the patterns.
|
|
88
88
|
|
|
89
89
|
| Tool | Use |
|
|
90
90
|
|---|---|
|
|
@@ -190,7 +190,7 @@ Preview. One fast, read-only call that walks every node of a 3D scene and lists
|
|
|
190
190
|
|
|
191
191
|
| Tool | Use |
|
|
192
192
|
|---|---|
|
|
193
|
-
| `summer_create_debug_report` | Create a support-ready Markdown report
|
|
193
|
+
| `summer_create_debug_report` | Create a support-ready Markdown report (same as `summer debug`). |
|
|
194
194
|
| `summer_get_diagnostics` | Aggregate error/warning summary. Call after every change. |
|
|
195
195
|
| `summer_get_console` | Engine output panel. |
|
|
196
196
|
| `summer_clear_console` | Clear before a fresh play, so post-run output is clean. |
|
|
@@ -206,9 +206,9 @@ Preview. One fast, read-only call that walks every node of a 3D scene and lists
|
|
|
206
206
|
| `summer_list_my_assets` | List/search the signed-in user's generated and uploaded assets. Empty query lists recent assets. |
|
|
207
207
|
| `summer_get_asset` | Fetch one exact asset by ID with file URL, download URL, viewer URL, metadata, license, and visibility. |
|
|
208
208
|
| `summer_get_asset_download_url` | Get the primary or thumbnail download URL for a specific asset. Stable shape for future signed URLs. |
|
|
209
|
-
| `summer_import_asset` | Search, choose the top match, download, run
|
|
209
|
+
| `summer_import_asset` | Search, choose the top match, download, run the engine import, and optionally instantiate 3D models. |
|
|
210
210
|
| `summer_import_asset_by_id` | Import one exact Summer asset ID. Use after generation jobs or when the user selects a specific asset. |
|
|
211
|
-
| `summer_import_hdri` | Search Poly Haven's CC0 HDRIs (public API, no Summer login), import the `.hdr`/`.exr` into `res://sky/`, and get the exact `summer_run_script` snippet that wires it as the WorldEnvironment sky.
|
|
211
|
+
| `summer_import_hdri` | Search Poly Haven's CC0 HDRIs (public API, no Summer login), import the `.hdr`/`.exr` into `res://sky/`, and get the exact `summer_run_script` snippet that wires it as the WorldEnvironment sky. |
|
|
212
212
|
| `summer_slice_asset_sheet` | Detect and crop every distinct asset from a generated sheet image into named individual assets (works without the engine; import the results afterwards). |
|
|
213
213
|
|
|
214
214
|
### Asset generation (5 — metered)
|
|
@@ -228,7 +228,7 @@ Preview. One fast, read-only call that walks every node of a 3D scene and lists
|
|
|
228
228
|
| `summer_check_job` | Poll a generation job. |
|
|
229
229
|
| `summer_batch` | Run multiple ops as a transaction. `InstantiateScene` ops may carry `position` / `rotation_degrees` / `scale` / `transform`; `receipt: "summary"` returns counts, failures with op index and created paths under 5 KB. A `ReparentNode` keeps the moved node's scene-owned children and grandchildren (the engine op drops them from the saved file) and is verified from the saved `.tscn` (`persisted:true` / `verified:true`, else `failure_reason: not_persisted`); a raw `ConnectSignal` is refused — use `summer_connect_signal`. `scenePersistence.saved` only means the SaveScene ran. |
|
|
230
230
|
|
|
231
|
-
### Meta (
|
|
231
|
+
### Meta (5)
|
|
232
232
|
|
|
233
233
|
| Tool | Use |
|
|
234
234
|
|---|---|
|
|
@@ -236,6 +236,7 @@ Preview. One fast, read-only call that walks every node of a 3D scene and lists
|
|
|
236
236
|
| `summer_get_studio_workflow` | Discover Summer Studio's guided workflow recipes (starter prompts, ordered steps, required tools) for a goal. |
|
|
237
237
|
| `summer_get_project_context` | Project, scene, and `.summer` memory summary — call at start of session. Binds the session to the open project and surfaces a `capabilitySkewWarning` when the engine build and CLI have drifted; tools whose op the engine provably lacks return a structured `engine_lacks_op` result instead of running. Compact by default (a few KB: `sceneSummary`, scalar `health` with capability counts); `include:['scene_tree','capabilities','settings']` adds the heavy blocks, `omitted` says how. |
|
|
238
238
|
| `summer_get_agent_playbook` | Daily operating contract (observe-first loop, content routing, invariants, verification ritual) — call at start of session. Also served natively as the `summer_agent_playbook` MCP prompt. |
|
|
239
|
+
| `summer_get_board` | Read the person's approved planning board (look, characters, place, storyboard, picks), with the look and picked cards as images to compare screenshots against. Needs the project id from the build brief; works without the engine. |
|
|
239
240
|
|
|
240
241
|
### Creator platform (7)
|
|
241
242
|
|
|
@@ -245,9 +246,9 @@ Preview. One fast, read-only call that walks every node of a 3D scene and lists
|
|
|
245
246
|
| `summer_export_templates` | `list` or `install` export templates from Summer's CDN (`downloads.summer.games/engine-templates/<summerVersion>/manifest.json`) into the engine's user template folder (`<data>/Godot/export_templates/<FULL_CONFIG>/`), sha256-checked. Only download exports need them; store bundles need none. `summerVersion` is read on macOS, passed elsewhere. |
|
|
246
247
|
| `summer_publish_build` | Upload that `.zip` to the creator's game through Studio's store upload: confirm-gated preview first, then declare, part upload from disk, seal, wait for the Build, name its client pack; `publish:true` also approves it. Needs `summer login --store`; a retry with the same file and version continues the same upload. |
|
|
247
248
|
| `summer_creator_publish` | **Deprecated** (use the two tools above). Compute the exact `.pck` digest and size, require user confirmation, then run versioned prepare → write-once upload → finalize. The server independently verifies `publish` scope, ownership, bytes, and review state. |
|
|
248
|
-
| `summer_creator_releases` |
|
|
249
|
+
| `summer_creator_releases` | **Deprecated.** Lists releases on the legacy creator API. For summer.games use `summer_store_releases` (hosted, mounted after `summer login --store`). |
|
|
249
250
|
| `summer_creator_config` | Read or confirm updates to the shared non-secret `~/.summer/config.json`. It never accepts or returns tokens. |
|
|
250
|
-
| `summer_capture_gameplay` | Real gameplay frames without a running editor: starts the game (main scene or `scene`) in the engine's offscreen verify instance (`--summer-verify`, real renderer, window parked offscreen, no focus) at `resolution` (default `1920x1080`), waits `waitSeconds`, saves `frames` PNGs (HUD included) to `<project>/.summer/captures/<time>/`. Imports the project first when `.godot/` is missing. Returns each path with its real width and height; warns when the stretch settings render another size. For store screenshots. |
|
|
251
|
+
| `summer_capture_gameplay` | Real gameplay frames without a running editor: starts the game (main scene or `scene`) in the engine's offscreen verify instance (`--summer-verify`, real renderer, window parked offscreen, no focus) (`--summer-offscreen`) at `resolution` (default `1920x1080`), waits `waitSeconds`, runs `steps` (`press` a button by text, `key`, `action`, `click`, `drag`, `wait`, `shot`), saves `frames` PNGs (HUD included; with a `shot` step, one per shot) to `<project>/.summer/captures/<time>/`. `args` are the game's own flags, passed after `--` (e.g. `["--autostart"]` to skip the title screen). Imports the project first when `.godot/` is missing. Returns each path with its real width and height; warns when the stretch settings render another size. For store screenshots. |
|
|
251
252
|
|
|
252
253
|
### Library search (2)
|
|
253
254
|
|
|
@@ -288,7 +289,7 @@ Every asset-generation skill should follow this loop:
|
|
|
288
289
|
2. `summer_generate_image` / `summer_generate_3d` / `summer_generate_audio` — metered creation.
|
|
289
290
|
3. `summer_check_job` if the generation was async.
|
|
290
291
|
4. `summer_get_asset` — resolve the returned `assetId`, `rigAssetId`, or `animationAssetId`.
|
|
291
|
-
5. `summer_import_asset_by_id` — import the exact result
|
|
292
|
+
5. `summer_import_asset_by_id` — import the exact result through the engine's import pipeline.
|
|
292
293
|
6. `summer_get_asset_download_url` — only when the user explicitly wants a downloadable file/link.
|
|
293
294
|
|
|
294
295
|
## summer_set_resource_property — nested properties
|
|
@@ -305,7 +306,7 @@ summer_set_resource_property(
|
|
|
305
306
|
|
|
306
307
|
`nodePath`, `resourceProperty` and `subProperty` are all required and canonical. There is no dotted `"mesh.size"` form.
|
|
307
308
|
|
|
308
|
-
**Inline `sub_resource` targets work.**
|
|
309
|
+
**Inline `sub_resource` targets work.** You do not need to save the resource as a standalone `.tres` first: the op reads the node's property and sets the sub-property on whatever resource it holds. The canonical example in the shipped `summer_batch` description does exactly this against an inline mesh.
|
|
309
310
|
|
|
310
311
|
Structural failures are explicit:
|
|
311
312
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
## Who owns what
|
|
8
8
|
|
|
9
9
|
- **Web rows** come from summerengine.com's own route catalog (`/agent-routes.json`, published from the web repo's `src/lib/navigation/routes.ts`). The toolkit vendors a snapshot (`assets/navigation/web-routes.json`, refreshed with `npm run sync:web-routes`); it does not invent pages.
|
|
10
|
-
- **Editor rows** are ids of Summer Engine's one navigation table (
|
|
10
|
+
- **Editor rows** are ids of Summer Engine's one navigation table (the `Navigate` op). The running engine advertises which ids it can open in `/api/health` `capabilities.navigation`; `summer open --list` shows availability from the connected engine. Engines that predate the `Navigate` op can still serve the rows with a legacy op (last-but-one column); every other row answers `engine_lacks_op` with an update hint.
|
|
11
11
|
|
|
12
12
|
## How to read a row
|
|
13
13
|
|
|
@@ -13,7 +13,7 @@ Godot Engine remains relevant in narrow technical and legal contexts:
|
|
|
13
13
|
- upstream contributions, attribution, copyright, and licenses.
|
|
14
14
|
|
|
15
15
|
The current technical base is 4.6.1 and the approved next target is 4.7.1. The
|
|
16
|
-
source of truth is
|
|
16
|
+
source of truth is `src/core/summer-compatibility.ts`. Neither number is a
|
|
17
17
|
permanent Summer identity, so creator prompts and skills should not pin
|
|
18
18
|
themselves to one upstream release.
|
|
19
19
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# `.summer/` Folder Convention
|
|
2
2
|
|
|
3
|
-
> The
|
|
3
|
+
> The layout of project-scoped Summer state. Read this before writing a skill that writes design output, locked project memory, or agent-readable notes.
|
|
4
4
|
|
|
5
5
|
## Files at the root of `.summer/`
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ paths: ["**/*.tscn", "**/*.tres"]
|
|
|
11
11
|
|
|
12
12
|
# 3D Lighting for Summer Engine
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
Outdoor and indoor lighting setups for 3D scenes.
|
|
15
15
|
|
|
16
16
|
## Light Types
|
|
17
17
|
|
|
@@ -59,9 +59,9 @@ For a simple procedural sky:
|
|
|
59
59
|
summer_set_resource_property(nodePath="./World/WorldEnvironment", resourceProperty="environment", subProperty="background_mode", value="2")
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
A sky is a `Sky` resource in `environment.sky`, with a `ProceduralSkyMaterial` (or `PhysicalSkyMaterial`) in its `sky_material`. `summer_set_resource_property` only sets properties on a resource that already exists, so create the `Sky` and its material in one `summer_run_script` call.
|
|
63
63
|
|
|
64
|
-
**Simpler path:**
|
|
64
|
+
**Simpler path:** start from the `3d-basic` template, which already has a sky, and copy its structure.
|
|
65
65
|
|
|
66
66
|
### 3. Fill Light (Optional)
|
|
67
67
|
|
|
@@ -128,7 +128,7 @@ set the meshes' `gi_mode`, then run the bake yourself from `summer_run_script`
|
|
|
128
128
|
enum (0 is OK; `BAKE_ERROR_NO_LIGHTMAPPER` means no renderer in this process, not a
|
|
129
129
|
missing binding). Verify with a `framing:"camera"` screenshot, which renders the
|
|
130
130
|
real environment. Only fall back to "press Bake Lightmaps in the editor" when
|
|
131
|
-
|
|
131
|
+
no renderer is available. If they want GI with zero bake step,
|
|
132
132
|
steer to `SDFGI` (`Environment.sdfgi_enabled`) or `VoxelGI`.
|
|
133
133
|
|
|
134
134
|
Note the related trap: `Engine.has_singleton("EditorInterface")` returns **true**
|
package/library/skills/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Summer skills
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 122 skills, grouped by their primary domain. **Generated** by `npm run generate:registry` from each skill's `resource.yaml`; `--check` fails when this file and the library disagree. Do not edit by hand.
|
|
4
4
|
|
|
5
5
|
The folder is flat on purpose (`docs/design/DECISIONS.md`, D3): a skill usually belongs to several domains, so categories live in each skill's `facets.domains` and this index is rendered from them. The first domain listed is the primary one. `summer skills list --by-domain` prints the same grouping; `summer skills info <slug>` shows one skill.
|
|
6
6
|
|
|
@@ -16,6 +16,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
16
16
|
- [assets](#assets) (3)
|
|
17
17
|
- [audio](#audio) (6)
|
|
18
18
|
- [character-controller](#character-controller) (2)
|
|
19
|
+
- [creator](#creator) (4)
|
|
19
20
|
- [debug](#debug) (1)
|
|
20
21
|
- [deployment](#deployment) (2)
|
|
21
22
|
- [editor](#editor) (1)
|
|
@@ -56,7 +57,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
56
57
|
| [*fabricating-assets*](./fabricating-assets/SKILL.md) (preview) | Fabricate meshes with a bpy script in the user's own Blender (summer_fabricate_3d) — kits with exact dimensions, VFX meshes, post-processing generated models. | assets, scripting, agent-workflow |
|
|
57
58
|
| [organic-model](./organic-model/SKILL.md) | Generate organic 3D shapes — trees, rocks, mushrooms, coral, plants, vines, crystals — where AI artifacts read as natural irregularity. | assets |
|
|
58
59
|
| [prop-model](./prop-model/SKILL.md) ★ | Generate a single static 3D prop — sword, barrel, chest, lantern, throne, statue — one isolated object, no rigging, wired as a MeshInstance3D. | assets |
|
|
59
|
-
| [vehicle-model](./vehicle-model/SKILL.md) | Generate a hard-surface vehicle — car, spaceship, mech, boat, tank — static mesh with optional detail-texture pass, wired as
|
|
60
|
+
| [vehicle-model](./vehicle-model/SKILL.md) | Generate a hard-surface vehicle — car, spaceship, mech, boat, tank — static mesh with optional detail-texture pass, wired as VehicleBody3D or MeshInstance3D. | assets |
|
|
60
61
|
|
|
61
62
|
## agent-workflow
|
|
62
63
|
|
|
@@ -106,7 +107,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
106
107
|
|---|---|---|
|
|
107
108
|
| [asset-strategy](./asset-strategy/SKILL.md) ★ | Route any 'I need a [thing]' asset request to the right specialist skill — disambiguates 2D / 3D / audio / video / VFX / animation pipelines. | pipeline |
|
|
108
109
|
| [*lumera-single-image-scene-reconstruction*](./lumera-single-image-scene-reconstruction/SKILL.md) (preview) | Lumera-style single image to editable 3D scene — VLM-parsed object boxes and parametric lights, per-object meshes, HDR probe, .tscn assembly, refinement loop. | pipeline, 3d, scenes |
|
|
109
|
-
| [*skintokens-auto-rigging*](./skintokens-auto-rigging/SKILL.md) (preview) | Offline auto-rigging with skin-tokens.cpp (GGML SkinTokens/TokenRig port) — skeleton and skin weights from a static GLB mesh on CPU/Vulkan, into
|
|
110
|
+
| [*skintokens-auto-rigging*](./skintokens-auto-rigging/SKILL.md) (preview) | Offline auto-rigging with skin-tokens.cpp (GGML SkinTokens/TokenRig port) — skeleton and skin weights from a static GLB mesh on CPU/Vulkan, into Summer Engine. | pipeline, 3d, animation |
|
|
110
111
|
|
|
111
112
|
## audio
|
|
112
113
|
|
|
@@ -126,6 +127,15 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
126
127
|
| [*character-movement*](./character-movement/SKILL.md) (preview) | Player controllers for 2D and 3D, plus the canonical third-person controller for Summer humanoid packages: movement owns translation, clips follow state. | gameplay, 2d, 3d |
|
|
127
128
|
| [fps-controller](./fps-controller/SKILL.md) ★ | Production-quality first-person controller — WASD, mouse look, jump, coyote time, jump buffering, air control, and external-velocity handling. | gameplay |
|
|
128
129
|
|
|
130
|
+
## creator
|
|
131
|
+
|
|
132
|
+
| skill | when to use | also |
|
|
133
|
+
|---|---|---|
|
|
134
|
+
| [grow-analytics](./grow-analytics/SKILL.md) | Read and analyse a creator's Summer Grow numbers: store page views, launches, play sessions, play time; compare windows, flag drops. | deployment |
|
|
135
|
+
| [publish-your-game](./publish-your-game/SKILL.md) | Publish a Summer game on Summer Games through MCP: store page, art, build upload, submit, and one approval link for the owner. | deployment |
|
|
136
|
+
| [store-art](./store-art/SKILL.md) | Make Summer Games store art per slot and flow: key art, covers, icons, screenshots, trailer: size, shape, text rules, fallbacks. | assets |
|
|
137
|
+
| [store-listing](./store-listing/SKILL.md) | Write a Summer Games store page per flow (desktop, mobile): targets, title, tagline, descriptions, tags, and what never to write. | product-language |
|
|
138
|
+
|
|
129
139
|
## debug
|
|
130
140
|
|
|
131
141
|
| skill | when to use | also |
|
|
@@ -194,7 +204,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
194
204
|
|
|
195
205
|
| skill | when to use | also |
|
|
196
206
|
|---|---|---|
|
|
197
|
-
| [tune-performance](./tune-performance/SKILL.md) ★ | Profile a slow game
|
|
207
|
+
| [tune-performance](./tune-performance/SKILL.md) ★ | Profile a slow game with a measurement probe, identify rendering/physics/scripting hotspots, propose fixes with before/after metric expectations. | debug |
|
|
198
208
|
|
|
199
209
|
## rendering
|
|
200
210
|
|
|
@@ -203,8 +213,8 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
203
213
|
| [3d-lighting](./3d-lighting/SKILL.md) ★ | Set up 3D scene lighting — DirectionalLight3D vs Omni vs Spot, WorldEnvironment, sky, shadow tuning, ambient — per current Summer conventions. | lighting |
|
|
204
214
|
| [art-direction](./art-direction/SKILL.md) ★ | Define the game's visual style — references, palette, mood, lighting plan, post-processing, do/don't list — output as an art bible at .summer/art-bible.md. | lighting |
|
|
205
215
|
| [*compatibility-renderer-traps*](./compatibility-renderer-traps/SKILL.md) ★ (preview) | Make a Forward+ Summer game also look right on the Compatibility renderer: instance-uniform budget, black MultiMesh colors, sRGB vertex colors. | performance |
|
|
206
|
-
| [*psx-retro-rendering*](./psx-retro-rendering/SKILL.md) (preview) |
|
|
207
|
-
| [*realtime-wet-surfaces*](./realtime-wet-surfaces/SKILL.md) (preview) | Real-time wetness on existing
|
|
216
|
+
| [*psx-retro-rendering*](./psx-retro-rendering/SKILL.md) (preview) | PlayStation 1 rendering in Summer Engine — low-res output, RGB5 and exact dither, affine textures, vertex snapping, blend modes, fog; limits named. | 3d |
|
|
217
|
+
| [*realtime-wet-surfaces*](./realtime-wet-surfaces/SKILL.md) (preview) | Real-time wetness on existing materials without losing their values — value-copying wet shader, geometry-driven wet mask, instance-uniform wet amount. | vfx |
|
|
208
218
|
| [*web-compatibility-look*](./web-compatibility-look/SKILL.md) ★ (preview) | Make a web or browser game look high-end in the Compatibility renderer (WebGL 2): what works, what to avoid, 2D and 3D recipes, web performance. | 2d, 3d |
|
|
209
219
|
|
|
210
220
|
## runtime
|
|
@@ -13,7 +13,7 @@ paths: ["audio/music/**", "scripts/audio/**", "**/*.tscn", "default_bus_layout.t
|
|
|
13
13
|
|
|
14
14
|
## Overview
|
|
15
15
|
|
|
16
|
-
This
|
|
16
|
+
This skill wires music; it does not generate it. It connects 3–5 music stems (or full tracks) to a game state machine so the music follows the player's situation — exploration → tension → combat → victory → exploration — with crossfades, ducking, and bus routing.
|
|
17
17
|
|
|
18
18
|
This skill assumes the stems already exist. If they don't, run `/music-track` first for each state, or generate matching stems (same tempo, same key, same bar count) so they layer/crossfade cleanly.
|
|
19
19
|
|
|
@@ -51,7 +51,7 @@ If the plan is absent, run `/audio-direction` step 6 first.
|
|
|
51
51
|
| **Vertical re-orchestration** | Same melody, different orchestration per state, snap on bar | All variants play simultaneously muted; swap on next bar boundary |
|
|
52
52
|
| **Procedural / generative** | Rules generate music in real-time | Beyond this skill; needs a custom system |
|
|
53
53
|
|
|
54
|
-
For
|
|
54
|
+
For most games, **horizontal sequencing** is right. It is cheaper to author and easier to swap.
|
|
55
55
|
|
|
56
56
|
### 3. Confirm stems exist (or generate them)
|
|
57
57
|
|
|
@@ -67,7 +67,7 @@ You need (typical case):
|
|
|
67
67
|
- (optional) `audio/music/boss.mp3` — distinct from combat
|
|
68
68
|
- (optional) `audio/music/victory.mp3` — short linear sting (4–8s)
|
|
69
69
|
|
|
70
|
-
If any are missing, run `/music-track` for each.
|
|
70
|
+
If any are missing, run `/music-track` for each. Use **the same BPM, key, time signature, and bar length** for all of them so they overlap cleanly.
|
|
71
71
|
|
|
72
72
|
### 4. Verify / extend the bus layout
|
|
73
73
|
|
|
@@ -294,7 +294,7 @@ Master
|
|
|
294
294
|
## Anti-patterns
|
|
295
295
|
|
|
296
296
|
- **Stems generated at different BPM/key.** They will not crossfade cleanly. Same BPM, same key, same bar count.
|
|
297
|
-
- **Restarting tracks on state change.** Players hear the restart
|
|
297
|
+
- **Restarting tracks on state change.** Players hear the restart. Always crossfade volumes; never `play()` mid-state.
|
|
298
298
|
- **No autoplay on the silent stems.** They can't fade in to phase if they never started.
|
|
299
299
|
- **Polling state in `_process`.** Use signals. Music director listens to `EventBus`, not to game state every frame.
|
|
300
300
|
- **Hardcoding volumes in `set_state`.** Use the table-driven `_apply_state` so adding a new state doesn't fork the function.
|
|
@@ -323,8 +323,8 @@ in Summer Engine.
|
|
|
323
323
|
|
|
324
324
|
## See also
|
|
325
325
|
|
|
326
|
-
- `audio
|
|
327
|
-
- `
|
|
328
|
-
- `
|
|
326
|
+
- `audio-direction` — defines the dynamic music plan and bus layout
|
|
327
|
+
- `music-track` — generates the stems
|
|
328
|
+
- `voice-line` — the voice bus that triggers ducking
|
|
329
329
|
- `../../references/godot-version/godot-version.md` — Summer compatibility for AudioServer
|
|
330
330
|
and Tween APIs
|
|
@@ -48,7 +48,7 @@ Not for scripted dialogue trees (design-npc) or for enemy behaviour.
|
|
|
48
48
|
|
|
49
49
|
## Top up and set limits
|
|
50
50
|
|
|
51
|
-
AI characters are paid from the Summer credits of the developer who turned them on
|
|
51
|
+
AI characters are paid from the Summer credits of the developer who turned them on. Cost depends on the models and voices you choose. Your dashboard shows spend as it happens, and your limits cap it. Players never pay. There is nothing to configure in the game project.
|
|
52
52
|
|
|
53
53
|
1. In Summer Studio, open the game and its **AI characters** section.
|
|
54
54
|
2. Add a persona per character: name, a plain-words description, an optional voice, reply length, a safe line in character, and the model (from the models the game allows, each marked fast or smart).
|
|
@@ -13,9 +13,9 @@ paths: ["audio/ambient/**", "**/*.tscn", "**/*.import"]
|
|
|
13
13
|
|
|
14
14
|
## Overview
|
|
15
15
|
|
|
16
|
-
An ambient bed is the *air* of a place. Forest at dawn, dungeon corridor, spaceship hum, market street, ocean cave. It plays at low energy under everything else
|
|
16
|
+
An ambient bed is the *air* of a place. Forest at dawn, dungeon corridor, spaceship hum, market street, ocean cave. It plays at low energy under everything else and is never melodic. Players rarely notice a bed, but they notice the silence when a level has none.
|
|
17
17
|
|
|
18
|
-
This is **not** music. Use `summer_generate_audio({capability: 'sound_effects'})`, not `{capability: 'music'}
|
|
18
|
+
This is **not** music. Use `summer_generate_audio({capability: 'sound_effects'})`, not `{capability: 'music'}`: the SFX model renders texture, the music model renders melody.
|
|
19
19
|
|
|
20
20
|
Generated at 15–22 seconds (the SFX duration ceiling) and looped with a Summer
|
|
21
21
|
Engine import loop point and optional crossfade.
|
|
@@ -28,9 +28,9 @@ Engine import loop point and optional crossfade.
|
|
|
28
28
|
|
|
29
29
|
## When NOT to use
|
|
30
30
|
|
|
31
|
-
- Short event SFX (<5s) → `
|
|
32
|
-
- Music with melody / chord progression → `
|
|
33
|
-
- Voice barks → `
|
|
31
|
+
- Short event SFX (<5s) → `sound-effect`.
|
|
32
|
+
- Music with melody / chord progression → `music-track`.
|
|
33
|
+
- Voice barks → `voice-line`.
|
|
34
34
|
|
|
35
35
|
## Steps
|
|
36
36
|
|
|
@@ -50,7 +50,7 @@ Ask if it's not pinned by context:
|
|
|
50
50
|
|
|
51
51
|
### 3. Build the prompt — environment + time + weather + 2–3 sources + density + duration
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
The SFX model renders ambient texture well when the prompt names sound sources, not moods.
|
|
54
54
|
|
|
55
55
|
Prompts that work:
|
|
56
56
|
|
|
@@ -117,9 +117,7 @@ If the model returns a clip with a loud event near the start or end (a sudden bi
|
|
|
117
117
|
|
|
118
118
|
### 6. Mark the seamless loop in Summer Engine's Import dock
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
WAV and MP3 use **different importers with different option names** — do not copy the MP3 block from `audio/music-track` here. The WAV importer has no `loop` / `loop_offset`; it has an `edit/loop_mode` enum plus sample-frame bounds.
|
|
120
|
+
WAV and MP3 use **different importers with different option names** — do not copy the MP3 block from `music-track` here. The WAV importer has no `loop` / `loop_offset`; it has an `edit/loop_mode` enum plus sample-frame bounds.
|
|
123
121
|
|
|
124
122
|
In Summer Engine, select the `.wav` and open the Import dock:
|
|
125
123
|
|
|
@@ -144,7 +142,7 @@ After changing, click `Reimport`.
|
|
|
144
142
|
|
|
145
143
|
### 7. Crossfade-loop pattern for seamlessness
|
|
146
144
|
|
|
147
|
-
|
|
145
|
+
Generated SFX clips are not gapless. Even with the loop mode set, you will often hear a small click at the loop point. Fix it with a two-player crossfade in code:
|
|
148
146
|
|
|
149
147
|
```gdscript
|
|
150
148
|
# scripts/audio/AmbientBed.gd
|
|
@@ -278,7 +276,7 @@ Print the SFX prompt and the import dock settings. User runs via the Summer dash
|
|
|
278
276
|
|
|
279
277
|
## See also
|
|
280
278
|
|
|
281
|
-
- `audio
|
|
282
|
-
- `
|
|
283
|
-
- `
|
|
284
|
-
- `
|
|
279
|
+
- `audio-direction` — defines the Ambient layer class
|
|
280
|
+
- `sound-effect` — short event SFX layered over the bed
|
|
281
|
+
- `music-track` — melodic music layered over the bed
|
|
282
|
+
- `adaptive-music` — state-driven crossfades use the same pattern
|
|
@@ -11,11 +11,11 @@ paths: ["assets/video/**", "menus/**", "ui/**"]
|
|
|
11
11
|
|
|
12
12
|
# animated-loop — 5 Second Seamless Background Loop
|
|
13
13
|
|
|
14
|
-
A loop is the only video format that has to *not have* a beginning or end. The viewer sees it on the title screen for 30 seconds; if the seam between loop iterations is visible, the whole thing reads as broken. This skill exists to force the constraints that make seams invisible: take the shortest duration available, keep the motion ambient (no narrative, no big camera moves), use the
|
|
14
|
+
A loop is the only video format that has to *not have* a beginning or end. The viewer sees it on the title screen for 30 seconds; if the seam between loop iterations is visible, the whole thing reads as broken. This skill exists to force the constraints that make seams invisible: take the shortest duration available, keep the motion ambient (no narrative, no big camera moves), use the fast model (`ltx`), and prompt for a composition where the first and last frames are functionally identical.
|
|
15
15
|
|
|
16
16
|
**Duration is not a dial here.** `summer_generate_video` accepts only `duration=5` or `duration=10`; the server coerces every other value to 5. So "drop to 3s to hide the seam" is not an option — 5s is the floor, and the seam has to be won in the prompt and the reference frame instead.
|
|
17
17
|
|
|
18
|
-
If the user wants a 5s punchy marketing shot, that's `
|
|
18
|
+
If the user wants a 5s punchy marketing shot, that's `trailer-shot`. If they want a 10s narrative cutscene, that's `cinematic-cutscene`. This skill is the one for video that has to *disappear* — atmosphere behind a logo, mood behind a menu, ambience behind a splash card.
|
|
19
19
|
|
|
20
20
|
## When to use
|
|
21
21
|
|
|
@@ -28,9 +28,9 @@ If the user wants a 5s punchy marketing shot, that's `video/trailer-shot`. If th
|
|
|
28
28
|
|
|
29
29
|
## When NOT to use
|
|
30
30
|
|
|
31
|
-
- Marketing shot for a trailer (5-10s with punch) — `
|
|
32
|
-
- Narrative cutscene with a beginning and end — `
|
|
33
|
-
- Static splash image — generate with `
|
|
31
|
+
- Marketing shot for a trailer (5-10s with punch) — `trailer-shot`.
|
|
32
|
+
- Narrative cutscene with a beginning and end — `cinematic-cutscene`.
|
|
33
|
+
- Static splash image — generate with `concept-art` and use a `TextureRect`. A still is cheaper, lighter, and never seams.
|
|
34
34
|
- UI element animation (icons, button states) — those are GDScript `Tween` or sprite sheets, not video.
|
|
35
35
|
- A 10-second shot you want to "loop". That seam will be visible. Either accept a hard cut every 10s (ugly) or generate a 5s clip designed to loop.
|
|
36
36
|
|
|
@@ -40,21 +40,21 @@ If the user wants a 5s punchy marketing shot, that's `video/trailer-shot`. If th
|
|
|
40
40
|
|
|
41
41
|
> Quick check — this loop will play on a screen the user might stare at for 30+ seconds. That means the loop point must be invisible. I'll take the 5s minimum and prompt for ambient motion (drift, flicker, shimmer) rather than a narrative beat. OK?
|
|
42
42
|
|
|
43
|
-
If the user wants narrative motion (a character walking, a door opening), this is the wrong skill — route to `
|
|
43
|
+
If the user wants narrative motion (a character walking, a door opening), this is the wrong skill — route to `cinematic-cutscene`.
|
|
44
44
|
|
|
45
45
|
### 2. Pick the model — `ltx` first, always
|
|
46
46
|
|
|
47
|
-
For loops, `ltx` is
|
|
47
|
+
For loops, `ltx` is almost always right. It takes ~30s, and short ambient motion is what it handles best. The premium models cost more credits and do not loop better.
|
|
48
48
|
|
|
49
49
|
This skill always passes `imageUrl` (step 3), which puts every call on the image-to-video route — and that route accepts only `ltx`, `kling`, and `minimax`. `kling-turbo` and `veo3` are text-to-video only; pairing either with an `imageUrl` is a 400 `invalid_model`, not a silent downgrade.
|
|
50
50
|
|
|
51
|
-
| Model | i2v? |
|
|
52
|
-
|
|
53
|
-
| `ltx` | yes |
|
|
54
|
-
| `kling` | yes |
|
|
55
|
-
| `minimax` | yes |
|
|
56
|
-
| `kling-turbo` | **no** |
|
|
57
|
-
| `veo3` | **no** |
|
|
51
|
+
| Model | i2v? | Speed | When |
|
|
52
|
+
|---|---|---|---|
|
|
53
|
+
| `ltx` | yes | ~30s | Default. Use this. |
|
|
54
|
+
| `kling` | yes | 2-4 min | Only if the loop is the centerpiece of a premium splash and quality is visibly lacking on `ltx` |
|
|
55
|
+
| `minimax` | yes | 2-3 min | Stylized / anime aesthetic loops |
|
|
56
|
+
| `kling-turbo` | **no** | 1-2 min | Not reachable from this skill — text-to-video only |
|
|
57
|
+
| `veo3` | **no** | 3-5 min | Not reachable from this skill, and pointless for ambient loops anyway |
|
|
58
58
|
|
|
59
59
|
### 3. Lock the look with a reference still
|
|
60
60
|
|
|
@@ -69,7 +69,7 @@ summer_generate_image(
|
|
|
69
69
|
|
|
70
70
|
`summer_generate_image` has no size or aspect argument — `options.image_size` is dropped without an error and every MCP image comes back at the server's 1:1 default. Ask for the framing in the prompt, or generate the reference in the Summer dashboard (which exposes aspect ratio) and pass its URL.
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
On the image-to-video route `aspectRatio` is **not applied at all** — the clip inherits the reference image's framing. So a vertical mobile splash needs a 9:16 reference image, and setting `aspectRatio="9:16"` on the video call does nothing.
|
|
73
73
|
|
|
74
74
|
### 4. Prompt for loopable motion only
|
|
75
75
|
|
|
@@ -89,7 +89,7 @@ summer_generate_video(
|
|
|
89
89
|
)
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
The phrase **"looping, seamless"** in the prompt biases the model toward stable first/last frames. `options.negative_prompt` is one of the few provider keys that does pass through on the video route (`prompt`, `image_url`, `num_frames`, `duration`, `resolution`, and `model` are stripped; everything else is forwarded), so the negative
|
|
92
|
+
The phrase **"looping, seamless"** in the prompt biases the model toward stable first/last frames. `options.negative_prompt` is one of the few provider keys that does pass through on the video route (`prompt`, `image_url`, `num_frames`, `duration`, `resolution`, and `model` are stripped; everything else is forwarded), so the negative prompt does rule out narrative drift here — unlike on `summer_generate_image`, where no such argument exists.
|
|
93
93
|
|
|
94
94
|
`aspectRatio` is omitted deliberately: it is applied on the text-to-video path only, and this call passes `imageUrl`.
|
|
95
95
|
|
|
@@ -115,7 +115,7 @@ VideoStream exts: ["ogv", "tres", "res"]
|
|
|
115
115
|
ERROR: No loader found for resource: res://clip.mp4 (expected type: unknown)
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
-
`summer_import_from_url` downloads the bytes, runs
|
|
118
|
+
`summer_import_from_url` downloads the bytes, runs the engine's import pipeline, and *fails the import* if the file never becomes a loadable resource — so importing the `.mp4` does not quietly half-work, it is rejected and rolled back. Convert first:
|
|
119
119
|
|
|
120
120
|
```
|
|
121
121
|
ffmpeg -i title_screen_bg.mp4 -c:v libtheora -q:v 8 -an title_screen_bg.ogv
|
|
@@ -137,7 +137,7 @@ summer_set_prop(scenePath="res://ui/title_screen.tscn", path="./BackgroundLoop",
|
|
|
137
137
|
summer_save_scene(scenePath="res://ui/title_screen.tscn")
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
Anchors preset 15 is "full rect" — the loop fills the menu. Place the logo and menu buttons as children *above* the `VideoStreamPlayer` in the tree (
|
|
140
|
+
Anchors preset 15 is "full rect" — the loop fills the menu. Place the logo and menu buttons as children *above* the `VideoStreamPlayer` in the tree (Controls draw in tree order; later siblings render on top).
|
|
141
141
|
|
|
142
142
|
### 7. Mute the audio track
|
|
143
143
|
|
|
@@ -147,22 +147,22 @@ Loops should never have a baked audio track that loops with them — the audio s
|
|
|
147
147
|
summer_set_prop(scenePath="res://ui/title_screen.tscn", path="./BackgroundLoop", key="volume_db", value=-80)
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
Score the menu separately with `
|
|
150
|
+
Score the menu separately with `music-track`.
|
|
151
151
|
|
|
152
152
|
## Reference card — prompts that work
|
|
153
153
|
|
|
154
154
|
Pattern: `<subject> + <ambient loopable motion> + <constant lighting> + "looping, seamless" + <stylistic anchor>`. Keep under 40 words. Always pair with `imageUrl`.
|
|
155
155
|
|
|
156
|
-
| Goal | Model | Prompt |
|
|
157
|
-
|
|
158
|
-
| Title menu — fog forest | `ltx` | `dense pine forest in low fog, fog drifting slowly between trunks, soft moonlight, ambient particles rising, looping, seamless, cinematic painterly` |
|
|
159
|
-
| Title menu — dungeon torch | `ltx` | `stone dungeon corridor lit by a single torch, flame flickering steadily, dust motes drifting in the light cone, looping, seamless` |
|
|
160
|
-
| Splash — embers / sky | `ltx` | `dusk sky with slow drifting embers rising upward across frame, deep blue gradient, looping, seamless, cinematic` |
|
|
161
|
-
| Logo backdrop — magic runes | `ltx` | `dark surface with glowing blue runes pulsing softly in slow rhythm, faint shimmer, no narrative motion, looping, seamless` |
|
|
162
|
-
| Menu — underwater | `ltx` | `underwater scene with caustic light dancing on a sandy floor, slow drifting bubbles, gentle current sway on kelp, looping, seamless` |
|
|
163
|
-
| Pause screen — slow rain | `ltx` | `window pane with continuous gentle rain drops, blurred warm interior glow behind, looping, seamless, ambient` |
|
|
164
|
-
| Title — anime sky | `minimax` | `anime style cumulus clouds drifting slowly across a pastel sunset sky, soft, painterly, looping, seamless, Ghibli` |
|
|
165
|
-
| Premium splash centerpiece | `kling` | `dragon silhouette breathing in profile against a vast sunset sky, only the chest rising and falling and clouds drifting, looping, seamless` |
|
|
156
|
+
| Goal | Model | Prompt | Duration |
|
|
157
|
+
|---|---|---|---|
|
|
158
|
+
| Title menu — fog forest | `ltx` | `dense pine forest in low fog, fog drifting slowly between trunks, soft moonlight, ambient particles rising, looping, seamless, cinematic painterly` | 5s |
|
|
159
|
+
| Title menu — dungeon torch | `ltx` | `stone dungeon corridor lit by a single torch, flame flickering steadily, dust motes drifting in the light cone, looping, seamless` | 5s |
|
|
160
|
+
| Splash — embers / sky | `ltx` | `dusk sky with slow drifting embers rising upward across frame, deep blue gradient, looping, seamless, cinematic` | 5s |
|
|
161
|
+
| Logo backdrop — magic runes | `ltx` | `dark surface with glowing blue runes pulsing softly in slow rhythm, faint shimmer, no narrative motion, looping, seamless` | 5s |
|
|
162
|
+
| Menu — underwater | `ltx` | `underwater scene with caustic light dancing on a sandy floor, slow drifting bubbles, gentle current sway on kelp, looping, seamless` | 5s |
|
|
163
|
+
| Pause screen — slow rain | `ltx` | `window pane with continuous gentle rain drops, blurred warm interior glow behind, looping, seamless, ambient` | 5s |
|
|
164
|
+
| Title — anime sky | `minimax` | `anime style cumulus clouds drifting slowly across a pastel sunset sky, soft, painterly, looping, seamless, Ghibli` | 5s |
|
|
165
|
+
| Premium splash centerpiece | `kling` | `dragon silhouette breathing in profile against a vast sunset sky, only the chest rising and falling and clouds drifting, looping, seamless` | 5s |
|
|
166
166
|
|
|
167
167
|
### Bad prompts and why
|
|
168
168
|
|
|
@@ -178,7 +178,7 @@ Pattern: `<subject> + <ambient loopable motion> + <constant lighting> + "looping
|
|
|
178
178
|
|
|
179
179
|
- **Asking the model for a 10s loop.** Past ~6s, identity drifts and the seam shows. `duration=5` is both the floor and the right answer; 10 is the only other value the API accepts.
|
|
180
180
|
- **Treating `summer_generate_video` as synchronous.** It returns `{ queued: true, jobId }` and no URL. Poll `summer_check_job` before claiming a clip exists.
|
|
181
|
-
- **
|
|
181
|
+
- **Using `kling` for a loop.** `ltx` is almost always right; short ambient motion is what it does best.
|
|
182
182
|
- **Prompting narrative motion.** "Hero draws sword" doesn't loop. Use ambient verbs.
|
|
183
183
|
- **Forgetting `loop=true` on the `VideoStreamPlayer`.** The clip will play once and freeze on the last frame.
|
|
184
184
|
- **Forgetting to mute baked audio.** If audio is on, the loop point becomes audible even if it's invisible.
|
|
@@ -188,17 +188,17 @@ Pattern: `<subject> + <ambient loopable motion> + <constant lighting> + "looping
|
|
|
188
188
|
## Edge cases
|
|
189
189
|
|
|
190
190
|
- **Splash loop must be tiny in build size.** Loops compress aggressively because of low motion. Target ≤2MB by exporting at 720p, low bitrate, in DaVinci. Studio's import doesn't re-encode by default.
|
|
191
|
-
- **Mobile portrait splash.** The reference image must
|
|
191
|
+
- **Mobile portrait splash.** The reference image must be portrait — `aspectRatio` is ignored on the image-to-video path, and MCP image generation is square-only, so make the reference in the Summer dashboard or crop it. Anchors preset 15 still works.
|
|
192
192
|
- **Loop must sync to a music beat.** The video model doesn't know your BPM. Generate at the duration matching one bar at the menu music tempo (e.g. 120 BPM × 4 beats = 2s, or 8 beats = 4s) and confirm visually.
|
|
193
193
|
- **Loop is behind translucent UI.** Generate with extra contrast headroom — the model tends toward mid-grey, and translucent UI on mid-grey reads muddy. Push for `high contrast cinematic` in the prompt.
|
|
194
194
|
- **Loop seam still visible after 3 regens.** Set up two `VideoStreamPlayer` siblings and crossfade between them with a `Tween` on a 0.5s overlap. Costs an extra GPU decode but hides the seam.
|
|
195
195
|
|
|
196
196
|
## Fallback (no MCP)
|
|
197
197
|
|
|
198
|
-
If the
|
|
198
|
+
If the MCP server isn't running, route the user to the Summer dashboard:
|
|
199
199
|
|
|
200
200
|
1. Image tab → generate the reference still (the loop's "neutral frame").
|
|
201
|
-
2. Video tab → image-to-video with `ltx`, duration
|
|
201
|
+
2. Video tab → image-to-video with `ltx`, duration 5s, aspect ratio per target.
|
|
202
202
|
3. Prompt with the loopable-motion vocabulary above and `"looping, seamless"`.
|
|
203
203
|
4. Download the result, transcode to `.ogv` if needed, place under `assets/video/loops/`.
|
|
204
204
|
|
|
@@ -209,16 +209,16 @@ Print the exact prompt + model + duration + aspect ratio so the user can paste i
|
|
|
209
209
|
Once the loop is wired:
|
|
210
210
|
|
|
211
211
|
> Loop `title_screen_bg` is wired to `TitleScreen/BackgroundLoop` with autoplay + loop. Next:
|
|
212
|
-
> - Score the menu with `
|
|
213
|
-
> - For the logo and menu UI on top, hand off to `
|
|
214
|
-
> - If the user wants a punchy 5s shot for the trailer using the same look, hand off to `
|
|
215
|
-
> - If the user wants a narrative intro that plays *before* the title loops, hand off to `
|
|
212
|
+
> - Score the menu with `music-track` — a quiet ambient bed scored to the loop's mood.
|
|
213
|
+
> - For the logo and menu UI on top, hand off to `ui-graphics`.
|
|
214
|
+
> - If the user wants a punchy 5s shot for the trailer using the same look, hand off to `trailer-shot` (reuse the reference image).
|
|
215
|
+
> - If the user wants a narrative intro that plays *before* the title loops, hand off to `cinematic-cutscene`.
|
|
216
216
|
|
|
217
217
|
## See also
|
|
218
218
|
|
|
219
|
-
- `
|
|
220
|
-
- `
|
|
221
|
-
- `
|
|
222
|
-
- `
|
|
223
|
-
- `
|
|
219
|
+
- `trailer-shot` — punchy marketing footage.
|
|
220
|
+
- `cinematic-cutscene` — narrative cutscenes with dialogue.
|
|
221
|
+
- `music-track` — score the menu.
|
|
222
|
+
- `ui-graphics` — logo, menu buttons, HUD that sits over the loop.
|
|
223
|
+
- `concept-art` — produce the reference still that anchors the loop.
|
|
224
224
|
- `../../references/mcp-tools-reference/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
|