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.
Files changed (293) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +4 -2
  3. package/.codex-plugin/plugin.json +5 -3
  4. package/.cursor-plugin/plugin.json +4 -2
  5. package/.factory-plugin/plugin.json +4 -2
  6. package/.opencode/INSTALL.md +8 -8
  7. package/.opencode/plugins/summer.js +2 -2
  8. package/AGENTS.md +7 -7
  9. package/CHANGELOG.md +50 -0
  10. package/GEMINI.md +1 -1
  11. package/NOTICE +1 -1
  12. package/README.md +32 -35
  13. package/assets/api-docs.json.gz +0 -0
  14. package/assets/autopilot/run.sh +2 -2
  15. package/assets/navigation/web-routes.json +1 -1
  16. package/commands/gameskill.md +2 -2
  17. package/commands/summer.md +25 -25
  18. package/dist/cli/commands/install.d.ts +10 -0
  19. package/dist/cli/commands/install.js +55 -10
  20. package/dist/cli/commands/open.d.ts +1 -1
  21. package/dist/cli/commands/run.d.ts +1 -1
  22. package/dist/cli/commands/run.js +1 -1
  23. package/dist/cli/commands/skills.js +2 -2
  24. package/dist/cli/commands/tool.d.ts +7 -0
  25. package/dist/cli/commands/tool.js +36 -1
  26. package/dist/core/api-client.d.ts +5 -6
  27. package/dist/core/api-client.js +12 -15
  28. package/dist/core/auth.js +2 -2
  29. package/dist/core/capabilities/asset-import.d.ts +0 -1
  30. package/dist/core/capabilities/camera-view.d.ts +1 -1
  31. package/dist/core/capabilities/camera-view.js +2 -2
  32. package/dist/core/capabilities/capture-gameplay.d.ts +69 -0
  33. package/dist/core/capabilities/capture-gameplay.js +283 -0
  34. package/dist/core/capabilities/connect-signal.d.ts +1 -2
  35. package/dist/core/capabilities/connect-signal.js +1 -2
  36. package/dist/core/capabilities/console-read.d.ts +2 -2
  37. package/dist/core/capabilities/console-read.js +2 -2
  38. package/dist/core/capabilities/creator.js +1 -1
  39. package/dist/core/capabilities/doctor.d.ts +9 -1
  40. package/dist/core/capabilities/doctor.js +47 -4
  41. package/dist/core/capabilities/engine-receipt.d.ts +5 -7
  42. package/dist/core/capabilities/engine-receipt.js +7 -9
  43. package/dist/core/capabilities/engine-run.d.ts +4 -0
  44. package/dist/core/capabilities/engine-run.js +33 -5
  45. package/dist/core/capabilities/export-engine-version.d.ts +15 -0
  46. package/dist/core/capabilities/export-engine-version.js +24 -0
  47. package/dist/core/capabilities/export-game.d.ts +9 -1
  48. package/dist/core/capabilities/export-game.js +115 -39
  49. package/dist/core/capabilities/export-presets.d.ts +1 -1
  50. package/dist/core/capabilities/export-presets.js +1 -1
  51. package/dist/core/capabilities/fabricate-mesh.d.ts +2 -3
  52. package/dist/core/capabilities/fabricate-mesh.js +2 -3
  53. package/dist/core/capabilities/frame-quality.d.ts +4 -4
  54. package/dist/core/capabilities/frame-quality.js +4 -4
  55. package/dist/core/capabilities/grep.d.ts +1 -1
  56. package/dist/core/capabilities/grep.js +1 -1
  57. package/dist/core/capabilities/image-generation.d.ts +9 -0
  58. package/dist/core/capabilities/image-generation.js +19 -1
  59. package/dist/core/capabilities/navigation/open.d.ts +1 -1
  60. package/dist/core/capabilities/navigation/open.js +1 -1
  61. package/dist/core/capabilities/navigation/render-product-map.js +1 -1
  62. package/dist/core/capabilities/navigation/targets.js +2 -2
  63. package/dist/core/capabilities/placement-batch.d.ts +1 -1
  64. package/dist/core/capabilities/placement-batch.js +2 -2
  65. package/dist/core/capabilities/play-determinism.d.ts +1 -1
  66. package/dist/core/capabilities/play-determinism.js +1 -1
  67. package/dist/core/capabilities/publish-build.d.ts +15 -2
  68. package/dist/core/capabilities/publish-build.js +78 -28
  69. package/dist/core/capabilities/publish-download.d.ts +1 -2
  70. package/dist/core/capabilities/publish-download.js +2 -3
  71. package/dist/core/capabilities/replace-node.d.ts +1 -3
  72. package/dist/core/capabilities/replace-node.js +1 -3
  73. package/dist/core/capabilities/runtime-control.d.ts +5 -7
  74. package/dist/core/capabilities/runtime-control.js +7 -9
  75. package/dist/core/capabilities/scene-batch.d.ts +1 -1
  76. package/dist/core/capabilities/scene-batch.js +1 -1
  77. package/dist/core/capabilities/scene-kind.js +1 -1
  78. package/dist/core/capabilities/scene-readback.d.ts +3 -4
  79. package/dist/core/capabilities/scene-readback.js +3 -4
  80. package/dist/core/capabilities/scene-script.d.ts +2 -2
  81. package/dist/core/capabilities/scene-script.js +2 -2
  82. package/dist/core/capabilities/seeing/shot-store.d.ts +1 -1
  83. package/dist/core/capabilities/seeing/shot-store.js +1 -1
  84. package/dist/core/capabilities/summer-bundle.d.ts +2 -3
  85. package/dist/core/capabilities/summer-bundle.js +2 -3
  86. package/dist/core/capabilities/surface-snap.d.ts +1 -1
  87. package/dist/core/capabilities/surface-snap.js +1 -1
  88. package/dist/core/capabilities/tool-dispatch.js +11 -1
  89. package/dist/core/capabilities/ui-control.d.ts +1 -2
  90. package/dist/core/capabilities/ui-control.js +1 -2
  91. package/dist/core/capabilities/world-snapshot.d.ts +1 -1
  92. package/dist/core/capabilities/world-snapshot.js +1 -1
  93. package/dist/core/capability-skew.d.ts +2 -3
  94. package/dist/core/capability-skew.js +4 -5
  95. package/dist/core/config.js +2 -2
  96. package/dist/core/engine-install.d.ts +16 -0
  97. package/dist/core/engine-install.js +32 -2
  98. package/dist/core/feedback/client.js +1 -1
  99. package/dist/core/hosted-mcp.d.ts +115 -0
  100. package/dist/core/hosted-mcp.js +164 -0
  101. package/dist/core/launch-posture.d.ts +6 -3
  102. package/dist/core/launch-posture.js +18 -5
  103. package/dist/core/library-read.js +1 -2
  104. package/dist/core/templates.d.ts +1 -2
  105. package/dist/core/templates.js +1 -2
  106. package/dist/mcp/hosted-mount.d.ts +13 -59
  107. package/dist/mcp/hosted-mount.js +24 -30
  108. package/dist/mcp/server.d.ts +2 -2
  109. package/dist/mcp/server.js +5 -4
  110. package/dist/mcp/tools/creator-tools.js +14 -4
  111. package/dist/mcp/tools/debug-tools.js +1 -1
  112. package/dist/mcp/tools/generate-tools.js +19 -9
  113. package/dist/mcp/tools/navigation-tools.d.ts +1 -1
  114. package/dist/mcp/tools/navigation-tools.js +1 -1
  115. package/dist/mcp/tools/spatial-tools.js +1 -1
  116. package/dist/mcp/tools/visual-tools.js +2 -2
  117. package/dist/mcp/tools/with-engine.d.ts +1 -2
  118. package/dist/mcp/tools/with-engine.js +1 -2
  119. package/gemini-extension.json +3 -1
  120. package/hooks/session-start.sh +2 -2
  121. package/integrations/README.md +70 -76
  122. package/integrations/claude/README.md +0 -3
  123. package/integrations/codex/README.md +1 -2
  124. package/integrations/copilot-jetbrains/README.md +1 -1
  125. package/integrations/cursor/README.md +1 -2
  126. package/integrations/factory/README.md +15 -11
  127. package/integrations/mistral-vibe/README.md +1 -1
  128. package/integrations/opencode/README.md +1 -1
  129. package/integrations/roo-code/README.md +1 -1
  130. package/integrations/rovo-dev/README.md +1 -1
  131. package/integrations/trae/README.md +1 -1
  132. package/integrations/windsurf/README.md +3 -3
  133. package/library/references/collaborative-protocol/collaborative-protocol.md +5 -5
  134. package/library/references/gd-style/gd-style.md +4 -6
  135. package/library/references/godot-version/godot-version.md +3 -3
  136. package/library/references/headless-routing/headless-routing.md +2 -2
  137. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +2 -2
  138. package/library/references/mcp-tools-reference/mcp-tools-reference.md +18 -16
  139. package/library/references/product-map/product-map.md +1 -1
  140. package/library/references/public-surface-language/public-surface-language.md +1 -1
  141. package/library/references/summer-folder/summer-folder.md +1 -1
  142. package/library/skills/3d-lighting/SKILL.md +4 -4
  143. package/library/skills/README.md +11 -9
  144. package/library/skills/adaptive-music/SKILL.md +7 -7
  145. package/library/skills/ai-characters-in-games/SKILL.md +1 -1
  146. package/library/skills/ambient-bed/SKILL.md +12 -14
  147. package/library/skills/animated-loop/SKILL.md +42 -42
  148. package/library/skills/animation-tree/SKILL.md +6 -6
  149. package/library/skills/art-direction/SKILL.md +8 -11
  150. package/library/skills/asset-strategy/SKILL.md +3 -3
  151. package/library/skills/audio-direction/SKILL.md +8 -10
  152. package/library/skills/auto-fire-targeting/SKILL.md +4 -3
  153. package/library/skills/bounded-engine-runs/SKILL.md +95 -0
  154. package/library/skills/bounded-engine-runs/resource.yaml +29 -0
  155. package/library/skills/brainstorm-game/SKILL.md +5 -5
  156. package/library/skills/brainstorming/SKILL.md +9 -15
  157. package/library/skills/celeste-momentum-platforming/SKILL.md +8 -13
  158. package/library/skills/celeste-momentum-platforming/resource.yaml +1 -1
  159. package/library/skills/character-animation-wiring/SKILL.md +2 -2
  160. package/library/skills/character-model/SKILL.md +15 -26
  161. package/library/skills/character-movement/SKILL.md +1 -1
  162. package/library/skills/character-movement/references/movement-3d.md +1 -1
  163. package/library/skills/character-portrait/SKILL.md +4 -4
  164. package/library/skills/cinematic-cutscene/SKILL.md +38 -38
  165. package/library/skills/combat-basics/SKILL.md +1 -1
  166. package/library/skills/compatibility-renderer-traps/SKILL.md +78 -0
  167. package/library/skills/compatibility-renderer-traps/resource.yaml +28 -0
  168. package/library/skills/concept-art/SKILL.md +4 -4
  169. package/library/skills/create-asset-sheet/SKILL.md +12 -31
  170. package/library/skills/debug/SKILL.md +5 -4
  171. package/library/skills/debugging-game-feel/SKILL.md +1 -4
  172. package/library/skills/debugging-game-feel/resource.yaml +1 -1
  173. package/library/skills/design-level/SKILL.md +5 -5
  174. package/library/skills/design-mechanic/SKILL.md +6 -6
  175. package/library/skills/design-npc/SKILL.md +8 -15
  176. package/library/skills/diagnosing-perf-regressions/SKILL.md +5 -10
  177. package/library/skills/dispatching-parallel-agents/SKILL.md +1 -19
  178. package/library/skills/environment-kit/SKILL.md +5 -5
  179. package/library/skills/export-and-ship/SKILL.md +25 -24
  180. package/library/skills/fabricating-assets/SKILL.md +1 -1
  181. package/library/skills/facial-and-lipsync/SKILL.md +5 -5
  182. package/library/skills/fps-controller/SKILL.md +17 -16
  183. package/library/skills/fps-controller/resource.yaml +0 -2
  184. package/library/skills/game-feel/SKILL.md +6 -7
  185. package/library/skills/gameskill/SKILL.md +3 -3
  186. package/library/skills/gdscript-patterns/SKILL.md +3 -3
  187. package/library/skills/generate-motion/SKILL.md +5 -22
  188. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +72 -90
  189. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +0 -1
  190. package/library/skills/headless-scripting/SKILL.md +8 -8
  191. package/library/skills/headless-scripting/resource.yaml +1 -0
  192. package/library/skills/in-game-purchases/SKILL.md +123 -118
  193. package/library/skills/in-game-purchases/resource.yaml +2 -2
  194. package/library/skills/instantiate-asset-pack/SKILL.md +7 -3
  195. package/library/skills/investigating-bugs/SKILL.md +3 -11
  196. package/library/skills/investigating-bugs/condition-based-waiting.md +0 -10
  197. package/library/skills/investigating-bugs/root-cause-tracing.md +0 -8
  198. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +15 -15
  199. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +0 -1
  200. package/library/skills/make-game/SKILL.md +3 -5
  201. package/library/skills/make-game/references/2d-platformer.md +1 -1
  202. package/library/skills/multiplayer-project/SKILL.md +1 -1
  203. package/library/skills/multiplayer-testing/SKILL.md +4 -4
  204. package/library/skills/music-track/SKILL.md +40 -38
  205. package/library/skills/new-project/SKILL.md +4 -6
  206. package/library/skills/organic-model/SKILL.md +9 -9
  207. package/library/skills/pixel-art/SKILL.md +6 -6
  208. package/library/skills/play/SKILL.md +3 -4
  209. package/library/skills/playtesting-a-feature/SKILL.md +4 -6
  210. package/library/skills/procedural-animation/SKILL.md +10 -11
  211. package/library/skills/prop-model/SKILL.md +4 -4
  212. package/library/skills/psx-retro-rendering/SKILL.md +20 -20
  213. package/library/skills/psx-retro-rendering/resource.yaml +2 -3
  214. package/library/skills/realtime-wet-surfaces/SKILL.md +15 -15
  215. package/library/skills/realtime-wet-surfaces/resource.yaml +1 -2
  216. package/library/skills/remote-deploy/SKILL.md +20 -21
  217. package/library/skills/retarget/SKILL.md +19 -23
  218. package/library/skills/running-in-the-cloud/SKILL.md +5 -5
  219. package/library/skills/scene-composition/SKILL.md +5 -5
  220. package/library/skills/scene-hierarchy-design/SKILL.md +3 -3
  221. package/library/skills/scene-hierarchy-design/resource.yaml +0 -1
  222. package/library/skills/scene-scripting/SKILL.md +3 -3
  223. package/library/skills/scene-to-level/SKILL.md +28 -31
  224. package/library/skills/skill-create/SKILL.md +1 -1
  225. package/library/skills/skill-improve/SKILL.md +9 -9
  226. package/library/skills/skill-test/SKILL.md +10 -10
  227. package/library/skills/skintokens-auto-rigging/SKILL.md +18 -18
  228. package/library/skills/skintokens-auto-rigging/resource.yaml +3 -3
  229. package/library/skills/skybox-panorama/SKILL.md +8 -9
  230. package/library/skills/sound-effect/SKILL.md +19 -19
  231. package/library/skills/spatial-placement/SKILL.md +2 -2
  232. package/library/skills/spatial-placement/references/kit-placement-tools.md +12 -22
  233. package/library/skills/sprite-sheet/SKILL.md +10 -10
  234. package/library/skills/summer-analytics/SKILL.md +3 -3
  235. package/library/skills/summer-friends/SKILL.md +10 -10
  236. package/library/skills/summer-leaderboards/SKILL.md +6 -6
  237. package/library/skills/summer-match-results/SKILL.md +13 -13
  238. package/library/skills/summer-matchmaking/SKILL.md +11 -11
  239. package/library/skills/summer-parties/SKILL.md +9 -9
  240. package/library/skills/summer-player-data/SKILL.md +12 -12
  241. package/library/skills/summer-store/SKILL.md +6 -6
  242. package/library/skills/summer-world-chat/SKILL.md +9 -9
  243. package/library/skills/summer-world-saves/SKILL.md +7 -7
  244. package/library/skills/text-to-motion/rigging-for-text-motion.md +1 -1
  245. package/library/skills/tileable-texture/SKILL.md +1 -1
  246. package/library/skills/trailer-shot/SKILL.md +36 -36
  247. package/library/skills/tune-performance/SKILL.md +13 -13
  248. package/library/skills/tune-performance/resource.yaml +1 -1
  249. package/library/skills/ui-graphics/SKILL.md +7 -7
  250. package/library/skills/use-widget-asset/SKILL.md +7 -7
  251. package/library/skills/using-summer/SKILL.md +5 -7
  252. package/library/skills/vehicle-model/SKILL.md +6 -7
  253. package/library/skills/vehicle-model/resource.yaml +2 -2
  254. package/library/skills/verification-before-completion/SKILL.md +5 -6
  255. package/library/skills/vfx-dissolve/SKILL.md +4 -4
  256. package/library/skills/vfx-fire/SKILL.md +6 -6
  257. package/library/skills/vfx-fire/_building-blocks/additive-billboard-particles.md +3 -3
  258. package/library/skills/vfx-hit-spark/SKILL.md +4 -4
  259. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +3 -3
  260. package/library/skills/vfx-lightning/SKILL.md +5 -5
  261. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +3 -3
  262. package/library/skills/vfx-lightning/_building-blocks/trauma-shake-snippet.md +9 -3
  263. package/library/skills/vfx-magic-glow/SKILL.md +4 -4
  264. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +3 -3
  265. package/library/skills/vfx-muzzle-flash/SKILL.md +5 -5
  266. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +3 -3
  267. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +9 -3
  268. package/library/skills/vfx-smoke/SKILL.md +5 -5
  269. package/library/skills/vfx-water-ripple/SKILL.md +2 -2
  270. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +3 -3
  271. package/library/skills/voice-line/SKILL.md +9 -9
  272. package/library/skills/web-compatibility-look/resource.yaml +1 -0
  273. package/library/skills/world-building-3d/references/spatial-tools.md +2 -2
  274. package/library/skills/writing-plans/SKILL.md +4 -4
  275. package/library/skills/writing-skills/SKILL.md +8 -8
  276. package/library/tools/capture-gameplay/resource.yaml +73 -0
  277. package/library/tools/creator-publish/resource.yaml +4 -4
  278. package/library/tools/creator-releases/resource.yaml +5 -5
  279. package/library/tools/generate-image/resource.yaml +15 -1
  280. package/library/tools/publish-build/resource.yaml +6 -2
  281. package/package.json +1 -1
  282. package/registry/generated/aliases.json +1 -0
  283. package/registry/generated/counts.json +3 -3
  284. package/registry/generated/gemini-extension.json +3 -1
  285. package/registry/generated/index.json +248 -135
  286. package/registry/generated/marketplace.claude.json +2 -2
  287. package/registry/generated/plugin.claude.json +4 -2
  288. package/registry/generated/plugin.codex.json +5 -3
  289. package/registry/generated/plugin.cursor.json +4 -2
  290. package/registry/generated/plugin.factory.json +4 -2
  291. package/registry/generated/skills-index.md +11 -9
  292. package/registry/generated/skills-registry.json +33 -6
  293. package/registry/schemas/domains.json +1 -1
