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
|
@@ -16,7 +16,7 @@ adaptation: translated
|
|
|
16
16
|
|
|
17
17
|
## Outcome
|
|
18
18
|
|
|
19
|
-
Scenes in Summer Engine
|
|
19
|
+
Scenes in Summer Engine that are organized by **access pattern**, not by accident: clear separation between reusable asset scenes (`.tscn` prefabs) and the live node tree, wrapper grouping where whole subtrees are operated on together, flat siblings where type-wide queries dominate, and gameplay logic that does not depend on deep fragile node paths.
|
|
20
20
|
|
|
21
21
|
## When to Use
|
|
22
22
|
|
|
@@ -31,7 +31,7 @@ Do not use this for shader/material work, asset import mechanics, or gameplay tu
|
|
|
31
31
|
|
|
32
32
|
Sander Mertens' ECS article evaluates hierarchies on two axes and both translate directly:
|
|
33
33
|
|
|
34
|
-
1. **Usability: two hierarchy kinds must compose.** *Asset hierarchies* (inheritance, variations, property overrides →
|
|
34
|
+
1. **Usability: two hierarchy kinds must compose.** *Asset hierarchies* (inheritance, variations, property overrides → `.tscn` sub-scenes and scene inheritance) and *scene hierarchies* (live parent-child relations → the node tree). A scene that repeatedly rebuilds the same inline cluster is missing its asset hierarchy; an asset scene nobody instantiates is dead weight.
|
|
35
35
|
2. **Performance: match structure to dominant access patterns.** Group nodes stored/operated together under one parent (subtree operations become one operation); keep nodes queried independently as flat siblings. There is no universally optimal depth — analyze usage before picking one.
|
|
36
36
|
3. **Hierarchy-agnostic logic.** The article's hybrid design keeps application code independent of storage; the Summer translation is: scripts and agents should not hardcode deep paths. Use groups, signals, and exported `NodePath` references instead of long ancestor chains.
|
|
37
37
|
|
|
@@ -67,7 +67,7 @@ Rules of thumb:
|
|
|
67
67
|
- **Wrapper node per operation boundary.** If you ever need to "remove all enemies", "hide all props", or "rebuild the level", they share one parent; the operation becomes a single node op.
|
|
68
68
|
- **Sub-scene per reusable setup.** Same cluster appearing twice or more → extract to its own `.tscn` and instantiate. One-offs (main camera, a level-specific light) stay inline.
|
|
69
69
|
- **Flat over deep.** Every extra level of nesting adds path length and fragility. Prefer named sibling containers over long chains.
|
|
70
|
-
- **Unique descriptive names.**
|
|
70
|
+
- **Unique descriptive names.** The engine auto-renames duplicates (`Node`, `Node2`); that breaks name lookup. Name by role and index (`Crate_01`).
|
|
71
71
|
- **Never mix 2D under 3D** (or vice versa) in one hierarchy.
|
|
72
72
|
|
|
73
73
|
## Agent Procedure
|
|
@@ -9,7 +9,6 @@ use_when:
|
|
|
9
9
|
- "scripts break whenever I move nodes because of hardcoded paths"
|
|
10
10
|
do_not_use_when:
|
|
11
11
|
- "shader or material work, asset import mechanics, or gameplay tuning — this is purely about hierarchy shape"
|
|
12
|
-
- "intake from the gamedev-knowledge pipeline (source-cited, pipeline-validated, not yet exercised in-engine by the Summer team) — verify results in the engine as you would any technique"
|
|
13
12
|
facets:
|
|
14
13
|
lifecycle:
|
|
15
14
|
- build
|
|
@@ -31,11 +31,11 @@ func run(ctx):
|
|
|
31
31
|
- `print(...)` — captured into `output`.
|
|
32
32
|
- Values are real GDScript: `Vector3(0, 10, 0)`, `Color(1, 0, 0, 1)`. The quoted variant-string convention (`"Vector3(0, 10, 0)"`) belongs to `summer_set_prop`, not to script code.
|
|
33
33
|
- Budget: `max_seconds` default 20, clamp 5–120. The script blocks the editor between frames — keep it fast; move heavy batch work to `summer_run_editor_script`. On newer engines the budget is a HARD deadline: overrun raises the script error `"Summer script budget exceeded (Ns)"` (result `budget_enforced: true`). Split the work into smaller scripts — never resubmit the same oversized one.
|
|
34
|
-
- Transactions: newer engines wrap the run in ONE named undo action (`undo: "action"`, the default) and roll it back on a mid-script runtime error — the result then carries `rolled_back: true` and the scene is untouched. Pass `undo: "none"` for
|
|
34
|
+
- Transactions: newer engines wrap the run in ONE named undo action (`undo: "action"`, the default) and roll it back on a mid-script runtime error — the result then carries `rolled_back: true` and the scene is untouched. Pass `undo: "none"` for checkpoint-only behavior (partial mutations survive an error). Older engines ignore the param; treat any `errors` there as a possible half-applied mutation.
|
|
35
35
|
|
|
36
36
|
## The ctx stdlib (newer engines)
|
|
37
37
|
|
|
38
|
-
Creation helpers that **set the owner for you** (to the edited scene root) and return the created node — prefer them over the manual `new()` + `add_child` + `set_owner_recursive`
|
|
38
|
+
Creation helpers that **set the owner for you** (to the edited scene root) and return the created node — prefer them over the manual `new()` + `add_child` + `set_owner_recursive` steps. Frozen signatures:
|
|
39
39
|
|
|
40
40
|
```gdscript
|
|
41
41
|
add_node(type: String, name: String, parent: Node = null, props: Dictionary = {}) -> Node
|
|
@@ -237,7 +237,7 @@ set_main_scene(path: String) -> bool # application/run/main_sc
|
|
|
237
237
|
|
|
238
238
|
**Undo posture.** File-writing helpers (`attach_script`, `make_prefab`) and project-settings helpers (`add_autoload`, `add_input_action`, `set_main_scene`) are covered by the pre-run checkpoint, NOT by the packed-scene undo action — a `rolled_back: true` result has reverted the scene but not those files or settings. The result's `undo_action` note says so whenever any of them ran (`files_written: [paths]`, `project_settings_changed: [keys]`): read it, and surface `no_rewind_point: true` to the user before more work of this kind.
|
|
239
239
|
|
|
240
|
-
## Owner rules
|
|
240
|
+
## Owner rules
|
|
241
241
|
|
|
242
242
|
<EXTREMELY-IMPORTANT>
|
|
243
243
|
**Every node you create must be owned by the scene root, or it silently vanishes when the scene saves.** Descendants too — being under an owned node is NOT enough. `add_child` succeeds, the screenshot even shows it, and the saved `.tscn` is missing it.
|
|
@@ -11,11 +11,11 @@ paths: ["**/*.tscn", "**/*.gd", "assets/**", ".summer/**", "levels/**"]
|
|
|
11
11
|
|
|
12
12
|
# scene-to-level — From a reference image to a playable scene
|
|
13
13
|
|
|
14
|
-
This
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
This skill orchestrates. It does not generate art, slice sheets, or write game
|
|
15
|
+
code. It routes the user through the skills that do, and assembles their
|
|
16
|
+
outputs into a Summer Engine scene.
|
|
17
17
|
|
|
18
|
-
Use it when the user shows you a screenshot or concept image and says "build this." The output is a `.tscn` you can
|
|
18
|
+
Use it when the user shows you a screenshot or concept image and says "build this." The output is a `.tscn` you can play, with assets that match the reference's style.
|
|
19
19
|
|
|
20
20
|
## The pipeline (decision tree)
|
|
21
21
|
|
|
@@ -28,7 +28,7 @@ Use it when the user shows you a screenshot or concept image and says "build thi
|
|
|
28
28
|
│ └── route to 3D ASSETS path (out of scope for this skill —
|
|
29
29
|
│ use `asset-strategy` directly)
|
|
30
30
|
└─ UI-only screen (menu, HUD)
|
|
31
|
-
└── route to UI ASSETS path (
|
|
31
|
+
└── route to UI ASSETS path (create-asset-sheet UI kit only)
|
|
32
32
|
|
|
33
33
|
2. For each visible element, route to the right sub-pipeline:
|
|
34
34
|
|
|
@@ -38,13 +38,10 @@ Use it when the user shows you a screenshot or concept image and says "build thi
|
|
|
38
38
|
not yet built)
|
|
39
39
|
|
|
40
40
|
PROPS / DECOR / LIGHTING / NATURE / WATER / BUILDINGS / UI / VFX
|
|
41
|
-
──
|
|
42
|
-
│
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
└── If user wants fast / exploratory:
|
|
46
|
-
create-asset-sheet (Slice from a sheet at
|
|
47
|
-
/studio/create-tileset — one sheet, autoslice, cheaper)
|
|
41
|
+
── Default: create-asset-sheet (one sheet, auto-sliced into a pack;
|
|
42
|
+
│ fast and consistent in style)
|
|
43
|
+
└── For a few hero assets that need full detail: generate them one
|
|
44
|
+
at a time with pixel-art or character-portrait
|
|
48
45
|
|
|
49
46
|
CHARACTERS → character-portrait first for the static
|
|
50
47
|
frame, then sprite-sheet for animation
|
|
@@ -94,33 +91,33 @@ Before starting, you need either:
|
|
|
94
91
|
|
|
95
92
|
If neither is offered, stop and ask. Don't guess what a "japanese village scene" looks like — get the reference first.
|
|
96
93
|
|
|
97
|
-
##
|
|
94
|
+
## Reliability map
|
|
98
95
|
|
|
99
|
-
| Pipeline node | Reliability |
|
|
100
|
-
|
|
101
|
-
| Reading the reference (vision
|
|
102
|
-
|
|
|
103
|
-
| Slice from a sheet (
|
|
104
|
-
| Tileable terrain (auto-tile) |
|
|
105
|
-
| Sprite-sheet animation | Medium
|
|
106
|
-
| Scene assembly via `summer_*` tools | High |
|
|
96
|
+
| Pipeline node | Reliability | What can go wrong |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| Reading the reference (vision) | High | Model misidentifies the scene type |
|
|
99
|
+
| One asset at a time (hero assets) | High for props / icons / UI | Style drift across items if no style reference |
|
|
100
|
+
| Slice from a sheet (`create-asset-sheet`) | Medium for dense sheets | Touching sprites merge into one slice |
|
|
101
|
+
| Tileable terrain (auto-tile) | Low: not built | Use a single tile placeholder or stitch by hand |
|
|
102
|
+
| Sprite-sheet animation | Medium (see the `sprite-sheet` skill) | Frame consistency is the hard part |
|
|
103
|
+
| Scene assembly via `summer_*` tools | High | Engine must be running |
|
|
107
104
|
|
|
108
|
-
|
|
105
|
+
Generation uses credits; confirm each batch with the user before you start. Share this map when it matters. Do not promise "ready to play in 10 minutes" if the user needs terrain auto-tiling.
|
|
109
106
|
|
|
110
107
|
## A worked example
|
|
111
108
|
|
|
112
109
|
User shows you a screenshot of a Japanese village with multiple islands, water between them, buildings, characters, and a bottom palette UI:
|
|
113
110
|
|
|
114
111
|
1. **Vision pass** identifies the scene as 2D isometric with: water terrain (large area), grass terrain (per island), buildings (5+ distinct), characters (2), UI palette + toolbar.
|
|
115
|
-
2. **
|
|
116
|
-
3. **
|
|
117
|
-
4. **
|
|
118
|
-
5. **
|
|
119
|
-
6. **For each UI slice that
|
|
120
|
-
7. **Compose**:
|
|
121
|
-
8. **Validate
|
|
122
|
-
|
|
123
|
-
|
|
112
|
+
2. **Props pack** with `create-asset-sheet`: 12 props at minimum (torii, sakura, lantern, pagoda, bridge, well, sign, banner, bucket, hay, fence, crate).
|
|
113
|
+
3. **Buildings pack**: 5 distinct buildings (small house, barn, shop, pagoda, watchtower).
|
|
114
|
+
4. **Terrain**: today, a single grass tile, a single water tile and edge placeholders. Wang-tile auto-tiling is not built.
|
|
115
|
+
5. **UI pack** with `create-asset-sheet` and the theme "isometric voxel game UI: bottom palette, toolbar with Place/Erase/Pan/Save/Reset, asset category tabs, instruction panel."
|
|
116
|
+
6. **For each UI slice that is a panel or button**, use `use-widget-asset` to wire it as a NinePatchRect.
|
|
117
|
+
7. **Compose**: TileMapLayer for terrain; Sprite2D placement matching the reference; Control nodes for the UI.
|
|
118
|
+
8. **Validate and hand off**.
|
|
119
|
+
|
|
120
|
+
Expect about 30 minutes for the asset packs (in parallel) and another 15 for scene composition.
|
|
124
121
|
|
|
125
122
|
## What this skill explicitly defers
|
|
126
123
|
|
|
@@ -9,7 +9,7 @@ allowed-tools: Read Write Glob Grep Bash
|
|
|
9
9
|
|
|
10
10
|
# /skill-create: bootstrap a new library skill
|
|
11
11
|
|
|
12
|
-
Works inside a checkout of the
|
|
12
|
+
Works inside a checkout of the Summer repository, `summerengine/summer` (the one with `library/` and `registry/`). Outside it, capture the lesson with `gameskill` in the game project instead.
|
|
13
13
|
|
|
14
14
|
## Steps
|
|
15
15
|
|
|
@@ -9,12 +9,12 @@ allowed-tools: Read Write Edit Task
|
|
|
9
9
|
|
|
10
10
|
# /skill-improve — Iterate on a Skill With Eval Harness
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Adapted from the `skill-creator` skill in `anthropics/skills`. Use when a skill's behavioral spec fails assertions or the skill produces low-quality output.
|
|
13
13
|
|
|
14
14
|
## When to use this vs. `/skill-test`
|
|
15
15
|
|
|
16
|
-
- `/skill-test spec` reasons over text. Cheap
|
|
17
|
-
- `/skill-improve`
|
|
16
|
+
- `/skill-test spec` reasons over text. Cheap and fast, but lossy.
|
|
17
|
+
- `/skill-improve` runs the skill in parallel subagents, with and without the proposed changes. Slower and more expensive, but accurate.
|
|
18
18
|
|
|
19
19
|
Run this when `/skill-test spec` flags issues you can't fix by reading the skill alone.
|
|
20
20
|
|
|
@@ -23,8 +23,8 @@ Run this when `/skill-test spec` flags issues you can't fix by reading the skill
|
|
|
23
23
|
### 1. Pick the skill + the spec
|
|
24
24
|
|
|
25
25
|
Ask the user:
|
|
26
|
-
- **Skill
|
|
27
|
-
- **Test cases to focus on.** Default: all `## Case` blocks in `
|
|
26
|
+
- **Skill slug.** Resolves to `library/skills/<slug>/SKILL.md`.
|
|
27
|
+
- **Test cases to focus on.** Default: all `## Case` blocks in `evals/skills/specs/<slug>.md`.
|
|
28
28
|
|
|
29
29
|
### 2. Establish a baseline
|
|
30
30
|
|
|
@@ -69,12 +69,12 @@ Case 3 (Edge): baseline 3/3 proposed 3/3 = no change
|
|
|
69
69
|
|
|
70
70
|
If proposed wins on net, prompt the user:
|
|
71
71
|
|
|
72
|
-
> Proposed version wins 2 cases, ties 1, loses 0. May I overwrite `skills/<
|
|
72
|
+
> Proposed version wins 2 cases, ties 1, loses 0. May I overwrite `library/skills/<slug>/SKILL.md` with the proposed version?
|
|
73
73
|
|
|
74
74
|
### 6. Ship
|
|
75
75
|
|
|
76
76
|
On user yes:
|
|
77
|
-
- Overwrite `SKILL.md`.
|
|
77
|
+
- Overwrite `SKILL.md` and bump `version` in `resource.yaml`.
|
|
78
78
|
- Commit with message `feat(skill): improve <name> — <one-line summary of change>`.
|
|
79
79
|
|
|
80
80
|
## Collaborative protocol
|
|
@@ -83,6 +83,6 @@ This skill writes files at multiple steps. Always ask before each write.
|
|
|
83
83
|
|
|
84
84
|
## See also
|
|
85
85
|
|
|
86
|
-
- `
|
|
86
|
+
- `skill-test`
|
|
87
87
|
- `tests/runner.md`
|
|
88
|
-
- `
|
|
88
|
+
- `evals/skills/specs/`
|
|
@@ -13,28 +13,28 @@ Three modes. Pick by the user's intent.
|
|
|
13
13
|
|
|
14
14
|
## Mode: `static` — Structural lint (default for "test this skill")
|
|
15
15
|
|
|
16
|
-
For a single skill at `skills/<
|
|
16
|
+
For a single skill at `library/skills/<slug>/`, run these checks:
|
|
17
17
|
|
|
18
18
|
1. **Frontmatter completeness.** `name`, `description`, `license`, `compatibility`, `category` present. `name` matches the directory name.
|
|
19
|
-
2. **SKILL.md length.** ≤ 500 lines
|
|
19
|
+
2. **SKILL.md length.** ≤ 500 lines (progressive disclosure: push detail into references).
|
|
20
20
|
3. **MCP-preferred + file-edit-fallback.** If the skill mutates scenes or resources, body must show both:
|
|
21
21
|
- At least one `summer_*` MCP tool example.
|
|
22
22
|
- At least one file-edit fallback block (e.g., raw `.tscn` snippet) OR an explicit "no fallback for this — Summer MCP required" note.
|
|
23
23
|
4. **Collaborative protocol.** If the skill triggers user-visible writes, body must contain at least one of: `May I`, `I'm about to`, `Continue?`, `OK?`, `Proceed?`. Skills that only inspect/read are exempt.
|
|
24
24
|
5. **Template-id resolved.** If the skill's frontmatter declares `template-id: <id>`, that id must exist in the template registry: `library/templates/<id>/resource.yaml` (see `library/templates/README.md`).
|
|
25
|
-
6. **
|
|
26
|
-
7. **Relative links resolve.** Every `](../references/...)`, `](../../references/...)`, `](./references/...)`, and `](./examples/...)` link must point at an existing file (FAIL if broken).
|
|
25
|
+
6. **Behavioral spec.** If the skill has a spec (`evals/skills/specs/<slug>.md` or `tests/spec.md` in the skill folder), it has at least one `## Case` heading. A missing spec is a WARN, not a FAIL.
|
|
26
|
+
7. **Relative links resolve.** Every `](../references/...)`, `](../../references/...)`, `](./references/...)`, and `](./examples/...)` link must point at an existing file (FAIL if broken). Links to other skills should use the bare slug (`design-mechanic`), not a path.
|
|
27
27
|
|
|
28
28
|
Output:
|
|
29
29
|
|
|
30
30
|
```
|
|
31
|
-
skill: <
|
|
31
|
+
skill: <slug>
|
|
32
32
|
PASS (1) frontmatter complete
|
|
33
33
|
PASS (2) length 217 / 500 lines
|
|
34
34
|
FAIL (3) no MCP-preferred example found in body
|
|
35
35
|
PASS (4) collaborative protocol present
|
|
36
36
|
PASS (5) template-id resolved
|
|
37
|
-
PASS (6)
|
|
37
|
+
PASS (6) behavioral spec has cases
|
|
38
38
|
PASS (7) all relative links resolve
|
|
39
39
|
|
|
40
40
|
6 PASS / 1 FAIL — fix item 3 before commit.
|
|
@@ -42,7 +42,7 @@ skill: <category>/<name>
|
|
|
42
42
|
|
|
43
43
|
## Mode: `spec` — Behavioral spec runner
|
|
44
44
|
|
|
45
|
-
For a single skill, read both `skills/<
|
|
45
|
+
For a single skill, read both `library/skills/<slug>/SKILL.md` and `evals/skills/specs/<slug>.md`. For each `## Case` in the spec:
|
|
46
46
|
|
|
47
47
|
1. Lay out the **Fixture** (starting state, available tools).
|
|
48
48
|
2. Read the **Input** (user prompt).
|
|
@@ -51,11 +51,11 @@ For a single skill, read both `skills/<category>/<name>/SKILL.md` and `tests/spe
|
|
|
51
51
|
|
|
52
52
|
Output: an annotated copy of the spec with assertions filled in, plus a pass-rate.
|
|
53
53
|
|
|
54
|
-
No code execution
|
|
54
|
+
No code execution; this mode reasons over text only.
|
|
55
55
|
|
|
56
56
|
## Mode: `audit` — Whole library report
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
List `library/skills/*/SKILL.md`. For each skill:
|
|
59
59
|
|
|
60
60
|
1. Run `static` mode on the skill.
|
|
61
61
|
2. Note any `last-tested:` field in the SKILL.md frontmatter (optional).
|
|
@@ -83,4 +83,4 @@ This skill is **read-only**. It never writes. No "May I" needed.
|
|
|
83
83
|
- `../../references/collaborative-protocol/collaborative-protocol.md`
|
|
84
84
|
- the template registry: `library/templates/<id>/resource.yaml` (see `library/templates/README.md`)
|
|
85
85
|
- `tests/runner.md`
|
|
86
|
-
- `
|
|
86
|
+
- `evals/skills/specs/` — per-skill behavioral specs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: skintokens-auto-rigging
|
|
3
|
-
description: "Offline auto-rigging with skin-tokens.cpp (GGML SkinTokens/TokenRig port) — skeleton and skin weights from a static GLB mesh on CPU/Vulkan, into
|
|
3
|
+
description: "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."
|
|
4
4
|
license: MIT
|
|
5
5
|
category: art-pipeline
|
|
6
6
|
tags:
|
|
@@ -13,13 +13,13 @@ tags:
|
|
|
13
13
|
confidence: extracted
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
# Auto-Rigging Static Meshes with skin-tokens.cpp (SkinTokens/TokenRig) in
|
|
16
|
+
# Auto-Rigging Static Meshes with skin-tokens.cpp (SkinTokens/TokenRig) in Summer Engine
|
|
17
17
|
|
|
18
|
-
##
|
|
18
|
+
## About the tool
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
skin-tokens.cpp is published by the **localai-org** GitHub organization. It is an Apache-2.0 C++23/GGML port of VAST-AI's MIT-licensed **SkinTokens/TokenRig** research model (arXiv:2602.04805). It ships a flat C11 API, an ASan/UBSan libFuzzer build, CPU/Vulkan numerical-parity tests against the upstream reference, and a Go/WebGL demo. The weights are a non-retrained GGUF conversion (~1.25 GB F16) on Hugging Face.
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Limitations to plan around:
|
|
23
23
|
|
|
24
24
|
- The fully automatic `rig` command (unconstrained skeleton generation) is **explicitly experimental** — the policy can produce unsuitable bone topologies.
|
|
25
25
|
- The author's own demo shows **open issues combining the output with kimodo.cpp skeletal animations**.
|
|
@@ -30,7 +30,7 @@ Honest limitations to plan around:
|
|
|
30
30
|
|
|
31
31
|
## Outcome
|
|
32
32
|
|
|
33
|
-
Static `.glb` meshes (e.g. AI-generated or scanned characters/creatures) become rigged, skinned `.glb` assets that
|
|
33
|
+
Static `.glb` meshes (e.g. AI-generated or scanned characters/creatures) become rigged, skinned `.glb` assets that Summer Engine imports natively as `Skeleton3D` + skinned `MeshInstance3D`, ready for `AnimationPlayer`/retargeted animation — without manual weight painting.
|
|
34
34
|
|
|
35
35
|
## When to Use
|
|
36
36
|
|
|
@@ -43,13 +43,13 @@ Static `.glb` meshes (e.g. AI-generated or scanned characters/creatures) become
|
|
|
43
43
|
- Hero characters needing production-quality, art-directed deformation — plan for manual weight cleanup after auto-rigging.
|
|
44
44
|
- Non-triangle meshes (tool accepts arbitrary triangle meshes only; triangulate first).
|
|
45
45
|
- Shapes far from the training distribution (expect weaker results; run `--geometric` diagnostic to compare).
|
|
46
|
-
- Runtime/in-engine rigging — this is an offline CLI/library step, not
|
|
46
|
+
- Runtime/in-engine rigging — this is an offline CLI/library step, not an editor plugin.
|
|
47
47
|
|
|
48
48
|
## Core Principle
|
|
49
49
|
|
|
50
50
|
TokenRig models the whole rig — skeleton hierarchy followed by discrete skin-weight tokens (SkinTokens, an FSQ-CVAE vocabulary) — as one autoregressive sequence generated from a Michelangelo point-cloud encoding of the mesh (Qwen3-0.6B backbone, GRPO-refined). skin-tokens.cpp re-runs this stack through GGML on CPU or Vulkan and exports a standard skinned glTF/GLB with a one-frame rest pose, so it opens as a conventional rigged asset in any engine.
|
|
51
51
|
|
|
52
|
-
## Pipeline shape (
|
|
52
|
+
## Pipeline shape (Summer Engine)
|
|
53
53
|
|
|
54
54
|
```
|
|
55
55
|
static character.glb
|
|
@@ -61,7 +61,7 @@ static character.glb
|
|
|
61
61
|
character-rigged.glb (skeleton + skin weights + rest pose, skinned glTF)
|
|
62
62
|
│
|
|
63
63
|
▼
|
|
64
|
-
|
|
64
|
+
Summer Engine import → character-rigged.glb (scene)
|
|
65
65
|
└── Skeleton3D
|
|
66
66
|
└── MeshInstance3D (skinned, Skin resource)
|
|
67
67
|
└── AnimationPlayer / retargeted animations
|
|
@@ -122,18 +122,18 @@ Fit modes:
|
|
|
122
122
|
| `none` | Both files already share coordinates | No alignment transform |
|
|
123
123
|
| `articulated` | Recognized humanoid arm chains; **experimental** | Picks whichever of rest pose / first animation frame actually runs inside the arms (bind pose == frame zero → playback starts without warping); falls back to analytic two-bone IK toward conservative mesh targets, preserving arm segment lengths |
|
|
124
124
|
|
|
125
|
-
### 3. Import into
|
|
125
|
+
### 3. Import into Summer Engine
|
|
126
126
|
|
|
127
|
-
Drop the rigged `.glb` into the project;
|
|
127
|
+
Drop the rigged `.glb` into the project; the glTF importer creates the scene automatically:
|
|
128
128
|
|
|
129
129
|
- `Skeleton3D` with bones and a skinned `MeshInstance3D` (Skin resource), rest pose included.
|
|
130
130
|
- Check in the Import dock: mesh, skeleton, and (if supplied) animations present.
|
|
131
|
-
- If the source GLB contains animations and the hierarchy matches,
|
|
131
|
+
- If the source GLB contains animations and the hierarchy matches, the importer puts them into an `AnimationPlayer`; otherwise use retargeting (`SkeletonProfileHumanoid`, see the `retarget` skill) to map animations onto the generated skeleton.
|
|
132
132
|
- glTF round-trip note from upstream: on Blender export of results, a `glTF_not_exported` node may need removing (only relevant if the pipeline goes through Blender).
|
|
133
133
|
|
|
134
134
|
### 4. Optional editor tooling (typed GDScript)
|
|
135
135
|
|
|
136
|
-
An EditorScript
|
|
136
|
+
An EditorScript wrapper to rig assets from inside the editor:
|
|
137
137
|
|
|
138
138
|
```gdscript
|
|
139
139
|
@tool
|
|
@@ -154,7 +154,7 @@ func _run() -> void:
|
|
|
154
154
|
var output: Array = []
|
|
155
155
|
var err := OS.execute(CLI, args, output, true, false)
|
|
156
156
|
if err != 0:
|
|
157
|
-
push_error("skin-tokens-cli failed (%d): %s" % [err, "\n".join(output))
|
|
157
|
+
push_error("skin-tokens-cli failed (%d): %s" % [err, "\n".join(output)])
|
|
158
158
|
return
|
|
159
159
|
print("Rigged: ", dst)
|
|
160
160
|
# Reimport so the new GLB appears in the FileSystem dock.
|
|
@@ -187,14 +187,14 @@ For embedding in a tool/asset server, prefer the flat C11 API (`skintokens.h`):
|
|
|
187
187
|
|
|
188
188
|
## Verification
|
|
189
189
|
|
|
190
|
-
Not
|
|
190
|
+
Not yet verified in Summer Engine. To validate:
|
|
191
191
|
|
|
192
192
|
1. `skintokens-cli inspect models/SkinTokens-GGUF/F16` succeeds after build + weights download.
|
|
193
|
-
2. Rig a known test mesh (`rig … --postprocess`) and open the output in the
|
|
193
|
+
2. Rig a known test mesh (`rig … --postprocess`) and open the output in the editor: `Skeleton3D` with sensible bone hierarchy + skinned `MeshInstance3D`, no import errors.
|
|
194
194
|
3. Pose one bone in the editor; confirm the surface deforms smoothly without bleeding across disconnected parts.
|
|
195
|
-
4. `skin` path: feed a mesh + animated skeleton GLB with `--fit global`; play the animation in
|
|
195
|
+
4. `skin` path: feed a mesh + animated skeleton GLB with `--fit global`; play the animation in the editor and confirm frame zero does not warp the mesh.
|
|
196
196
|
5. Re-run ctest / parity binaries if the CLI is rebuilt or GGML is updated.
|
|
197
197
|
|
|
198
198
|
## Confidence
|
|
199
199
|
|
|
200
|
-
`extracted` — All tool behavior, commands, flags, sizes, numerics, and caveats come from the retrieved GitHub README, Hugging Face model card, upstream VAST-AI repo, and the author's X announcement (including the self-reported kimodo.cpp animation issue). The
|
|
200
|
+
`extracted` — All tool behavior, commands, flags, sizes, numerics, and caveats come from the retrieved GitHub README, Hugging Face model card, upstream VAST-AI repo, and the author's X announcement (including the self-reported kimodo.cpp animation issue). The import mapping and GDScript wrapper are adaptations, not from the sources.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/skintokens-auto-rigging
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 0.1.1
|
|
4
|
-
summary: "Offline auto-rigging with skin-tokens.cpp (GGML SkinTokens/TokenRig port) — skeleton and skin weights from a static GLB mesh on CPU/Vulkan, into
|
|
4
|
+
summary: "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."
|
|
5
5
|
use_when:
|
|
6
6
|
- "auto-rig this static GLB mesh so I can animate it"
|
|
7
7
|
- "generate skin weights for a mesh that already has a skeleton"
|
|
@@ -10,7 +10,7 @@ use_when:
|
|
|
10
10
|
do_not_use_when:
|
|
11
11
|
- "hero characters needing art-directed deformation, non-triangle meshes, shapes far from the humanoid training data, or runtime in-engine rigging"
|
|
12
12
|
- "skin-tokens.cpp is a user-built, user-run offline CLI (minutes per mesh); the agent does not install or run it on the user's behalf"
|
|
13
|
-
- "
|
|
13
|
+
- "trusting the output without checking it in the engine (this entry is source-cited but not yet verified in Summer Engine)"
|
|
14
14
|
facets:
|
|
15
15
|
lifecycle:
|
|
16
16
|
- build
|
|
@@ -35,4 +35,4 @@ recommended: false
|
|
|
35
35
|
lint_exceptions:
|
|
36
36
|
- url-allowlist
|
|
37
37
|
- credential-pattern
|
|
38
|
-
lint_exception_reason: "Source citation
|
|
38
|
+
lint_exception_reason: "Source citation: the Setup section quotes the upstream GitHub clone URL of the skin-tokens.cpp tool (localai-org) as a user-run, user-consented build step — a read-only provenance link, not agent-autonomous installation. credential-pattern is a false positive on the CMake option SKINTOKENS_ENABLE_VULKAN, where TOKENS is part of the project name, not a secret or token assignment."
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: 2d-assets
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read Grep Glob Write Edit summer_generate_image summer_search_assets summer_import_from_url summer_set_resource_property summer_add_node summer_set_prop summer_inspect_node
|
|
8
|
+
allowed-tools: Read Grep Glob Write Edit summer_generate_image summer_search_assets summer_import_from_url summer_set_resource_property summer_write_file summer_add_node summer_set_prop summer_save_scene summer_inspect_node
|
|
9
9
|
paths: ["assets/**", "art/sky/**", "environments/**"]
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -16,7 +16,7 @@ e.g. 2048×1024 or 4096×2048) suitable for Summer Engine's
|
|
|
16
16
|
`PanoramaSkyMaterial`. It wires the image into a `Sky` resource on a
|
|
17
17
|
`WorldEnvironment` node so the sky is visible from every camera angle.
|
|
18
18
|
|
|
19
|
-
The
|
|
19
|
+
The most common failure is **non-equirectangular output**. Image models default to flat scenes. Without an explicit "equirectangular projection", the result looks fine as a thumbnail but distorts when wrapped onto a sphere: the horizon bows, the zenith pinches, and the sun smears. The prompt suffix and import settings below give a usable sky in one or two tries.
|
|
20
20
|
|
|
21
21
|
## When to use
|
|
22
22
|
|
|
@@ -41,7 +41,7 @@ The single biggest failure mode is **non-equirectangular output**. Diffusion mod
|
|
|
41
41
|
summer_search_assets(query="<vibe> sky panorama", assetType="2d_image", source="all")
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
Polyhaven (`polyhaven.com/hdris`) hosts hundreds of free CC0 HDRIs
|
|
44
|
+
Polyhaven (`polyhaven.com/hdris`) hosts hundreds of free CC0 HDRIs. They look more realistic than generated skies and carry real HDR lighting data. Prefer Polyhaven for realistic exteriors; generate for stylized, fantasy or sci-fi skies.
|
|
45
45
|
|
|
46
46
|
### 2. Build the prompt — sky description + equirectangular suffix
|
|
47
47
|
|
|
@@ -60,7 +60,7 @@ Load-bearing phrases:
|
|
|
60
60
|
|
|
61
61
|
### 3. Generate, then fix the aspect yourself
|
|
62
62
|
|
|
63
|
-
Equirectangular MUST be 2:1 (width = 2× height). **`summer_generate_image` cannot give you that.** The tool takes only `prompt`, `model`, `style`, `referenceImageUrl`, and `options
|
|
63
|
+
Equirectangular MUST be 2:1 (width = 2× height). **`summer_generate_image` cannot give you that.** The tool takes only `prompt`, `model`, `style`, `referenceImageUrl`, `removeBackground` and `options`; there is no aspect or size argument, so every MCP image comes back at the server's 1:1 default. `aspectRatio` and `image_size` inside `options` are not recognized and are dropped without an error; the underlying provider does support 2:1-class aspect ratios, but nothing on this surface lets you request one.
|
|
64
64
|
|
|
65
65
|
```
|
|
66
66
|
summer_generate_image(
|
|
@@ -101,9 +101,9 @@ In the import dock:
|
|
|
101
101
|
- `Mipmaps: Enabled`.
|
|
102
102
|
- `Compress: VRAM Compressed` for ship.
|
|
103
103
|
|
|
104
|
-
### 6. Wire into WorldEnvironment
|
|
104
|
+
### 6. Wire into WorldEnvironment
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
`summer_set_resource_property` reaches exactly **one** level into a resource — it takes `scenePath`, `nodePath`, `resourceProperty`, `subProperty`, `value`, and there is no `"a:b:c"` colon-path form for walking Environment → Sky → SkyMaterial. Write the `Environment` (with its `Sky` and `PanoramaSkyMaterial` as sub-resources) as a `.tres`, then attach it in one property set:
|
|
107
107
|
|
|
108
108
|
```
|
|
109
109
|
summer_write_file(
|
|
@@ -158,7 +158,6 @@ Then `summer_play` and look around. Sun in the right place? Seam invisible? Top/
|
|
|
158
158
|
- **Tight features at zenith/nadir.** Anything in the top or bottom 10% of the image gets pinched. Bias toward soft, diffuse features there.
|
|
159
159
|
- **Expecting HDR / IBL quality.** AI panoramas are 8-bit. If the user needs realistic environment lighting from the sky, point them at Polyhaven HDRIs (CC0). AI is for visual sky, not for lighting.
|
|
160
160
|
- **Forgetting `Repeat: Disabled` on import.** Panoramas wrap once via the material; if `Repeat` is on, you can get duplicate-tile artifacts at the seam.
|
|
161
|
-
- **Visible vertical seam on the wrap.** If left/right edges don't match, regenerate with seed bump or fix the seam in Photoshop/GIMP via the offset trick (offset by 50% horizontally → heal the new visible seam → offset back).
|
|
162
161
|
|
|
163
162
|
## Edge cases
|
|
164
163
|
|
|
@@ -180,9 +179,9 @@ summer_generate_image(
|
|
|
180
179
|
)
|
|
181
180
|
```
|
|
182
181
|
|
|
183
|
-
The dashboard is
|
|
182
|
+
The dashboard is the better surface for this skill: it exposes aspect ratio and a real negative prompt, which MCP does not. Tell the user to set 2:1 and a negative of `vertical seam, foreground, distorted, warped, characters, buildings`, then `summer_import_from_url` to `res://art/sky/<name>.png`, set `Repeat: Disabled`, and wire the WorldEnvironment.
|
|
184
183
|
|
|
185
|
-
If MCP is offline entirely: Polyhaven (`polyhaven.com/hdris`) has hundreds of free CC0 HDRIs ready to drop into `PanoramaSkyMaterial
|
|
184
|
+
If MCP is offline entirely: Polyhaven (`polyhaven.com/hdris`) has hundreds of free CC0 HDRIs ready to drop into `PanoramaSkyMaterial`, and often the better choice for realistic exteriors.
|
|
186
185
|
|
|
187
186
|
## Handoff
|
|
188
187
|
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: audio
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read Grep Glob Write Edit summer_generate_audio summer_search_assets summer_import_from_url summer_add_node summer_set_prop summer_inspect_node summer_get_scene_tree
|
|
8
|
+
allowed-tools: Read Grep Glob Write Edit summer_generate_audio summer_search_assets summer_import_from_url summer_add_node summer_set_prop summer_instantiate_scene summer_inspect_node summer_get_scene_tree
|
|
9
9
|
paths: ["audio/sfx/**", "scripts/**", "**/*.tscn"]
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -13,22 +13,22 @@ paths: ["audio/sfx/**", "scripts/**", "**/*.tscn"]
|
|
|
13
13
|
|
|
14
14
|
## Overview
|
|
15
15
|
|
|
16
|
-
This skill produces one named SFX clip
|
|
16
|
+
This skill produces one named SFX clip that follows the audio bible's vocabulary, then wires it into the scene as an AudioStreamPlayer that plays once and frees itself (or stops cleanly if it is a short loop). The prompt shape decides the result: "metal sword swing whoosh, dry, sharp, 250ms" returns the right clip on the first try; "epic battle sound" returns twenty seconds of musical noise.
|
|
17
17
|
|
|
18
|
-
ElevenLabs SFX (the `sound_effects` capability of `summer_generate_audio`) is
|
|
18
|
+
ElevenLabs SFX (the `sound_effects` capability of `summer_generate_audio`) is literal. It treats the prompt as a description of a real sound. Concrete material, action and intensity beat adjectives.
|
|
19
19
|
|
|
20
20
|
## When to use
|
|
21
21
|
|
|
22
22
|
- One-shot SFX: footstep, swing, click, hit, impact, pickup, jump, land, door, breath.
|
|
23
|
-
- Short loops < 2s: hum, drone snippet, rain texture (for
|
|
23
|
+
- Short loops < 2s: hum, drone snippet, rain texture (for longer looping ambience use `ambient-bed`).
|
|
24
24
|
- Replacing a placeholder beep with something on-bible.
|
|
25
25
|
|
|
26
26
|
## When NOT to use
|
|
27
27
|
|
|
28
|
-
- Music or musical stings → `
|
|
29
|
-
- Long location ambience (>5s) → `
|
|
30
|
-
- Voice / dialogue → `
|
|
31
|
-
- Defining the *vocabulary* of SFX
|
|
28
|
+
- Music or musical stings → `music-track`.
|
|
29
|
+
- Long location ambience (>5s) → `ambient-bed`.
|
|
30
|
+
- Voice / dialogue → `voice-line`.
|
|
31
|
+
- Defining the *vocabulary* of SFX → `audio-direction`. This skill executes against an existing bible.
|
|
32
32
|
|
|
33
33
|
## Steps
|
|
34
34
|
|
|
@@ -46,7 +46,7 @@ The bible defines an SFX *class* (UI, Pickup positive, Damage, Footstep, Attack,
|
|
|
46
46
|
|
|
47
47
|
### 2. Search for an existing clip first
|
|
48
48
|
|
|
49
|
-
Generation
|
|
49
|
+
Generation uses credits. Reuse an existing clip when one fits.
|
|
50
50
|
|
|
51
51
|
```
|
|
52
52
|
summer_search_assets(query="<class> <subject>", assetType="audio", source="all")
|
|
@@ -64,7 +64,7 @@ ElevenLabs SFX responds to literal sound descriptions. Pattern:
|
|
|
64
64
|
<subject> <material> <action>, <intensity>, <character>, <duration cue>
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
Working examples
|
|
67
|
+
Working examples:
|
|
68
68
|
|
|
69
69
|
| Goal | Prompt that works | Why |
|
|
70
70
|
|---|---|---|
|
|
@@ -91,7 +91,7 @@ Prompts that DON'T work (and why):
|
|
|
91
91
|
|
|
92
92
|
Show the prompt and the call before running:
|
|
93
93
|
|
|
94
|
-
> Prompt: `metal sword swing whoosh, dry, sharp, 250ms`. Duration 0.5s (model floor). Model: ElevenLabs SFX.
|
|
94
|
+
> Prompt: `metal sword swing whoosh, dry, sharp, 250ms`. Duration 0.5s (model floor). Model: ElevenLabs SFX. Generate?
|
|
95
95
|
|
|
96
96
|
The `sound_effects` capability reads the description from **`text`**, not `prompt`. Passing `prompt` here is a 400 `text_required` — `prompt` is only for the `music` capability.
|
|
97
97
|
|
|
@@ -155,7 +155,7 @@ func _ready() -> void:
|
|
|
155
155
|
play()
|
|
156
156
|
```
|
|
157
157
|
|
|
158
|
-
Save it as a `.tscn`, then `summer_instantiate_scene(scenePath, parent, scene, name)` to place it.
|
|
158
|
+
Save it as a `.tscn`, then `summer_instantiate_scene(scenePath, parent, scene, name)` to place it. That only places the node at author time. To spawn one per event at the emitter's position at runtime, use GDScript (`preload(...).instantiate()` + `add_child`). The node frees itself when the stream finishes.
|
|
159
159
|
|
|
160
160
|
### 8. Volume calibration
|
|
161
161
|
|
|
@@ -170,7 +170,7 @@ If it comes back too loud (rare): negative `volume_db`, or trim attack in an edi
|
|
|
170
170
|
### 9. Confirm in scene
|
|
171
171
|
|
|
172
172
|
```
|
|
173
|
-
summer_inspect_node(path="
|
|
173
|
+
summer_inspect_node(path="Player/SwingSFX")
|
|
174
174
|
```
|
|
175
175
|
|
|
176
176
|
Verify `stream`, `bus`, `volume_db`. Trigger it via `summer_play` if the user wants to hear it now.
|
|
@@ -199,7 +199,7 @@ Stinger event: short triumphant brass stinger, 1.5s, hall reverb
|
|
|
199
199
|
|
|
200
200
|
- **Adjective-only prompts.** `epic`, `cool`, `realistic`, `professional` — meaningless to the model.
|
|
201
201
|
- **Multiple events in one prompt.** Split into two generations.
|
|
202
|
-
- **Looping a non-loop-clean clip.**
|
|
202
|
+
- **Looping a non-loop-clean clip.** It clicks. Use `ambient-bed` for real loops.
|
|
203
203
|
- **Skipping the bus.** Default bus is `Master`. SFX must route to the `SFX` bus or the mix breaks.
|
|
204
204
|
- **Generating before searching.** Reuse before regenerate.
|
|
205
205
|
- **Generating before reading the bible.** The clip will fight the rest of the audio.
|
|
@@ -230,13 +230,13 @@ After the SFX is wired:
|
|
|
230
230
|
> SFX `sword_swing_01.wav` wired to `Player/SwingSFX` on the `SFX` bus. Next:
|
|
231
231
|
> - Trigger it from your attack animation's `Call Method Track` → `play()`.
|
|
232
232
|
> - Generate the parry / clash counterpart with `/sound-effect` again.
|
|
233
|
-
> - For
|
|
233
|
+
> - For footsteps across surfaces, generate one clip per material and switch on the floor's `physics_material` (see Edge cases).
|
|
234
234
|
|
|
235
235
|
## See also
|
|
236
236
|
|
|
237
|
-
- `audio
|
|
238
|
-
- `
|
|
239
|
-
- `
|
|
240
|
-
- `
|
|
237
|
+
- `audio-direction` — defines the vocabulary this skill obeys
|
|
238
|
+
- `ambient-bed` — long looping textures
|
|
239
|
+
- `music-track` — music
|
|
240
|
+
- `voice-line` — TTS
|
|
241
241
|
- `../../references/mcp-tools-reference/mcp-tools-reference.md`
|
|
242
242
|
- `../../references/godot-version/godot-version.md` — Summer compatibility for audio nodes
|