summer-engine 3.3.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 +2 -2
- package/.claude-plugin/plugin.json +4 -2
- package/.codex-plugin/plugin.json +5 -3
- package/.cursor-plugin/plugin.json +4 -2
- package/.factory-plugin/plugin.json +4 -2
- package/.opencode/INSTALL.md +8 -8
- package/.opencode/plugins/summer.js +2 -2
- package/AGENTS.md +7 -7
- package/CHANGELOG.md +50 -0
- package/GEMINI.md +1 -1
- package/NOTICE +1 -1
- package/README.md +32 -35
- package/assets/api-docs.json.gz +0 -0
- 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/install.d.ts +10 -0
- package/dist/cli/commands/install.js +55 -10
- 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/cli/commands/tool.d.ts +7 -0
- package/dist/cli/commands/tool.js +36 -1
- 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 +69 -0
- package/dist/core/capabilities/capture-gameplay.js +283 -0
- 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/creator.js +1 -1
- package/dist/core/capabilities/doctor.d.ts +9 -1
- package/dist/core/capabilities/doctor.js +47 -4
- package/dist/core/capabilities/engine-receipt.d.ts +5 -7
- package/dist/core/capabilities/engine-receipt.js +7 -9
- package/dist/core/capabilities/engine-run.d.ts +4 -0
- package/dist/core/capabilities/engine-run.js +33 -5
- package/dist/core/capabilities/export-engine-version.d.ts +15 -0
- package/dist/core/capabilities/export-engine-version.js +24 -0
- package/dist/core/capabilities/export-game.d.ts +9 -1
- package/dist/core/capabilities/export-game.js +115 -39
- 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 +9 -0
- package/dist/core/capabilities/image-generation.js +19 -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 +15 -2
- package/dist/core/capabilities/publish-build.js +78 -28
- 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 +11 -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/config.js +2 -2
- package/dist/core/engine-install.d.ts +16 -0
- package/dist/core/engine-install.js +32 -2
- package/dist/core/feedback/client.js +1 -1
- package/dist/core/hosted-mcp.d.ts +115 -0
- package/dist/core/hosted-mcp.js +164 -0
- package/dist/core/launch-posture.d.ts +6 -3
- package/dist/core/launch-posture.js +18 -5
- 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/hosted-mount.d.ts +13 -59
- package/dist/mcp/hosted-mount.js +24 -30
- package/dist/mcp/server.d.ts +2 -2
- package/dist/mcp/server.js +5 -4
- package/dist/mcp/tools/creator-tools.js +14 -4
- package/dist/mcp/tools/debug-tools.js +1 -1
- package/dist/mcp/tools/generate-tools.js +19 -9
- 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 +3 -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 +18 -16
- 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 +11 -9
- 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 +95 -0
- package/library/skills/bounded-engine-runs/resource.yaml +29 -0
- 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 +78 -0
- package/library/skills/compatibility-renderer-traps/resource.yaml +28 -0
- package/library/skills/concept-art/SKILL.md +4 -4
- 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 +25 -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/headless-scripting/resource.yaml +1 -0
- package/library/skills/in-game-purchases/SKILL.md +123 -118
- package/library/skills/in-game-purchases/resource.yaml +2 -2
- 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/web-compatibility-look/resource.yaml +1 -0
- 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 +73 -0
- package/library/tools/creator-publish/resource.yaml +4 -4
- package/library/tools/creator-releases/resource.yaml +5 -5
- package/library/tools/generate-image/resource.yaml +15 -1
- package/library/tools/publish-build/resource.yaml +6 -2
- package/package.json +1 -1
- package/registry/generated/aliases.json +1 -0
- package/registry/generated/counts.json +3 -3
- package/registry/generated/gemini-extension.json +3 -1
- package/registry/generated/index.json +248 -135
- package/registry/generated/marketplace.claude.json +2 -2
- package/registry/generated/plugin.claude.json +4 -2
- package/registry/generated/plugin.codex.json +5 -3
- package/registry/generated/plugin.cursor.json +4 -2
- package/registry/generated/plugin.factory.json +4 -2
- package/registry/generated/skills-index.md +11 -9
- package/registry/generated/skills-registry.json +33 -6
- package/registry/schemas/domains.json +1 -1
|
@@ -26,13 +26,13 @@ a move. A new authority then restores the World from its last save.
|
|
|
26
26
|
| Keep | Use |
|
|
27
27
|
|---|---|
|
|
28
28
|
| What belongs to the place: built walls, chests, the coins left on the ground | **World save** (this skill) |
|
|
29
|
-
| What belongs to a player: their coins, unlocks, level | **Player data** (`
|
|
29
|
+
| What belongs to a player: their coins, unlocks, level | **Player data** (`summer-player-data`) |
|
|
30
30
|
|
|
31
31
|
The engine never serializes nodes for you. The game decides what one save
|
|
32
32
|
holds. It must be **one consistent cut**: if an item moves from a chest into
|
|
33
33
|
an inventory, both sides go in the same save.
|
|
34
34
|
|
|
35
|
-
This skill extends the Courtyard game from `
|
|
35
|
+
This skill extends the Courtyard game from `multiplayer-state`: its
|
|
36
36
|
`match_doc` (the coins still on the ground, and the scoreboard) becomes the
|
|
37
37
|
World's saved state.
|
|
38
38
|
|
|
@@ -238,7 +238,7 @@ Local Play runs a persistent World with an **in-memory** save store:
|
|
|
238
238
|
- Nothing survives the run.
|
|
239
239
|
|
|
240
240
|
```
|
|
241
|
-
summer_project_setting
|
|
241
|
+
summer_project_setting key="summer/local_play/players" value=2
|
|
242
242
|
summer_play
|
|
243
243
|
summer_get_diagnostics
|
|
244
244
|
summer_stop
|
|
@@ -278,7 +278,7 @@ Restoring after a real restart can only be proven hosted.
|
|
|
278
278
|
|
|
279
279
|
## See also
|
|
280
280
|
|
|
281
|
-
- `
|
|
282
|
-
- `
|
|
283
|
-
- `
|
|
284
|
-
- `
|
|
281
|
+
- `summer-player-data` — progress that follows a player
|
|
282
|
+
- `multiplayer-state` — the shared document this skill saves
|
|
283
|
+
- `multiplayer-project` — `world.json` and the authority scene
|
|
284
|
+
- `multiplayer-testing` — Local Play runs and markers
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
The motion model reads the skeleton's rest pose, hierarchy **and bone names**. Names carry
|
|
4
4
|
meaning: a bone called `LeftArm` borrows everything the model learned from human arms.
|
|
5
5
|
Rigs named like a human skeleton therefore animate far better than freeform names, even
|
|
6
|
-
on non-humans. Measured on cartoon flowers
|
|
6
|
+
on non-humans. Measured on cartoon flowers: with plant names (`Stem1`,
|
|
7
7
|
`LeafL1`) most prompts barely moved; the same rig with human names nodded, bowed,
|
|
8
8
|
gestured and looked around on cue.
|
|
9
9
|
|
|
@@ -68,7 +68,7 @@ summer_generate_image(
|
|
|
68
68
|
|
|
69
69
|
Two things about the arguments:
|
|
70
70
|
|
|
71
|
-
- **There is no `image_size` and no `negative_prompt`.** `summer_generate_image` takes only `prompt`, `model`, `style`, `referenceImageUrl`, and `options`, and `options` only recognizes Nano Banana provider keys (`seed`, `outputFormat`, `safetyTolerance`, `syncMode`, `systemPrompt`, `limitGenerations`, `thinkingLevel`)
|
|
71
|
+
- **There is no `image_size` and no `negative_prompt`.** `summer_generate_image` takes only `prompt`, `model`, `style`, `referenceImageUrl`, `removeBackground` and `options`, and `options` only recognizes Nano Banana provider keys (`seed`, `outputFormat`, `safetyTolerance`, `syncMode`, `systemPrompt`, `limitGenerations`, `thinkingLevel`). Anything else is dropped without an error, so the call looks like it worked. Put the negations in the prompt text. Square is what you get regardless — MCP images come back at the server's 1:1 default, which is exactly what a tileable texture wants.
|
|
72
72
|
- **`style: "realistic"` is a no-op.** Only `cartoon` and `anime` append anything to the prompt; `realistic` and `none` append nothing, and any other value is coerced to `none`. The photographic look has to come from the prompt (`photographic detail`). Switching to `"none"` for stylized work likewise changes nothing on its own — change the prompt.
|
|
73
73
|
|
|
74
74
|
### 4. Import to project
|
|
@@ -13,7 +13,7 @@ paths: ["assets/video/**", "trailers/**", "marketing/**"]
|
|
|
13
13
|
|
|
14
14
|
A trailer shot is not a cutscene and not a loop. It is a single, deliberately-composed beat designed to live inside an edit — Steam capsule video, social cut, pitch-deck reel, Discord teaser, Twitter promo. Every shot has to earn its slot in 5 seconds or less because viewer attention drops past that. This skill produces those shots one at a time, with strong composition references and trailer-grade prompting, then hands the user off to a non-linear editor (DaVinci Resolve, Premiere, CapCut) to chain them. **Studio doesn't ship a video editor** — generation is the part this skill owns; the cutting is yours.
|
|
15
15
|
|
|
16
|
-
If the user is generating a non-interactive narrative beat with dialogue, that's `
|
|
16
|
+
If the user is generating a non-interactive narrative beat with dialogue, that's `cinematic-cutscene`. If they want a seamless background loop for a splash screen, that's `animated-loop`. This skill is for the punchy stuff — the kind of shot that ends up on the Steam page or in the first 10 seconds of a launch trailer.
|
|
17
17
|
|
|
18
18
|
## When to use
|
|
19
19
|
|
|
@@ -26,9 +26,9 @@ If the user is generating a non-interactive narrative beat with dialogue, that's
|
|
|
26
26
|
|
|
27
27
|
## When NOT to use
|
|
28
28
|
|
|
29
|
-
- Multi-shot story sequence with dialogue — `
|
|
30
|
-
- Seamless looping background — `
|
|
31
|
-
- Static marketing key art — `
|
|
29
|
+
- Multi-shot story sequence with dialogue — `cinematic-cutscene`.
|
|
30
|
+
- Seamless looping background — `animated-loop`.
|
|
31
|
+
- Static marketing key art — `concept-art` then `character-portrait`.
|
|
32
32
|
- Animated GIF of UI — that's a screen recording, not a generated video.
|
|
33
33
|
- A literal Steam trailer (the assembled cut) — generate the shots here, then take them to your NLE.
|
|
34
34
|
|
|
@@ -69,13 +69,13 @@ For pure environment / abstract / VFX shots, you can skip this and prompt text-t
|
|
|
69
69
|
|
|
70
70
|
The available models depend on whether you pass `imageUrl`. With a reference image (step 2) the call goes to the image-to-video route, which accepts only `ltx`, `kling`, and `minimax`; `kling-turbo` and `veo3` exist on the text-to-video route only, and pairing either with an `imageUrl` is a 400 `invalid_model`.
|
|
71
71
|
|
|
72
|
-
| Model | Text-to-video | Image-to-video |
|
|
73
|
-
|
|
74
|
-
| `kling` | yes | yes |
|
|
75
|
-
| `ltx` | yes | yes |
|
|
76
|
-
| `minimax` | yes | yes |
|
|
77
|
-
| `kling-turbo` | yes | **no** |
|
|
78
|
-
| `veo3` | yes | **no** |
|
|
72
|
+
| Model | Text-to-video | Image-to-video | Speed | When |
|
|
73
|
+
|---|---|---|---|---|
|
|
74
|
+
| `kling` | yes | yes | 2-4 min | Default for trailer hero shots — best motion + composition |
|
|
75
|
+
| `ltx` | yes | yes | ~30s | Cheapest. B-roll, throwaway tests, blocking the composition before committing |
|
|
76
|
+
| `minimax` | yes | yes | 2-3 min | Anime / stylized trailer looks |
|
|
77
|
+
| `kling-turbo` | yes | **no** | 1-2 min | Same look as kling, faster, slight quality dip — but you lose `imageUrl` |
|
|
78
|
+
| `veo3` | yes | **no** | 3-5 min | Most expensive. Pitch deck for investors, the one shot that has to be perfect — but you lose `imageUrl` |
|
|
79
79
|
|
|
80
80
|
Default: **`ltx` first to block the composition, then `kling` for the final**. For the *one* hero shot that drives the Steam page, escalate to `veo3` only if `kling` failed twice.
|
|
81
81
|
|
|
@@ -114,7 +114,7 @@ If "regenerate", revise *one* axis (camera move, lighting, or framing) — don't
|
|
|
114
114
|
|
|
115
115
|
Trailer footage usually lives on the user's local disk and goes straight into the NLE, where the generated `.mp4` is exactly what you want.
|
|
116
116
|
|
|
117
|
-
For shots that double as **in-engine** splash content, transcode first — Summer Engine has no MP4 or WebM loader, and `.ogv` (Ogg Theora) is the only video container it can open. `summer_import_from_url` runs
|
|
117
|
+
For shots that double as **in-engine** splash content, transcode first — Summer Engine has no MP4 or WebM loader, and `.ogv` (Ogg Theora) is the only video container it can open. `summer_import_from_url` runs the engine's import pipeline and rejects the file if it never becomes a loadable resource, so importing the `.mp4` fails outright rather than half-working.
|
|
118
118
|
|
|
119
119
|
```
|
|
120
120
|
ffmpeg -i hero_boss_reveal.mp4 -c:v libtheora -q:v 8 -an hero_boss_reveal.ogv
|
|
@@ -133,24 +133,24 @@ Studio does not ship a video editor. After all the shots land, tell the user:
|
|
|
133
133
|
> 3-5. Action beats (slow-mo combat, environmental destruction)
|
|
134
134
|
> 6. Money shot (low-angle hero, ends on logo card)
|
|
135
135
|
>
|
|
136
|
-
> Score it with the music from `
|
|
136
|
+
> Score it with the music from `music-track`. Add SFX hits on the cuts with `sound-effect`.
|
|
137
137
|
|
|
138
138
|
## Reference card — prompts that work
|
|
139
139
|
|
|
140
140
|
Pattern: `<archetype framing> + <subject> + <action verb> + <camera move> + <lighting / time of day> + <stylistic anchor>`. Keep under 50 words. Anchor with a reference image whenever a specific character or asset appears.
|
|
141
141
|
|
|
142
|
-
| Goal | Model | Prompt |
|
|
143
|
-
|
|
144
|
-
| Hero boss reveal | `kling` | `low-angle hero shot of an armored dragon turning toward camera, slow tilt-up, volcanic backlight, embers in air, cinematic, anamorphic flare, 16mm grain` |
|
|
145
|
-
| Slow-mo combat impact | `kling` | `mid shot of a swordsman striking a parry, sparks fly, time-dilation slow motion, dust and motion blur, dramatic side-light, cinematic` |
|
|
146
|
-
| Establishing kingdom wide | `kling` | `wide aerial of a clifftop fortress at golden hour, slow dolly forward, low sun raking the towers, cinematic, anamorphic, faint heat haze` |
|
|
147
|
-
| Splash screen card | `kling` | `static composition of a lone hooded figure on a windswept ridge, only the cloak and grass moving, dusk, painterly cinematic, room for title text upper third` |
|
|
148
|
-
| Whip pan reveal | `kling` | `whip pan from left to right across a battlefield at night, lands on the protagonist standing alone among bodies, torches flickering, cinematic` |
|
|
149
|
-
| Detail dolly-in | `kling` | `slow dolly-in on a glowing rune-etched sword embedded in stone, motes of magic rising, blue-cold key light, shallow depth of field, cinematic` |
|
|
150
|
-
| Vertical social hero | `kling` | `vertical close-up of a young witch raising hands, magical wind, hair flowing, candle-warm key, cinematic, framed for 9:16` |
|
|
151
|
-
| Pitch-deck premium shot | `veo3` | `wide cinematic of a fleet of airships emerging through cloud cover at dawn, slow truck forward, golden god-rays, soaring orchestral cinematic` |
|
|
152
|
-
| Cheap B-roll iteration | `ltx` | `mid shot of a knight walking through fog, slow truck backward, dawn light, cinematic` |
|
|
153
|
-
| Anime style hero | `minimax` | `anime-style hero girl draws a katana in slow motion, sakura petals swirling, dramatic side-light, dynamic camera, Ghibli painterly` |
|
|
142
|
+
| Goal | Model | Prompt | Duration |
|
|
143
|
+
|---|---|---|---|
|
|
144
|
+
| Hero boss reveal | `kling` | `low-angle hero shot of an armored dragon turning toward camera, slow tilt-up, volcanic backlight, embers in air, cinematic, anamorphic flare, 16mm grain` | 5s |
|
|
145
|
+
| Slow-mo combat impact | `kling` | `mid shot of a swordsman striking a parry, sparks fly, time-dilation slow motion, dust and motion blur, dramatic side-light, cinematic` | 5s |
|
|
146
|
+
| Establishing kingdom wide | `kling` | `wide aerial of a clifftop fortress at golden hour, slow dolly forward, low sun raking the towers, cinematic, anamorphic, faint heat haze` | 5s |
|
|
147
|
+
| Splash screen card | `kling` | `static composition of a lone hooded figure on a windswept ridge, only the cloak and grass moving, dusk, painterly cinematic, room for title text upper third` | 5s |
|
|
148
|
+
| Whip pan reveal | `kling` | `whip pan from left to right across a battlefield at night, lands on the protagonist standing alone among bodies, torches flickering, cinematic` | 5s |
|
|
149
|
+
| Detail dolly-in | `kling` | `slow dolly-in on a glowing rune-etched sword embedded in stone, motes of magic rising, blue-cold key light, shallow depth of field, cinematic` | 5s |
|
|
150
|
+
| Vertical social hero | `kling` | `vertical close-up of a young witch raising hands, magical wind, hair flowing, candle-warm key, cinematic, framed for 9:16` | 5s |
|
|
151
|
+
| Pitch-deck premium shot | `veo3` | `wide cinematic of a fleet of airships emerging through cloud cover at dawn, slow truck forward, golden god-rays, soaring orchestral cinematic` | 5s |
|
|
152
|
+
| Cheap B-roll iteration | `ltx` | `mid shot of a knight walking through fog, slow truck backward, dawn light, cinematic` | 5s |
|
|
153
|
+
| Anime style hero | `minimax` | `anime-style hero girl draws a katana in slow motion, sakura petals swirling, dramatic side-light, dynamic camera, Ghibli painterly` | 5s |
|
|
154
154
|
|
|
155
155
|
### Bad prompts and why
|
|
156
156
|
|
|
@@ -166,7 +166,7 @@ Pattern: `<archetype framing> + <subject> + <action verb> + <camera move> + <lig
|
|
|
166
166
|
|
|
167
167
|
- **Trying to chain shots inside one video generation.** Each clip is one beat. The cut between shots is the editor's job, not the model's. A 10s prompt with three actions returns mush.
|
|
168
168
|
- **Skipping the reference image for the hero shot.** The boss in the Steam capsule must look like the boss in the game. Always lock identity with `imageUrl`.
|
|
169
|
-
- **Using `veo3` for B-roll.**
|
|
169
|
+
- **Using `veo3` for B-roll.** Use `ltx` for blocking and B-roll; reserve `veo3` for the one shot that has to be perfect.
|
|
170
170
|
- **Generating shots without composing the trailer first.** Make a 6-shot list before generating shot 1. Otherwise you'll generate shots that don't intercut.
|
|
171
171
|
- **Assuming `aspectRatio="9:16"` reframed an image-to-video call.** It is ignored whenever `imageUrl` is set — the reference image decides the framing. Pillarboxed 16:9 on TikTok / Reels / Shorts reads as a desktop YouTube embed and gets demoted by the algorithm, so fix the reference, not the argument.
|
|
172
172
|
- **Treating `summer_generate_video` as synchronous.** It returns `{ queued: true, jobId }` and no URL. Poll `summer_check_job` before handing the user a link.
|
|
@@ -176,7 +176,7 @@ Pattern: `<archetype framing> + <subject> + <action verb> + <camera move> + <lig
|
|
|
176
176
|
## Edge cases
|
|
177
177
|
|
|
178
178
|
- **Steam capsule animated header (Steam asset).** Steam wants `.webm` at 616x353 or 1920x1080, ≤6s, 30fps, no audio, ≤4MB. Generate at 16:9, transcode in DaVinci, export `.webm` with VP9. The video model gives you the source; format conversion is on you.
|
|
179
|
-
- **Pitch deck for investors.** One shot, `veo3`, money composition (low-angle hero or wide establishing).
|
|
179
|
+
- **Pitch deck for investors.** One shot, `veo3`, money composition (low-angle hero or wide establishing).
|
|
180
180
|
- **Vertical for TikTok / Shorts.** The reference image must genuinely be portrait — `aspectRatio` is ignored once `imageUrl` is set. Frame the subject in the upper-middle so titles can sit at the bottom.
|
|
181
181
|
- **Subject is a UGC environment the player built.** Take a screenshot of the in-engine view, run it through `summer_generate_image` as `referenceImageUrl` to "upgrade" the look, then use that as the video reference. The model can stylize a screenshot; it can't invent the user's level.
|
|
182
182
|
- **Logo splash with motion graphics.** Generate a static logo card in `summer_generate_image` (or use the user's existing logo PNG), then prompt video as `static composition of <logo>, only background particles drifting, cinematic, room for title text` — keep the foreground motionless.
|
|
@@ -197,16 +197,16 @@ Once the shots are generated:
|
|
|
197
197
|
|
|
198
198
|
> Generated 6 shots, ready for the cut. Next:
|
|
199
199
|
> - Take them into DaVinci Resolve (free) or Premiere. Studio doesn't cut video.
|
|
200
|
-
> - Score the trailer with `
|
|
201
|
-
> - Add hit SFX on the cuts with `
|
|
202
|
-
> - For the title-card splash that ships in-engine, hand off to `
|
|
203
|
-
> - For a narrative beat inside the trailer (a 10s "story" segment), hand off to `
|
|
200
|
+
> - Score the trailer with `music-track` — a 60-second trailer cue with a swell and a cold ending.
|
|
201
|
+
> - Add hit SFX on the cuts with `sound-effect` (impact whooshes between shots).
|
|
202
|
+
> - For the title-card splash that ships in-engine, hand off to `animated-loop` with the established palette.
|
|
203
|
+
> - For a narrative beat inside the trailer (a 10s "story" segment), hand off to `cinematic-cutscene`.
|
|
204
204
|
|
|
205
205
|
## See also
|
|
206
206
|
|
|
207
|
-
- `
|
|
208
|
-
- `
|
|
209
|
-
- `
|
|
210
|
-
- `
|
|
211
|
-
- `
|
|
207
|
+
- `cinematic-cutscene` — narrative beats with dialogue.
|
|
208
|
+
- `animated-loop` — seamless background clips for splash screens / title menus.
|
|
209
|
+
- `music-track` — trailer score.
|
|
210
|
+
- `sound-effect` — cut SFX (whooshes, impacts, stingers).
|
|
211
|
+
- `concept-art` — generate the reference image axis when no asset exists yet.
|
|
212
212
|
- `../../references/mcp-tools-reference/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tune-performance
|
|
3
|
-
description: "Profile a slow game
|
|
3
|
+
description: "Profile a slow game with a measurement probe, identify rendering/physics/scripting hotspots, propose fixes with before/after metric expectations."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: performance
|
|
@@ -23,7 +23,7 @@ Performance tuning without measurement is gambling. This skill enforces a measur
|
|
|
23
23
|
|
|
24
24
|
> What's slow? Pick the closest: framerate drops in scene X / startup is long / freezes for a moment / runs fine on my machine but bad on hardware Y.
|
|
25
25
|
|
|
26
|
-
Wait
|
|
26
|
+
Wait for the answer. It narrows where to look:
|
|
27
27
|
|
|
28
28
|
| Symptom | Likely subsystem |
|
|
29
29
|
|---|---|
|
|
@@ -75,7 +75,7 @@ Write the returned numbers down before fixing anything. Drive the probe to the s
|
|
|
75
75
|
|
|
76
76
|
**Never profile with `--headless`.** A headless instance has no renderer: `RENDER_TOTAL_DRAW_CALLS_IN_FRAME` and `RENDER_TOTAL_OBJECTS_IN_FRAME` read `0.0`, and the FPS figure is an uncapped loop rate, not the game's framerate. The verify instance is windowed-offscreen precisely so the numbers are real.
|
|
77
77
|
|
|
78
|
-
**
|
|
78
|
+
**Fallback (engine not running at all):** ask the user to open the editor's built-in monitors (Debugger → Monitors) or print `Performance.get_monitor` values in game, and paste the numbers. At minimum: FPS, frame time, draw calls, physics active objects.
|
|
79
79
|
|
|
80
80
|
### 3. Identify the dominant cost
|
|
81
81
|
|
|
@@ -91,7 +91,7 @@ Decision tree:
|
|
|
91
91
|
|
|
92
92
|
### 4a. Rendering hotspot
|
|
93
93
|
|
|
94
|
-
Common
|
|
94
|
+
Common rendering costs, ordered by frequency:
|
|
95
95
|
|
|
96
96
|
| Pattern | Symptom | Fix |
|
|
97
97
|
|---|---|---|
|
|
@@ -105,8 +105,8 @@ Common Godot 4.x rendering costs, ordered by frequency:
|
|
|
105
105
|
To inspect a suspect node:
|
|
106
106
|
|
|
107
107
|
```
|
|
108
|
-
summer_inspect_node "./World/Enemy"
|
|
109
|
-
summer_inspect_resource "./World/Enemy" #
|
|
108
|
+
summer_inspect_node path:"./World/Enemy"
|
|
109
|
+
summer_inspect_resource nodePath:"./World/Enemy" property:"mesh" # mesh/material/shape details
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
**Bakes: know which process can run them.** `LightmapGI.bake(from_node, image_data_path)` IS script-bound on this build — run it from `summer_run_script` in the live editor (the GPU lightmapper needs a real renderer: desktop editors have one, cloud containers need xvfb + GL per `running-in-the-cloud`, and pure-headless returns `BAKE_ERROR_NO_LIGHTMAPPER`). The `OccluderInstance3D` bake remains editor-button only — say so rather than reporting it as applied. Navmesh baking, collision-shape generation from meshes, and `ImporterMesh.generate_lods` are all scriptable and remain yours to do.
|
|
@@ -119,7 +119,7 @@ Top patterns:
|
|
|
119
119
|
|---|---|
|
|
120
120
|
| 100+ active RigidBody3D | Sleep them when idle (`can_sleep = true`), or convert to Area3D where collision response isn't needed |
|
|
121
121
|
| Concave collision shapes on dynamic bodies | Convert to ConvexPolygonShape3D or compound primitives (sphere/capsule/box). Concave costs 5–20x more. |
|
|
122
|
-
| Physics tick
|
|
122
|
+
| Physics tick rate raised above the 60 Hz default | Lower `physics/common/physics_ticks_per_second` back to 60 if visual smoothness allows |
|
|
123
123
|
| Per-frame raycast in `_physics_process` | Cache the result, raycast every N frames, or use ShapeCast3D |
|
|
124
124
|
| Hundreds of overlap queries | Use Area3D with `monitoring = true` only on the bodies that need to detect — turn it off on environment |
|
|
125
125
|
|
|
@@ -142,13 +142,13 @@ Fixes:
|
|
|
142
142
|
- Cache the group lookup in `_ready()` if the group composition is stable.
|
|
143
143
|
- Move per-frame work to a timer at 10 Hz (`_on_timer_timeout`), not 60 Hz.
|
|
144
144
|
- Replace `distance_to` with `distance_squared_to` in comparisons (no sqrt).
|
|
145
|
-
-
|
|
145
|
+
- Move a truly per-frame hot loop to C# or a GDExtension.
|
|
146
146
|
|
|
147
147
|
### 4d. Frame time spikes (jitter)
|
|
148
148
|
|
|
149
149
|
If FPS is good but frame time spikes:
|
|
150
150
|
|
|
151
|
-
- **Shader compilation**:
|
|
151
|
+
- **Shader compilation**: warm shaders up during a loading screen by rendering each material once off-screen.
|
|
152
152
|
- **GC / object allocation**: `var x := []` inside `_process` allocates each frame. Pre-allocate.
|
|
153
153
|
- **Async resource load**: ensure `ResourceLoader.load_threaded_request` is finished before referencing.
|
|
154
154
|
|
|
@@ -217,7 +217,7 @@ Compare: was the metric movement at least 50% of what was promised? If yes, ship
|
|
|
217
217
|
- **"Just disable VSync to see real FPS."** Disabling VSync helps you measure, but performance work targets perceived smoothness (16.7 ms, locked). Re-enable before shipping.
|
|
218
218
|
- **Premature C++ rewrite.** A GDScript hotpath at 5% of frame time isn't the bottleneck. Profile first.
|
|
219
219
|
- **"It's slow on user machines, must be the GPU."** Often it's resolution scale + shadow quality + GI settings. Add a quality preset switcher first.
|
|
220
|
-
- **Threading gameplay code.**
|
|
220
|
+
- **Threading gameplay code.** The scene tree isn't thread-safe. Threading is for asset load, network, AI compute — not `_physics_process`.
|
|
221
221
|
|
|
222
222
|
## Collaborative protocol
|
|
223
223
|
|
|
@@ -233,6 +233,6 @@ No template — this is a workflow. Performance tuning is project-specific by de
|
|
|
233
233
|
- `../../references/godot-version/godot-version.md` — renderer API churn notes (Compositor, RenderSceneBuffers)
|
|
234
234
|
- `../../references/collaborative-protocol/collaborative-protocol.md` — "May I write" pattern
|
|
235
235
|
- `../../references/gd-style/gd-style.md` — GDScript conventions (avoid bare types, use `:=`)
|
|
236
|
-
- `
|
|
237
|
-
- `
|
|
238
|
-
- `
|
|
236
|
+
- `debug` — bug triage (related but different)
|
|
237
|
+
- `diagnosing-perf-regressions` — when it *got* slow rather than always was
|
|
238
|
+
- `3d-lighting` — light setup and bake decisions
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/tune-performance
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.3
|
|
4
|
-
summary: Profile a slow game
|
|
4
|
+
summary: Profile a slow game with a measurement probe, identify rendering/physics/scripting hotspots, propose fixes with before/after metric expectations.
|
|
5
5
|
use_when:
|
|
6
6
|
- the game is slow, drops framerate, stutters, takes forever to start, or runs poorly on specific hardware
|
|
7
7
|
- fps drops or stutter when many units, projectiles, or particles spawn at once and the hotspot is unknown
|
|
@@ -77,7 +77,7 @@ Pattern:
|
|
|
77
77
|
<asset class> of <subject>, game UI, <anchor style>, flat design, clean edges, transparent background, centered, isolated
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
`isolated` is load-bearing. For the background, **do not rely on the prompt** — pass `
|
|
80
|
+
`isolated` is load-bearing. For the background, **do not rely on the prompt** — pass `removeBackground: true`, which runs a real background-removal pass after generation and returns a PNG with true alpha. That is the single highest-value argument in this skill, and it is the actual fix for the checkerboard failure listed below: models asked for a "transparent background" in text frequently paint the checkerboard.
|
|
81
81
|
|
|
82
82
|
### 5. Generate
|
|
83
83
|
|
|
@@ -87,11 +87,11 @@ summer_generate_image(
|
|
|
87
87
|
prompt="ability icon for a fire spell, glowing flame in cupped hand, game UI, flat design with subtle gradient and soft inner shadow, 2px deep navy outline, gold and parchment palette, rounded square frame, centered, isolated on a plain background. Not photorealistic, no 3D render, no scene background, not busy, no multiple objects.",
|
|
88
88
|
model="nano-banana-2",
|
|
89
89
|
style="none",
|
|
90
|
-
|
|
90
|
+
removeBackground=true
|
|
91
91
|
)
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
`image_size` and `negative_prompt` do not exist on this tool and are dropped without an error — the negations have to live in the prompt text, and the size is fixed.
|
|
94
|
+
`image_size` and `negative_prompt` do not exist on this tool and are dropped without an error — the negations have to live in the prompt text, and the size is fixed.
|
|
95
95
|
|
|
96
96
|
**Button (3 states in 3 calls):**
|
|
97
97
|
```
|
|
@@ -164,7 +164,7 @@ If you generate a 4×4 grid of icons in one image, each icon becomes an `AtlasTe
|
|
|
164
164
|
| Bad | Failure mode |
|
|
165
165
|
|---|---|
|
|
166
166
|
| `cool button` | No subject, no anchor. Returns a generic button on a card background. |
|
|
167
|
-
| `transparent button with icon` | Model often renders a checkerboard "transparent" pattern as the actual fill. There is no negative-prompt argument to counter it — drop the word "transparent" from the prompt entirely and pass `
|
|
167
|
+
| `transparent button with icon` | Model often renders a checkerboard "transparent" pattern as the actual fill. There is no negative-prompt argument to counter it — drop the word "transparent" from the prompt entirely and pass `removeBackground: true` instead. |
|
|
168
168
|
| `8 ability icons in one image` | Inconsistent style across the 8. Generate one at a time with the same anchor. |
|
|
169
169
|
| `realistic 3D rendered button` | Conflicts with flat-UI. Stay flat. |
|
|
170
170
|
| `button with the word "Play"` on it | Models render text badly. Add text in Summer Engine via a `Label` over the button, not in the texture. |
|
|
@@ -175,7 +175,7 @@ If you generate a 4×4 grid of icons in one image, each icon becomes an `AtlasTe
|
|
|
175
175
|
- **Letting the model render text.** Diffusion models cannot render reliable
|
|
176
176
|
text. Always overlay text in Summer Engine with a `Label` node. The button
|
|
177
177
|
texture is the frame; the label is the word.
|
|
178
|
-
- **Forgetting `
|
|
178
|
+
- **Forgetting `removeBackground: true`.** Default is opaque. Prompting for "transparent background" instead is what produces the painted-checkerboard failure below — the option runs a real alpha pass and does not.
|
|
179
179
|
- **Expecting `style` to do the work.** Only `cartoon` and `anime` append anything; `realistic` and `none` append nothing, and any other value is coerced to `none`. `style: "none"` is right for UI, but "flat design" has to be in the prompt regardless.
|
|
180
180
|
- **NinePatch with no border-vs-center distinction.** The 9-slice scaling smears the border into the center.
|
|
181
181
|
- **Mipmaps on UI.** UI textures shouldn't mipmap — they're displayed at 1:1 or near it. Mipmaps waste memory and blur sharp edges.
|
|
@@ -187,7 +187,7 @@ If you generate a 4×4 grid of icons in one image, each icon becomes an `AtlasTe
|
|
|
187
187
|
`STRETCH_KEEP_ASPECT_CENTERED` scales it down cleanly.
|
|
188
188
|
- **User wants pixel-style UI.** Route to `pixel-art` — different prompt pattern, different filter, different anchor.
|
|
189
189
|
- **User wants animated UI (spinning loading icon).** Generate the static frame here. Animate via `AnimationPlayer` rotating the `TextureRect`, not as a sprite sheet.
|
|
190
|
-
- **Transparency comes back as a checkerboard pattern in the image.** The model rendered the checkerboard literally because the prompt asked for transparency. Remove every mention of transparency from the prompt, generate on a plain background, and pass `
|
|
190
|
+
- **Transparency comes back as a checkerboard pattern in the image.** The model rendered the checkerboard literally because the prompt asked for transparency. Remove every mention of transparency from the prompt, generate on a plain background, and pass `removeBackground: true` to cut the alpha server-side.
|
|
191
191
|
- **Icons need to read at very small size (16-24px in a packed bar).** Bias prompts toward bold silhouette + minimal interior detail. Ornate detail is invisible at 16px and adds noise.
|
|
192
192
|
|
|
193
193
|
## Fallback (no MCP)
|
|
@@ -199,7 +199,7 @@ summer_generate_image(
|
|
|
199
199
|
prompt="<asset + anchor>, isolated on a plain background. No scene background, not photorealistic, no 3D, not busy.",
|
|
200
200
|
model="nano-banana-2",
|
|
201
201
|
style="none",
|
|
202
|
-
|
|
202
|
+
removeBackground=true
|
|
203
203
|
)
|
|
204
204
|
```
|
|
205
205
|
|
|
@@ -108,12 +108,12 @@ extends TextureProgressBar
|
|
|
108
108
|
|
|
109
109
|
func _ready():
|
|
110
110
|
var tex = load(slice_url)
|
|
111
|
-
# The base / "under" texture is the same image —
|
|
111
|
+
# The base / "under" texture is the same image — the bar masks it
|
|
112
112
|
# to whatever value 0-100 we set.
|
|
113
113
|
texture_under = tex
|
|
114
114
|
texture_progress = tex
|
|
115
115
|
fill_mode = TextureProgressBar.FILL_LEFT_TO_RIGHT if orientation == "horizontal" else TextureProgressBar.FILL_TOP_TO_BOTTOM
|
|
116
|
-
# The fill rect tells
|
|
116
|
+
# The fill rect tells the bar which sub-region of the texture is the
|
|
117
117
|
# bar fill (vs the frame). Texture_progress_offset + stretch_margin_*
|
|
118
118
|
# form the inset.
|
|
119
119
|
var sw = tex.get_width()
|
|
@@ -160,7 +160,7 @@ In the pack, find the pair: `sliceMeta[currentIndex].pairWith` gives the other s
|
|
|
160
160
|
|
|
161
161
|
## Cut-offs and re-renders
|
|
162
162
|
|
|
163
|
-
If the detected `frameMargins` are obviously wrong (the dashed overlay in the wizard's lightbox shows the center area clipping into a corner ornament), the user should hit **Recreate (HD)** on that slice.
|
|
163
|
+
If the detected `frameMargins` are obviously wrong (the dashed overlay in the wizard's lightbox shows the center area clipping into a corner ornament), the user should hit **Recreate (HD)** on that slice. It regenerates cleanly — but the *margins themselves* don't get re-detected after upscale. Margins live on the original detection. The user can also manually edit them in code via the `patch_margin_*` properties after instantiating.
|
|
164
164
|
|
|
165
165
|
## Composite panels with sub-elements
|
|
166
166
|
|
|
@@ -171,16 +171,16 @@ When a slice has `parentSliceIndex` set, it came from a **Break-down** pass —
|
|
|
171
171
|
|
|
172
172
|
Pick based on whether your game needs the panel to stretch as one unit or whether each control needs independent interaction.
|
|
173
173
|
|
|
174
|
-
See **Composite Panels (Sliced Further)** below for the
|
|
174
|
+
See **Composite Panels (Sliced Further)** below for the fields the wizard emits (`isComposite`, `zOrder`) and the consume recipe.
|
|
175
175
|
|
|
176
176
|
## Composite Panels (Sliced Further)
|
|
177
177
|
|
|
178
|
-
The wizard's Break-down pass
|
|
178
|
+
The wizard's Break-down pass adds per-slice fields the runtime must understand:
|
|
179
179
|
|
|
180
180
|
| Field | Type | Meaning |
|
|
181
181
|
|---|---|---|
|
|
182
182
|
| `isComposite` | boolean | True on the **parent** slice — the flat preview image of the assembled panel. NOT a runtime asset. Filter it out on import unless the caller explicitly wants the preview thumbnail. |
|
|
183
|
-
| `zOrder` | number | Back-to-front paint order on children. Lower = behind.
|
|
183
|
+
| `zOrder` | number | Back-to-front paint order on children. Lower = behind. Maps to `CanvasItem.z_index`. |
|
|
184
184
|
| `parentSliceIndex` | number | Set on each child, points at the composite parent. Used to group children. |
|
|
185
185
|
|
|
186
186
|
The table above lists every field this skill reads; treat any other field in the pack manifest as opaque.
|
|
@@ -201,7 +201,7 @@ For the full instantiation flow (op JSON, examples), use `instantiate-asset-pack
|
|
|
201
201
|
|
|
202
202
|
### Legacy compatibility
|
|
203
203
|
|
|
204
|
-
Older packs
|
|
204
|
+
Older packs use different field names. Always fall back:
|
|
205
205
|
|
|
206
206
|
```
|
|
207
207
|
const zOrder = slice.zOrder ?? slice.layerIndex ?? packFileIndex;
|
|
@@ -36,14 +36,12 @@ If `CLAUDE.md` says "skip the brainstorm, just build it" and a skill says "alway
|
|
|
36
36
|
Two layers:
|
|
37
37
|
|
|
38
38
|
- **Skills** — discipline guides that fire on specific situations: brainstorming a game, designing a mechanic, building an FPS controller, debugging a crash, shipping a build. Each one is a SKILL.md you load via the Skill tool.
|
|
39
|
-
- **MCP tools** — `summer_*` tools that talk to the running Summer Engine on `localhost:6550`. Scene mutation (`summer_add_node`, `summer_set_prop`), inspection (`summer_get_scene_tree`, `summer_inspect_node`), play/diagnostics (`summer_play`, `summer_get_diagnostics`), asset import/generation (`summer_import_from_url`, `summer_generate_3d`), and
|
|
39
|
+
- **MCP tools** — `summer_*` tools that talk to the running Summer Engine on `localhost:6550`. Scene mutation (`summer_add_node`, `summer_set_prop`), inspection (`summer_get_scene_tree`, `summer_inspect_node`), play/diagnostics (`summer_play`, `summer_get_diagnostics`), asset import/generation (`summer_import_from_url`, `summer_generate_3d`), and the rest of the `summer_*` set.
|
|
40
40
|
|
|
41
41
|
**Scripting language:** The user is making a Summer game with the Summer SDK.
|
|
42
|
-
GDScript is the default creator language. Summer
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
string rather than turning that base into the product identity. You can write
|
|
46
|
-
game code in either:
|
|
42
|
+
GDScript is the default creator language. Summer Engine follows its upstream
|
|
43
|
+
technical base continuously, so confirm version-sensitive behavior from the
|
|
44
|
+
engine's own version string. You can write game code in either:
|
|
47
45
|
|
|
48
46
|
- **GDScript** (`.gd`) — the default. Best supported by Summer skills (see `gdscript-patterns`). Use this unless the user has explicitly chosen C#.
|
|
49
47
|
- **C#** (`.cs`) — supported by the shipped Mono build. The GDScript
|
|
@@ -150,7 +148,7 @@ Run `summer doctor` early in a fresh Summer session when setup, MCP tools, slash
|
|
|
150
148
|
npx clear-npx-cache && npx -y summer-engine@latest setup <agent> --yes --force
|
|
151
149
|
```
|
|
152
150
|
|
|
153
|
-
Use the dist-tag `summer doctor` recommends: `@latest` normally, `@next` (with `--channel next`) when this CLI was installed from the soaking release, otherwise the MCP server silently drops back to the older `latest`. Use the real agent slug from doctor or the current environment (`claude-code`, `codex`, `cursor`, `
|
|
151
|
+
Use the dist-tag `summer doctor` recommends: `@latest` normally, `@next` (with `--channel next`) when this CLI was installed from the soaking release, otherwise the MCP server silently drops back to the older `latest`. Use the real agent slug from doctor or the current environment (`claude-code`, `codex`, `cursor`, `antigravity`, `github-copilot`, `vscode-copilot`, `opencode`, etc.).
|
|
154
152
|
|
|
155
153
|
Why this exact command matters:
|
|
156
154
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vehicle-model
|
|
3
|
-
description: "Generate a hard-surface vehicle — car, spaceship, mech, boat, tank — static mesh with optional detail-texture pass, wired as
|
|
3
|
+
description: "Generate a hard-surface vehicle — car, spaceship, mech, boat, tank — static mesh with optional detail-texture pass, wired as VehicleBody3D or MeshInstance3D."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: 3d-assets
|
|
@@ -101,7 +101,7 @@ Nothing in the prompt text "triggers" multi-view. The phrase `front and 3/4 side
|
|
|
101
101
|
|
|
102
102
|
### 4. Confirm and call
|
|
103
103
|
|
|
104
|
-
> About to generate `red_race_car` via `hunyuan`, target ~25k tris, multi-angle ref.
|
|
104
|
+
> About to generate `red_race_car` via `hunyuan`, target ~25k tris, multi-angle ref. Uses credits, ~90s. OK?
|
|
105
105
|
|
|
106
106
|
```
|
|
107
107
|
summer_generate_3d(
|
|
@@ -145,7 +145,7 @@ This re-textures the existing mesh with sharper detail — panel lines, decals,
|
|
|
145
145
|
| Use case | Parent type | Notes |
|
|
146
146
|
|---|---|---|
|
|
147
147
|
| Player-driven (car, bike, hover) | `VehicleBody3D` (wheeled) or `RigidBody3D` (free physics) | Add `VehicleWheel3D` children for wheeled vehicles |
|
|
148
|
-
| Player-driven (spaceship, mech) | `RigidBody3D` or `CharacterBody3D` | Custom thrust / walk code
|
|
148
|
+
| Player-driven (spaceship, mech) | `RigidBody3D` or `CharacterBody3D` | Custom thrust / walk code (`character-movement` for walkers) |
|
|
149
149
|
| Background scenery (parked, flyby) | `MeshInstance3D` under a `Node3D` | No physics, no collision needed for distant traffic |
|
|
150
150
|
| Background traffic (moving but not interactive) | `Node3D` + `AnimationPlayer` driving the position | Cheap, no physics overhead |
|
|
151
151
|
|
|
@@ -161,7 +161,7 @@ summer_set_resource_property(scenePath="res://main.tscn", nodePath="./World/Race
|
|
|
161
161
|
summer_save_scene(scenePath="res://main.tscn")
|
|
162
162
|
```
|
|
163
163
|
|
|
164
|
-
A `.glb` cannot be assigned to `MeshInstance3D.mesh` — an imported `.glb` is a scene, not a `Mesh` (`ResourceLoader.get_recognized_extensions_for_type("Mesh")` on the shipped
|
|
164
|
+
A `.glb` cannot be assigned to `MeshInstance3D.mesh` — an imported `.glb` is a scene, not a `Mesh` (`ResourceLoader.get_recognized_extensions_for_type("Mesh")` on the shipped engine returns `["tres", "mesh", "res"]`, no `glb`). Instantiate it. Assigning a bare class name like `"BoxShape3D"` to a resource property auto-instantiates it, which is how you get a shape you can then size.
|
|
165
165
|
|
|
166
166
|
Every scene-mutating tool takes an explicit `scenePath`; node paths are relative to that scene's root (`./`); `summer_set_prop`'s property argument is `key`; and `summer_set_resource_property` needs all five of `scenePath`, `nodePath`, `resourceProperty`, `subProperty`, `value`.
|
|
167
167
|
|
|
@@ -185,7 +185,7 @@ summer_save_scene(scenePath="res://main.tscn")
|
|
|
185
185
|
## Edge cases
|
|
186
186
|
|
|
187
187
|
- **Tracked vehicle (tank).** AI mesh-gen handles the hull but the tracks come back as a fused ring. Generate the hull only, then add tracks as a separate `prop-model` (or use a tiled texture on a torus). For animation, scroll the track texture's UV.
|
|
188
|
-
- **Articulated vehicle (mech with shoulders, hips, knees).** The mesh is one piece — joints aren't separated. For animated mechs, treat as a humanoid: generate as `character-model` with the rig pass, then animate
|
|
188
|
+
- **Articulated vehicle (mech with shoulders, hips, knees).** The mesh is one piece — joints aren't separated. For animated mechs, treat as a humanoid: generate as `character-model` with the rig pass, then animate with `text-to-motion` (prompt "walks heavily").
|
|
189
189
|
- **Vehicle with rotor (helicopter, drone).** Generate without rotor, then add the rotor as a separate `prop-model` and parent it. Spin via code in `_process`.
|
|
190
190
|
- **Open-top vehicle (convertible, jeep).** Specify "open top, no roof" — defaults often add a roof.
|
|
191
191
|
- **The user wants the cockpit interior visible.** Generate exterior here, then a separate `prop-model` for the interior, and switch meshes when the camera enters first-person view.
|
|
@@ -202,7 +202,7 @@ summer_save_scene(scenePath="res://main.tscn")
|
|
|
202
202
|
After the vehicle is wired:
|
|
203
203
|
|
|
204
204
|
> `race_car.glb` placed at `./World/RaceCar` as a VehicleBody3D. Next:
|
|
205
|
-
> - **Vehicle controls:** WASD steering / accel —
|
|
205
|
+
> - **Vehicle controls:** WASD steering / accel — write them with `engine_force`, `steering`, and `brake` on VehicleBody3D.
|
|
206
206
|
> - **Driver character:** generate via `character-model` and parent to the seat position.
|
|
207
207
|
> - **Engine sound + tire screech:** `sound-effect` for one-shots, `ambient-bed` for the engine loop.
|
|
208
208
|
> - **Particles:** exhaust smoke, dust trail, sparks on collision — `vfx-smoke` / `vfx-hit-spark` or built-in GPUParticles3D.
|
|
@@ -212,5 +212,4 @@ After the vehicle is wired:
|
|
|
212
212
|
- `character-model` — for the driver/pilot.
|
|
213
213
|
- `prop-model` — for separable parts (rotors, decals as decals, modular kit pieces).
|
|
214
214
|
- `asset-strategy` — meta-router.
|
|
215
|
-
- `fps-controller` — for player-driven vehicle input wiring.
|
|
216
215
|
- `../../references/mcp-tools-reference/mcp-tools-reference.md` — `summer_generate_3d` schema, including `kind: "texture"` for the secondary detail pass.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
id: skill/vehicle-model
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.3
|
|
4
|
-
summary: Generate a hard-surface vehicle — car, spaceship, mech, boat, tank — static mesh with optional detail-texture pass, wired as
|
|
4
|
+
summary: Generate a hard-surface vehicle — car, spaceship, mech, boat, tank — static mesh with optional detail-texture pass, wired as VehicleBody3D or MeshInstance3D.
|
|
5
5
|
use_when:
|
|
6
6
|
- generating a hard-surface vehicle — car, motorcycle, spaceship, hover bike, boat, mech, tank, helicopter
|
|
7
|
-
- a racing, flying, or combat game needs a hard-surface vehicle mesh as a
|
|
7
|
+
- a racing, flying, or combat game needs a hard-surface vehicle mesh as a VehicleBody3D or MeshInstance3D
|
|
8
8
|
facets:
|
|
9
9
|
lifecycle:
|
|
10
10
|
- build
|
|
@@ -109,12 +109,11 @@ Bad: Trust agent report
|
|
|
109
109
|
|
|
110
110
|
## Why This Matters
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
-
|
|
114
|
-
- Undefined functions
|
|
115
|
-
- Missing requirements
|
|
116
|
-
- Time
|
|
117
|
-
- Violates: "Honesty is a core value. If you lie, you'll be replaced."
|
|
112
|
+
False completion claims cost trust and time:
|
|
113
|
+
- The user stops believing your reports.
|
|
114
|
+
- Undefined functions ship and crash.
|
|
115
|
+
- Missing requirements ship as incomplete features.
|
|
116
|
+
- Time goes to redirecting and rework.
|
|
118
117
|
|
|
119
118
|
## When To Apply
|
|
120
119
|
|
|
@@ -25,8 +25,8 @@ The dissolve shader samples 3D noise per fragment and clips pixels whose noise v
|
|
|
25
25
|
|
|
26
26
|
## When NOT to use
|
|
27
27
|
|
|
28
|
-
- The user wants *fire* on the object that doesn't consume it — use `fire`, not dissolve. Dissolve makes the mesh disappear; fire just sits on top.
|
|
29
|
-
- The user wants a particle-driven ash cloud as the object disappears — pair this with `smoke` (recolor to ash gray) spawned at the dissolving mesh's bounds.
|
|
28
|
+
- The user wants *fire* on the object that doesn't consume it — use `vfx-fire`, not dissolve. Dissolve makes the mesh disappear; fire just sits on top.
|
|
29
|
+
- The user wants a particle-driven ash cloud as the object disappears — pair this with `vfx-smoke` (recolor to ash gray) spawned at the dissolving mesh's bounds.
|
|
30
30
|
- The user wants a fade-out via alpha (cheap, no shader) — set `transparency = TRANSPARENCY_ALPHA` and tween `albedo_color.a` to 0. Dissolve is better but more expensive.
|
|
31
31
|
- The user wants the *world* to dissolve in for a level transition — that's a screen-space post-process, not this per-mesh recipe.
|
|
32
32
|
- The character has skinned mesh + multiple materials — this works but you have to override every material slot. Confirm with user; consider a fade-out instead.
|
|
@@ -307,7 +307,7 @@ noise_scale = 3.0
|
|
|
307
307
|
|
|
308
308
|
### thanos-snap
|
|
309
309
|
|
|
310
|
-
Fast, fine grain, blue edge for the cosmic feel. Pair with `smoke` in pale gray for ash particles rising.
|
|
310
|
+
Fast, fine grain, blue edge for the cosmic feel. Pair with `vfx-smoke` in pale gray for ash particles rising.
|
|
311
311
|
|
|
312
312
|
```
|
|
313
313
|
duration = 0.8
|
|
@@ -319,7 +319,7 @@ noise_scale = 8.0
|
|
|
319
319
|
|
|
320
320
|
### holy-banish
|
|
321
321
|
|
|
322
|
-
Slow, white edge, big halo. Add `magic-glow` underneath for a beam of light.
|
|
322
|
+
Slow, white edge, big halo. Add `vfx-magic-glow` underneath for a beam of light.
|
|
323
323
|
|
|
324
324
|
```
|
|
325
325
|
duration = 2.5
|
|
@@ -19,14 +19,14 @@ Fire in games is almost never a video clip and never an AI-generated sprite. It'
|
|
|
19
19
|
- "Make a campfire / bonfire / hearth flame."
|
|
20
20
|
- "Light the brazier."
|
|
21
21
|
- "I need a candle flame on this candlestick."
|
|
22
|
-
- "The dragon needs a flame breath" (use this for the persistent emitter; pair with a one-shot `muzzle-flash` for the burst).
|
|
22
|
+
- "The dragon needs a flame breath" (use this for the persistent emitter; pair with a one-shot `vfx-muzzle-flash` for the burst).
|
|
23
23
|
- The player set something on fire and you need a continuous, physically-anchored flame.
|
|
24
24
|
|
|
25
25
|
## When NOT to use
|
|
26
26
|
|
|
27
|
-
- The user wants an object to *burn away* (mesh disintegrating with a fire edge) — route to `dissolve`. Fire is a separate effect; pair them.
|
|
28
|
-
- The user wants smoke without flame — go straight to `smoke`. (Most fires want a smoke trail above; spawn this recipe and add `smoke` on top.)
|
|
29
|
-
- The user wants a one-frame muzzle flash from a gun — that's `muzzle-flash`, not fire.
|
|
27
|
+
- The user wants an object to *burn away* (mesh disintegrating with a fire edge) — route to `vfx-dissolve`. Fire is a separate effect; pair them.
|
|
28
|
+
- The user wants smoke without flame — go straight to `vfx-smoke`. (Most fires want a smoke trail above; spawn this recipe and add `vfx-smoke` on top.)
|
|
29
|
+
- The user wants a one-frame muzzle flash from a gun — that's `vfx-muzzle-flash`, not fire.
|
|
30
30
|
- The user wants 2D fire on a UI element — use `canvas_item` shader; this recipe is `spatial`/`particles`.
|
|
31
31
|
- The user wants stylized magic flame (blue, purple, ethereal) — use this recipe and load the `magic-fire` variant in the cookbook below.
|
|
32
32
|
|
|
@@ -397,7 +397,7 @@ OmniLight3D: light_energy = 1.6, omni_range = 6.0
|
|
|
397
397
|
|
|
398
398
|
### bonfire
|
|
399
399
|
|
|
400
|
-
Wide, tall, hungry. Pair with `smoke` directly above.
|
|
400
|
+
Wide, tall, hungry. Pair with `vfx-smoke` directly above.
|
|
401
401
|
|
|
402
402
|
```
|
|
403
403
|
particle_count = 256
|
|
@@ -442,7 +442,7 @@ OmniLight3D: light_color = Color(0.40, 0.65, 1.0), light_energy = 2.4
|
|
|
442
442
|
## Anti-patterns
|
|
443
443
|
|
|
444
444
|
- **Spatial-only shader on the visual quad.** It still works, but you forgot `blend_add` + `unshaded` and the flame looks like a flat orange triangle in shadow. Always: `render_mode unshaded, blend_add, depth_draw_never;`.
|
|
445
|
-
- **Looping a one-shot emitter.** `one_shot = false` for fire (continuous). One-shot is for `muzzle-flash` and `hit-spark`.
|
|
445
|
+
- **Looping a one-shot emitter.** `one_shot = false` for fire (continuous). One-shot is for `vfx-muzzle-flash` and `vfx-hit-spark`.
|
|
446
446
|
- **Missing `cull_disabled`.** Particles billboard toward camera; if you cull backfaces, the flame disappears at certain angles.
|
|
447
447
|
- **`depth_draw_opaque` on the visual material.** You'll z-fight with anything inside the flame (the torch handle). Use `depth_draw_never`.
|
|
448
448
|
- **OmniLight3D parented under the GPUParticles3D.** The particles emit in local space; the light moves with them. Sibling, not child.
|