@@ -75,9 +75,9 @@ summer_generate_image(
75
75
  )
76
76
  ```
77
77
 
78
- `style: "none"` is intentional, but be precise about why: only `cartoon` and `anime` append anything to the prompt, `realistic` and `none` append nothing, and any other value is coerced to `none`. So the preset cannot override the prompt's stylistic direction — it just contributes nothing, which is what concept art wants. All four variants' divergence has to come from the prompt.
78
+ `style: "none"` is intentional: only `cartoon` and `anime` append anything to the prompt, `realistic` and `none` append nothing, and any other value is coerced to `none`. So the preset cannot override the prompt's stylistic direction — it just contributes nothing, which is what concept art wants. All four variants' divergence has to come from the prompt.
79
79
 
80
- There is no `image_size` argument, and `options` only recognizes Nano Banana provider keys plus `removeBackground` — an unrecognized key is dropped without an error. Every MCP image comes back at the server's 1:1 default. For wide key art, ask for "wide cinematic framing" in the prompt and accept the square canvas, or generate in the Summer dashboard where aspect ratio is exposed. Since these are exploration images the user reacts to and throws away, square is usually fine.
80
+ For a shape other than square, pass `aspectRatio` (`"16:9"`, `"9:16"`, ...) or `width` + `height`; the result reports the real width and height and the model that ran. Exploration images are thrown away, so square is usually fine. Background removal is the top-level `removeBackground` argument, not an `options` key.
81
81
 
82
82
  ### 5. Present the batch
83
83
 
@@ -114,14 +114,14 @@ The structure: **subject + axis variant + "concept art" + lighting/atmosphere**.
114
114
  - **Generating 4 near-identical variants** because you didn't pick a real axis. The user can't choose between four images that all look like the same painting.
115
115
  - **Importing concept art as final assets.** These are exploration. The polished version comes from `character-portrait` after a direction is picked.
116
116
  - **Treating `style` as the variant axis.** The presets are `realistic | cartoon | anime | none`, and only two of them append anything. Four "stylization" variants have to differ in their prompt text, not in the `style` argument.
117
- - **Skipping the disambiguation question.** If you don't ask, you'll get yelled at when you generate 4 portraits and the user wanted one polished bust.
117
+ - **Skipping the disambiguation question.** If you don't ask, you may generate four rough variants when the user wanted one polished bust.
118
118
  - **Generating before the GameSoul.md is written.** If `.summer/GameSoul.md` exists, read it first — its visual-style section narrows the axis.
119
119
 
120
120
  ## Edge cases
121
121
 
122
122
  - **User says "just one" after you propose 4.** That's a `character-portrait` job. Hand off.
123
123
  - **User wants 8+ variants.** Generate 4 first; if the user wants more on the same axis, generate 4 more. Don't dump 8 at once — overload paralyzes choice.
124
- - **Subject is a fully described scene, not an asset.** You're producing key art, not asset reference. Ask for wide cinematic framing in the prompt and bias toward atmospheric — you cannot set an aspect ratio over MCP.
124
+ - **Subject is a fully described scene, not an asset.** You're producing key art, not asset reference. Pass `aspectRatio: "16:9"` (or `width: 1920, height: 1080` for store key art) and bias toward atmospheric.
125
125
  - **User wants the final to be 3D.** After they pick a direction, route to `asset-strategy` — concept-art images are not 3D-ready references (they have backgrounds, scene context, dramatic lighting baked in). The 3D pipeline needs its own clean white-background reference.
126
126
 
127
127
  ## Fallback (no MCP)
@@ -11,15 +11,15 @@ paths: ["assets/**", "art/**", "sprites/**"]
11
11
 
12
12
  # create-asset-sheet — Generate a coherent pack of 2D assets
13
13
 
14
- This skill turns a single prompt into a categorized pack of isolated, named 2D assets ready to drop into a game. It exists because the alternative — generating each asset one-by-one, then losing visual coherence between them, then manually matting backgrounds in Photoshop — is the most-cited pain point from indie devs working with image models in 2026.
14
+ This skill turns a single prompt into a categorized pack of isolated, named 2D assets ready to drop into a game. Generating assets one by one loses visual coherence between them and leaves you matting backgrounds by hand; one sheet keeps the pack consistent.
15
15
 
16
16
  **Pipeline:**
17
17
 
18
18
  1. **Generate a sheet** of N isolated assets in one image-gen call.
19
- 2. **Remove background** (fal/bria) so each asset can stand on its own.
20
- 3. **Detect + name + classify** each asset in one vision call (Gemini 3 Pro outputs bbox + snake_case name + category per region).
21
- 4. **Crop** each region with sharp.
22
- 5. **Optionally upscale** any small slice via fal flux-2/edit i2i, preserving aspect.
19
+ 2. **Remove the background** so each asset can stand on its own.
20
+ 3. **Detect, name and classify** each asset in one vision pass (bounding box + snake_case name + category per region).
21
+ 4. **Crop** each region.
22
+ 5. **Optionally upscale** any small slice, preserving aspect.
23
23
  6. **Save** as a single pack ArtAsset with `packFiles: [{url, name, type}]` and `metadata.sliceBboxes`.
24
24
 
25
25
  Categories the classifier outputs (used to route into downstream pipelines):
@@ -42,13 +42,7 @@ Categories the classifier outputs (used to route into downstream pipelines):
42
42
 
43
43
  ## The cleanest path: the studio wizard
44
44
 
45
- The fastest, most reliable way to invoke this flow today is the **Create Asset Sheet** wizard in the Summer studio:
46
-
47
- ```
48
- https://summerengine.com/studio/create-tileset
49
- ```
50
-
51
- Direct the user there if they're working in the browser. The wizard:
45
+ The most reliable way to run this flow is the **Create Asset Sheet** wizard in Summer Studio's guided workflows. Open it for the user with `summer open workflows` (or `summer_open`) if they're working in the browser. The wizard:
52
46
 
53
47
  - Offers a 2D / 3D mode toggle (2D is the slice flow described here; 3D is a soft pointer to `concept-art` + per-asset image-to-3D for now)
54
48
  - Surfaces six prompt templates (tile sheet, UI kit, menu, character pack, biome, freeform)
@@ -59,7 +53,7 @@ Direct the user there if they're working in the browser. The wizard:
59
53
  - Saves as a pack ArtAsset visible in the user's library
60
54
 
61
55
  If the user is in a chat / agent context, use the programmatic path below. It
62
- now calls the same server-side slicer as the Studio wizard.
56
+ calls the same server-side slicer as the Studio wizard.
63
57
 
64
58
  ## Programmatic path (chat / agent driving the engine)
65
59
 
@@ -88,14 +82,13 @@ now calls the same server-side slicer as the Studio wizard.
88
82
  returned slice ids/names/categories; do not reimplement the vision boxes
89
83
  locally.
90
84
 
91
- 4. **Optional upscale.** For any crop where longest side < 256px, send through fal flux-2/edit i2i with prompt:
85
+ 4. **Optional upscale.** The Studio wizard has per-slice HD upscale. Over MCP, for any crop where the longest side is under 256px, call `summer_generate_image` with the slice as `referenceImageUrl` and this prompt:
92
86
 
93
87
  ```
