summer-engine 3.4.0 → 3.4.1
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 +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/.factory-plugin/plugin.json +1 -1
- package/.opencode/INSTALL.md +8 -8
- package/.opencode/plugins/summer.js +2 -2
- package/AGENTS.md +7 -7
- package/CHANGELOG.md +14 -0
- package/GEMINI.md +1 -1
- package/NOTICE +1 -1
- package/README.md +30 -34
- 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/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/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-game.js +3 -3
- 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/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 +4 -6
- 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 +2 -3
- package/dist/core/capabilities/summer-bundle.js +2 -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 +1 -1
- 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.js +1 -2
- package/dist/core/templates.d.ts +1 -2
- package/dist/core/templates.js +1 -2
- package/dist/mcp/server.d.ts +2 -2
- package/dist/mcp/server.js +2 -2
- package/dist/mcp/tools/creator-tools.js +1 -1
- package/dist/mcp/tools/debug-tools.js +1 -1
- package/dist/mcp/tools/generate-tools.js +7 -7
- 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 +1 -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 +15 -14
- 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 +5 -5
- 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 +23 -24
- 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/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/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/summer-analytics/SKILL.md +3 -3
- 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/creator-publish/resource.yaml +4 -4
- package/library/tools/creator-releases/resource.yaml +5 -5
- package/library/tools/publish-build/resource.yaml +5 -1
- package/package.json +1 -1
- package/registry/generated/gemini-extension.json +1 -1
- package/registry/generated/index.json +130 -130
- package/registry/generated/marketplace.claude.json +1 -1
- package/registry/generated/plugin.claude.json +1 -1
- package/registry/generated/plugin.codex.json +1 -1
- package/registry/generated/plugin.cursor.json +1 -1
- package/registry/generated/plugin.factory.json +1 -1
- package/registry/generated/skills-index.md +5 -5
- package/registry/generated/skills-registry.json +5 -5
- package/registry/schemas/domains.json +1 -1
|
@@ -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,7 +246,7 @@ 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
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) 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
252
|
|
|
@@ -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
|
@@ -56,7 +56,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
56
56
|
| [*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
57
|
| [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
58
|
| [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
|
|
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 VehicleBody3D or MeshInstance3D. | assets |
|
|
60
60
|
|
|
61
61
|
## agent-workflow
|
|
62
62
|
|
|
@@ -106,7 +106,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
106
106
|
|---|---|---|
|
|
107
107
|
| [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
108
|
| [*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
|
|
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 Summer Engine. | pipeline, 3d, animation |
|
|
110
110
|
|
|
111
111
|
## audio
|
|
112
112
|
|
|
@@ -194,7 +194,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
194
194
|
|
|
195
195
|
| skill | when to use | also |
|
|
196
196
|
|---|---|---|
|
|
197
|
-
| [tune-performance](./tune-performance/SKILL.md) ★ | Profile a slow game
|
|
197
|
+
| [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
198
|
|
|
199
199
|
## rendering
|
|
200
200
|
|
|
@@ -203,8 +203,8 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
203
203
|
| [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
204
|
| [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
205
|
| [*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
|
|
206
|
+
| [*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 |
|
|
207
|
+
| [*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
208
|
| [*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
209
|
|
|
210
210
|
## 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.
|
|
@@ -11,18 +11,18 @@ paths: ["**/*.gd", "**/*.tscn", "**/*.tres"]
|
|
|
11
11
|
|
|
12
12
|
# AnimationTree — Wire Clips Into Behavior
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
This skill generates nothing. It composes existing clips on an `AnimationPlayer` into an `AnimationTree` with a `StateMachine` for distinct states (idle / attack / hit / dead) and `BlendSpace` nodes for continuous parameters (walk-run blend by speed). Wired wrong, you get T-poses, snapping, or clips that cut each other off.
|
|
15
15
|
|
|
16
16
|
The canonical Summer Engine stack:
|
|
17
17
|
|
|
18
18
|
```
|
|
19
19
|
Character (CharacterBody3D)
|
|
20
|
-
├── Skeleton3D (from the
|
|
20
|
+
├── Skeleton3D (from the rigged GLB)
|
|
21
21
|
├── AnimationPlayer # holds the raw clips (idle, walk, run, attack_sword, ...)
|
|
22
22
|
└── AnimationTree # references AnimationPlayer, drives behavior
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Before adding the tree, prove direct `AnimationPlayer.play()` visibly moves the rig.
|
|
25
|
+
Before adding the tree, prove direct `AnimationPlayer.play()` visibly moves the rig. The engine may import animation GLBs as `AnimationLibrary` resources or as `PackedScene`s with embedded `AnimationPlayer`s. If a copied clip appears in the list but the mesh T-poses, its tracks probably target a different root/skeleton path. Use the embedded player that came with the matching GLB, or remap/copy tracks only after confirming they target the active `Skeleton3D`. An inactive AnimationTree is also a no-op, so always set `AnimationTree.active = true`.
|
|
26
26
|
|
|
27
27
|
## When to use this skill
|
|
28
28
|
|
|
@@ -72,7 +72,7 @@ Before walking the CRUD steps below, check the ctx lane — one `summer_run_scri
|
|
|
72
72
|
- **Animation-tier engines:** `ctx.anim_state_machine(character, {states: {...}, transitions: [[from, to, {blend_s: 0.2}], ...], start: "idle"})` gets-or-creates the AnimationTree, wires it to the player, builds the state machine, sets `active = true`. Unknown clip names come back as a report entry listing the player's REAL clips — never wire against guessed names. Full recipe (inspect clips/bones first, method-track events, root motion, playtest verification): `character-animation-wiring`.
|
|
73
73
|
- **Any engine (raw fallback):** the same classes are fully script-bound — `AnimationNodeStateMachine.add_node(name, AnimationNodeAnimation)`, `add_transition(from, to, AnimationNodeStateMachineTransition)` (one transition resource each, `xfade_time` on it), then `tree.anim_player = tree.get_path_to(player)`, `tree.tree_root = sm`, `tree.active = true`, and `ctx.set_owner_recursive(tree)`. The raw script is quoted in `character-animation-wiring`.
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
Scope: `anim_state_machine` builds clip states + transitions only. The canonical machine below — BlendSpace1D locomotion, OneShot attack/hit — still needs the `.tres` (or raw-script) lane for those node types. Discrete idle/walk/run backbones don't.
|
|
76
76
|
|
|
77
77
|
## Steps via MCP
|
|
78
78
|
|
|
@@ -259,7 +259,7 @@ Then `summer_play` and watch — the goblin should idle in place, blend up to wa
|
|
|
259
259
|
|
|
260
260
|
- **OneShot:** the action is a *temporary override* of an underlying state (attack while running, hit-react while attacking). The base keeps playing.
|
|
261
261
|
- **StateMachine state:** the action is a *replacement* (dead, stunned, ragdoll). Nothing else plays.
|
|
262
|
-
-
|
|
262
|
+
- Action combat is usually OneShot for attacks + a StateMachine state for "dead". Don't model attacks as StateMachine states unless you need precise transition control between attack-string variants.
|
|
263
263
|
|
|
264
264
|
### BlendSpace1D vs BlendSpace2D
|
|
265
265
|
|
|
@@ -270,7 +270,7 @@ Then `summer_play` and watch — the goblin should idle in place, blend up to wa
|
|
|
270
270
|
|
|
271
271
|
- Skipping AnimationTree and calling `AnimationPlayer.play("walk")` from script. Works for one clip; breaks the moment you need a crossfade.
|
|
272
272
|
- Modeling every attack as a StateMachine state. The transition matrix explodes (N states × N transitions). Use one OneShot per attack and switch its inner clip via `parameters/Attack/animation`.
|
|
273
|
-
- Writing the `.tres` by hand without using sub_resource IDs —
|
|
273
|
+
- Writing the `.tres` by hand without using sub_resource IDs — the engine loses the references. Always use `[sub_resource id="..."]` blocks.
|
|
274
274
|
- Driving `blend_position` from raw input (`Input.get_axis(...)`). Drive from actual velocity — that way the blend matches the body's real motion, including knockback and slope-slide.
|
|
275
275
|
|
|
276
276
|
## Edge cases
|