94
88
  Recreate this exact <name> at high resolution. Preserve every detail, the exact pose, the exact style. Sharper edges, more detail. Transparent background. Single isolated asset, no scene.
95
89
  ```
96
90
 
97
- - Scale longest side to 1024, preserve aspect ratio (FLUX requires multiples of 32).
98
- - Don't blindly upscale everything — high-res slices get diminishing returns and you spend $0.04/slice.
91
+ - Don't upscale everything: each upscale is a paid generation, and large slices gain little.
99
92
 
100
93
  5. **Import what the game needs.** Use the returned asset ids with
101
94
  `summer_import_asset_by_id`. Keep the source pack in My Assets so the agent
@@ -140,26 +133,14 @@ now calls the same server-side slicer as the Studio wizard.
140
133
  | Slicer returns 1 giant bbox covering the whole sheet | Items overlap / no gaps in the source | Re-prompt with "each item fully isolated, empty space around each item". Re-generate. |
141
134
  | Slicer misses items | Items too small in the source, classifier dropped them as noise | Generate at higher resolution (2048) or with fewer items per sheet |
142
135
  | Two items merge into one slice | Items touching in the source | Re-prompt with more isolation. Or accept and let the user split manually in step 2's review. |
143
- | Slice has a sliver of neighbor in it | Vision bbox is off by 5–15px | Expected. The slicer pads but doesn't snap-to-content yet. Live with it or upscale the slice (FLUX often cleans the edge) |
136
+ | Slice has a sliver of neighbor in it | Vision bbox is off by 5–15px | Expected. The slicer pads but doesn't snap-to-content yet. Live with it or upscale the slice (upscaling often cleans the edge) |
144
137
  | Upscaled slice looks invented | Source was too small / too ambiguous | Don't upscale slices below ~32×32. Or accept the hallucination and edit |
145
138
  | Detection returns wrong category | Model misjudged context | User can override in the review step; not a blocker |
146
139
 
147
140
  ## What this skill does NOT do (yet)
148
141
 
149
- - Per-asset planning + individual generation (the Codex-style flow where each asset is generated separately at full resolution). The planner endpoint exists (`POST /api/art/plan-asset-pack`) but the per-asset gen loop is not wired into the wizard yet.
142
+ - Per-asset planning and individual generation, where each asset is generated separately at full resolution.
150
143
  - 3D pack assembly. The 3D mode in the wizard is a placeholder pointer to `concept-art` + image-to-3D for now.
151
- - Character animation routing. Once a slice is classified as `character`, the next step (sprite-sheet generation) is a separate skill that the user has to invoke manually. Auto-routing is on the roadmap.
144
+ - Character animation routing. Once a slice is classified as `character`, the next step (sprite-sheet generation) is a separate skill that the user has to invoke manually.
152
145
  - Terrain auto-tiling / Wang-tile generation. Use `tileable-texture` for that.
153
146
  - Level composition / scene assembly. Use `design-level`.
154
-
155
- ## Honest cost estimate
156
-
157
- Per 12-asset sheet, end to end through the wizard:
158
-
159
- - Generate sheet: $0.04–0.10 (varies by model)
160
- - Background removal: $0.05
161
- - Vision detect + classify: $0.02–0.03
162
- - Save pack: free
163
- - Optional bulk upscale: ~$0.04 per slice ($0.48 for 12)
164
-
165
- **Without upscale:** ~$0.12. **With full upscale:** ~$0.60. About a third of what a Photoshop hour would cost.
@@ -28,7 +28,7 @@ victory. Never grep the codebase before reading the actual error.
28
28
 
29
29
  - The user is asking how to *prevent* a class of bug — that's a design question. Use the relevant discipline skill (`gdscript-patterns`, `scene-composition`).
30
30
  - The user is asking for a feature with a known unfinished spec — that's `make-game` territory.
31
- - The bug is in a non-Godot file the host agent can debug natively (CI config, npm scripts) — use the host's debugger.
31
+ - The bug is in a file outside the game project that the host agent can debug natively (CI config, npm scripts) — use the host's debugger.
32
32
 
33
33
  ## The Loop
34
34
 
@@ -143,7 +143,7 @@ Surface the proposed fix in plain language and ask permission. Two patterns:
143
143
 
144
144
  - For GDScript edits: `Read` the 20–40 lines around the error, `Edit` the exact change. Don't read the whole file. Don't reformat. Don't rename other things.
145
145
  - For scene edits: use the appropriate `summer_*` tool (`summer_add_node`, `summer_set_prop`, `summer_replace_node`). Group multi-step changes in `summer_batch` for one undo step.
146
- - **Nested resource properties:** `summer_set_resource_property` works against inline `sub_resource` targets too — pass `nodePath`, `resourceProperty`, and `subProperty` (there is no dotted `"mesh.size"` form). Structural failures (`node not found`, `property is not a resource`, `resource is null`) are explicit errors; a bad value shape is not — a JSON object instead of a Godot literal string, a misspelled `key`/`subProperty`, or a wrong-typed value returns `ok:true` yet silently no-ops or coerces destructively on current engines (dict → material cleared; dict → `Color(0,0,0,1)`; newer engines reject these with `unknown_property` / `bad_value_shape` / `type_mismatch`). Pass class names and `Color(...)`/`Vector3(...)` strings, and confirm the fix in the saved `.tscn` or a snapshot diff, never from `ok` alone. See `../../references/mcp-tools-reference/mcp-tools-reference.md`.
146
+ - **Nested resource properties:** `summer_set_resource_property` works against inline `sub_resource` targets too — pass `nodePath`, `resourceProperty`, and `subProperty` (there is no dotted `"mesh.size"` form). Structural failures (`node not found`, `property is not a resource`, `resource is null`) are explicit errors; a bad value shape is not — a JSON object instead of an engine literal string, a misspelled `key`/`subProperty`, or a wrong-typed value returns `ok:true` yet silently no-ops or coerces destructively on current engines (dict → material cleared; dict → `Color(0,0,0,1)`; newer engines reject these with `unknown_property` / `bad_value_shape` / `type_mismatch`). Pass class names and `Color(...)`/`Vector3(...)` strings, and confirm the fix in the saved `.tscn` or a snapshot diff, never from `ok` alone. See `../../references/mcp-tools-reference/mcp-tools-reference.md`.
147
147
 
148
148
  ### 6. Verify — re-run the diagnostic that found it
149
149
 
@@ -160,7 +160,7 @@ If the diagnostic is still red after the fix, you formed the wrong hypothesis. G
160
160
  | Don't | Why |
161
161
  |---|---|
162
162
  | Grep the whole project before reading the error | The error already names the file and line. Save the user's tokens. |
163
- | Read whole files | 20–40 lines around the error is enough 90% of the time. |
163
+ | Read whole files | 20–40 lines around the error is usually enough. |
164
164
  | Run multiple diagnostics in parallel | They mask each other's signal. Cheapest first, escalate. |
165
165
  | Edit before asking | The user owns the fix decision, you own the diagnosis. |
166
166
  | "Try this, see if it works" | That's not a hypothesis, that's gambling. State the theory or ask another question. |
@@ -177,7 +177,7 @@ If the diagnostic is still red after the fix, you formed the wrong hypothesis. G
177
177
  | "Cannot find type 'X'" | `summer_get_script_errors` | Class name mismatch, missing autoload, missing `class_name` |
178
178
  | Game runs but visuals wrong | `summer_get_console` + `summer_inspect_node` | Material/light/camera misconfigured |
179
179
  | Game freezes (no crash) | `summer_get_console` after `summer_play` for ~3s | Infinite loop in `_process` or `_ready` |
180
- | `summer_set_resource_property` "succeeded" but nothing changed | n/a | Inline sub-resource silent-fail. Use `summer_set_prop` with class name first. |
180
+ | `summer_set_resource_property` "succeeded" but nothing changed | n/a | Bad value shape (JSON object, misspelled `subProperty`, wrong type). Pass engine literal strings and confirm in the saved `.tscn`. |
181
181
 
182
182
  ## Closing
183
183
 
@@ -200,6 +200,7 @@ The static and boot-time tools (`summer_get_script_errors`, `summer_get_console`
200
200
  - **Runtime debugger warning text** (`summer_get_debugger_warnings`) — same structured shape as the errors tool, filtered to severity `warning`. Use it whenever `summer_get_diagnostics` shows a non-zero `debugger.warnings`; do not report a warning count you never read.
201
201
  - **Diagnostics summary** (`summer_get_diagnostics`) — counts of console errors, debugger errors, debugger warnings, script errors. Tells you where to drill. **Counts only** — it carries no FPS, frame time, draw calls, or physics-body numbers.
202
202
  - **Scene tree + node properties** (`summer_get_scene_tree`, `summer_inspect_node`) — only the **edited** scene, not the running game's live tree.
203
+ - **Live runtime state** (`summer_get_runtime_tree`, `summer_inspect_runtime_node`, `summer_game_probe`) — the running game's tree, properties and frames, on engine builds with the runtime-control ops. See `agent-playtesting`.
203
204
  - **Rendered pixels** (`summer_screenshot`) — `target:"viewport"` for the editor's current view, `target:"scene"` for an offscreen render of a scene file, `target:"game"` for a frame of the running game (that one needs the Summer desktop app bridge and fails cleanly over a plain local connection). You look at the actual image, not a description of it.
204
205
  - **Gameplay behaviour, driven by you** (`RunVerification` via `summer_batch`) — see the next section. Input, live tree, and frames from a real running instance.
205
206
  - **Whether the game is running** (`summer_is_running`) — and on which scene.
@@ -184,11 +184,8 @@ After diagnosis pins down which variable(s) are wrong, the tuning is done — bu
184
184
  - `game-feel` — for the screen-shake, hit-stop, particle, sound layer once tuning is locked.
185
185
  - `debug` — if mid-debug you discover an actual error (signal not firing, node freed) hiding under the feel issue.
186
186
 
187
- ## The Bottom Line
187
+ ## Related skills
188
188
 
189
- Feel bugs are tuning bugs. Tuning is a one-variable-at-a-time discipline. Anchor to a reference. Tweak one number. Play it. Decide. Repeat.
190
-
191
- **Related skills:**
192
189
  - `investigating-bugs` — for logical bugs with concrete repros, not feel.
193
190
  - `playtesting-a-feature` — the playtest discipline this skill plugs into.
194
191
  - `debug` — when the feel investigation surfaces an actual error.
@@ -6,7 +6,7 @@ use_when:
6
6
  - a gameplay feature works correctly but feels wrong — floaty jumps, mushy combat, sluggish camera, weightless impacts
7
7
  - tuning jump height, gravity, camera lag, hit-stop, or impact feedback until controls feel right
8
8
  do_not_use_when:
9
- - the bug is a logic error rather than subjective feel — use logical bug debugging
9
+ - the bug is a logic error rather than subjective feel — use investigating-bugs
10
10
  facets:
11
11
  lifecycle:
12
12
  - build
@@ -273,8 +273,8 @@ The skeleton this skill produces is meant to be filled in via `/design-mechanic`
273
273
 
274
274
  ## See also
275
275
 
276
- - `scene-and-project/brainstorm-game/SKILL.md` — produces `.summer/GameSoul.md`
277
- - `gameplay-mechanics/design-mechanic/SKILL.md` — designs the verbs the level exercises
278
- - `ai-and-npcs/design-npc/SKILL.md` — designs the enemies the encounters reference
279
- - `rendering-and-lighting/3d-lighting/SKILL.md` — sets the lighting in `WorldEnvironment` + lights
280
- - `rendering-and-lighting/art-direction/SKILL.md` — defines the visual style the level expresses
276
+ - `brainstorm-game` — produces `.summer/GameSoul.md`
277
+ - `design-mechanic` — designs the verbs the level exercises
278
+ - `design-npc` — designs the enemies the encounters reference
279
+ - `3d-lighting` — sets the lighting in `WorldEnvironment` + lights
280
+ - `art-direction` — defines the visual style the level expresses
@@ -142,7 +142,7 @@ Argument notes, all of which the tool schema enforces:
142
142
  "current scene" default.
143
143
  - `summer_set_prop` takes named `path` / `key` / `value` — not positional.
144
144
  - `summer_input_map_bind` events are dicts. `{"type": "key", "key": "Space"}`
145
- works; key names go through Godot's keycode table, so `W`, `Space`, `Shift`,
145
+ works; key names go through the engine's keycode table, so `W`, `Space`, `Shift`,
146
146
  `Escape` resolve and typos silently produce no event.
147
147
  - `summer_get_script_errors` checks one file and requires `path`. Use
148
148
  `summer_get_diagnostics()` (no args) for a project-wide check.
@@ -266,8 +266,8 @@ This skill is a workflow that designs and scaffolds — the templates are runnab
266
266
 
267
267
  ## See also
268
268
 
269
- - `scene-and-project/brainstorm-game/SKILL.md` — produces `.summer/GameSoul.md` this skill reads
270
- - `level-design/design-level/SKILL.md` — design the levels that exercise the mechanic
271
- - `character-controllers/fps-controller/SKILL.md` — FPS movement scaffolding
272
- - `scripting-patterns/state-machine-patterns/SKILL.md` — state machines for complex mechanics
273
- - `audio/audio-direction/SKILL.md` — defines the SFX vocabulary the mechanic draws from
269
+ - `brainstorm-game` — produces `.summer/GameSoul.md` this skill reads
270
+ - `design-level` — design the levels that exercise the mechanic
271
+ - `fps-controller` — FPS movement scaffolding
272
+ - `gdscript-patterns` — state machines and other script patterns for complex mechanics
273
+ - `audio-direction` — defines the SFX vocabulary the mechanic draws from
@@ -211,7 +211,7 @@ resources exactly as it does against external `.tres` files — it reads the
211
211
  property off the node and writes the sub-property onto whatever Resource is
212
212
  there. Structural failures are explicit errors (`node not found`, `property is
213
213
  not a resource`, `resource is null`); a bad value shape is not — a JSON object
214
- instead of a Godot literal string, a misspelled `subProperty`, or a wrong-typed
214
+ instead of an engine literal string, a misspelled `subProperty`, or a wrong-typed
215
215
  value returns `ok:true` yet silently no-ops or coerces destructively on current
216
216
  engines. Pass class names and literal strings (`"12.0"`, `"Color(r, g, b, a)"`)
217
217
  and confirm the result in the saved `.tscn`, never from `ok` alone. The order
@@ -490,20 +490,13 @@ This skill writes scenes and scripts. Always ask before each step. Group related
490
490
 
491
491
  ## Want a working starter?
492
492
 
493
- For a fully-rigged enemy with anim controller + loot drop:
494
-
495
- → **template-id**: `template-3d-fps` — ships with a sample patrol enemy
496
- → For higher-complexity AI (boss with phases, behavior trees), defer to `ai-and-npcs/behavior-trees/SKILL.md`.
493
+ For an animated NPC in a runnable project: `summer create 3d-fps-simple-animated-npc`. Run `summer list templates` for the current list.
497
494
 
498
495
  ## See also
499
496
 
500
- - `ai-and-npcs/state-machine-npc/SKILL.md` — FSM pattern deep dive
501
- - `ai-and-npcs/behavior-trees/SKILL.md` — when complexity demands a BT
502
- - `ai-and-npcs/perception-sight-and-hearing/SKILL.md` — sensor patterns
503
- - `ai-and-npcs/navmesh-pathfinding/SKILL.md` — NavigationAgent3D for movement
504
- - `ai-and-npcs/llm-driven-dialogue/SKILL.md` — Summer's wedge for talking NPCs
505
- - `ai-and-npcs/boss-patterns/SKILL.md` — phase transitions, mechanics
506
- - `visual-effects/recipes/hit-spark/SKILL.md` — hit flash recipe
507
- - `visual-effects/recipes/dissolve/SKILL.md` — death dissolve recipe
508
- - `visual-effects/game-feel/SKILL.md` — screen-feel discipline (camera shake, hit-stop)
509
- - `scripting-patterns/state-machine-patterns/SKILL.md` — generic FSM patterns
497
+ - `animation-tree` — wire the action states to animation clips
498
+ - `ai-characters-in-games` — NPCs that answer free-form player text
499
+ - `vfx-hit-spark` — hit flash recipe
500
+ - `vfx-dissolve` — death dissolve recipe
501
+ - `game-feel` — screen-feel discipline (camera shake, hit-stop)
502
+ - `gdscript-patterns` — generic state machine and script patterns
@@ -117,7 +117,7 @@ If a single commit is the obvious suspect (e.g. "Added 200 enemies to spawner"),
117
117
 
118
118
  ### 4. Match to one of the four Summer Engine performance cliffs
119
119
 
120
- Godot 4.x regressions cluster heavily into four categories. Knowing them shortens diagnosis to minutes.
120
+ Regressions cluster into four categories. Matching the symptom to one shortens diagnosis.
121
121
 
122
122
  | Cliff | Symptom | How to verify | Common cause |
123
123
  |---|---|---|---|
@@ -156,7 +156,7 @@ State the result with the number: "Reverted the per-frame `get_tree().get_nodes_
156
156
  |---|---|
157
157
  | Regression confirmed and root cause known, but the fix is "make the feature cheaper" rather than "undo the change" | `tune-performance` for the optimization pass |
158
158
  | The regression turns out to be a crash or error in disguise (the slow path is throwing exceptions in a tight loop) | `debug` |
159
- | The cause is a Godot version change or engine-side regression | Surface to the user; this is not a project-side fix |
159
+ | The cause is an engine version change or engine-side regression | Surface to the user; this is not a project-side fix |
160
160
  | Bisect lands on a commit that touches 40 files | Subdivide the commit: check out the commit, revert subsets, re-measure |
161
161
 
162
162
  ## Red Flags — STOP
@@ -179,9 +179,9 @@ State the result with the number: "Reverted the per-frame `get_tree().get_nodes_
179
179
  | Excuse | Reality |
180
180
  |---|---|
181
181
  | "User wants it fixed now, no time to bisect" | Bisect is 5-15 minutes. Blind optimization can burn a day. |
182
- | "The slow commit is obvious, no need to A/B" | The "obvious" cause is wrong ~30% of the time. Verify before fixing. |
182
+ | "The slow commit is obvious, no need to A/B" | The "obvious" cause is often wrong. Verify before fixing. |
183
183
  | "I'll measure after I fix it" | If you don't have the bad number, you can't prove the fix worked. |
184
- | "It's probably just Godot" | Engine-side regressions exist but are rare. Suspect your project first. |
184
+ | "It's probably the engine" | Engine-side regressions exist but are rare. Suspect your project first. |
185
185
  | "Adding a pool / LOD / cache will help anyway" | Premature optimization on the wrong system is wasted work. |
186
186
 
187
187
  ## When The Engine Isn't Running
@@ -202,13 +202,8 @@ If the MCP tools report the engine isn't running:
202
202
  3. Only if neither is possible: ask the user for an in-game perf overlay reading (FPS, frame time, draw call count) and walk the bisect with them — "run on commit X, tell me the FPS; run on commit Y, tell me the FPS."
203
203
  4. Do not claim a fix is verified from code reading alone.
204
204
 
205
- ## The Bottom Line
205
+ ## Related skills
206
206
 
207
- A regression is a delta. Diagnose the delta, not the codebase.
208
-
209
- Measure now. Measure last-good. Bisect what changed. Match to a Godot perf cliff. A/B one variable. Re-measure. Done.
210
-
211
- **Related skills:**
212
207
  - `tune-performance` — for general optimization once the regression is fixed or when no regression exists.
213
208
  - `investigating-bugs` — when the slow path turns out to be a logic bug (errors in a tight loop).
214
209
  - `debug` — when the perf issue is actually a crash or freeze.
@@ -130,7 +130,7 @@ Return: Summary of what you found and what you fixed.
130
130
  **Exploratory debugging:** You don't know what's broken yet
131
131
  **Shared state:** Agents would interfere (editing same files, using same resources)
132
132
 
133
- ## Real Example from Session
133
+ ## Example
134
134
 
135
135
  **Scenario:** 6 test failures across 3 files after major refactoring
136
136
 
@@ -155,15 +155,6 @@ Agent 3 → Fix tool-approval-race-conditions.test.ts
155
155
 
156
156
  **Integration:** All fixes independent, no conflicts, full suite green
157
157
 
158
- **Time saved:** 3 problems solved in parallel vs sequentially
159
-
160
- ## Key Benefits
161
-
162
- 1. **Parallelization** - Multiple investigations happen simultaneously
163
- 2. **Focus** - Each agent has narrow scope, less context to track
164
- 3. **Independence** - Agents don't interfere with each other
165
- 4. **Speed** - 3 problems solved in time of 1
166
-
167
158
  ## Verification
168
159
 
169
160
  After agents return:
@@ -171,12 +162,3 @@ After agents return:
171
162
  2. **Check for conflicts** - Did agents edit same code?
172
163
  3. **Run full suite** - Verify all fixes work together
173
164
  4. **Spot check** - Agents can make systematic errors
174
-
175
- ## Real-World Impact
176
-
177
- From debugging session (2025-10-03):
178
- - 6 failures across 3 files
179
- - 3 agents dispatched in parallel
180
- - All investigations completed concurrently
181
- - All fixes integrated successfully
182
- - Zero conflicts between agent changes
@@ -13,7 +13,7 @@ paths: ["assets/kits/**", "assets/models/**", "**/*.tscn", "**/*.gd"]
13
13
 
14
14
  A kit is a *family* of meshes — wall, floor, door, pillar, corner, arch — that the level designer snaps together to build interiors and exteriors. The skill exists to solve **one specific failure mode**: generating each piece with a fresh prompt produces six pieces that look like they came from six different games. The fix is the **style anchor pattern** — generate one piece first, lock its prompt suffix, and reuse that exact suffix for every subsequent piece.
15
15
 
16
- The backing tool is `summer_generate_3d`, called multiple times. Each call costs ~$0.50, so a 6-piece kit is ~$3 and ~5 minutes. Confirm scope before starting.
16
+ The backing tool is `summer_generate_3d`, called once per piece. A 6-piece kit is six generations and about 5 minutes. Generation uses credits, so confirm scope before starting.
17
17
 
18
18
  ## When to use
19
19
 
@@ -32,7 +32,7 @@ The backing tool is `summer_generate_3d`, called multiple times. Each call costs
32
32
 
33
33
  ## The style anchor pattern
34
34
 
35
- This is the whole skill. Get this right and the kit looks unified. Get this wrong and you waste $3.
35
+ This is the whole skill. Get it right and the kit looks unified. Get it wrong and every piece is wasted.
36
36
 
37
37
  1. **Generate the anchor piece first.** Pick the most visually defining piece — usually the wall or the door. Iterate the prompt until the user approves it visually.
38
38
  2. **Extract the style suffix.** Everything after the object description. Example anchor prompt:
@@ -69,7 +69,7 @@ Kit pieces only feel modular if they snap to a fixed grid. Pick the grid before
69
69
 
70
70
  ### 1. Confirm scope and pick the grid
71
71
 
72
- > About to build a dungeon kit. Suggested pieces: wall, floor, pillar, door, corner, arch (6 pieces, ~$3, ~5 min). Snap grid: 2m (standard interior). OK?
72
+ > About to build a dungeon kit. Suggested pieces: wall, floor, pillar, door, corner, arch (6 generations, ~5 min). Snap grid: 2m (standard interior). OK?
73
73
 
74
74
  ### 2. Generate the anchor (wall)
75
75
 
@@ -131,13 +131,13 @@ Three things the shape of those calls encodes:
131
131
  summer_inspect_resource(path="res://assets/kits/dungeon/wall.glb")
132
132
  ```
133
133
 
134
- Check the AABB. If the wall is 1.85m tall when you asked for 3m, scale it in the editor (or re-import with `Scale` in the import dock). Pivots should sit at the *bottom-back* corner for walls and *bottom-center* for floors — that makes snapping to a 2m grid trivial. If pivots are wrong, use Godot's "Center to Origin" import option.
134
+ Check the AABB. If the wall is 1.85m tall when you asked for 3m, scale it in the editor (or re-import with `Scale` in the import dock). Pivots should sit at the *bottom-back* corner for walls and *bottom-center* for floors — that makes snapping to a 2m grid trivial. If pivots are wrong, use the "Center to Origin" import option.
135
135
 
136
136
  ## Anti-patterns
137
137
 
138
138
  - **Drifting style suffix.** Each piece gets a slightly different suffix → the kit looks mismatched. Copy-paste the exact string.
139
139
  - **Different polycount per piece.** A 5k-tri pillar next to a 500-tri wall reads as "the pillar is a hero piece" — wrong; they should feel like equal kit citizens. Match polycount within ~2× across the kit.
140
- - **Skipping the anchor approval.** If you generate all six pieces in a batch, you bake in whatever the first call's interpretation of the style was — and the user may hate it after $3 of generation.
140
+ - **Skipping the anchor approval.** If you generate all six pieces in a batch, you bake in whatever the first call's interpretation of the style was — and the user may hate it after six generations.
141
141
  - **Generating walls / floors as individual meshes when you only need a tileable texture.** A flat wall section is cheaper as a textured `CSGBox3D`. Reserve the kit for pieces that need actual geometric detail (sconces, mouldings, doorways, arches).
142
142
  - **No scale cue in the prompt.** Wall comes back 0.4m tall. Always include `2 meter wide by 3 meter tall` (or your chosen grid).
143
143
  - **Forgetting the snap grid.** A 1.87m-tall wall with no scale fix → level looks crooked when tiled.
@@ -33,15 +33,17 @@ export command.
33
33
  1. Read `engineBinaryPath` from `summer_get_project_context`.
34
34
  2. Resolve the matching export-template directory for that exact Summer
35
35
  technical base.
36
- 3. Inventory the installed templates and any `custom_template/release` paths
37
- already configured in `export_presets.cfg`.
36
+ 3. Inventory the installed templates (`summer_export_templates` lists them and
37
+ installs Summer's macOS, Windows and web templates) and any
38
+ `custom_template/release` paths already configured in `export_presets.cfg`.
38
39
  4. Build a capability table with `available`, `missing prerequisite`, or
39
40
  `impossible on this build` for every requested target.
40
41
 
41
- A stock Summer 4.6.1 Mono install has only the macOS template. Web export is
42
- incompatible with that Mono build. Windows, Linux, Android, and iOS require a
43
- matching custom template or an external CI/build environment, plus their
44
- platform toolchains where applicable.
42
+ A stock Summer Mono install ships only the macOS template. Web export is
43
+ incompatible with that Mono build. Run `summer_export_templates` before marking
44
+ another target missing: it installs Summer's macOS and Windows templates. Linux,
45
+ Android, and iOS require a matching custom template or an external CI/build
46
+ environment, plus their platform toolchains where applicable.
45
47
 
46
48
  **Hard gate:** an absent template or toolchain means the target is unavailable.
47
49
  Do not create its preset, recommend it as a local option, or invoke an export
@@ -55,7 +57,8 @@ Offer only targets marked `available` by step 1. Record other requested
55
57
  destinations as blocked follow-ups with their exact prerequisite.
56
58
 
57
59
  > Locally proven targets: **macOS**. Requested but blocked: **Windows**
58
- > (matching template or external CI), **Web** (non-Mono build), **Android**
60
+ > (install the template with `summer_export_templates`), **Web** (non-Mono
61
+ > build), **Android**
59
62
  > (template + Android toolchain). Which proven target should I prepare?
60
63
 
61
64
  Each destination has a different list. Multiple destinations = multiple lists. Don't shortcut — the iOS list does not satisfy the Steam list.
@@ -145,7 +148,7 @@ Build config:
145
148
 
146
149
  #### c) Web (HTML5) — unavailable on the stock Mono build
147
150
 
148
- Do not recommend or attempt this target from the stock Summer installation.
151
+ Do not recommend or attempt this target from the stock Mono installation.
149
152
  Route it to a verified non-Mono Summer-compatible build environment first.
150
153
  Once that prerequisite is proven, these browser constraints apply:
151
154
 
@@ -157,7 +160,7 @@ Once that prerequisite is proven, these browser constraints apply:
157
160
  Build config:
158
161
  - Export preset: **Web**.
159
162
  - Output `.html` + `.wasm` + `.pck` + `.js`.
160
- - Disable: "Variant: Editor support", "Encryption". Keep: "GLES3 Fallback to GLES2" if targeting old browsers.
163
+ - Disable: "Variant: Editor support", "Encryption".
161
164
 
162
165
  Known traps:
163
166
  - Audio: Chrome blocks autoplay. First user click must trigger audio context resume.
@@ -168,7 +171,7 @@ Known traps:
168
171
  | Asset | Resolution / Format |
169
172
  |---|---|
170
173
  | App icon | 1024×1024 PNG (Apple generates the rest) |
171
- | Launch screen | Storyboard (Godot generates) |
174
+ | Launch screen | Storyboard (the engine generates it) |
172
175
  | Screenshots | 6.5" iPhone: 1242×2688 / 2688×1242 (≥ 3); 12.9" iPad if iPad-eligible |
173
176
  | App Store description | text per locale, ≤ 4000 chars |
174
177
  | Keywords | ≤ 100 chars, comma-separated |
@@ -230,13 +233,14 @@ For each preset:
230
233
  | `texture_format/etc2_astc` | `true` for mobile | Smaller texture compression |
231
234
  | `application/short_version` | matches `application/config/version` | Steam reads it |
232
235
  | `script_encryption_key` in `export_credentials.cfg` | set only when the user explicitly chooses script encryption | The similarly named preset field does not exist |
233
- | `application/icon` | path to your `.ico` / `.icns` / `.png` | Otherwise generic Godot icon ships |
236
+ | `application/icon` | path to your `.ico` / `.icns` / `.png` | Otherwise the default engine icon ships |
234
237
 
235
238
  ### 6. Propose the build sequence
236
239
 
237
- > Capability proof: macOS available locally; Windows and Linux require external
238
- > CI; Web is unavailable on this Mono build. Pre-flight is clean for the macOS
239
- > preset. May I produce that one proven build now?
240
+ > Capability proof: macOS available locally; Windows needs its template
241
+ > (`summer_export_templates`); Linux requires external CI; Web is unavailable
242
+ > on this Mono build. Pre-flight is clean
243
+ > for the macOS preset. May I produce that one proven build now?
240
244
 
241
245
  ### 7. Produce a proven build
242
246
 
@@ -270,14 +274,14 @@ To enable another target, prove one of these before returning to step 2:
270
274
 
271
275
  ### Export-option cautions
272
276
 
273
- - **`script/encryption_key` does not exist.** The real key is `script_encryption_key`, and it lives in a separate `export_credentials.cfg`, not `export_presets.cfg` (`editor/export/editor_export.cpp:101,372-373`). Writing the wrong name produces an **unencrypted build with no error at all**.
277
+ - **`script/encryption_key` does not exist.** The real key is `script_encryption_key`, and it lives in a separate `export_credentials.cfg`, not `export_presets.cfg`. Writing the wrong name produces an **unencrypted build with no error at all**.
274
278
  - **There is no `debug` field in a preset.** Debug versus release is chosen by `--export-debug` versus `--export-release`, nothing else.
275
279
 
276
280
  On Apple Silicon, `binary_format/architecture="arm64"` is the natural guess, and it fails leaving a **0-byte `.app` that looks like success**. Only `"universal"` ships.
277
281
 
278
282
  See `headless-scripting` for the wider pattern this is one instance of.
279
283
 
280
- If the user is on a CI system (GitHub Actions etc), this is the right place to point them at a cross-compile workflow — Godot can export Windows + Linux from a Linux runner.
284
+ If the user is on a CI system (GitHub Actions etc), point them at a cross-compile workflow: the engine can export Windows and Linux from a Linux runner.
281
285
 
282
286
  ### 8. Verify each build
283
287
 
@@ -293,6 +297,8 @@ Per platform, point the user at the correct upload path:
293
297
 
294
298
  - **summer.games:** `summer_export_game` writes the summer.games `.zip`; `summer_publish_build` uploads it to the game's store listing after the user confirms the exact game, file and version (needs `summer login --store`). If it answers `store_auth_refused`, the user uploads the `.zip` in Studio instead.
295
299
  - Per platform, the store takes: iPhone, Android, macOS and Windows in the Summer apps = one summer.games bundle (`summer_export_game` `targets`, format `bundle`; no template, no signing; a game without a server targets `ios`/`android` only). Web = an HTML5 `.zip` on Summer's WebGPU Forward+ template (`targets:["web"]`; the project must render with Forward+ or Mobile). A macOS or Windows download for the store page = `targets:["macos"]` or `["windows"]` with format `download`. Download exports need the template: `summer_export_templates` `install` fetches it from Summer's CDN.
300
+ - Hosted games: if `summer_export_game` fails with "… is in the source graph's authority_engine domain, which the client pack leaves out", an authority root in `source-domains.json` holds a file the client loads (often the composition `.tres`). Narrow that root to the server-only files, or move the shared file under a `shared` path, then export again. Every exporter message is in the `multiplayer-publish` skill's export-errors.md; the folder rules are in `multiplayer-project`.
301
+ - Store page art: key art, covers and icons carry no text, logos or UI (the store page shows the title). Screenshots are real gameplay and may show the game's own HUD; add no captions, logos or overlays. Capture them with `summer_capture_gameplay` (offscreen, no editor needed; `resolution` `1920x1080`, or `1080x1920` for portrait; pass the gameplay `scene` when the main scene is a title menu), or `summer_screenshot` target `game` while the editor runs the game.
296
302
  - **Steam:** `steamcmd` + Steam Pipe (`builder_app_xxx.vdf`). Set up depots first in Steamworks.
297
303
  - **itch.io:** `butler push <path> <user>/<game>:<channel>` (e.g. `butler push build/win <user>/mygame:windows`).
298
304
  - **Web (itch hosted):** zip + drop into itch upload UI as "playable in browser".
@@ -352,7 +358,7 @@ This skill produces release artifacts. Always ask before each build is invoked.
352
358
 
353
359
  ## Want a working starter?
354
360
 
355
- No template — this is a workflow. Each project's export config and store assets are project-specific. For the Steam-specific GodotSteam GDExtension setup, see `deployment/steam-uploader/SKILL.md` (when shipped).
361
+ No template — this is a workflow. Each project's export config and store assets are project-specific.
356
362
 
357
363
  ## See also
358
364
 
@@ -360,10 +366,5 @@ No template — this is a workflow. Each project's export config and store asset
360
366
  - `../../references/godot-version/godot-version.md` — Summer compatibility and
361
367
  export-template versioning
362
368
  - `../../references/collaborative-protocol/collaborative-protocol.md` — "May I write" pattern
363
- - `deployment/export-presets/SKILL.md` — preset config deep dive
364
- - `deployment/web-html5-export/SKILL.md` — HTML5-specific traps
365
- - `deployment/steam-uploader/SKILL.md` — `steamcmd` + GodotSteam (when shipped)
366
- - `deployment/itch-uploader/SKILL.md` — `butler` workflow (when shipped)
367
- - `deployment/mobile-export/SKILL.md` — iOS / Android specifics (when shipped)
368
- - `asset-pipeline/attribution-and-licensing/SKILL.md` — community asset attribution
369
- - `performance/tune-performance/SKILL.md` — pre-ship performance pass
369
+ - `headless-scripting` — the headless CLI pattern the export command follows
370
+ - `tune-performance` — pre-ship performance pass
@@ -24,7 +24,7 @@ Three facts shape every use:
24
24
  | Blockout / placeholder | `scene-scripting` primitives or CSG | fabricate | Must be instant and in-scene; no process spawn is justified |
25
25
  | Generic hard-surface prop ("a barrel") | `summer_search_assets` → `summer_import_asset` (`prop-model`) | `summer_generate_3d` | The free library plus `target_size` beats paid generation and a 2-minute wait, in a consistent style |
26
26
  | Bespoke prop ("the artifact from our GDD") | `summer_generate_3d` | fabricate | Image-to-3D is exactly what generation is for; fabricate when exact dimensions or parametric variants matter |
27
- | **Modular kit** (walls, pipes, fences, rails that snap) | **fabricate** | library kit (`environment-kit`) | Generation cannot hold dimensions and style across 30 pieces; array + boolean + bevel + one material is the classic kit workflow |
27
+ | **Modular kit** (walls, pipes, fences, rails that snap) | **fabricate** | generated kit (`environment-kit`) | Generation cannot hold dimensions and style across 30 pieces; array + boolean + bevel + one material is the classic kit workflow |
28
28
  | Characters (rigged, animated) | `summer_generate_3d` (`character-model`) | library | Scripted organic modelling is the documented failure mode; fabrication has no path to competitive organics blind |
29
29
  | Environments / terrain | in-engine terrain + library set dressing | generation for landmarks | Terrain wants interactive tools; dressing wants scatter |
30
30
  | Materials / textures / skies | library (`summer_import_hdri`, texture packs) | generation | Fabricate only to bake a procedural material to images |
@@ -13,10 +13,10 @@ paths: ["**/*.gd", "**/*.tscn", "**/*.tres"]
13
13
 
14
14
  Half generative, half authored. The *generative* half: an audio file (TTS via `summer_generate_audio` with `capability: "text_to_speech"`) goes through a phoneme-extraction tool (Summer does NOT wrap one — you run it externally), out comes a viseme timeline — a list of `{ phoneme, start_time, duration }` triples. The *authored* half: the character's face mesh must have BlendShapes named for the standard viseme set, or the timeline has nothing to drive. Without both halves, you get a talking robot.
15
15
 
16
- The 2026 production stack:
16
+ The pipeline:
17
17
 
18
18
  1. **Audio in** — `.wav`/`.mp3` from `summer_generate_audio({capability: "text_to_speech", ...})` or imported VO.
19
- 2. **Phoneme extraction** — done OUTSIDE Summer. Recommended: **Rhubarb Lip Sync** (open source, the industry standard for game-dev lipsync; outputs JSON with mouth-shape cues over time). Alternatives: gentle, allosaurus, or a Whisper-phoneme model on Replicate / Hugging Face. There is no `summer_*` MCP for this in the current engine.
19
+ 2. **Phoneme extraction** — done OUTSIDE Summer. Recommended: **Rhubarb Lip Sync** (open source, widely used for game lipsync; outputs JSON with mouth-shape cues over time). Alternatives: gentle, allosaurus, or a Whisper-phoneme model on Replicate / Hugging Face. There is no `summer_*` MCP for this in the current engine.
20
20
  3. **Viseme mapping** — phonemes / Rhubarb cues → Oculus / Apple ARKit viseme set (15 standard shapes covers English).
21
21
  4. **BlendShape driver** — at runtime, lerp the mesh's BlendShape weights along the timeline, synced to audio playback.
22
22
  5. **Optional emotional layer** — separate BlendShape track for `smile`, `brow_raise`, `eye_squint` etc., authored in code or at clip-edit time.
@@ -122,7 +122,7 @@ Rhubarb mouth-shape → ARKit viseme cheat sheet (apply during the bake step):
122
122
 
123
123
  **Cloud fallback:** a Whisper-phoneme model on Replicate or a Hugging Face inference endpoint will emit ARPAbet phonemes with timestamps. Then map ARPAbet → ARKit visemes via the table in the Reference card section. More accurate than Rhubarb on noisy audio; slower and costs cents per minute.
124
124
 
125
- Cost: Rhubarb is free + ~5s CPU per 30s clip locally. Cloud fallback ~$0.02 / minute, ~5s wall-clock for a 30s clip.
125
+ Rhubarb is free and takes ~5s of local CPU per 30s clip. The cloud fallback is billed per minute by its provider and takes ~5s for a 30s clip.
126
126
 
127
127
  ### 4. Persist the viseme track as an AnimationLibrary entry
128
128
 
@@ -254,7 +254,7 @@ Driven from gameplay events; orthogonal to the lipsync layer.
254
254
 
255
255
  ### Phoneme → viseme mapping (for hand-rolled extraction)
256
256
 
257
- If the user has a CMUDict-style phoneme list and wants to map manually, this is the table to apply.
257
+ If the user has a CMUDict-style phoneme list, map it with the ARPAbet column of the table above.
258
258
 
259
259
  ### Pitfalls
260
260
 
@@ -300,7 +300,7 @@ production speech recognition or photoreal lip sync.
300
300
  - For dialogue scripts and conversation flow, `design-npc`.
301
301
  - For the AnimationTree this layer composes into, `animation-tree`.
302
302
  - For idle blinks, saccades, and head-tracking that complement lipsync, `procedural-animation`.
303
- - For full performance capture (face + body together), out of scope — see Meshy's mocap docs or external pipelines.
303
+ - Full performance capture (face and body together) is out of scope; use an external capture pipeline.
304
304
 
305
305
  ## See also
306
306